public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] gdb/testsuite: attach to i386 process stopped in vDSO
@ 2024-03-18 10:14 Andrew Burgess
  0 siblings, 0 replies; only message in thread
From: Andrew Burgess @ 2024-03-18 10:14 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=93eb6c64ec4a6ea9f3c1722a894d72ef586d7523

commit 93eb6c64ec4a6ea9f3c1722a894d72ef586d7523
Author: Andrew Burgess <aburgess@redhat.com>
Date:   Fri Mar 15 12:07:12 2024 +0000

    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>

Diff:
---
 gdb/testsuite/gdb.arch/i386-attach-see-vdso.c   | 25 +++++++++++
 gdb/testsuite/gdb.arch/i386-attach-see-vdso.exp | 55 +++++++++++++++++++++++++
 2 files changed, 80 insertions(+)

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 00000000000..2eee4c4995c
--- /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 00000000000..dc757748332
--- /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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-03-18 10:14 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-18 10:14 [binutils-gdb] gdb/testsuite: attach to i386 process stopped in vDSO Andrew Burgess

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).