mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-05 21:50:21 +08:00
Inline breakpoints
gdb/ChangeLog: yyyy-mm-dd Pedro Alves <palves@redhat.com> * inline-frame.c (stopped_by_user_bp_inline_frame): Replace PC parameter with a block parameter. Compare location's block symbol with the frame's block instead of addresses. (skip_inline_frames): Pass the current block instead of the frame's address. Break out as soon as we determine the frame should not be skipped. gdb/testsuite/ChangeLog: yyyy-mm-dd Pedro Alves <palves@redhat.com> * gdb.opt/inline-break.c (func_callee, func_caller): New. (main): Call func_caller.
This commit is contained in:
@ -286,11 +286,10 @@ block_starting_point_at (CORE_ADDR pc, const struct block *block)
|
||||
}
|
||||
|
||||
/* Loop over the stop chain and determine if execution stopped in an
|
||||
inlined frame because of a user breakpoint. THIS_PC is the current
|
||||
frame's PC. */
|
||||
inlined frame because of a user breakpoint set at FRAME_BLOCK. */
|
||||
|
||||
static bool
|
||||
stopped_by_user_bp_inline_frame (CORE_ADDR this_pc, bpstat stop_chain)
|
||||
stopped_by_user_bp_inline_frame (const block *frame_block, bpstat stop_chain)
|
||||
{
|
||||
for (bpstat s = stop_chain; s != NULL; s = s->next)
|
||||
{
|
||||
@ -301,9 +300,9 @@ stopped_by_user_bp_inline_frame (CORE_ADDR this_pc, bpstat stop_chain)
|
||||
bp_location *loc = s->bp_location_at;
|
||||
enum bp_loc_type t = loc->loc_type;
|
||||
|
||||
if (loc->address == this_pc
|
||||
&& (t == bp_loc_software_breakpoint
|
||||
|| t == bp_loc_hardware_breakpoint))
|
||||
if ((t == bp_loc_software_breakpoint
|
||||
|| t == bp_loc_hardware_breakpoint)
|
||||
&& frame_block == SYMBOL_BLOCK_VALUE (loc->symbol))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -340,12 +339,12 @@ skip_inline_frames (ptid_t ptid, bpstat stop_chain)
|
||||
{
|
||||
/* Do not skip the inlined frame if execution
|
||||
stopped in an inlined frame because of a user
|
||||
breakpoint. */
|
||||
if (!stopped_by_user_bp_inline_frame (this_pc, stop_chain))
|
||||
{
|
||||
skip_count++;
|
||||
last_sym = BLOCK_FUNCTION (cur_block);
|
||||
}
|
||||
breakpoint for this inline function. */
|
||||
if (stopped_by_user_bp_inline_frame (cur_block, stop_chain))
|
||||
break;
|
||||
|
||||
skip_count++;
|
||||
last_sym = BLOCK_FUNCTION (cur_block);
|
||||
}
|
||||
else
|
||||
break;
|
||||
|
Reference in New Issue
Block a user