This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[2/3] Remove gdbarch-swapping of stop_registers
- From: "Ulrich Weigand" <uweigand at de dot ibm dot com>
- To: gdb-patches at sourceware dot org
- Date: Sat, 9 Jun 2007 01:23:00 +0200 (CEST)
- Subject: [2/3] Remove gdbarch-swapping of stop_registers
Hello,
the final remaining gdbarch-swapped data variable is stop_registers
in infrun.c. However, that variable is actually short-lived: the
register values get set in normal_stop, and are used immediately
afterwards by call_function_by_hand or finish_command.
Thus there is no need to keep this regcache continually allocated,
and have it gdbarch-swapped. This patch changes normal_stop to
*allocate* a regcache on the fly (which gets deallocated on the
next clear_proceed_status call).
Bye,
Ulrich
ChangeLog:
* infrun.c (clear_proceed_status): Clean up stop_registers.
(normal_stop): Allocate regcache for stop_registers.
(struct inferior_status): Remove stop_registers member.
(save_inferior_status): Do not save stop_registers.
(restore_inferior_status): Do not restore stop_registers.
(discard_inferior_status): Do not discard stop_registers.
(build_infrun): Remove.
(_initialize_infrun): Do not swap stop_registers.
diff -urNp gdb-orig/gdb/infrun.c gdb-head/gdb/infrun.c
--- gdb-orig/gdb/infrun.c 2007-06-07 22:47:27.000000000 +0200
+++ gdb-head/gdb/infrun.c 2007-06-08 20:35:30.259087651 +0200
@@ -631,6 +631,12 @@ clear_proceed_status (void)
proceed_to_finish = 0;
breakpoint_proceeded = 1; /* We're about to proceed... */
+ if (stop_registers)
+ {
+ regcache_xfree (stop_registers);
+ stop_registers = NULL;
+ }
+
/* Discard any remaining commands or status from previous stop. */
bpstat_clear (&stop_bpstat);
}
@@ -3207,9 +3213,15 @@ Further execution is probably impossible
/* Save the function value return registers, if we care.
We might be about to restore their previous contents. */
if (proceed_to_finish)
- /* NB: The copy goes through to the target picking up the value of
- all the registers. */
- regcache_cpy (stop_registers, current_regcache);
+ {
+ /* This should not be necessary. */
+ if (stop_registers)
+ regcache_xfree (stop_registers);
+
+ /* NB: The copy goes through to the target picking up the value of
+ all the registers. */
+ stop_registers = regcache_dup (current_regcache);
+ }
if (stop_stack_dummy)
{
@@ -3608,7 +3620,6 @@ struct inferior_status
CORE_ADDR step_resume_break_address;
int stop_after_trap;
int stop_soon;
- struct regcache *stop_registers;
/* These are here because if call_function_by_hand has written some
registers and then decides to call error(), we better not have changed
@@ -3664,8 +3675,6 @@ save_inferior_status (int restore_stack_
inf_status->restore_stack_info = restore_stack_info;
inf_status->proceed_to_finish = proceed_to_finish;
- inf_status->stop_registers = regcache_dup_no_passthrough (stop_registers);
-
inf_status->registers = regcache_dup (current_regcache);
inf_status->selected_frame_id = get_frame_id (get_selected_frame (NULL));
@@ -3713,10 +3722,6 @@ restore_inferior_status (struct inferior
breakpoint_proceeded = inf_status->breakpoint_proceeded;
proceed_to_finish = inf_status->proceed_to_finish;
- /* FIXME: Is the restore of stop_registers always needed. */
- regcache_xfree (stop_registers);
- stop_registers = inf_status->stop_registers;
-
/* The inferior can be gone if the user types "print exit(0)"
(and perhaps other times). */
if (target_has_execution)
@@ -3767,7 +3772,6 @@ discard_inferior_status (struct inferior
/* See save_inferior_status for info on stop_bpstat. */
bpstat_clear (&inf_status->stop_bpstat);
regcache_xfree (inf_status->registers);
- regcache_xfree (inf_status->stop_registers);
xfree (inf_status);
}
@@ -3910,12 +3914,6 @@ save_inferior_ptid (void)
}
-static void
-build_infrun (void)
-{
- stop_registers = regcache_xmalloc (current_gdbarch);
-}
-
void
_initialize_infrun (void)
{
@@ -3923,9 +3921,6 @@ _initialize_infrun (void)
int numsigs;
struct cmd_list_element *c;
- DEPRECATED_REGISTER_GDBARCH_SWAP (stop_registers);
- deprecated_register_gdbarch_swap (NULL, 0, build_infrun);
-
add_info ("signals", signals_info, _("\
What debugger does when program gets various signals.\n\
Specify a signal as argument to print info on that signal only."));
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com