From a4d5f2e026acb7ad8bc82b3fa659edb60b51b100 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Mon, 24 May 2004 23:48:25 +0000 Subject: [PATCH] * infcmd.c (kill_if_already_running): New function, extracted from run_command(). (run_command): Replace extracted code by call to kill_if_already_running(). (start_command): New function. (_initialize_infcmd): Add "start" command. --- gdb/ChangeLog | 9 +++++++++ gdb/infcmd.c | 52 +++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 022b359a2f..d04cd66661 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2004-05-24 Joel Brobecker + + * infcmd.c (kill_if_already_running): New function, extracted + from run_command(). + (run_command): Replace extracted code by call to + kill_if_already_running(). + (start_command): New function. + (_initialize_infcmd): Add "start" command. + 2004-05-24 Mark Kettenis Add OpenBSD/m88k support. diff --git a/gdb/infcmd.c b/gdb/infcmd.c index a1a8ac304f..d1a4af1af1 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -375,13 +375,14 @@ tty_command (char *file, int from_tty) inferior_io_terminal = savestring (file, strlen (file)); } -static void -run_command (char *args, int from_tty) -{ - char *exec_file; - - dont_repeat (); +/* Kill the inferior if already running. This function is designed + to be called when we are about to start the execution of the program + from the beginning. Ask the user to confirm that he wants to restart + the program being debugged when FROM_TTY is non-null. */ +void +kill_if_already_running (int from_tty) +{ if (! ptid_equal (inferior_ptid, null_ptid) && target_has_execution) { if (from_tty @@ -394,7 +395,16 @@ Start it from the beginning? ")) #endif init_wait_for_inferior (); } +} + +static void +run_command (char *args, int from_tty) +{ + char *exec_file; + dont_repeat (); + + kill_if_already_running (from_tty); clear_breakpoint_hit_counts (); /* Purge old solib objfiles. */ @@ -481,6 +491,29 @@ run_no_args_command (char *args, int from_tty) } +/* Start the execution of the program up until the beginning of the main + program. */ + +static void +start_command (char *args, int from_tty) +{ + /* Some languages such as Ada need to search inside the program + minimal symbols for the location where to put the temporary + breakpoint before starting. */ + if (!have_minimal_symbols ()) + error ("No symbol table loaded. Use the \"file\" command."); + + /* If the inferior is already running, we want to ask the user if we + should restart it or not before we insert the temporary breakpoint. + This makes sure that this command doesn't have any side effect if + the user changes its mind. */ + kill_if_already_running (from_tty); + + /* Insert the temporary breakpoint, and run... */ + tbreak_command (main_name (), 0); + run_command (args, from_tty); +} + void continue_command (char *proc_count_exp, int from_tty) { @@ -2144,6 +2177,13 @@ use \"set args\" without arguments."); add_com ("R", class_run, run_no_args_command, "Start debugged program with no arguments."); + c = add_com ("start", class_run, start_command, + "\ +Run the debugged program until the beginning of the main procedure.\n\ +You may specify arguments to give to your program, just as with the\n\ +\"run\" command."); + set_cmd_completer (c, filename_completer); + add_com ("interrupt", class_run, interrupt_target_command, "Interrupt the execution of the debugged program."); -- 2.34.1