diff options
author | Guinevere Larsen <blarsen@redhat.com> | 2024-05-31 10:48:54 -0300 |
---|---|---|
committer | Guinevere Larsen <blarsen@redhat.com> | 2024-08-02 13:02:07 -0300 |
commit | 6ce1ea97af20b9e618c524aa719e70c17dacda74 (patch) | |
tree | c9a8a147222219a2285355cc330e55cf21022694 | |
parent | 713e89012e43c83a6c1bb957c43ff58e5433336c (diff) | |
download | gdb-6ce1ea97af20b9e618c524aa719e70c17dacda74.zip gdb-6ce1ea97af20b9e618c524aa719e70c17dacda74.tar.gz gdb-6ce1ea97af20b9e618c524aa719e70c17dacda74.tar.bz2 |
gdb,testsuite: fix gdb.base/list-dot-nodebug and make it more robust
Thiago Jung Bauermann noticed that gdb.base/list-dot-nodebug was not
actually compiling the test with some debuginfo in the relevant part,
and while fixing I noticed that the base assumption of the "some" case
was wrong, GDB would select some symtab as a default location and the
test would always fail. This fix makes printing the default location
only be tested when there is no debuginfo.
When testing with no debuginfo, if a system had static libc debuginfo,
the test would also fail. To add an extra layer of robustness to the
test, this rewrite also strips any stray debuginfo from the executable.
The test would only fail now if it runs in a system that can't handle
stripped debuginfo and has static debuginfo pre-installed.
Reported-By: Tom de Vries <tdevries@suse.de>
Reported-By: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31721
Reviewed-by: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
Approved-By: Andrew Burgess <aburgess@redhat.com>
-rw-r--r-- | gdb/testsuite/gdb.base/list-dot-nodebug.exp | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/gdb/testsuite/gdb.base/list-dot-nodebug.exp b/gdb/testsuite/gdb.base/list-dot-nodebug.exp index c9d732e..b7359be 100644 --- a/gdb/testsuite/gdb.base/list-dot-nodebug.exp +++ b/gdb/testsuite/gdb.base/list-dot-nodebug.exp @@ -34,21 +34,36 @@ standard_testfile .c -extra.c foreach_with_prefix debug {"none" "some"} { - set flags "nodebug" if {$debug == "some"} { - set flags "debug" - } + if {[prepare_for_testing_full "failed to prepare" \ + [list ${testfile}-${debug} $linkflags \ + $srcfile [list nodebug] \ + $srcfile2 [list debug]]]} { + return -1 + } - if {[prepare_for_testing_full "failed to prepare" \ - [list ${testfile}-${debug} $linkflags \ - $srcfile [list nodebug] \ - $srcfile2 [list $debug]]]} { - return -1 + # We don't test "list ." before starting with some debug info + # because GDB will choose the symtab that has debuginfo, and + # print the copyright blurb. This test isn't interested (yet?) + # in checking if this default location choice is consistent. + } else { + set executable ${testfile}-none + if {[build_executable "failed to prepare" ${executable} \ + [list $srcfile $srcfile2] $linkflags]} { + return -1 + } + + # Stripping is a backup in case the system has static libc debuginfo. + # We can continue the test even if it fails. + gdb_gnu_strip_debug $executable no-debuglink + + clean_restart ${executable} + + gdb_test "list ." \ + "^Insufficient debug info for showing source lines at default location" \ + "print before start" } - gdb_test "list ." \ - "^Insufficient debug info for showing source lines at default location" \ - "print before start" if { ![runto bar] } { return -1 |