Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH] gdb/testsuite: attach to i386 process stopped in vDSO
@ 2024-03-15 12:13 Andrew Burgess
  2024-03-15 13:22 ` Tom Tromey
  0 siblings, 1 reply; 2+ messages in thread
From: Andrew Burgess @ 2024-03-15 12:13 UTC (permalink / raw)
  To: gdb-patches; +Cc: Andrew Burgess

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.
---
 gdb/testsuite/gdb.arch/i386-attach-see-vdso.c | 25 +++++++++
 .../gdb.arch/i386-attach-see-vdso.exp         | 55 +++++++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 gdb/testsuite/gdb.arch/i386-attach-see-vdso.c
 create mode 100644 gdb/testsuite/gdb.arch/i386-attach-see-vdso.exp

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

base-commit: 9fe07b7f95fbfdaf34d5b69e6d73cae000b43eea
-- 
2.25.4


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] gdb/testsuite: attach to i386 process stopped in vDSO
  2024-03-15 12:13 [PATCH] gdb/testsuite: attach to i386 process stopped in vDSO Andrew Burgess
@ 2024-03-15 13:22 ` Tom Tromey
  0 siblings, 0 replies; 2+ messages in thread
From: Tom Tromey @ 2024-03-15 13:22 UTC (permalink / raw)
  To: Andrew Burgess; +Cc: gdb-patches

>>>>> "Andrew" == Andrew Burgess <aburgess@redhat.com> writes:

Andrew> I looked for references to vDSO in our testsuite and couldn't find
Andrew> any tests that looked like they did the same sort of thing, so I'd
Andrew> like to propose adding this test to our testsuite.

Seems fine to me.  Thank you.
Approved-By: Tom Tromey <tom@tromey.com>

Andrew> It's a pretty simple test, and doesn't take long to run, so the cost
Andrew> of adding this is not huge.

I basically never pay attention to this.

I used to sometimes do coverage testing and use that to guide
test-writing, but sadly coverage (specifically lcov) has been broken for
me for the last few Fedora releases.

Tom

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-03-15 13:22 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-15 12:13 [PATCH] gdb/testsuite: attach to i386 process stopped in vDSO Andrew Burgess
2024-03-15 13:22 ` Tom Tromey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox