* 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:
parent
e17960fb42
commit
ee0613d186
104
gdb/infcmd.c
104
gdb/infcmd.c
|
@ -1,28 +1,27 @@
|
||||||
/* Memory-access and commands for inferior process, for GDB.
|
/* Memory-access and commands for "inferior" (child) process, for GDB.
|
||||||
Copyright (C) 1986, 1987, 1988, 1989 Free Software Foundation, Inc.
|
Copyright 1986, 1987, 1988, 1989, 1991, 1992 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GDB.
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 1, or (at your option)
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
any later version.
|
(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
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with GDB; see the file COPYING. If not, write to
|
along with this program; if not, write to the Free Software
|
||||||
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
#include "param.h"
|
|
||||||
#include "symtab.h"
|
#include "symtab.h"
|
||||||
#include "frame.h"
|
#include "frame.h"
|
||||||
#include "inferior.h"
|
#include "inferior.h"
|
||||||
|
@ -149,7 +148,7 @@ run_command (args, from_tty)
|
||||||
!query ("The program being debugged has been started already.\n\
|
!query ("The program being debugged has been started already.\n\
|
||||||
Start it from the beginning? "))
|
Start it from the beginning? "))
|
||||||
error ("Program not restarted.");
|
error ("Program not restarted.");
|
||||||
target_kill ((char *)0, 0);
|
target_kill ();
|
||||||
}
|
}
|
||||||
|
|
||||||
exec_file = (char *) get_exec_file (0);
|
exec_file = (char *) get_exec_file (0);
|
||||||
|
@ -161,7 +160,7 @@ Start it from the beginning? "))
|
||||||
if (args)
|
if (args)
|
||||||
{
|
{
|
||||||
char *cmd;
|
char *cmd;
|
||||||
cmd = concat ("set args ", args, "");
|
cmd = concat ("set args ", args, NULL);
|
||||||
make_cleanup (free, cmd);
|
make_cleanup (free, cmd);
|
||||||
execute_command (cmd, from_tty);
|
execute_command (cmd, from_tty);
|
||||||
}
|
}
|
||||||
|
@ -356,8 +355,7 @@ jump_command (arg, from_tty)
|
||||||
if (sal.symtab == 0 && sal.pc == 0)
|
if (sal.symtab == 0 && sal.pc == 0)
|
||||||
error ("No source file has been specified.");
|
error ("No source file has been specified.");
|
||||||
|
|
||||||
if (sal.pc == 0)
|
resolve_sal_pc (&sal); /* May error out */
|
||||||
sal.pc = find_line_pc (sal.symtab, sal.line);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
struct symbol *fn = get_frame_function (get_current_frame ());
|
struct symbol *fn = get_frame_function (get_current_frame ());
|
||||||
|
@ -368,13 +366,10 @@ jump_command (arg, from_tty)
|
||||||
error ("Not confirmed.");
|
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);
|
addr = ADDR_BITS_SET (sal.pc);
|
||||||
|
|
||||||
if (from_tty)
|
if (from_tty)
|
||||||
printf ("Continuing at 0x%x.\n", addr);
|
printf ("Continuing at %s.\n", local_hex_string(addr));
|
||||||
|
|
||||||
clear_proceed_status ();
|
clear_proceed_status ();
|
||||||
proceed (addr, 0, 0);
|
proceed (addr, 0, 0);
|
||||||
|
@ -419,7 +414,7 @@ signal_command (signum_exp, from_tty)
|
||||||
returns to its caller with that frame already gone.
|
returns to its caller with that frame already gone.
|
||||||
Otherwise, the caller never gets returned to. */
|
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;
|
static int stack_dummy_testing = 0;
|
||||||
|
|
||||||
|
@ -554,10 +549,12 @@ finish_command (arg, from_tty)
|
||||||
fi = get_frame_info (selected_frame);
|
fi = get_frame_info (selected_frame);
|
||||||
function = find_pc_function (fi->pc);
|
function = find_pc_function (fi->pc);
|
||||||
|
|
||||||
|
/* Print info on the selected frame, including level number
|
||||||
|
but not source. */
|
||||||
if (from_tty)
|
if (from_tty)
|
||||||
{
|
{
|
||||||
printf ("Run till exit from ");
|
printf_filtered ("Run till exit from ");
|
||||||
print_selected_frame ();
|
print_stack_frame (selected_frame, selected_frame_level, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
proceed_to_finish = 1; /* We want stop_registers, please... */
|
proceed_to_finish = 1; /* We want stop_registers, please... */
|
||||||
|
@ -584,9 +581,9 @@ finish_command (arg, from_tty)
|
||||||
value_type,
|
value_type,
|
||||||
BLOCK_GCC_COMPILED (SYMBOL_BLOCK_VALUE (function))));
|
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);
|
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 ();
|
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)
|
if (stop_step)
|
||||||
printf ("It stopped after being stepped.\n");
|
printf ("It stopped after being stepped.\n");
|
||||||
else if (num != 0)
|
else if (num != 0)
|
||||||
|
@ -787,31 +784,38 @@ write_pc (val)
|
||||||
char *reg_names[] = REGISTER_NAMES;
|
char *reg_names[] = REGISTER_NAMES;
|
||||||
|
|
||||||
/* Print out the machine register regnum. If regnum is -1,
|
/* 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
|
For most machines, having all_registers_info() print the
|
||||||
register(s) one per line is good enough. If a different format
|
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
|
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. */
|
to provide that format. */
|
||||||
|
|
||||||
#if !defined (DO_REGISTERS_INFO)
|
#if !defined (DO_REGISTERS_INFO)
|
||||||
#define DO_REGISTERS_INFO(regnum) do_registers_info(regnum)
|
#define DO_REGISTERS_INFO(regnum, fp) do_registers_info(regnum, fp)
|
||||||
static void do_registers_info (regnum)
|
static void
|
||||||
|
do_registers_info (regnum, fpregs)
|
||||||
int regnum;
|
int regnum;
|
||||||
|
int fpregs;
|
||||||
{
|
{
|
||||||
register int i;
|
register int i;
|
||||||
|
|
||||||
if (regnum == -1)
|
|
||||||
printf_filtered (
|
|
||||||
"Register Contents (relative to selected stack frame)\n\n");
|
|
||||||
|
|
||||||
for (i = 0; i < NUM_REGS; i++)
|
for (i = 0; i < NUM_REGS; i++)
|
||||||
{
|
{
|
||||||
char raw_buffer[MAX_REGISTER_RAW_SIZE];
|
char raw_buffer[MAX_REGISTER_RAW_SIZE];
|
||||||
char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
|
char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
|
||||||
|
|
||||||
if (regnum != -1 && i != regnum)
|
/* Decide between printing all regs, nonfloat regs, or specific reg. */
|
||||||
continue;
|
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);
|
fputs_filtered (reg_names[i], stdout);
|
||||||
print_spaces_filtered (15 - strlen (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. */
|
#endif /* no DO_REGISTERS_INFO. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
registers_info (addr_exp)
|
registers_info (addr_exp, fpregs)
|
||||||
char *addr_exp;
|
char *addr_exp;
|
||||||
|
int fpregs;
|
||||||
{
|
{
|
||||||
int regnum;
|
int regnum;
|
||||||
|
|
||||||
|
@ -900,7 +905,21 @@ registers_info (addr_exp)
|
||||||
else
|
else
|
||||||
regnum = -1;
|
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\
|
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.");
|
||||||
|
|
||||||
add_info ("path", path_info,
|
c = add_cmd ("paths", no_class, path_info,
|
||||||
"Current search path for finding object files.\n\
|
"Current search path for finding object files.\n\
|
||||||
$cwd in the path means the current working directory.\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\
|
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\
|
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,
|
add_com ("attach", class_run, attach_command,
|
||||||
"Attach to a process or file outside of GDB.\n\
|
"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.");
|
use \"set args\" without arguments.");
|
||||||
add_com_alias ("r", "run", class_run, 1);
|
add_com_alias ("r", "run", class_run, 1);
|
||||||
|
|
||||||
add_info ("registers", registers_info,
|
add_info ("registers", nofp_registers_info,
|
||||||
"List of registers and their contents, for selected stack frame.\n\
|
"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.");
|
Register name as argument means describe only that register.");
|
||||||
|
|
||||||
add_info ("program", program_info,
|
add_info ("program", program_info,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* Low level interface to ptrace, for GDB when running under Unix.
|
/* 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.
|
This file is part of GDB.
|
||||||
|
|
||||||
|
@ -35,7 +35,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/dir.h>
|
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
extern char *strerror(); /* strings corresponding to errno */
|
extern char *strerror(); /* strings corresponding to errno */
|
||||||
|
@ -418,7 +417,7 @@ kill_command (arg, from_tty)
|
||||||
error ("The program is not being run.");
|
error ("The program is not being run.");
|
||||||
if (!query ("Kill the inferior process? "))
|
if (!query ("Kill the inferior process? "))
|
||||||
error ("Not confirmed.");
|
error ("Not confirmed.");
|
||||||
target_kill (arg, from_tty);
|
target_kill ();
|
||||||
|
|
||||||
/* Killing off the inferior can leave us with a core file. If so,
|
/* Killing off the inferior can leave us with a core file. If so,
|
||||||
print the state we are left in. */
|
print the state we are left in. */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* Low level Unix child interface to ptrace, for GDB when running under Unix.
|
/* 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.
|
This file is part of GDB.
|
||||||
|
|
||||||
|
@ -55,7 +55,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "gdbcore.h"
|
#include "gdbcore.h"
|
||||||
|
#ifndef NO_SYS_FILE
|
||||||
#include <sys/file.h>
|
#include <sys/file.h>
|
||||||
|
#endif
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#if !defined (FETCH_INFERIOR_REGISTERS)
|
#if !defined (FETCH_INFERIOR_REGISTERS)
|
||||||
|
@ -93,9 +95,7 @@ kill_inferior_fast ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
kill_inferior (args, from_tty)
|
kill_inferior ()
|
||||||
char *args;
|
|
||||||
int from_tty;
|
|
||||||
{
|
{
|
||||||
kill_inferior_fast ();
|
kill_inferior_fast ();
|
||||||
target_mourn_inferior ();
|
target_mourn_inferior ();
|
||||||
|
@ -166,7 +166,6 @@ detach (signal)
|
||||||
#if defined (KERNEL_U_ADDR_BSD)
|
#if defined (KERNEL_U_ADDR_BSD)
|
||||||
/* Get kernel_u_addr using BSD-style nlist(). */
|
/* Get kernel_u_addr using BSD-style nlist(). */
|
||||||
CORE_ADDR kernel_u_addr;
|
CORE_ADDR kernel_u_addr;
|
||||||
#include <a.out.h> /* For struct nlist */
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_initialize_kernel_u_addr ()
|
_initialize_kernel_u_addr ()
|
||||||
|
@ -357,7 +356,7 @@ child_xfer_memory (memaddr, myaddr, len, write, target)
|
||||||
char *myaddr;
|
char *myaddr;
|
||||||
int len;
|
int len;
|
||||||
int write;
|
int write;
|
||||||
struct target_ops target; /* ignored */
|
struct target_ops *target; /* ignored */
|
||||||
{
|
{
|
||||||
register int i;
|
register int i;
|
||||||
/* Round starting address down to longword boundary. */
|
/* Round starting address down to longword boundary. */
|
||||||
|
|
117
gdb/main.c
117
gdb/main.c
|
@ -1,5 +1,5 @@
|
||||||
/* Top level `main' program for GDB, the GNU debugger.
|
/* 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.
|
This file is part of GDB.
|
||||||
|
|
||||||
|
@ -43,7 +43,9 @@ int fclose ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#ifndef NO_SYS_FILE
|
||||||
#include <sys/file.h>
|
#include <sys/file.h>
|
||||||
|
#endif
|
||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
@ -82,6 +84,10 @@ extern char *error_pre_print;
|
||||||
|
|
||||||
extern char lang_frame_mismatch_warn[]; /* language.c */
|
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. */
|
/* Flag for whether we want all the "from_tty" gubbish printed. */
|
||||||
|
|
||||||
int caution = 1; /* Default is yes, sigh. */
|
int caution = 1; /* Default is yes, sigh. */
|
||||||
|
@ -383,33 +389,40 @@ main (argc, argv)
|
||||||
with no equivalent). */
|
with no equivalent). */
|
||||||
static struct option long_options[] =
|
static struct option long_options[] =
|
||||||
{
|
{
|
||||||
{"quiet", 0, &quiet, 1},
|
{"quiet", no_argument, &quiet, 1},
|
||||||
{"nx", 0, &inhibit_gdbinit, 1},
|
{"q", no_argument, &quiet, 1},
|
||||||
{"batch", 0, &batch, 1},
|
{"nx", no_argument, &inhibit_gdbinit, 1},
|
||||||
{"epoch", 0, &epoch_interface, 1},
|
{"n", no_argument, &inhibit_gdbinit, 1},
|
||||||
{"fullname", 0, &frame_file_full_name, 1},
|
{"batch", no_argument, &batch, 1},
|
||||||
{"help", 0, &print_help, 1},
|
{"epoch", no_argument, &epoch_interface, 1},
|
||||||
{"se", 1, 0, 10},
|
{"fullname", no_argument, &frame_file_full_name, 1},
|
||||||
{"symbols", 1, 0, 's'},
|
{"f", no_argument, &frame_file_full_name, 1},
|
||||||
{"s", 1, 0, 's'},
|
{"help", no_argument, &print_help, 1},
|
||||||
{"exec", 1, 0, 'e'},
|
{"se", required_argument, 0, 10},
|
||||||
{"core", 1, 0, 'c'},
|
{"symbols", required_argument, 0, 's'},
|
||||||
{"c", 1, 0, 'c'},
|
{"s", required_argument, 0, 's'},
|
||||||
{"command", 1, 0, 'x'},
|
{"exec", required_argument, 0, 'e'},
|
||||||
{"x", 1, 0, 'x'},
|
{"e", required_argument, 0, 'e'},
|
||||||
{"directory", 1, 0, 'd'},
|
{"core", required_argument, 0, 'c'},
|
||||||
{"cd", 1, 0, 11},
|
{"c", required_argument, 0, 'c'},
|
||||||
{"tty", 1, 0, 't'},
|
{"command", required_argument, 0, 'x'},
|
||||||
{"b", 1, 0, 'b'},
|
{"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... */
|
/* Allow machine descriptions to add more options... */
|
||||||
#ifdef ADDITIONAL_OPTIONS
|
#ifdef ADDITIONAL_OPTIONS
|
||||||
ADDITIONAL_OPTIONS
|
ADDITIONAL_OPTIONS
|
||||||
#endif
|
#endif
|
||||||
{0, 0, 0, 0},
|
{0, no_argument, 0, 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
int option_index;
|
||||||
|
|
||||||
c = getopt_long_only (argc, argv, "",
|
c = getopt_long_only (argc, argv, "",
|
||||||
long_options, &option_index);
|
long_options, &option_index);
|
||||||
if (c == EOF)
|
if (c == EOF)
|
||||||
|
@ -739,7 +752,7 @@ execute_command (p, from_tty)
|
||||||
register struct cmd_list_element *c;
|
register struct cmd_list_element *c;
|
||||||
register struct command_line *cmdlines;
|
register struct command_line *cmdlines;
|
||||||
register enum language flang;
|
register enum language flang;
|
||||||
static struct language_defn *saved_language = 0;
|
static const struct language_defn *saved_language = 0;
|
||||||
static int warned = 0;
|
static int warned = 0;
|
||||||
|
|
||||||
free_all_values ();
|
free_all_values ();
|
||||||
|
@ -791,7 +804,7 @@ execute_command (p, from_tty)
|
||||||
{
|
{
|
||||||
if (language_mode == language_mode_auto) {
|
if (language_mode == language_mode_auto) {
|
||||||
if (saved_language)
|
if (saved_language)
|
||||||
language_info ();
|
language_info (1); /* Print what changed. */
|
||||||
}
|
}
|
||||||
saved_language = current_language;
|
saved_language = current_language;
|
||||||
warned = 0;
|
warned = 0;
|
||||||
|
@ -1613,7 +1626,7 @@ static void
|
||||||
print_gdb_version ()
|
print_gdb_version ()
|
||||||
{
|
{
|
||||||
printf_filtered ("\
|
printf_filtered ("\
|
||||||
GDB %s, Copyright 1991 Free Software Foundation, Inc.",
|
GDB %s, Copyright 1992 Free Software Foundation, Inc.",
|
||||||
version);
|
version);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1648,7 +1661,7 @@ quit_command (args, from_tty)
|
||||||
{
|
{
|
||||||
if (query ("The program is running. Quit anyway? "))
|
if (query ("The program is running. Quit anyway? "))
|
||||||
{
|
{
|
||||||
target_kill (args, from_tty);
|
target_kill ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
error ("Not confirmed.");
|
error ("Not confirmed.");
|
||||||
|
@ -1659,10 +1672,13 @@ quit_command (args, from_tty)
|
||||||
exit (0);
|
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
|
int
|
||||||
input_from_terminal_p ()
|
input_from_terminal_p ()
|
||||||
{
|
{
|
||||||
return (instream == stdin) & caution;
|
return gdb_has_a_terminal && (instream == stdin) & caution;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
|
@ -1699,6 +1715,9 @@ cd_command (dir, from_tty)
|
||||||
dir = tilde_expand (dir);
|
dir = tilde_expand (dir);
|
||||||
make_cleanup (free, dir);
|
make_cleanup (free, dir);
|
||||||
|
|
||||||
|
if (chdir (dir) < 0)
|
||||||
|
perror_with_name (dir);
|
||||||
|
|
||||||
len = strlen (dir);
|
len = strlen (dir);
|
||||||
dir = savestring (dir, len - (len > 1 && dir[len-1] == '/'));
|
dir = savestring (dir, len - (len > 1 && dir[len-1] == '/'));
|
||||||
if (dir[0] == '/')
|
if (dir[0] == '/')
|
||||||
|
@ -1738,9 +1757,6 @@ cd_command (dir, from_tty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chdir (dir) < 0)
|
|
||||||
perror_with_name (dir);
|
|
||||||
|
|
||||||
forget_cached_source_info ();
|
forget_cached_source_info ();
|
||||||
|
|
||||||
if (from_tty)
|
if (from_tty)
|
||||||
|
@ -1843,21 +1859,6 @@ show_commands (args, from_tty)
|
||||||
struct _hist_entry *history_get();
|
struct _hist_entry *history_get();
|
||||||
extern int history_base;
|
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. */
|
/* Print out some of the commands from the command history. */
|
||||||
/* First determine the length of the history list. */
|
/* First determine the length of the history list. */
|
||||||
hist_len = history_size;
|
hist_len = history_size;
|
||||||
|
@ -1879,7 +1880,7 @@ show_commands (args, from_tty)
|
||||||
/* "info editing <exp>" should print around command number <exp>. */
|
/* "info editing <exp>" should print around command number <exp>. */
|
||||||
num = (parse_and_eval_address (args) - history_base) - Hist_print / 2;
|
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
|
else
|
||||||
{
|
{
|
||||||
num = hist_len - Hist_print;
|
num = hist_len - Hist_print;
|
||||||
|
@ -1897,14 +1898,6 @@ show_commands (args, from_tty)
|
||||||
num = 0;
|
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++)
|
for (offset = num; offset < num + Hist_print && offset < hist_len; offset++)
|
||||||
{
|
{
|
||||||
printf_filtered ("%5d %s\n", history_base + offset,
|
printf_filtered ("%5d %s\n", history_base + offset,
|
||||||
|
@ -1916,8 +1909,8 @@ show_commands (args, from_tty)
|
||||||
num += Hist_print;
|
num += Hist_print;
|
||||||
|
|
||||||
/* If the user repeats this command with return, it should do what
|
/* If the user repeats this command with return, it should do what
|
||||||
"info editing +" does. This is unnecessary if arg is null,
|
"show commands +" does. This is unnecessary if arg is null,
|
||||||
because "info editing +" is not useful after "info editing". */
|
because "show commands +" is not useful after "show commands". */
|
||||||
if (from_tty && args)
|
if (from_tty && args)
|
||||||
{
|
{
|
||||||
args[0] = '+';
|
args[0] = '+';
|
||||||
|
@ -2153,9 +2146,10 @@ when gdb is started.");
|
||||||
|
|
||||||
add_show_from_set
|
add_show_from_set
|
||||||
(add_set_cmd ("editing", class_support, var_boolean, (char *)&command_editing_p,
|
(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\
|
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);
|
&showlist);
|
||||||
|
|
||||||
add_prefix_cmd ("history", class_support, set_history,
|
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);
|
&showlist);
|
||||||
|
|
||||||
add_prefix_cmd ("info", class_info, info_command,
|
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);
|
&infolist, "info ", 0, &cmdlist);
|
||||||
add_com_alias ("i", "info", class_info, 1);
|
add_com_alias ("i", "info", class_info, 1);
|
||||||
|
|
||||||
add_prefix_cmd ("show", class_info, show_command,
|
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);
|
&showlist, "show ", 0, &cmdlist);
|
||||||
/* Another way to get at the same thing. */
|
/* Another way to get at the same thing. */
|
||||||
add_info ("set", show_command, "Show all GDB settings.");
|
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);
|
&showlist);
|
||||||
|
|
||||||
add_cmd ("version", no_class, show_version,
|
add_cmd ("version", no_class, show_version,
|
||||||
"Report what version of GDB this is.", &showlist);
|
"Show what version of GDB this is.", &showlist);
|
||||||
}
|
}
|
||||||
|
|
21
gdb/solib.c
21
gdb/solib.c
|
@ -1,5 +1,5 @@
|
||||||
/* Handle SunOS and SVR4 shared libraries for GDB, the GNU Debugger.
|
/* 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.
|
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. */
|
(for the inferior executable) since it is not a shared object. */
|
||||||
if (LM_NAME (new) != 0)
|
if (LM_NAME (new) != 0)
|
||||||
{
|
{
|
||||||
(void) target_read_string((CORE_ADDR) LM_NAME (new), new -> so_name,
|
if (!target_read_string((CORE_ADDR) LM_NAME (new), new -> so_name,
|
||||||
MAX_PATH_SIZE - 1);
|
MAX_PATH_SIZE - 1))
|
||||||
|
error ("find_solib: Can't read pathname for load map\n");
|
||||||
new -> so_name[MAX_PATH_SIZE - 1] = 0;
|
new -> so_name[MAX_PATH_SIZE - 1] = 0;
|
||||||
solib_map_sections (new);
|
solib_map_sections (new);
|
||||||
}
|
}
|
||||||
|
@ -669,20 +670,20 @@ solib_add (arg_string, from_tty, target)
|
||||||
if (count)
|
if (count)
|
||||||
{
|
{
|
||||||
/* Reallocate the target's section table including the new size. */
|
/* Reallocate the target's section table including the new size. */
|
||||||
if (target -> sections)
|
if (target -> to_sections)
|
||||||
{
|
{
|
||||||
old = target -> sections_end - target -> sections;
|
old = target -> to_sections_end - target -> to_sections;
|
||||||
target -> sections = (struct section_table *)
|
target -> to_sections = (struct section_table *)
|
||||||
realloc ((char *)target -> sections,
|
realloc ((char *)target -> to_sections,
|
||||||
(sizeof (struct section_table)) * (count + old));
|
(sizeof (struct section_table)) * (count + old));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
old = 0;
|
old = 0;
|
||||||
target -> sections = (struct section_table *)
|
target -> to_sections = (struct section_table *)
|
||||||
malloc ((sizeof (struct section_table)) * count);
|
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. */
|
/* Add these section table entries to the target's table. */
|
||||||
while ((so = find_solib (so)) != NULL)
|
while ((so = find_solib (so)) != NULL)
|
||||||
|
@ -690,7 +691,7 @@ solib_add (arg_string, from_tty, target)
|
||||||
if (so -> so_name[0])
|
if (so -> so_name[0])
|
||||||
{
|
{
|
||||||
count = so -> sections_end - so -> sections;
|
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);
|
(sizeof (struct section_table)) * count);
|
||||||
old += count;
|
old += count;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue