mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 19:50:13 +08:00
[gdb/testsuite] Add untested case in selftest_setup
When building gdb with "-Wall -O2 -g -flto=auto", I run into: ... FAIL: gdb.gdb/python-helper.exp: breakpoint in captured_main \ (got interactive prompt) FAIL: gdb.gdb/python-helper.exp: run until breakpoint at captured_main WARNING: Couldn't test self ... and similar in gdb.gdb/selftest.exp. The first FAIL in more detail: ... (gdb) break captured_main^M Function "captured_main" not defined.^M Make breakpoint pending on future shared library load? (y or [n]) n^M (gdb) FAIL: gdb.gdb/python-helper.exp: breakpoint in captured_main \ (got interactive prompt) ... The problem is that lto has optimized away the captured_main function and consequently the selftests dependent on that cannot run. Fix this by: - using gdb_breakpoint to detect failure to set the breakpoint - handling the failure to set a breakpoint by calling untested - not emitting the warning if we've already got untested such that we have: ... (gdb) UNTESTED: gdb.gdb/python-helper.exp: Cannot set breakpoint at \ captured_main, skipping testcase. ... gdb/testsuite/ChangeLog: 2021-09-02 Tom de Vries <tdevries@suse.de> * lib/selftest-support.exp: Emit untested when not being able to set breakpoint.
This commit is contained in:
@ -40,6 +40,8 @@ proc find_gdb { arg } {
|
|||||||
# EXECUTABLE is the gdb to use.
|
# EXECUTABLE is the gdb to use.
|
||||||
# FUNCTION is the function to break in, either captured_main
|
# FUNCTION is the function to break in, either captured_main
|
||||||
# or captured_command_loop.
|
# or captured_command_loop.
|
||||||
|
# Return 0 in case of success, -1 in case of failure, and -2 in case of
|
||||||
|
# skipping the test-case.
|
||||||
|
|
||||||
proc selftest_setup { executable function } {
|
proc selftest_setup { executable function } {
|
||||||
global gdb_prompt
|
global gdb_prompt
|
||||||
@ -73,14 +75,14 @@ proc selftest_setup { executable function } {
|
|||||||
|
|
||||||
if { $gdb_file_cmd_debug_info != "debug" } then {
|
if { $gdb_file_cmd_debug_info != "debug" } then {
|
||||||
untested "no debug information, skipping testcase."
|
untested "no debug information, skipping testcase."
|
||||||
return -1
|
return -2
|
||||||
}
|
}
|
||||||
|
|
||||||
# Set a breakpoint at main. Allow more than one location, as
|
# Set a breakpoint at $function.
|
||||||
# workaround for PR26096 - "gdb sets breakpoint at cold clone".
|
if { [gdb_breakpoint $function "no-message"] != 1 } {
|
||||||
gdb_test "break $function" \
|
untested "Cannot set breakpoint at $function, skipping testcase."
|
||||||
"Breakpoint.*at.* (file.*, line|locations).*" \
|
return -2
|
||||||
"breakpoint in $function"
|
}
|
||||||
|
|
||||||
# run yourself
|
# run yourself
|
||||||
# It may take a very long time for the inferior gdb to start (lynx),
|
# It may take a very long time for the inferior gdb to start (lynx),
|
||||||
@ -165,7 +167,7 @@ proc do_self_tests {function body} {
|
|||||||
gdb_exit
|
gdb_exit
|
||||||
catch "remote_file host delete $file"
|
catch "remote_file host delete $file"
|
||||||
|
|
||||||
if {$result < 0} then {
|
if {$result == -1} then {
|
||||||
warning "Couldn't test self"
|
warning "Couldn't test self"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user