mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 17:18:55 +00:00
all remaining *.c *.h files from hp merge.
This commit is contained in:
139
gdb/infcmd.c
139
gdb/infcmd.c
@@ -32,6 +32,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
#include "target.h"
|
||||
#include "language.h"
|
||||
#include "symfile.h"
|
||||
#include "objfiles.h"
|
||||
|
||||
/* Functions exported for general use: */
|
||||
|
||||
@@ -91,6 +92,8 @@ static void run_command PARAMS ((char *, int));
|
||||
|
||||
void _initialize_infcmd PARAMS ((void));
|
||||
|
||||
#define GO_USAGE "Usage: go <location>\n"
|
||||
|
||||
#ifdef CALL_DUMMY_BREAKPOINT_OFFSET
|
||||
static void breakpoint_auto_delete_contents PARAMS ((PTR));
|
||||
#endif
|
||||
@@ -207,12 +210,19 @@ run_command (args, from_tty)
|
||||
Start it from the beginning? "))
|
||||
error ("Program not restarted.");
|
||||
target_kill ();
|
||||
#if defined(SOLIB_RESTART)
|
||||
SOLIB_RESTART ();
|
||||
#endif
|
||||
init_wait_for_inferior ();
|
||||
}
|
||||
|
||||
clear_breakpoint_hit_counts ();
|
||||
|
||||
exec_file = (char *) get_exec_file (0);
|
||||
|
||||
/* Purge old solib objfiles. */
|
||||
objfile_purge_solibs ();
|
||||
|
||||
do_run_cleanups (NULL);
|
||||
|
||||
/* The exec file is re-read every time we do a generic_mourn_inferior, so
|
||||
@@ -249,6 +259,17 @@ Start it from the beginning? "))
|
||||
target_create_inferior (exec_file, inferior_args,
|
||||
environ_vector (inferior_environ));
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
run_no_args_command (args, from_tty)
|
||||
char *args;
|
||||
int from_tty;
|
||||
{
|
||||
execute_command("set args", from_tty);
|
||||
run_command((char *)NULL, from_tty);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
continue_command (proc_count_exp, from_tty)
|
||||
@@ -481,6 +502,23 @@ jump_command (arg, from_tty)
|
||||
proceed (addr, TARGET_SIGNAL_0, 0);
|
||||
}
|
||||
|
||||
|
||||
/* Go to line or address in current procedure */
|
||||
static void
|
||||
go_command(line_no, from_tty)
|
||||
char *line_no;
|
||||
int from_tty;
|
||||
{
|
||||
if (line_no == (char *)NULL || !*line_no)
|
||||
printf_filtered(GO_USAGE);
|
||||
else
|
||||
{
|
||||
tbreak_command(line_no, from_tty);
|
||||
jump_command(line_no, from_tty);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Continue program giving it specified signal. */
|
||||
|
||||
static void
|
||||
@@ -615,8 +653,10 @@ run_stack_dummy (addr, buffer)
|
||||
}
|
||||
#endif /* CALL_DUMMY_BREAKPOINT_OFFSET. */
|
||||
|
||||
disable_watchpoints_before_interactive_call_start ();
|
||||
proceed_to_finish = 1; /* We want stop_registers, please... */
|
||||
proceed (addr, TARGET_SIGNAL_0, 0);
|
||||
enable_watchpoints_after_interactive_call_stop ();
|
||||
|
||||
discard_cleanups (old_cleanups);
|
||||
|
||||
@@ -754,6 +794,7 @@ finish_command (arg, from_tty)
|
||||
struct type *value_type;
|
||||
register value_ptr val;
|
||||
CORE_ADDR funcaddr;
|
||||
int struct_return;
|
||||
|
||||
value_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (function));
|
||||
if (!value_type)
|
||||
@@ -764,15 +805,36 @@ finish_command (arg, from_tty)
|
||||
|
||||
funcaddr = BLOCK_START (SYMBOL_BLOCK_VALUE (function));
|
||||
|
||||
val = value_being_returned (value_type, stop_registers,
|
||||
using_struct_return (value_of_variable (function, NULL),
|
||||
struct_return = using_struct_return (value_of_variable (function, NULL),
|
||||
|
||||
funcaddr,
|
||||
check_typedef (value_type),
|
||||
BLOCK_GCC_COMPILED (SYMBOL_BLOCK_VALUE (function))));
|
||||
BLOCK_GCC_COMPILED (SYMBOL_BLOCK_VALUE (function)));
|
||||
|
||||
printf_filtered ("Value returned is $%d = ", record_latest_value (val));
|
||||
value_print (val, gdb_stdout, 0, Val_no_prettyprint);
|
||||
printf_filtered ("\n");
|
||||
if (!struct_return)
|
||||
{
|
||||
val = value_being_returned (value_type, stop_registers, struct_return);
|
||||
printf_filtered ("Value returned is $%d = ", record_latest_value (val));
|
||||
value_print (val, gdb_stdout, 0, Val_no_prettyprint);
|
||||
printf_filtered ("\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
/* elz: we cannot determine the contents of the structure because
|
||||
it is on the stack, and we don't know where, since we did not
|
||||
initiate the call, as opposed to the call_function_by_hand case */
|
||||
#ifdef VALUE_RETURNED_FROM_STACK
|
||||
val = 0;
|
||||
printf_filtered ("Value returned has type: %s.", TYPE_NAME (value_type));
|
||||
printf_filtered (" Cannot determine contents\n");
|
||||
#else
|
||||
val = value_being_returned (value_type, stop_registers, struct_return);
|
||||
printf_filtered ("Value returned is $%d = ", record_latest_value (val));
|
||||
value_print (val, gdb_stdout, 0, Val_no_prettyprint);
|
||||
printf_filtered ("\n");
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
do_cleanups(old_chain);
|
||||
}
|
||||
@@ -971,6 +1033,7 @@ path_command (dirname, from_tty)
|
||||
if (from_tty)
|
||||
path_info ((char *)NULL, from_tty);
|
||||
}
|
||||
|
||||
|
||||
#ifdef REGISTER_NAMES
|
||||
char *gdb_register_names[] = REGISTER_NAMES;
|
||||
@@ -1186,6 +1249,9 @@ attach_command (args, from_tty)
|
||||
extern int auto_solib_add;
|
||||
#endif
|
||||
|
||||
char * exec_file;
|
||||
char * full_exec_path = NULL;
|
||||
|
||||
dont_repeat (); /* Not for the faint of heart */
|
||||
|
||||
if (target_has_execution)
|
||||
@@ -1217,15 +1283,43 @@ attach_command (args, from_tty)
|
||||
wait_for_inferior ();
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If no exec file is yet known, try to determine it from the
|
||||
* process itself.
|
||||
*/
|
||||
exec_file = (char *) get_exec_file (0);
|
||||
if (! exec_file) {
|
||||
exec_file = target_pid_to_exec_file (inferior_pid);
|
||||
if (exec_file) {
|
||||
/* It's possible we don't have a full path, but rather just a
|
||||
filename. Some targets, such as HP-UX, don't provide the
|
||||
full path, sigh.
|
||||
|
||||
Attempt to qualify the filename against the source path.
|
||||
(If that fails, we'll just fall back on the original
|
||||
filename. Not much more we can do...)
|
||||
*/
|
||||
if (!source_full_path_of (exec_file, &full_exec_path))
|
||||
full_exec_path = savestring (exec_file, strlen (exec_file));
|
||||
|
||||
exec_file_attach (full_exec_path, from_tty);
|
||||
symbol_file_command (full_exec_path, from_tty);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef SOLIB_ADD
|
||||
if (auto_solib_add)
|
||||
{
|
||||
/* Add shared library symbols from the newly attached process, if any. */
|
||||
SOLIB_ADD ((char *)0, from_tty, (struct target_ops *)0);
|
||||
SOLIB_ADD ((char *)0, from_tty, ¤t_target);
|
||||
re_enable_breakpoints_in_shlibs ();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Take any necessary post-attaching actions for this platform.
|
||||
*/
|
||||
target_post_attach (inferior_pid);
|
||||
|
||||
normal_stop ();
|
||||
}
|
||||
|
||||
@@ -1247,6 +1341,9 @@ detach_command (args, from_tty)
|
||||
{
|
||||
dont_repeat (); /* Not for the faint of heart */
|
||||
target_detach (args, from_tty);
|
||||
#if defined(SOLIB_RESTART)
|
||||
SOLIB_RESTART ();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
@@ -1332,12 +1429,15 @@ fully linked executable files and separately compiled object files as needed.",
|
||||
add_com ("attach", class_run, attach_command,
|
||||
"Attach to a process or file outside of GDB.\n\
|
||||
This command attaches to another target, of the same type as your last\n\
|
||||
`target' command (`info files' will show your target stack).\n\
|
||||
\"target\" command (\"info files\" will show your target stack).\n\
|
||||
The command may take as argument a process id or a device file.\n\
|
||||
For a process id, you must have permission to send the process a signal,\n\
|
||||
and it must have the same effective uid as the debugger.\n\
|
||||
When using \"attach\", you should use the \"file\" command to specify\n\
|
||||
the program running in the process, and to load its symbol table.");
|
||||
When using \"attach\" with a process id, the debugger finds the\n\
|
||||
program running in the process, looking first in the current working\n\
|
||||
directory, or (if not found there) using the source file search path\n\
|
||||
(see the \"directory\" command). You can also use the \"file\" command\n\
|
||||
to specify the program, and to load its symbol table.");
|
||||
|
||||
add_com ("detach", class_run, detach_command,
|
||||
"Detach a process or file previously attached.\n\
|
||||
@@ -1368,6 +1468,8 @@ Like the \"step\" command as long as subroutine calls do not happen;\n\
|
||||
when they do, the call is treated as one instruction.\n\
|
||||
Argument N means do this N times (or till program stops for another reason).");
|
||||
add_com_alias ("n", "next", class_run, 1);
|
||||
if (xdb_commands)
|
||||
add_com_alias("S", "next", class_run, 1);
|
||||
|
||||
add_com ("step", class_run, step_command,
|
||||
"Step program until it reaches a different source line.\n\
|
||||
@@ -1385,6 +1487,16 @@ Execution will also stop upon exit from the current stack frame.");
|
||||
Give as argument either LINENUM or *ADDR, where ADDR is an expression\n\
|
||||
for an address to start at.");
|
||||
|
||||
add_com ("go", class_run, go_command,
|
||||
"Usage: go <location>\n\
|
||||
Continue program being debugged, stopping at specified line or \n\
|
||||
address.\n\
|
||||
Give as argument either LINENUM or *ADDR, where ADDR is an \n\
|
||||
expression for an address to start at.\n\
|
||||
This command is a combination of tbreak and jump.");
|
||||
if (xdb_commands)
|
||||
add_com_alias("g", "g", class_run, 1);
|
||||
|
||||
add_com ("continue", class_run, continue_command,
|
||||
"Continue program being debugged, after signal or breakpoint.\n\
|
||||
If proceeding from breakpoint, a number N may be used as an argument,\n\
|
||||
@@ -1401,11 +1513,18 @@ With no arguments, uses arguments last specified (with \"run\" or \"set args\").
|
||||
To cancel previous arguments and run with no arguments,\n\
|
||||
use \"set args\" without arguments.");
|
||||
add_com_alias ("r", "run", class_run, 1);
|
||||
if (xdb_commands)
|
||||
add_com ("R", class_run, run_no_args_command,
|
||||
"Start debugged program with no arguments.");
|
||||
|
||||
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.");
|
||||
|
||||
if (xdb_commands)
|
||||
add_com("lr", class_info, 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.");
|
||||
|
||||
Reference in New Issue
Block a user