aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2021-09-23 22:42:10 +0200
committerTom de Vries <tdevries@suse.de>2021-09-23 22:42:10 +0200
commitd264c39e8b3eba663c8f09f228ca44eb36eac778 (patch)
treec8cbd03e3148b377e66ef27d030067dfbc69fcca
parent108e60844c6c517895011f46b74db6b10273be56 (diff)
downloadfsf-binutils-gdb-d264c39e8b3eba663c8f09f228ca44eb36eac778.zip
fsf-binutils-gdb-d264c39e8b3eba663c8f09f228ca44eb36eac778.tar.gz
fsf-binutils-gdb-d264c39e8b3eba663c8f09f228ca44eb36eac778.tar.bz2
[gdb/testsuite] Improve probe detection in gdb.base/break-probes.exp
When running test-case gdb.base/break-probes.exp on ubuntu 18.04.5, we have: ... (gdb) run^M Starting program: break-probes^M Stopped due to shared library event (no libraries added or removed)^M (gdb) bt^M #0 0x00007ffff7dd6e12 in ?? () from /lib64/ld-linux-x86-64.so.2^M #1 0x00007ffff7dedf50 in ?? () from /lib64/ld-linux-x86-64.so.2^M #2 0x00007ffff7dd5128 in ?? () from /lib64/ld-linux-x86-64.so.2^M #3 0x00007ffff7dd4098 in ?? () from /lib64/ld-linux-x86-64.so.2^M #4 0x0000000000000001 in ?? ()^M #5 0x00007fffffffdaac in ?? ()^M #6 0x0000000000000000 in ?? ()^M (gdb) UNSUPPORTED: gdb.base/break-probes.exp: probes not present on this system ... Using the backtrace, the test-case tries to establish that we're stopped in dl_main, which is used as proof that we're using probes. However, the backtrace only shows an address, because: - the dynamic linker contains no minimal symbols and no debug info, and - gdb is build without --with-separate-debug-dir so it can't find the corresponding .debug file, which does contain the mimimal symbols and debug info. Fix this by instead printing the pc and grepping for the value in the info probes output: ... (gdb) p /x $pc^M $1 = 0x7ffff7dd6e12^M (gdb) info probes^M Type Provider Name Where Object ^M ... stap rtld init_start 0x00007ffff7dd6e12 /lib64/ld-linux-x86-64.so.2 ^M ... (gdb) ... Tested on x86_64-linux.
-rw-r--r--gdb/testsuite/gdb.base/break-probes.exp32
1 files changed, 19 insertions, 13 deletions
diff --git a/gdb/testsuite/gdb.base/break-probes.exp b/gdb/testsuite/gdb.base/break-probes.exp
index ac10ac5..b633ae6 100644
--- a/gdb/testsuite/gdb.base/break-probes.exp
+++ b/gdb/testsuite/gdb.base/break-probes.exp
@@ -23,13 +23,6 @@ set libname $testfile-solib
set srcfile_lib $srcdir/$subdir/$libname.c
set binfile_lib [standard_output_file $libname.so]
-if { [istarget "*bsd*"] } {
- set normal_bp "r_debug_state"
-} else {
- set normal_bp "_dl_debug_state"
-}
-set probes_bp "dl_main"
-
if { [gdb_compile_shlib $srcfile_lib $binfile_lib {}] != "" } {
untested "failed to compile shared library"
return -1
@@ -47,14 +40,27 @@ gdb_test_no_output "set stop-on-solib-events 1"
gdb_run_cmd
gdb_test "" ".*Stopped due to shared library event.*"
-# XFAIL if we are not using probes
-set test "ensure using probes"
+# Check if we're using probes.
set using_probes 0
-gdb_test_multiple "bt" $test {
- -re "#0 +\[^\r\n\]*\\m(__GI_)?$normal_bp\\M.*$gdb_prompt $" {
+
+# Get PC.
+set pc ""
+gdb_test_multiple "p /x \$pc" "" {
+ -re -wrap " = ($hex)" {
+ set pc $expect_out(1,string)
+ }
+ -re -wrap "" {
}
- -re "#0 +\[^\r\n\]*\\m(__GI_)?$probes_bp\\M.*$gdb_prompt $" {
- pass $test
+}
+if { $pc == "" } {
+ unsupported "Couldn't get $pc"
+ return -1
+}
+regsub "0x0*" $pc "" pc
+
+# Verify that pc is at info_start probe address.
+gdb_test_multiple "info probes stap rtld" "" {
+ -re -wrap "init_start +0x0*$pc .*" {
set using_probes 1
}
-re -wrap "" {