aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2024-01-08 10:37:44 +0100
committerTom de Vries <tdevries@suse.de>2024-01-08 10:37:44 +0100
commit09f5e4ed86bfa9a08f35a059fe978cf2211c7b3e (patch)
treeb806fa3d334c0b78adae7366b0ef0e220433439c /gdb
parenta0c9f938521a36b34a27740e5008e35f0ddd2b3f (diff)
downloadfsf-binutils-gdb-09f5e4ed86bfa9a08f35a059fe978cf2211c7b3e.zip
fsf-binutils-gdb-09f5e4ed86bfa9a08f35a059fe978cf2211c7b3e.tar.gz
fsf-binutils-gdb-09f5e4ed86bfa9a08f35a059fe978cf2211c7b3e.tar.bz2
[gdb/testsuite] Make gdb.base/solib-search.exp more robust
On aarch64-linux, with gcc 13.2.1, I run into: ... (gdb) backtrace^M #0 break_here () at solib-search.c:30^M #1 0x0000fffff7f20194 in lib2_func4 () at solib-search-lib2.c:50^M #2 0x0000fffff7f70194 in lib1_func3 () at solib-search-lib1.c:50^M #3 0x0000fffff7f20174 in lib2_func2 () at solib-search-lib2.c:30^M #4 0x0000fffff7f70174 in lib1_func1 () at solib-search-lib1.c:30^M #5 0x00000000004101b4 in main () at solib-search.c:23^M (gdb) PASS: gdb.base/solib-search.exp: \ backtrace (with wrong libs) (data collection) FAIL: gdb.base/solib-search.exp: backtrace (with wrong libs) ... The FAIL is generated by this code in the test-case: ... if { $expect_fail } { # If the backtrace output is correct the test isn't sufficiently # testing what it should. if { $count == $total_expected } { set fail 1 } ... The test-case: - builds two versions of two shared libs, a "right" and "wrong" version, the difference being an additional dummy function (called spacer function), - uses the "right" version to generate a core file, - uses the "wrong" version to interpret the core file, and - generates a backtrace. The intent is that the backtrace is incorrect due to using the "wrong" version, but actually it's correct. This is because the spacer functions aren't large enough. Fix this by increasing the size of the spacer functions by adding a dummy loop, after which we have, as expected, an incorrect backtrace: ... (gdb) backtrace^M #0 break_here () at solib-search.c:30^M #1 0x0000fffff7f201c0 in ?? ()^M #2 0x0000fffff7f20174 in lib2_func2 () at solib-search-lib2.c:30^M #3 0x0000fffff7f20174 in lib2_func2 () at solib-search-lib2.c:30^M #4 0x0000fffff7f70174 in lib1_func1 () at solib-search-lib1.c:30^M #5 0x00000000004101b4 in main () at solib-search.c:23^M (gdb) PASS: gdb.base/solib-search.exp: \ backtrace (with wrong libs) (data collection) PASS: gdb.base/solib-search.exp: backtrace (with wrong libs) ... Tested on aarch64-linux.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/testsuite/gdb.base/solib-search-lib1.c3
-rw-r--r--gdb/testsuite/gdb.base/solib-search-lib2.c3
2 files changed, 6 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/solib-search-lib1.c b/gdb/testsuite/gdb.base/solib-search-lib1.c
index 76338a8..6a4cc9a 100644
--- a/gdb/testsuite/gdb.base/solib-search-lib1.c
+++ b/gdb/testsuite/gdb.base/solib-search-lib1.c
@@ -39,6 +39,9 @@ lib1_func1 (void)
void
lib1_spacer (void)
{
+ int i;
+ for (i = 0; i < 10; ++i)
+ ;
}
#endif
diff --git a/gdb/testsuite/gdb.base/solib-search-lib2.c b/gdb/testsuite/gdb.base/solib-search-lib2.c
index bf7c7bd..fb004d7 100644
--- a/gdb/testsuite/gdb.base/solib-search-lib2.c
+++ b/gdb/testsuite/gdb.base/solib-search-lib2.c
@@ -39,6 +39,9 @@ lib2_func2 (void)
void
lib2_spacer (void)
{
+ int i;
+ for (i = 0; i < 10; ++i)
+ ;
}
#endif