2007-11-02 Markus Deuling <deuling@de.ibm.com>

* frame.c (frame_id_inner): Add gdbarch parameter. Replace
	current_gdbarch by gdbarch.
	(frame_find_by_id, get_prev_frame_1): Use get_frame_arch to get at the
	current architecture by frame_info.
	* frame.h (frame_id_inner): Add gdbarch parameter.
	* stack.c (return_command): Use get_frame_arch to get at the current
	architecture by frame_info. Update call of frame_id_inner.
	* infrun.c (handle_inferior_event): Likewise.
	* dummy-frame.c (dummy_frame_push):  Use get_regcache_arch to get at the
	current architecture by regcache. Update call of frame_id_inner.
This commit is contained in:
Ulrich Weigand 2007-11-02 14:47:28 +00:00
parent d93859e2e8
commit 09a7aba80a
6 changed files with 29 additions and 9 deletions

View File

@ -1,3 +1,16 @@
2007-11-02 Markus Deuling <deuling@de.ibm.com>
* frame.c (frame_id_inner): Add gdbarch parameter. Replace
current_gdbarch by gdbarch.
(frame_find_by_id, get_prev_frame_1): Use get_frame_arch to get at the
current architecture by frame_info.
* frame.h (frame_id_inner): Add gdbarch parameter.
* stack.c (return_command): Use get_frame_arch to get at the current
architecture by frame_info. Update call of frame_id_inner.
* infrun.c (handle_inferior_event): Likewise.
* dummy-frame.c (dummy_frame_push): Use get_regcache_arch to get at the
current architecture by regcache. Update call of frame_id_inner.
2007-11-02 Markus Deuling <deuling@de.ibm.com> 2007-11-02 Markus Deuling <deuling@de.ibm.com>
* gdbarch.sh (register_name): Add gdbarch parameter. * gdbarch.sh (register_name): Add gdbarch parameter.

View File

@ -87,6 +87,7 @@ void
dummy_frame_push (struct regcache *caller_regcache, dummy_frame_push (struct regcache *caller_regcache,
const struct frame_id *dummy_id) const struct frame_id *dummy_id)
{ {
struct gdbarch *gdbarch = get_regcache_arch (caller_regcache);
struct dummy_frame *dummy_frame; struct dummy_frame *dummy_frame;
/* Check to see if there are stale dummy frames, perhaps left over /* Check to see if there are stale dummy frames, perhaps left over
@ -95,7 +96,7 @@ dummy_frame_push (struct regcache *caller_regcache,
dummy_frame = dummy_frame_stack; dummy_frame = dummy_frame_stack;
while (dummy_frame) while (dummy_frame)
/* FIXME: cagney/2004-08-02: Should just test IDs. */ /* FIXME: cagney/2004-08-02: Should just test IDs. */
if (frame_id_inner (dummy_frame->id, (*dummy_id))) if (frame_id_inner (gdbarch, dummy_frame->id, (*dummy_id)))
/* Stale -- destroy! */ /* Stale -- destroy! */
{ {
dummy_frame_stack = dummy_frame->next; dummy_frame_stack = dummy_frame->next;

View File

@ -369,7 +369,7 @@ frame_id_eq (struct frame_id l, struct frame_id r)
} }
int int
frame_id_inner (struct frame_id l, struct frame_id r) frame_id_inner (struct gdbarch *gdbarch, struct frame_id l, struct frame_id r)
{ {
int inner; int inner;
if (!l.stack_addr_p || !r.stack_addr_p) if (!l.stack_addr_p || !r.stack_addr_p)
@ -380,7 +380,7 @@ frame_id_inner (struct frame_id l, struct frame_id r)
comment in "frame.h", there is some fuzz here. Frameless comment in "frame.h", there is some fuzz here. Frameless
functions are not strictly inner than (same .stack but functions are not strictly inner than (same .stack but
different .code and/or .special address). */ different .code and/or .special address). */
inner = gdbarch_inner_than (current_gdbarch, l.stack_addr, r.stack_addr); inner = gdbarch_inner_than (gdbarch, l.stack_addr, r.stack_addr);
if (frame_debug) if (frame_debug)
{ {
fprintf_unfiltered (gdb_stdlog, "{ frame_id_inner (l="); fprintf_unfiltered (gdb_stdlog, "{ frame_id_inner (l=");
@ -410,7 +410,7 @@ frame_find_by_id (struct frame_id id)
if (frame_id_eq (id, this)) if (frame_id_eq (id, this))
/* An exact match. */ /* An exact match. */
return frame; return frame;
if (frame_id_inner (id, this)) if (frame_id_inner (get_frame_arch (frame), id, this))
/* Gone to far. */ /* Gone to far. */
return NULL; return NULL;
/* Either we're not yet gone far enough out along the frame /* Either we're not yet gone far enough out along the frame
@ -1175,7 +1175,8 @@ get_prev_frame_1 (struct frame_info *this_frame)
go backwards) and sentinel frames (the test is meaningless). */ go backwards) and sentinel frames (the test is meaningless). */
if (this_frame->next->level >= 0 if (this_frame->next->level >= 0
&& this_frame->next->unwind->type != SIGTRAMP_FRAME && this_frame->next->unwind->type != SIGTRAMP_FRAME
&& frame_id_inner (this_id, get_frame_id (this_frame->next))) && frame_id_inner (get_frame_arch (this_frame), this_id,
get_frame_id (this_frame->next)))
{ {
if (frame_debug) if (frame_debug)
{ {

View File

@ -175,7 +175,8 @@ extern int frame_id_eq (struct frame_id l, struct frame_id r);
/* Returns non-zero when L is strictly inner-than R (they have /* Returns non-zero when L is strictly inner-than R (they have
different frame .bases). Neither L, nor R can be `null'. See note different frame .bases). Neither L, nor R can be `null'. See note
above about frameless functions. */ above about frameless functions. */
extern int frame_id_inner (struct frame_id l, struct frame_id r); extern int frame_id_inner (struct gdbarch *gdbarch, struct frame_id l,
struct frame_id r);
/* Write the internal representation of a frame ID on the specified /* Write the internal representation of a frame ID on the specified
stream. */ stream. */

View File

@ -2726,8 +2726,10 @@ process_event_stop_test:
function. Fortunately, those days are nearly upon us. */ function. Fortunately, those days are nearly upon us. */
#endif #endif
{ {
struct frame_id current_frame = get_frame_id (get_current_frame ()); struct frame_info *frame = get_current_frame ();
if (!(frame_id_inner (current_frame, step_frame_id))) struct frame_id current_frame = get_frame_id (frame);
if (!(frame_id_inner (get_frame_arch (frame), current_frame,
step_frame_id)))
step_frame_id = current_frame; step_frame_id = current_frame;
} }

View File

@ -1824,7 +1824,9 @@ If you continue, the return value that you specified will be ignored.\n";
struct frame_id selected_id = get_frame_id (get_selected_frame (NULL)); struct frame_id selected_id = get_frame_id (get_selected_frame (NULL));
while (!frame_id_eq (selected_id, get_frame_id (get_current_frame ()))) while (!frame_id_eq (selected_id, get_frame_id (get_current_frame ())))
{ {
if (frame_id_inner (selected_id, get_frame_id (get_current_frame ()))) struct frame_info *frame = get_current_frame ();
if (frame_id_inner (get_frame_arch (frame), selected_id,
get_frame_id (frame)))
/* Caught in the safety net, oops! We've gone way past the /* Caught in the safety net, oops! We've gone way past the
selected frame. */ selected frame. */
error (_("Problem while popping stack frames (corrupt stack?)")); error (_("Problem while popping stack frames (corrupt stack?)"));