Revert frame_unwind_caller_pc / frame_unwind_caller_id.

This commit is contained in:
Daniel Jacobowitz 2008-07-15 23:29:24 +00:00
parent 680b56ce65
commit eb2f4a08ce
10 changed files with 20 additions and 50 deletions

View File

@ -10,21 +10,6 @@
* block.h (block_function): Renamed to ... * block.h (block_function): Renamed to ...
(block_linkage_function): ... this. (block_linkage_function): ... this.
2008-07-15 Daniel Jacobowitz <dan@codesourcery.com>
* frame.c (frame_unwind_id): Renamed to ...
(frame_unwind_caller_id): ... this. All callers updated.
(frame_pc_unwind): Renamed to ...
(frame_unwind_caller_pc): ... this. All callers updated.
* frame.h: Document frame_unwind_caller_WHAT functions.
(frame_unwind_id): Renamed to ...
(frame_unwind_caller_id): ... this.
(frame_pc_unwind): Renamed to ...
(frame_unwind_caller_pc): ... this.
* hppa-tdep.c (hppa_find_unwind_entry_in_block): Correct comment.
* stack.c (parse_frame_specification_1): Do not rely on
frame_unwind_id.
2008-07-15 Daniel Jacobowitz <dan@codesourcery.com> 2008-07-15 Daniel Jacobowitz <dan@codesourcery.com>
* mn10300-tdep.c (set_reg_offsets): Use get_frame_register_unsigned. * mn10300-tdep.c (set_reg_offsets): Use get_frame_register_unsigned.

View File

@ -271,7 +271,7 @@ get_frame_id (struct frame_info *fi)
} }
struct frame_id struct frame_id
frame_unwind_caller_id (struct frame_info *next_frame) frame_unwind_id (struct frame_info *next_frame)
{ {
/* Use prev_frame, and not get_prev_frame. The latter will truncate /* Use prev_frame, and not get_prev_frame. The latter will truncate
the frame chain, leading to this function unintentionally the frame chain, leading to this function unintentionally
@ -422,7 +422,7 @@ frame_find_by_id (struct frame_id id)
} }
CORE_ADDR CORE_ADDR
frame_unwind_caller_pc (struct frame_info *this_frame) frame_pc_unwind (struct frame_info *this_frame)
{ {
if (!this_frame->prev_pc.p) if (!this_frame->prev_pc.p)
{ {
@ -453,7 +453,7 @@ frame_unwind_caller_pc (struct frame_info *this_frame)
this_frame->prev_pc.p = 1; this_frame->prev_pc.p = 1;
if (frame_debug) if (frame_debug)
fprintf_unfiltered (gdb_stdlog, fprintf_unfiltered (gdb_stdlog,
"{ frame_unwind_caller_pc (this_frame=%d) -> 0x%s }\n", "{ frame_pc_unwind (this_frame=%d) -> 0x%s }\n",
this_frame->level, this_frame->level,
paddr_nz (this_frame->prev_pc.value)); paddr_nz (this_frame->prev_pc.value));
} }
@ -1533,7 +1533,7 @@ CORE_ADDR
get_frame_pc (struct frame_info *frame) get_frame_pc (struct frame_info *frame)
{ {
gdb_assert (frame->next != NULL); gdb_assert (frame->next != NULL);
return frame_unwind_caller_pc (frame->next); return frame_pc_unwind (frame->next);
} }
/* Return an address that falls within THIS_FRAME's code block. */ /* Return an address that falls within THIS_FRAME's code block. */

View File

@ -34,11 +34,6 @@
frame_unwind_WHAT...(): Unwind THIS frame's WHAT from the NEXT frame_unwind_WHAT...(): Unwind THIS frame's WHAT from the NEXT
frame. frame.
frame_unwind_caller_WHAT...(): Unwind WHAT for NEXT stack frame's
real caller. Any inlined functions in NEXT's stack frame are
skipped. Use these to ignore any potentially inlined functions,
e.g. inlined into the first instruction of a library trampoline.
put_frame_WHAT...(): Put a value into this frame (unsafe, need to put_frame_WHAT...(): Put a value into this frame (unsafe, need to
invalidate the frame / regcache afterwards) (better name more invalidate the frame / regcache afterwards) (better name more
strongly hinting at its unsafeness) strongly hinting at its unsafeness)
@ -366,7 +361,7 @@ extern CORE_ADDR get_frame_base (struct frame_info *);
instead, since that avoids the bug. */ instead, since that avoids the bug. */
extern struct frame_id get_frame_id (struct frame_info *fi); extern struct frame_id get_frame_id (struct frame_info *fi);
extern struct frame_id frame_unwind_caller_id (struct frame_info *next_frame); extern struct frame_id frame_unwind_id (struct frame_info *next_frame);
/* Assuming that a frame is `normal', return its base-address, or 0 if /* Assuming that a frame is `normal', return its base-address, or 0 if
the information isn't available. NOTE: This address is really only the information isn't available. NOTE: This address is really only
@ -520,7 +515,7 @@ extern const char *frame_map_regnum_to_name (struct frame_info *frame,
calling frame. For GDB, `pc' is the resume address and not a calling frame. For GDB, `pc' is the resume address and not a
specific register. */ specific register. */
extern CORE_ADDR frame_unwind_caller_pc (struct frame_info *frame); extern CORE_ADDR frame_pc_unwind (struct frame_info *frame);
/* Discard the specified frame. Restoring the registers to the state /* Discard the specified frame. Restoring the registers to the state
of the caller. */ of the caller. */

View File

@ -97,7 +97,7 @@ glibc_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
fixup = lookup_minimal_symbol ("fixup", NULL, objfile); fixup = lookup_minimal_symbol ("fixup", NULL, objfile);
if (fixup && SYMBOL_VALUE_ADDRESS (fixup) == pc) if (fixup && SYMBOL_VALUE_ADDRESS (fixup) == pc)
return frame_unwind_caller_pc (get_current_frame ()); return frame_pc_unwind (get_current_frame ());
} }
return 0; return 0;

View File

@ -1794,7 +1794,7 @@ hppa_find_unwind_entry_in_block (struct frame_info *this_frame)
/* FIXME drow/20070101: Calling gdbarch_addr_bits_remove on the /* FIXME drow/20070101: Calling gdbarch_addr_bits_remove on the
result of get_frame_address_in_block implies a problem. result of get_frame_address_in_block implies a problem.
The bits should have been removed earlier, before the return The bits should have been removed earlier, before the return
value of gdbarch_unwind_pc. That might be happening already; value of frame_pc_unwind. That might be happening already;
if it isn't, it should be fixed. Then this call can be if it isn't, it should be fixed. Then this call can be
removed. */ removed. */
pc = gdbarch_addr_bits_remove (get_frame_arch (this_frame), pc); pc = gdbarch_addr_bits_remove (get_frame_arch (this_frame), pc);

View File

@ -3067,8 +3067,7 @@ infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME (!gdbarch_get_longjmp_target)\n");
being equal, so to get into this block, both the current and being equal, so to get into this block, both the current and
previous frame must have valid frame IDs. */ previous frame must have valid frame IDs. */
if (!frame_id_eq (get_frame_id (get_current_frame ()), step_frame_id) if (!frame_id_eq (get_frame_id (get_current_frame ()), step_frame_id)
&& frame_id_eq (frame_unwind_caller_id (get_current_frame ()), && frame_id_eq (frame_unwind_id (get_current_frame ()), step_frame_id))
step_frame_id))
{ {
CORE_ADDR real_stop_pc; CORE_ADDR real_stop_pc;
@ -3221,7 +3220,7 @@ infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME (!gdbarch_get_longjmp_target)\n");
set step-mode) or we no longer know how to get back set step-mode) or we no longer know how to get back
to the call site. */ to the call site. */
if (step_stop_if_no_debug if (step_stop_if_no_debug
|| !frame_id_p (frame_unwind_caller_id (get_current_frame ()))) || !frame_id_p (frame_unwind_id (get_current_frame ())))
{ {
/* If we have no line number and the step-stop-if-no-debug /* If we have no line number and the step-stop-if-no-debug
is set, we stop the step so that the user has a chance to is set, we stop the step so that the user has a chance to
@ -3470,7 +3469,7 @@ insert_step_resume_breakpoint_at_frame (struct frame_info *return_frame)
This is a separate function rather than reusing This is a separate function rather than reusing
insert_step_resume_breakpoint_at_frame in order to avoid insert_step_resume_breakpoint_at_frame in order to avoid
get_prev_frame, which may stop prematurely (see the implementation get_prev_frame, which may stop prematurely (see the implementation
of frame_unwind_caller_id for an example). */ of frame_unwind_id for an example). */
static void static void
insert_step_resume_breakpoint_at_caller (struct frame_info *next_frame) insert_step_resume_breakpoint_at_caller (struct frame_info *next_frame)
@ -3479,16 +3478,15 @@ insert_step_resume_breakpoint_at_caller (struct frame_info *next_frame)
/* We shouldn't have gotten here if we don't know where the call site /* We shouldn't have gotten here if we don't know where the call site
is. */ is. */
gdb_assert (frame_id_p (frame_unwind_caller_id (next_frame))); gdb_assert (frame_id_p (frame_unwind_id (next_frame)));
init_sal (&sr_sal); /* initialize to zeros */ init_sal (&sr_sal); /* initialize to zeros */
sr_sal.pc = gdbarch_addr_bits_remove sr_sal.pc = gdbarch_addr_bits_remove
(current_gdbarch, frame_unwind_caller_pc (next_frame)); (current_gdbarch, frame_pc_unwind (next_frame));
sr_sal.section = find_pc_overlay (sr_sal.pc); sr_sal.section = find_pc_overlay (sr_sal.pc);
insert_step_resume_breakpoint_at_sal (sr_sal, insert_step_resume_breakpoint_at_sal (sr_sal, frame_unwind_id (next_frame));
frame_unwind_caller_id (next_frame));
} }
/* Insert a "longjmp-resume" breakpoint at PC. This is used to set a /* Insert a "longjmp-resume" breakpoint at PC. This is used to set a

View File

@ -701,7 +701,7 @@ mips_linux_skip_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
resolver = lookup_minimal_symbol ("__dl_runtime_resolve", NULL, NULL); resolver = lookup_minimal_symbol ("__dl_runtime_resolve", NULL, NULL);
if (resolver && SYMBOL_VALUE_ADDRESS (resolver) == pc) if (resolver && SYMBOL_VALUE_ADDRESS (resolver) == pc)
return frame_unwind_caller_pc (get_current_frame ()); return frame_pc_unwind (get_current_frame ());
return 0; return 0;
} }

View File

@ -30,7 +30,7 @@ obsd_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
msym = lookup_minimal_symbol("_dl_bind", NULL, NULL); msym = lookup_minimal_symbol("_dl_bind", NULL, NULL);
if (msym && SYMBOL_VALUE_ADDRESS (msym) == pc) if (msym && SYMBOL_VALUE_ADDRESS (msym) == pc)
return frame_unwind_caller_pc (get_current_frame ()); return frame_pc_unwind (get_current_frame ());
else else
return find_solib_trampoline_target (get_current_frame (), pc); return find_solib_trampoline_target (get_current_frame (), pc);
} }

View File

@ -30,7 +30,7 @@ sol2_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
msym = lookup_minimal_symbol("elf_bndr", NULL, NULL); msym = lookup_minimal_symbol("elf_bndr", NULL, NULL);
if (msym && SYMBOL_VALUE_ADDRESS (msym) == pc) if (msym && SYMBOL_VALUE_ADDRESS (msym) == pc)
return frame_unwind_caller_pc (get_current_frame ()); return frame_pc_unwind (get_current_frame ());
return 0; return 0;
} }

View File

@ -855,16 +855,8 @@ parse_frame_specification_1 (const char *frame_exp, const char *message,
{ {
if (frame_id_eq (id, get_frame_id (fid))) if (frame_id_eq (id, get_frame_id (fid)))
{ {
struct frame_info *prev_frame; while (frame_id_eq (id, frame_unwind_id (fid)))
fid = get_prev_frame (fid);
while (1)
{
prev_frame = get_prev_frame (fid);
if (!prev_frame
|| !frame_id_eq (id, get_frame_id (prev_frame)))
break;
fid = prev_frame;
}
return fid; return fid;
} }
} }
@ -993,7 +985,7 @@ frame_info (char *addr_exp, int from_tty)
puts_filtered ("; "); puts_filtered ("; ");
wrap_here (" "); wrap_here (" ");
printf_filtered ("saved %s ", pc_regname); printf_filtered ("saved %s ", pc_regname);
fputs_filtered (paddress (frame_unwind_caller_pc (fi)), gdb_stdout); fputs_filtered (paddress (frame_pc_unwind (fi)), gdb_stdout);
printf_filtered ("\n"); printf_filtered ("\n");
if (calling_frame_info == NULL) if (calling_frame_info == NULL)