summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2023-01-23 11:54:43 +0100
committerTom de Vries <tdevries@suse.de>2023-01-23 11:54:43 +0100
commiteb015bf86b6c6764f8acfea01a25a63e9b492dc5 (patch)
tree600fb6aca85b243abaf8f714a3def50ce9881fa8
parentb960c86c1e60ff9f8baf23bbc567f6d21344c370 (diff)
downloadbinutils-gdb-eb015bf86b6c6764f8acfea01a25a63e9b492dc5.tar.gz
[gdb/testsuite] Avoid using .eh_frame in gdb.base/unwind-on-each-insn.exp
One purpose of the gdb.base/unwind-on-each-insn.exp test-case is to test the architecture-specific unwinders on foo, so unwind-on-each-insn-foo.c is compiled with nodebug, to prevent the dwarf unwinders from taking effect. For for instance gcc x86_64 though, -fasynchronous-unwind-tables is enabled by default, generating an .eh_frame section contribution which might enable the dwarf unwinders and bypass the architecture-specific unwinders. Currently, that happens to be not the case due to the current implementation of epilogue_unwind_valid, which assumes that in absence of debug info proving that the compiler is gcc >= 4.5.0, the .eh_frame contribution is invalid. That may change though, see PR30028, in which case gdb.base/unwind-on-each-insn.exp stops being a regression test for commit 49d7cd733a7 ("Change calculation of frame_id by amd64 epilogue unwinder"). Fix this by making sure that we don't use .eh_frame info regardless of epilogue_unwind_valid, simply by not generating it using -fno-asynchronous-unwind-tables. Tested on x86_64-linux, target boards unix/{-m64,-m32}, using compilers gcc 7.5.0 and clang 13.0.1.
-rw-r--r--gdb/testsuite/gdb.base/unwind-on-each-insn.exp14
1 files changed, 12 insertions, 2 deletions
diff --git a/gdb/testsuite/gdb.base/unwind-on-each-insn.exp b/gdb/testsuite/gdb.base/unwind-on-each-insn.exp
index 5e822effaf1..fc48bf5c061 100644
--- a/gdb/testsuite/gdb.base/unwind-on-each-insn.exp
+++ b/gdb/testsuite/gdb.base/unwind-on-each-insn.exp
@@ -25,9 +25,19 @@
standard_testfile .c -foo.c
+set debug_flags {debug}
+set nodebug_flags {nodebug}
+
+# Make sure that we don't use .eh_frame info, by not generating it,
+# using -fno-asynchronous-unwind-tables, if supported.
+if { [gdb_can_simple_compile fno-asynchronous-unwind-tables \
+ { void foo () { } } object -fno-asynchronous-unwind-tables] } {
+ lappend nodebug_flags additional_flags=-fno-asynchronous-unwind-tables
+}
+
if {[prepare_for_testing_full "failed to prepare" \
- [list ${testfile} debug \
- $srcfile {debug} $srcfile2 {nodebug}]]} {
+ [list ${testfile} $debug_flags \
+ $srcfile $debug_flags $srcfile2 $nodebug_flags]]} {
return -1
}