* core.c, exec.c, solib.c: Rename target_ops sections =>

to_sections, etc.
* infcmd.c, inflow.c, infptrace.c, infrun.c, main.c, target.c,
target.h:  target_kill takes no args.
This commit is contained in:
John Gilmore 1992-02-21 01:35:32 +00:00
parent e17960fb42
commit ee0613d186
5 changed files with 139 additions and 119 deletions

View File

@ -1,28 +1,27 @@
/* Memory-access and commands for inferior process, for GDB.
Copyright (C) 1986, 1987, 1988, 1989 Free Software Foundation, Inc.
/* Memory-access and commands for "inferior" (child) process, for GDB.
Copyright 1986, 1987, 1988, 1989, 1991, 1992 Free Software Foundation, Inc.
This file is part of GDB.
GDB is free software; you can redistribute it and/or modify
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
any later version.
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
GDB is distributed in the hope that it will be useful,
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GDB; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h>
#include <signal.h>
#include <sys/param.h>
#include <string.h>
#include "defs.h"
#include "param.h"
#include "symtab.h"
#include "frame.h"
#include "inferior.h"
@ -149,7 +148,7 @@ run_command (args, from_tty)
!query ("The program being debugged has been started already.\n\
Start it from the beginning? "))
error ("Program not restarted.");
target_kill ((char *)0, 0);
target_kill ();
}
exec_file = (char *) get_exec_file (0);
@ -161,7 +160,7 @@ Start it from the beginning? "))
if (args)
{
char *cmd;
cmd = concat ("set args ", args, "");
cmd = concat ("set args ", args, NULL);
make_cleanup (free, cmd);
execute_command (cmd, from_tty);
}
@ -356,8 +355,7 @@ jump_command (arg, from_tty)
if (sal.symtab == 0 && sal.pc == 0)
error ("No source file has been specified.");
if (sal.pc == 0)
sal.pc = find_line_pc (sal.symtab, sal.line);
resolve_sal_pc (&sal); /* May error out */
{
struct symbol *fn = get_frame_function (get_current_frame ());
@ -368,13 +366,10 @@ jump_command (arg, from_tty)
error ("Not confirmed.");
}
if (sal.pc == 0)
error ("No line %d in file \"%s\".", sal.line, sal.symtab->filename);
addr = ADDR_BITS_SET (sal.pc);
if (from_tty)
printf ("Continuing at 0x%x.\n", addr);
printf ("Continuing at %s.\n", local_hex_string(addr));
clear_proceed_status ();
proceed (addr, 0, 0);
@ -419,7 +414,7 @@ signal_command (signum_exp, from_tty)
returns to its caller with that frame already gone.
Otherwise, the caller never gets returned to. */
/* 4 => return instead of letting the stack dummy run. */
/* DEBUG HOOK: 4 => return instead of letting the stack dummy run. */
static int stack_dummy_testing = 0;
@ -554,10 +549,12 @@ finish_command (arg, from_tty)
fi = get_frame_info (selected_frame);
function = find_pc_function (fi->pc);
/* Print info on the selected frame, including level number
but not source. */
if (from_tty)
{
printf ("Run till exit from ");
print_selected_frame ();
printf_filtered ("Run till exit from ");
print_stack_frame (selected_frame, selected_frame_level, 0);
}
proceed_to_finish = 1; /* We want stop_registers, please... */
@ -584,9 +581,9 @@ finish_command (arg, from_tty)
value_type,
BLOCK_GCC_COMPILED (SYMBOL_BLOCK_VALUE (function))));
printf ("Value returned is $%d = ", record_latest_value (val));
printf_filtered ("Value returned is $%d = ", record_latest_value (val));
value_print (val, stdout, 0, Val_no_prettyprint);
putchar ('\n');
printf_filtered ("\n");
}
}
@ -606,7 +603,7 @@ program_info (args, from_tty)
}
target_files_info ();
printf ("Program stopped at 0x%x.\n", stop_pc);
printf ("Program stopped at %s.\n", local_hex_string(stop_pc));
if (stop_step)
printf ("It stopped after being stepped.\n");
else if (num != 0)
@ -787,31 +784,38 @@ write_pc (val)
char *reg_names[] = REGISTER_NAMES;
/* Print out the machine register regnum. If regnum is -1,
print all registers.
print all registers (fpregs == 1) or all non-float registers
(fpregs == 0).
For most machines, having all_registers_info() print the
register(s) one per line is good enough. If a different format
is required, (eg, for SPARC or Pyramid 90x, which both have
is required, (eg, for MIPS or Pyramid 90x, which both have
lots of regs), or there is an existing convention for showing
all the registers, define the macro DO_REGISTERS_INFO(regnum)
all the registers, define the macro DO_REGISTERS_INFO(regnum, fp)
to provide that format. */
#if !defined (DO_REGISTERS_INFO)
#define DO_REGISTERS_INFO(regnum) do_registers_info(regnum)
static void do_registers_info (regnum)
#define DO_REGISTERS_INFO(regnum, fp) do_registers_info(regnum, fp)
static void
do_registers_info (regnum, fpregs)
int regnum;
int fpregs;
{
register int i;
if (regnum == -1)
printf_filtered (
"Register Contents (relative to selected stack frame)\n\n");
for (i = 0; i < NUM_REGS; i++)
{
char raw_buffer[MAX_REGISTER_RAW_SIZE];
char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
if (regnum != -1 && i != regnum)
continue;
/* Decide between printing all regs, nonfloat regs, or specific reg. */
if (regnum == -1) {
if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT && !fpregs)
continue;
} else {
if (i != regnum)
continue;
}
fputs_filtered (reg_names[i], stdout);
print_spaces_filtered (15 - strlen (reg_names[i]), stdout);
@ -873,8 +877,9 @@ static void do_registers_info (regnum)
#endif /* no DO_REGISTERS_INFO. */
static void
registers_info (addr_exp)
registers_info (addr_exp, fpregs)
char *addr_exp;
int fpregs;
{
int regnum;
@ -900,7 +905,21 @@ registers_info (addr_exp)
else
regnum = -1;
DO_REGISTERS_INFO(regnum);
DO_REGISTERS_INFO(regnum, fpregs);
}
static void
all_registers_info (addr_exp)
char *addr_exp;
{
registers_info (addr_exp, 1);
}
static void
nofp_registers_info (addr_exp)
char *addr_exp;
{
registers_info (addr_exp, 0);
}
/*
@ -1022,12 +1041,13 @@ This path is equivalent to the $PATH shell variable. It is a list of\n\
directories, separated by colons. These directories are searched to find\n\
fully linked executable files and separately compiled object files as needed.");
add_info ("path", path_info,
c = add_cmd ("paths", no_class, path_info,
"Current search path for finding object files.\n\
$cwd in the path means the current working directory.\n\
This path is equivalent to the $PATH shell variable. It is a list of\n\
directories, separated by colons. These directories are searched to find\n\
fully linked executable files and separately compiled object files as needed.");
fully linked executable files and separately compiled object files as needed.", &showlist);
c->completer = noop_completer;
add_com ("attach", class_run, attach_command,
"Attach to a process or file outside of GDB.\n\
@ -1100,8 +1120,12 @@ To cancel previous arguments and run with no arguments,\n\
use \"set args\" without arguments.");
add_com_alias ("r", "run", class_run, 1);
add_info ("registers", registers_info,
"List of registers and their contents, for selected stack frame.\n\
add_info ("registers", nofp_registers_info,
"List of integer registers and their contents, for selected stack frame.\n\
Register name as argument means describe only that register.");
add_info ("all-registers", all_registers_info,
"List of all registers and their contents, for selected stack frame.\n\
Register name as argument means describe only that register.");
add_info ("program", program_info,

View File

@ -1,5 +1,5 @@
/* Low level interface to ptrace, for GDB when running under Unix.
Copyright (C) 1986, 1987, 1989, 1991 Free Software Foundation, Inc.
Copyright 1986, 1987, 1989, 1991, 1992 Free Software Foundation, Inc.
This file is part of GDB.
@ -35,7 +35,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <fcntl.h>
#include <sys/param.h>
#include <sys/dir.h>
#include <signal.h>
extern char *strerror(); /* strings corresponding to errno */
@ -418,7 +417,7 @@ kill_command (arg, from_tty)
error ("The program is not being run.");
if (!query ("Kill the inferior process? "))
error ("Not confirmed.");
target_kill (arg, from_tty);
target_kill ();
/* Killing off the inferior can leave us with a core file. If so,
print the state we are left in. */

View File

@ -1,5 +1,5 @@
/* Low level Unix child interface to ptrace, for GDB when running under Unix.
Copyright (C) 1988, 1989, 1990, 1991 Free Software Foundation, Inc.
Copyright 1988, 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
This file is part of GDB.
@ -55,7 +55,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#endif
#include "gdbcore.h"
#ifndef NO_SYS_FILE
#include <sys/file.h>
#endif
#include <sys/stat.h>
#if !defined (FETCH_INFERIOR_REGISTERS)
@ -93,9 +95,7 @@ kill_inferior_fast ()
}
void
kill_inferior (args, from_tty)
char *args;
int from_tty;
kill_inferior ()
{
kill_inferior_fast ();
target_mourn_inferior ();
@ -166,7 +166,6 @@ detach (signal)
#if defined (KERNEL_U_ADDR_BSD)
/* Get kernel_u_addr using BSD-style nlist(). */
CORE_ADDR kernel_u_addr;
#include <a.out.h> /* For struct nlist */
void
_initialize_kernel_u_addr ()
@ -357,7 +356,7 @@ child_xfer_memory (memaddr, myaddr, len, write, target)
char *myaddr;
int len;
int write;
struct target_ops target; /* ignored */
struct target_ops *target; /* ignored */
{
register int i;
/* Round starting address down to longword boundary. */

View File

@ -1,5 +1,5 @@
/* Top level `main' program for GDB, the GNU debugger.
Copyright 1986, 1987, 1988, 1989, 1990, 1991 Free Software Foundation, Inc.
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
This file is part of GDB.
@ -43,7 +43,9 @@ int fclose ();
#endif
#include <string.h>
#ifndef NO_SYS_FILE
#include <sys/file.h>
#endif
#include <setjmp.h>
#include <sys/param.h>
#include <sys/stat.h>
@ -82,6 +84,10 @@ extern char *error_pre_print;
extern char lang_frame_mismatch_warn[]; /* language.c */
/* Whether GDB's stdin is on a terminal. */
extern int gdb_has_a_terminal; /* inflow.c */
/* Flag for whether we want all the "from_tty" gubbish printed. */
int caution = 1; /* Default is yes, sigh. */
@ -383,33 +389,40 @@ main (argc, argv)
with no equivalent). */
static struct option long_options[] =
{
{"quiet", 0, &quiet, 1},
{"nx", 0, &inhibit_gdbinit, 1},
{"batch", 0, &batch, 1},
{"epoch", 0, &epoch_interface, 1},
{"fullname", 0, &frame_file_full_name, 1},
{"help", 0, &print_help, 1},
{"se", 1, 0, 10},
{"symbols", 1, 0, 's'},
{"s", 1, 0, 's'},
{"exec", 1, 0, 'e'},
{"core", 1, 0, 'c'},
{"c", 1, 0, 'c'},
{"command", 1, 0, 'x'},
{"x", 1, 0, 'x'},
{"directory", 1, 0, 'd'},
{"cd", 1, 0, 11},
{"tty", 1, 0, 't'},
{"b", 1, 0, 'b'},
{"quiet", no_argument, &quiet, 1},
{"q", no_argument, &quiet, 1},
{"nx", no_argument, &inhibit_gdbinit, 1},
{"n", no_argument, &inhibit_gdbinit, 1},
{"batch", no_argument, &batch, 1},
{"epoch", no_argument, &epoch_interface, 1},
{"fullname", no_argument, &frame_file_full_name, 1},
{"f", no_argument, &frame_file_full_name, 1},
{"help", no_argument, &print_help, 1},
{"se", required_argument, 0, 10},
{"symbols", required_argument, 0, 's'},
{"s", required_argument, 0, 's'},
{"exec", required_argument, 0, 'e'},
{"e", required_argument, 0, 'e'},
{"core", required_argument, 0, 'c'},
{"c", required_argument, 0, 'c'},
{"command", required_argument, 0, 'x'},
{"x", required_argument, 0, 'x'},
{"directory", required_argument, 0, 'd'},
{"cd", required_argument, 0, 11},
{"tty", required_argument, 0, 't'},
{"baud", required_argument, 0, 'b'},
{"b", required_argument, 0, 'b'},
/* Allow machine descriptions to add more options... */
#ifdef ADDITIONAL_OPTIONS
ADDITIONAL_OPTIONS
#endif
{0, 0, 0, 0},
{0, no_argument, 0, 0},
};
while (1)
{
int option_index;
c = getopt_long_only (argc, argv, "",
long_options, &option_index);
if (c == EOF)
@ -739,7 +752,7 @@ execute_command (p, from_tty)
register struct cmd_list_element *c;
register struct command_line *cmdlines;
register enum language flang;
static struct language_defn *saved_language = 0;
static const struct language_defn *saved_language = 0;
static int warned = 0;
free_all_values ();
@ -791,7 +804,7 @@ execute_command (p, from_tty)
{
if (language_mode == language_mode_auto) {
if (saved_language)
language_info ();
language_info (1); /* Print what changed. */
}
saved_language = current_language;
warned = 0;
@ -1613,7 +1626,7 @@ static void
print_gdb_version ()
{
printf_filtered ("\
GDB %s, Copyright 1991 Free Software Foundation, Inc.",
GDB %s, Copyright 1992 Free Software Foundation, Inc.",
version);
}
@ -1648,7 +1661,7 @@ quit_command (args, from_tty)
{
if (query ("The program is running. Quit anyway? "))
{
target_kill (args, from_tty);
target_kill ();
}
else
error ("Not confirmed.");
@ -1659,10 +1672,13 @@ quit_command (args, from_tty)
exit (0);
}
/* Returns whether GDB is running on a terminal and whether the user
desires that questions be asked of them on that terminal. */
int
input_from_terminal_p ()
{
return (instream == stdin) & caution;
return gdb_has_a_terminal && (instream == stdin) & caution;
}
/* ARGSUSED */
@ -1699,6 +1715,9 @@ cd_command (dir, from_tty)
dir = tilde_expand (dir);
make_cleanup (free, dir);
if (chdir (dir) < 0)
perror_with_name (dir);
len = strlen (dir);
dir = savestring (dir, len - (len > 1 && dir[len-1] == '/'));
if (dir[0] == '/')
@ -1738,9 +1757,6 @@ cd_command (dir, from_tty)
}
}
if (chdir (dir) < 0)
perror_with_name (dir);
forget_cached_source_info ();
if (from_tty)
@ -1843,21 +1859,6 @@ show_commands (args, from_tty)
struct _hist_entry *history_get();
extern int history_base;
#if 0
/* This is all reported by individual "show" commands. */
printf_filtered ("Interactive command editing is %s.\n",
command_editing_p ? "on" : "off");
printf_filtered ("History expansion of command input is %s.\n",
history_expansion_p ? "on" : "off");
printf_filtered ("Writing of a history record upon exit is %s.\n",
write_history_p ? "enabled" : "disabled");
printf_filtered ("The size of the history list (number of stored commands) is %d.\n",
history_size);
printf_filtered ("The name of the history record is \"%s\".\n\n",
history_filename ? history_filename : "");
#endif /* 0 */
/* Print out some of the commands from the command history. */
/* First determine the length of the history list. */
hist_len = history_size;
@ -1879,7 +1880,7 @@ show_commands (args, from_tty)
/* "info editing <exp>" should print around command number <exp>. */
num = (parse_and_eval_address (args) - history_base) - Hist_print / 2;
}
/* "info editing" means print the last Hist_print commands. */
/* "show commands" means print the last Hist_print commands. */
else
{
num = hist_len - Hist_print;
@ -1897,14 +1898,6 @@ show_commands (args, from_tty)
num = 0;
}
#if 0
/* No need for a header now that "info editing" only prints one thing. */
if (num == hist_len - Hist_print)
printf_filtered ("The list of the last %d commands is:\n\n", Hist_print);
else
printf_filtered ("Some of the stored commands are:\n\n");
#endif /* 0 */
for (offset = num; offset < num + Hist_print && offset < hist_len; offset++)
{
printf_filtered ("%5d %s\n", history_base + offset,
@ -1916,8 +1909,8 @@ show_commands (args, from_tty)
num += Hist_print;
/* If the user repeats this command with return, it should do what
"info editing +" does. This is unnecessary if arg is null,
because "info editing +" is not useful after "info editing". */
"show commands +" does. This is unnecessary if arg is null,
because "show commands +" is not useful after "show commands". */
if (from_tty && args)
{
args[0] = '+';
@ -2153,9 +2146,10 @@ when gdb is started.");
add_show_from_set
(add_set_cmd ("editing", class_support, var_boolean, (char *)&command_editing_p,
"Set command line editing.\n\
"Set editing of command lines as they are typed.\n\
Use \"on\" to enable to enable the editing, and \"off\" to disable it.\n\
Without an argument, command line editing is enabled.", &setlist),
Without an argument, command line editing is enabled. To edit, use\n\
EMACS-like or VI-like commands like control-P or ESC.", &setlist),
&showlist);
add_prefix_cmd ("history", class_support, set_history,
@ -2198,19 +2192,22 @@ ie. the number of previous commands to keep a record of.", &sethistlist);
&showlist);
add_prefix_cmd ("info", class_info, info_command,
"Generic command for printing status.",
"Generic command for showing things about the program being debugged.",
&infolist, "info ", 0, &cmdlist);
add_com_alias ("i", "info", class_info, 1);
add_prefix_cmd ("show", class_info, show_command,
"Generic command for showing things set with \"set\".",
"Generic command for showing things about the debugger.",
&showlist, "show ", 0, &cmdlist);
/* Another way to get at the same thing. */
add_info ("set", show_command, "Show all GDB settings.");
add_cmd ("commands", no_class, show_commands, "Status of command editor.",
add_cmd ("commands", no_class, show_commands,
"Show the the history of commands you typed.\n\
You can supply a command number to start with, or a `+' to start after\n\
the previous command number shown.",
&showlist);
add_cmd ("version", no_class, show_version,
"Report what version of GDB this is.", &showlist);
"Show what version of GDB this is.", &showlist);
}

View File

@ -1,5 +1,5 @@
/* Handle SunOS and SVR4 shared libraries for GDB, the GNU Debugger.
Copyright 1990, 1991 Free Software Foundation, Inc.
Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
This file is part of GDB.
@ -573,8 +573,9 @@ find_solib (so_list_ptr)
(for the inferior executable) since it is not a shared object. */
if (LM_NAME (new) != 0)
{
(void) target_read_string((CORE_ADDR) LM_NAME (new), new -> so_name,
MAX_PATH_SIZE - 1);
if (!target_read_string((CORE_ADDR) LM_NAME (new), new -> so_name,
MAX_PATH_SIZE - 1))
error ("find_solib: Can't read pathname for load map\n");
new -> so_name[MAX_PATH_SIZE - 1] = 0;
solib_map_sections (new);
}
@ -669,20 +670,20 @@ solib_add (arg_string, from_tty, target)
if (count)
{
/* Reallocate the target's section table including the new size. */
if (target -> sections)
if (target -> to_sections)
{
old = target -> sections_end - target -> sections;
target -> sections = (struct section_table *)
realloc ((char *)target -> sections,
old = target -> to_sections_end - target -> to_sections;
target -> to_sections = (struct section_table *)
realloc ((char *)target -> to_sections,
(sizeof (struct section_table)) * (count + old));
}
else
{
old = 0;
target -> sections = (struct section_table *)
target -> to_sections = (struct section_table *)
malloc ((sizeof (struct section_table)) * count);
}
target -> sections_end = target -> sections + (count + old);
target -> to_sections_end = target -> to_sections + (count + old);
/* Add these section table entries to the target's table. */
while ((so = find_solib (so)) != NULL)
@ -690,7 +691,7 @@ solib_add (arg_string, from_tty, target)
if (so -> so_name[0])
{
count = so -> sections_end - so -> sections;
bcopy (so -> sections, (char *)(target -> sections + old),
bcopy (so -> sections, (char *)(target -> to_sections + old),
(sizeof (struct section_table)) * count);
old += count;
}