Change gdb.base/skip-solib.exp deal with lack of epilogue information
authorBruno Larsen <blarsen@redhat.com>
Tue, 13 Sep 2022 16:47:05 +0000 (18:47 +0200)
committerBruno Larsen <blarsen@redhat.com>
Thu, 22 Sep 2022 09:04:17 +0000 (11:04 +0200)
When running gdb.base/skip-solib.exp, the backtrace tests could fail with
compilers that associated epilogue instructions with the last statement
line of the function, instead of associating it with the closing brace,
despite the feature being fully functional.  As an example, when testing
skipping the function square, the testsuite would show

Breakpoint 1, main () at (...)/binutils-gdb/gdb/testsuite/gdb.base/skip-solib-main.c:5
5         return square(0);
(gdb) step
0x00007ffff7cef560 in __libc_start_call_main () from /lib64/libc.so.6
(gdb) PASS: gdb.base/skip-solib.exp: ignoring solib file: step
bt
 #0  0x00007ffff7cef560 in __libc_start_call_main () from /lib64/libc.so.6
 #1  0x00007ffff7cef60c in __libc_start_main_impl () from /lib64/libc.so.6
 #2  0x0000000000401065 in _start ()
(gdb) FAIL: gdb.base/skip-solib.exp: ignoring solib file: bt

Which means that the feature is working, the testsuite is just
mis-identifying it.  To avoid this problem, the skipped function calls
have been sent to a line before `return`, so epilogues won't factor in.

gdb/testsuite/gdb.base/skip-solib-lib.c
gdb/testsuite/gdb.base/skip-solib-main.c

index b2c4d86d7039a39c434df9e7e923ff982623b087..341f1440a3b84d0f1f5155f8e412398a2ecc8ec9 100644 (file)
@@ -7,5 +7,6 @@ int multiply(int a, int b)
 
 int square(int num)
 {
-  return multiply(num, num);
+  int res = multiply(num, num);
+  return res;
 }
index 746bb5f36bbedf86c0bc6c8e6ee763fda8c4749c..a3b6d417935074bcb20189f360a8c1e8119477aa 100644 (file)
@@ -2,5 +2,6 @@ int square(int num);
 
 int main()
 {
-  return square(0);
+  int s = square(0);
+  return s;
 }