aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2024-03-15 12:07:12 +0000
committerAndrew Burgess <aburgess@redhat.com>2024-03-18 09:50:02 +0000
commit93eb6c64ec4a6ea9f3c1722a894d72ef586d7523 (patch)
treee49032b6a550731fcbe81c26df84cc84001a33ac /gdb
parentfbedb145e49e949b06ed9e8b36c0d22e2e9d21cc (diff)
downloadfsf-binutils-gdb-93eb6c64ec4a6ea9f3c1722a894d72ef586d7523.zip
fsf-binutils-gdb-93eb6c64ec4a6ea9f3c1722a894d72ef586d7523.tar.gz
fsf-binutils-gdb-93eb6c64ec4a6ea9f3c1722a894d72ef586d7523.tar.bz2
gdb/testsuite: attach to i386 process stopped in vDSO
Fedora GDB has carried around a patch for a while which tested attaching to an i386 process which is stopped within the vDSO library region. Apparently, at some point in the distant past there was an issue finding symbol information for this region in this situation. I'm struggling to track down the precise details of what the original bug was, however, acquiring symbol information for the vDSO region is different than for "normal" shared libraries -- the vDSO information is synthesised within GDB during the attach / inferior creation process -- so it's not unreasonable to imagine that there could be a bug specifically in this area of GDB which wouldn't impact "normal" shared libraries. I looked for references to vDSO in our testsuite and couldn't find any tests that looked like they did the same sort of thing, so I'd like to propose adding this test to our testsuite. It's a pretty simple test, and doesn't take long to run, so the cost of adding this is not huge. Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb')
-rw-r--r--gdb/testsuite/gdb.arch/i386-attach-see-vdso.c25
-rw-r--r--gdb/testsuite/gdb.arch/i386-attach-see-vdso.exp55
2 files changed, 80 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.arch/i386-attach-see-vdso.c b/gdb/testsuite/gdb.arch/i386-attach-see-vdso.c
new file mode 100644
index 0000000..2eee4c4
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/i386-attach-see-vdso.c
@@ -0,0 +1,25 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2024 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <unistd.h>
+
+int
+main (void)
+{
+ pause ();
+ return 1;
+}
diff --git a/gdb/testsuite/gdb.arch/i386-attach-see-vdso.exp b/gdb/testsuite/gdb.arch/i386-attach-see-vdso.exp
new file mode 100644
index 0000000..dc75774
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/i386-attach-see-vdso.exp
@@ -0,0 +1,55 @@
+# Copyright 2024 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Ensure that when we attach to an i386 process, which is stopped in
+# the vDSO, we are able to get symbols for the vDSO region.
+
+require {is_any_target "i?86-*-linux*" "x86_64-*-linux*"}
+require can_spawn_for_attach
+
+standard_testfile
+
+set options {debug}
+if {![istarget "i386-*-*"]} {
+ lappend options "additional_flags=-m32"
+}
+
+# The kernel VDSO is used for the syscalls returns only on i386 (not x86_64).
+if { [build_executable "failed to prepare" $testfile $srcfile $options] } {
+ return -1
+}
+
+# Don't tell GDB which executable we're debugging.
+clean_restart
+
+# Start the test program ready for GDB to attach to it.
+set test_spawn_id [spawn_wait_for_attach $binfile]
+set testpid [spawn_id_get_pid $test_spawn_id]
+
+# Attach GDB to the process.
+gdb_test_multiple "attach $testpid" "attach to test process" {
+ -re -wrap "Attaching to process $testpid.*" {
+ pass $gdb_test_name
+ }
+}
+
+# The inferior will be stopped within the vDSO, check we get symbols
+# for this address.
+gdb_test "bt" "#0 *0x\[0-9a-f\]* in \[^?\]+\r\n#1\\s+.*" \
+ "backtrace decodes VDSO"
+
+# Exit GDB and the spawned process.
+gdb_exit
+kill_wait_spawned_process $test_spawn_id