X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Finfcmd.c;h=ce49777d1f12f7c3a47cd818d342f32dbee2ec90;hb=0b333c5e7d6c3fc65d37ffa11bd21ba52c4adb25;hp=9a1fb8d71307b698c56a525eb1267a38e833d978;hpb=743649fd80776de922475362bf3ac8b44511bb24;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 9a1fb8d713..ce49777d1f 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -54,14 +54,12 @@ #include "continuations.h" #include "linespec.h" #include "cli/cli-utils.h" +#include "infcall.h" /* Local functions: */ static void nofp_registers_info (char *, int); -static void print_return_value (struct value *function, - struct type *value_type); - static void until_next_command (int); static void until_command (char *, int); @@ -100,10 +98,6 @@ static void step_command (char *, int); static void run_command (char *, int); -static void run_no_args_command (char *args, int from_tty); - -static void go_command (char *line_no, int from_tty); - void _initialize_infcmd (void); #define ERROR_NO_INFERIOR \ @@ -411,7 +405,6 @@ strip_bg_char (const char *args, int *bg_char_p) void post_create_inferior (struct target_ops *target, int from_tty) { - volatile struct gdb_exception ex; /* Be sure we own the terminal in case write operations are performed. */ target_terminal_ours (); @@ -426,12 +419,16 @@ post_create_inferior (struct target_ops *target, int from_tty) if the PC is unavailable (e.g., we're opening a core file with missing registers info), ignore it. */ stop_pc = 0; - TRY_CATCH (ex, RETURN_MASK_ERROR) + TRY { stop_pc = regcache_read_pc (get_current_regcache ()); } - if (ex.reason < 0 && ex.error != NOT_AVAILABLE_ERROR) - throw_exception (ex); + CATCH (ex, RETURN_MASK_ERROR) + { + if (ex.error != NOT_AVAILABLE_ERROR) + throw_exception (ex); + } + END_CATCH if (exec_bfd) { @@ -507,13 +504,12 @@ prepare_execution_command (struct target_ops *target, int background) if (background && !target->to_can_async_p (target)) error (_("Asynchronous execution not supported on this target.")); - /* If we don't get a request of running in the bg, then we need - to simulate synchronous (fg) execution. */ - if (!background && target->to_can_async_p (target)) + if (!background) { - /* Simulate synchronous execution. Note no cleanup is necessary - for this. stdin is re-enabled whenever an error reaches the - top level. */ + /* If we get a request for running in the fg, then we need to + simulate synchronous (fg) execution. Note no cleanup is + necessary for this. stdin is re-enabled whenever an error + reaches the top level. */ async_disable_stdin (); } } @@ -631,7 +627,7 @@ run_command_1 (char *args, int from_tty, int tbreak_at_main) /* Start the target running. Do not use -1 continuation as it would skip breakpoint right at the entry point. */ - proceed (regcache_read_pc (get_current_regcache ()), GDB_SIGNAL_0, 0); + proceed (regcache_read_pc (get_current_regcache ()), GDB_SIGNAL_0); /* Since there was no error, there's no need to finish the thread states here. */ @@ -644,13 +640,6 @@ run_command (char *args, int from_tty) run_command_1 (args, from_tty, 0); } -static void -run_no_args_command (char *args, int from_tty) -{ - set_inferior_args (""); -} - - /* Start the execution of the program up until the beginning of the main program. */ @@ -684,7 +673,7 @@ proceed_thread_callback (struct thread_info *thread, void *arg) switch_to_thread (thread->ptid); clear_proceed_status (0); - proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0); + proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT); return 0; } @@ -768,7 +757,7 @@ continue_1 (int all_threads) ensure_valid_thread (); ensure_not_running (); clear_proceed_status (0); - proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0); + proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT); } } @@ -791,7 +780,7 @@ continue_command (char *args, int from_tty) if (args != NULL) { - if (strncmp (args, "-a", sizeof ("-a") - 1) == 0) + if (startswith (args, "-a")) { all_threads = 1; args += sizeof ("-a") - 1; @@ -864,9 +853,14 @@ static void set_step_frame (void) { struct symtab_and_line sal; + CORE_ADDR pc; + struct frame_info *frame = get_current_frame (); + struct thread_info *tp = inferior_thread (); - find_frame_sal (get_current_frame (), &sal); - set_step_info (get_current_frame (), sal); + find_frame_sal (frame, &sal); + set_step_info (frame, sal); + pc = get_frame_pc (frame); + tp->control.step_start_function = find_pc_function (pc); } /* Step until outside of current statement. */ @@ -942,44 +936,15 @@ step_1 (int skip_subroutines, int single_inst, char *count_string) make_cleanup (delete_longjmp_breakpoint_cleanup, &thread); } - /* In synchronous case, all is well; each step_once call will step once. */ - if (!target_can_async_p ()) - { - for (; count > 0; count--) - { - step_once (skip_subroutines, single_inst, count, thread); - - if (!target_has_execution) - break; - else - { - struct thread_info *tp = inferior_thread (); - - if (!tp->control.stop_step || !tp->step_multi) - { - /* If we stopped for some reason that is not stepping - there are no further steps to make. */ - tp->step_multi = 0; - break; - } - } - } + /* Do only one step for now, before returning control to the event + loop. Let the continuation figure out how many other steps we + need to do, and handle them one at the time, through + step_once. */ + step_once (skip_subroutines, single_inst, count, thread); - do_cleanups (cleanups); - } - else - { - /* In the case of an asynchronous target things get complicated; - do only one step for now, before returning control to the - event loop. Let the continuation figure out how many other - steps we need to do, and handle them one at the time, through - step_once. */ - step_once (skip_subroutines, single_inst, count, thread); - - /* We are running, and the continuation is installed. It will - disable the longjmp breakpoint as appropriate. */ - discard_cleanups (cleanups); - } + /* We are running, and the continuation is installed. It will + disable the longjmp breakpoint as appropriate. */ + discard_cleanups (cleanups); } struct step_1_continuation_args @@ -1038,13 +1003,14 @@ step_once (int skip_subroutines, int single_inst, int count, int thread) if (count > 0) { + struct step_1_continuation_args *args; /* Don't assume THREAD is a valid thread id. It is set to -1 if the longjmp breakpoint was not required. Use the INFERIOR_PTID thread instead, which is the same thread when THREAD is set. */ struct thread_info *tp = inferior_thread (); - clear_proceed_status (!skip_subroutines); + clear_proceed_status (1); set_step_frame (); if (!single_inst) @@ -1118,23 +1084,18 @@ step_once (int skip_subroutines, int single_inst, int count, int thread) tp->control.step_over_calls = STEP_OVER_ALL; tp->step_multi = (count > 1); - proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 1); - - /* For async targets, register a continuation to do any - additional steps. For sync targets, the caller will handle - further stepping. */ - if (target_can_async_p ()) - { - struct step_1_continuation_args *args; + tp->control.stepping_command = 1; + proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT); - args = xmalloc (sizeof (*args)); - args->skip_subroutines = skip_subroutines; - args->single_inst = single_inst; - args->count = count; - args->thread = thread; + /* Register a continuation to do any additional steps. */ + args = XNEW (struct step_1_continuation_args); + args = xmalloc (sizeof (*args)); + args->skip_subroutines = skip_subroutines; + args->single_inst = single_inst; + args->count = count; + args->thread = thread; - add_intermediate_continuation (tp, step_1_continuation, args, xfree); - } + add_intermediate_continuation (tp, step_1_continuation, args, xfree); } } @@ -1225,25 +1186,9 @@ jump_command (char *arg, int from_tty) } clear_proceed_status (0); - proceed (addr, GDB_SIGNAL_0, 0); + proceed (addr, GDB_SIGNAL_0); } - -/* Go to line or address in current procedure. */ - -static void -go_command (char *line_no, int from_tty) -{ - if (line_no == (char *) NULL || !*line_no) - printf_filtered (_("Usage: go \n")); - else - { - tbreak_command (line_no, from_tty); - jump_command (line_no, from_tty); - } -} - - /* Continue program giving it specified signal. */ static void @@ -1284,6 +1229,8 @@ signal_command (char *signum_exp, int from_tty) oursig = gdb_signal_from_command (num); } + do_cleanups (args_chain); + /* Look for threads other than the current that this command ends up resuming too (due to schedlock off), and warn if they'll get a signal delivered. "signal 0" is used to suppress a previous @@ -1338,7 +1285,7 @@ signal_command (char *signum_exp, int from_tty) } clear_proceed_status (0); - proceed ((CORE_ADDR) -1, oursig, 0); + proceed ((CORE_ADDR) -1, oursig); } /* Queue a signal to be delivered to the current thread. */ @@ -1458,9 +1405,9 @@ until_next_command (int from_tty) set_longjmp_breakpoint (tp, get_frame_id (frame)); old_chain = make_cleanup (delete_longjmp_breakpoint_cleanup, &thread); - proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 1); + proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT); - if (target_can_async_p () && is_running (inferior_ptid)) + if (is_running (inferior_ptid)) { struct until_next_continuation_args *cont_args; @@ -1527,18 +1474,22 @@ advance_command (char *arg, int from_tty) } /* Return the value of the result of a function at the end of a 'finish' - command/BP. */ + command/BP. DTOR_DATA (if not NULL) can represent inferior registers + right after an inferior call has finished. */ struct value * -get_return_value (struct value *function, struct type *value_type) +get_return_value (struct value *function, struct type *value_type, + struct dummy_frame_context_saver *ctx_saver) { - struct regcache *stop_regs = stop_registers; + struct regcache *stop_regs = NULL; struct gdbarch *gdbarch; struct value *value; struct cleanup *cleanup = make_cleanup (null_cleanup, NULL); - /* If stop_registers were not saved, use the current registers. */ - if (!stop_regs) + /* If registers were not saved, use the current registers. */ + if (ctx_saver != NULL) + stop_regs = dummy_frame_context_saver_get_regs (ctx_saver); + else { stop_regs = regcache_dup (get_current_regcache ()); make_cleanup_regcache_xfree (stop_regs); @@ -1546,7 +1497,7 @@ get_return_value (struct value *function, struct type *value_type) gdbarch = get_regcache_arch (stop_regs); - CHECK_TYPEDEF (value_type); + value_type = check_typedef (value_type); gdb_assert (TYPE_CODE (value_type) != TYPE_CODE_VOID); /* FIXME: 2003-09-27: When returning from a nested inferior function @@ -1578,12 +1529,15 @@ get_return_value (struct value *function, struct type *value_type) return value; } -/* Print the result of a function at the end of a 'finish' command. */ +/* Print the result of a function at the end of a 'finish' command. + DTOR_DATA (if not NULL) can represent inferior registers right after + an inferior call has finished. */ static void -print_return_value (struct value *function, struct type *value_type) +print_return_value (struct value *function, struct type *value_type, + struct dummy_frame_context_saver *ctx_saver) { - struct value *value = get_return_value (function, value_type); + struct value *value = get_return_value (function, value_type, ctx_saver); struct ui_out *uiout = current_uiout; if (value) @@ -1607,10 +1561,16 @@ print_return_value (struct value *function, struct type *value_type) } else { + struct cleanup *oldchain; + char *type_name; + + type_name = type_to_string (value_type); + oldchain = make_cleanup (xfree, type_name); ui_out_text (uiout, "Value returned has type: "); - ui_out_field_string (uiout, "return-type", TYPE_NAME (value_type)); + ui_out_field_string (uiout, "return-type", type_name); ui_out_text (uiout, "."); ui_out_text (uiout, " Cannot determine contents\n"); + do_cleanups (oldchain); } } @@ -1628,6 +1588,11 @@ struct finish_command_continuation_args int thread; struct breakpoint *breakpoint; struct symbol *function; + + /* Inferior registers stored right before dummy_frame has been freed + after an inferior call. It can be NULL if no inferior call was + involved, GDB will then use current inferior registers. */ + struct dummy_frame_context_saver *ctx_saver; }; static void @@ -1660,19 +1625,21 @@ finish_command_continuation (void *arg, int err) if (TYPE_CODE (value_type) != TYPE_CODE_VOID) { - volatile struct gdb_exception ex; struct value *func; - func = read_var_value (a->function, get_current_frame ()); - TRY_CATCH (ex, RETURN_MASK_ALL) + func = read_var_value (a->function, NULL, get_current_frame ()); + TRY { /* print_return_value can throw an exception in some circumstances. We need to catch this so that we still delete the breakpoint. */ - print_return_value (func, value_type); + print_return_value (func, value_type, a->ctx_saver); + } + CATCH (ex, RETURN_MASK_ALL) + { + exception_print (gdb_stdout, ex); } - if (ex.reason < 0) - exception_print (gdb_stdout, ex); + END_CATCH } } @@ -1690,7 +1657,11 @@ finish_command_continuation (void *arg, int err) static void finish_command_continuation_free_arg (void *arg) { - xfree (arg); + struct finish_command_continuation_args *cargs = arg; + + if (cargs->ctx_saver != NULL) + dummy_frame_context_saver_drop (cargs->ctx_saver); + xfree (cargs); } /* finish_backward -- helper function for finish_command. */ @@ -1734,14 +1705,14 @@ finish_backward (struct symbol *function) insert_step_resume_breakpoint_at_sal (gdbarch, sr_sal, null_frame_id); - proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0); + proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT); } else { /* We're almost there -- we just need to back up by one more single-step. */ tp->control.step_range_start = tp->control.step_range_end = 1; - proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 1); + proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT); } } @@ -1755,13 +1726,21 @@ finish_forward (struct symbol *function, struct frame_info *frame) struct symtab_and_line sal; struct thread_info *tp = inferior_thread (); struct breakpoint *breakpoint; - struct cleanup *old_chain; + struct cleanup *old_chain = make_cleanup (null_cleanup, NULL); struct finish_command_continuation_args *cargs; int thread = tp->num; + struct dummy_frame_context_saver *saver = NULL; sal = find_pc_line (get_frame_pc (frame), 0); sal.pc = get_frame_pc (frame); + if (get_frame_type (frame) == DUMMY_FRAME) + { + saver = dummy_frame_context_saver_setup (get_stack_frame_id (frame), + inferior_ptid); + make_cleanup (dummy_frame_context_saver_cleanup, saver); + } + breakpoint = set_momentary_breakpoint (gdbarch, sal, get_stack_frame_id (frame), bp_finish); @@ -1769,25 +1748,24 @@ finish_forward (struct symbol *function, struct frame_info *frame) /* set_momentary_breakpoint invalidates FRAME. */ frame = NULL; - old_chain = make_cleanup_delete_breakpoint (breakpoint); + make_cleanup_delete_breakpoint (breakpoint); set_longjmp_breakpoint (tp, frame_id); make_cleanup (delete_longjmp_breakpoint_cleanup, &thread); - /* We want stop_registers, please... */ + /* We want to print return value, please... */ tp->control.proceed_to_finish = 1; - cargs = xmalloc (sizeof (*cargs)); + cargs = XNEW (struct finish_command_continuation_args); cargs->thread = thread; cargs->breakpoint = breakpoint; cargs->function = function; + cargs->ctx_saver = saver; add_continuation (tp, finish_command_continuation, cargs, finish_command_continuation_free_arg); - proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0); + proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT); discard_cleanups (old_chain); - if (!target_can_async_p ()) - do_all_continuations (0); } /* "finish": Set a temporary breakpoint at the place the selected @@ -1852,7 +1830,7 @@ finish_command (char *arg, int from_tty) print_stack_frame (get_selected_frame (NULL), 1, LOCATION, 0); } - proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 1); + proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT); return; } @@ -2442,7 +2420,7 @@ proceed_after_attach_callback (struct thread_info *thread, { switch_to_thread (thread->ptid); clear_proceed_status (0); - proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0); + proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT); } return 0; @@ -2472,8 +2450,6 @@ proceed_after_attach (int pid) static void attach_command_post_wait (char *args, int from_tty, int async_exec) { - char *exec_file; - char *full_exec_path = NULL; struct inferior *inferior; inferior = current_inferior (); @@ -2481,27 +2457,8 @@ attach_command_post_wait (char *args, int from_tty, int async_exec) /* 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 (ptid_get_pid (inferior_ptid)); - 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 = xstrdup (exec_file); - - exec_file_attach (full_exec_path, from_tty); - symbol_file_add_main (full_exec_path, from_tty); - } - } + if (get_exec_file (0) == NULL) + exec_file_locate_attach (ptid_get_pid (inferior_ptid), from_tty); else { reopen_exec_file (); @@ -2529,7 +2486,7 @@ attach_command_post_wait (char *args, int from_tty, int async_exec) if (inferior_thread ()->suspend.stop_signal == GDB_SIGNAL_0) { clear_proceed_status (0); - proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0); + proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT); } } } @@ -2538,8 +2495,7 @@ attach_command_post_wait (char *args, int from_tty, int async_exec) /* The user requested a plain `attach', so be sure to leave the inferior stopped. */ - if (target_can_async_p ()) - async_enable_stdin (); + async_enable_stdin (); /* At least the current thread is already stopped. */ @@ -2548,7 +2504,7 @@ attach_command_post_wait (char *args, int from_tty, int async_exec) selected thread is stopped, others may still be executing. Be sure to explicitly stop all threads of the process. This should have no effect on already stopped threads. */ - if (non_stop) + if (target_is_non_stop_p ()) target_stop (pid_to_ptid (inferior->pid)); /* Tell the user/frontend where we're stopped. */ @@ -2625,9 +2581,6 @@ attach_command (char *args, int from_tty) shouldn't refer to attach_target again. */ attach_target = NULL; - /* Done with ARGS. */ - do_cleanups (args_chain); - /* Set up the "saved terminal modes" of the inferior based on what modes we are starting it with. */ target_terminal_init (); @@ -2653,7 +2606,7 @@ attach_command (char *args, int from_tty) init_wait_for_inferior (); clear_proceed_status (0); - if (non_stop) + if (target_is_non_stop_p ()) { /* If we find that the current thread isn't stopped, explicitly do so now, because we're going to install breakpoints and @@ -2672,6 +2625,7 @@ attach_command (char *args, int from_tty) E.g. Mach 3 or GNU hurd. */ if (!target_attach_no_wait) { + struct attach_command_continuation_args *a; struct inferior *inferior = current_inferior (); /* Careful here. See comments in inferior.h. Basically some @@ -2681,23 +2635,24 @@ attach_command (char *args, int from_tty) STOP_QUIETLY_NO_SIGSTOP is for. */ inferior->control.stop_soon = STOP_QUIETLY_NO_SIGSTOP; - if (target_can_async_p ()) - { - /* sync_execution mode. Wait for stop. */ - struct attach_command_continuation_args *a; - - a = xmalloc (sizeof (*a)); - a->args = xstrdup (args); - a->from_tty = from_tty; - a->async_exec = async_exec; - add_inferior_continuation (attach_command_continuation, a, - attach_command_continuation_free_args); - return; - } - - wait_for_inferior (); + /* sync_execution mode. Wait for stop. */ + a = XNEW (struct attach_command_continuation_args); + a->args = xstrdup (args); + a->from_tty = from_tty; + a->async_exec = async_exec; + add_inferior_continuation (attach_command_continuation, a, + attach_command_continuation_free_args); + /* Done with ARGS. */ + do_cleanups (args_chain); + + if (!target_is_async_p ()) + mark_infrun_async_event_handler (); + return; } + /* Done with ARGS. */ + do_cleanups (args_chain); + attach_command_post_wait (args, from_tty, async_exec); } @@ -2733,6 +2688,7 @@ notice_new_inferior (ptid_t ptid, int leave_running, int from_tty) if (is_executing (inferior_ptid)) { + struct attach_command_continuation_args *a; struct inferior *inferior = current_inferior (); /* We're going to install breakpoints, and poke at memory, @@ -2743,22 +2699,15 @@ notice_new_inferior (ptid_t ptid, int leave_running, int from_tty) inferior->control.stop_soon = STOP_QUIETLY_REMOTE; /* Wait for stop before proceeding. */ - if (target_can_async_p ()) - { - struct attach_command_continuation_args *a; - - a = xmalloc (sizeof (*a)); - a->args = xstrdup (""); - a->from_tty = from_tty; - a->async_exec = async_exec; - add_inferior_continuation (attach_command_continuation, a, - attach_command_continuation_free_args); + a = XNEW (struct attach_command_continuation_args); + a->args = xstrdup (""); + a->from_tty = from_tty; + a->async_exec = async_exec; + add_inferior_continuation (attach_command_continuation, a, + attach_command_continuation_free_args); - do_cleanups (old_chain); - return; - } - else - wait_for_inferior (); + do_cleanups (old_chain); + return; } async_exec = leave_running; @@ -2836,7 +2785,7 @@ interrupt_target_1 (int all_threads) ptid = minus_one_ptid; else ptid = inferior_ptid; - target_stop (ptid); + target_interrupt (ptid); /* Tag the thread as having been explicitly requested to stop, so other parts of gdb know not to resume this thread automatically, @@ -2864,7 +2813,7 @@ interrupt_command (char *args, int from_tty) dont_repeat (); /* Not for the faint of heart. */ if (args != NULL - && strncmp (args, "-a", sizeof ("-a") - 1) == 0) + && startswith (args, "-a")) all_threads = 1; if (!non_stop && all_threads) @@ -3156,8 +3105,6 @@ Unlike \"step\", if the current source line calls a subroutine,\n\ this command does not enter the subroutine, but instead steps over\n\ the call, in effect treating it as a single source line.")); 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\ @@ -3187,21 +3134,6 @@ for an address to start at.")); set_cmd_completer (c, location_completer); add_com_alias ("j", "jump", class_run, 1); - if (xdb_commands) - { - c = add_com ("go", class_run, go_command, _("\ -Usage: go \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.")); - set_cmd_completer (c, location_completer); - } - - if (xdb_commands) - add_com_alias ("g", "go", class_run, 1); - add_com ("continue", class_run, continue_command, _("\ Continue program being debugged, after signal or breakpoint.\n\ Usage: continue [N]\n\ @@ -3227,9 +3159,6 @@ To cancel previous arguments and run with no arguments,\n\ use \"set args\" without arguments.")); set_cmd_completer (c, filename_completer); 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.")); c = add_com ("start", class_run, start_command, _("\ Run the debugged program until the beginning of the main procedure.\n\ @@ -3249,14 +3178,6 @@ Register name as argument means describe only that register.")); add_info_alias ("r", "registers", 1); set_cmd_completer (c, reg_or_group_completer); - if (xdb_commands) - { - c = 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.")); - set_cmd_completer (c, reg_or_group_completer); - } - c = 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."));