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:
Pedro Alves
2018-06-14 12:23:56 +01:00
parent 1d39de443a
commit a898ca0e0c
3 changed files with 49 additions and 12 deletions

View File

@ -176,6 +176,25 @@ not_inline_func3 (int x)
return y + inline_func3 (x);
}
/* A static inlined function that is called by another static inlined
function. */
static inline ATTR int
func_callee (int x)
{
return x * 23;
}
/* A static inlined function that calls another static inlined
function. The body of the function is as simple as possible so
that both functions are inlined to the same PC address. */
static int
func_caller (int x)
{
return func_callee (x);
}
/* Entry point. */
int
@ -205,5 +224,7 @@ main (int argc, char *argv[])
x = not_inline_func3 (-21);
func_caller (1);
return x;
}

View File

@ -231,4 +231,21 @@ foreach_with_prefix cmd [list "break" "tbreak"] {
}
}
# func_caller and func_callee are both inline functions, and one calls
# the other. Test that setting a breakpoint on the caller reports the
# stop at the caller, and that setting a breakpoint at the callee
# reports a stop at the callee.
foreach_with_prefix func {"func_callee" "func_caller"} {
clean_restart $binfile
if {![runto main]} {
untested "could not run to main"
continue
}
gdb_breakpoint $func
gdb_test "continue" "Breakpoint .* $func .*at .*$srcfile.*" \
"continue to inline function"
}
unset -nocomplain results