aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandra Hajkova <ahajkova@redhat.com>2017-10-27 21:07:50 +0200
committerAlexandra Hájková <ahajkova@redhat.com>2025-04-02 11:18:03 +0200
commit5cb1689a7a883251b1e90ab85648c80287a106d0 (patch)
treec46326608794fa6531a4221e67014f775ed6253d
parent877d74ab5f2f33aa062c4b8d1ba910a46e4ef9d1 (diff)
downloadbinutils-5cb1689a7a883251b1e90ab85648c80287a106d0.zip
binutils-5cb1689a7a883251b1e90ab85648c80287a106d0.tar.gz
binutils-5cb1689a7a883251b1e90ab85648c80287a106d0.tar.bz2
Add gdb.base/set-solib-absolute-prefix.exp
Compile a 32-bit x86 executable and then stop within a system call. Change the sysroot to a non-existent directory, GDB should try (and fail) to reload the currently loaded shared libraries. However, GDB should retain the symbols for the vDSO library as that is not loaded from the file system. Check the backtrace to ensure that the __kernel_vsyscall symbol is still in the backtrace, this indicates GDB still has the vDSO symbols available. This test was present in Fedora for a long time and was originally written by Jan Kratochvil for this fix 829a902da291e72ad17e8c44fa8d9ead3db41b1f. Co-Authored-By: Jan Kratochvil <jan.kratochvil@redhat.com> Approved-By: Andrew Burgess <aburgess@redhat.com>
-rw-r--r--gdb/testsuite/gdb.base/set-solib-absolute-prefix.c32
-rw-r--r--gdb/testsuite/gdb.base/set-solib-absolute-prefix.exp51
2 files changed, 83 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/set-solib-absolute-prefix.c b/gdb/testsuite/gdb.base/set-solib-absolute-prefix.c
new file mode 100644
index 0000000..685a22e
--- /dev/null
+++ b/gdb/testsuite/gdb.base/set-solib-absolute-prefix.c
@@ -0,0 +1,32 @@
+/* Copyright (C) 2012-2025 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ 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 <stdlib.h>
+
+/* Global var used to generate filler code. */
+volatile int global_var = 0;
+
+int
+main ()
+{
+ global_var++;
+ global_var++;
+
+ abort ();
+
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.base/set-solib-absolute-prefix.exp b/gdb/testsuite/gdb.base/set-solib-absolute-prefix.exp
new file mode 100644
index 0000000..cf74789
--- /dev/null
+++ b/gdb/testsuite/gdb.base/set-solib-absolute-prefix.exp
@@ -0,0 +1,51 @@
+# Copyright 2012-2025 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/>.
+#
+# Compile a 32-bit x86 executable and then stop within a system call.
+# Change the sysroot to a non-existent directory, GDB should try (and
+# fail) to reload the currently loaded shared libraries. However, GDB
+# should retain the symbols for the vDSO library as that is not loaded
+# from the file system.
+#
+# Check the backtrace to ensure that the __kernel_vsyscall symbol is
+# still in the backtrace, this indicates GDB still has the vDSO
+# symbols available.
+
+require {is_any_target "i?86-*-linux*" "x86_64-*-linux*"}
+standard_testfile
+
+# The binary must be compiled as 32-bit so that the system call
+# `__kernel_vsyscall' originates from vDSO.
+set flags { debug }
+if { ![is_ilp32_target] } {
+ lappend flags "additional_flags=-m32"
+}
+
+if { [prepare_for_testing $testfile.exp $testfile $srcfile $flags] } {
+ return
+}
+
+if { ![runto_main] } {
+ return
+}
+
+set non_existing_directory [standard_output_file "BOGUS"]
+
+gdb_test "continue" "Program received signal SIGABRT, Aborted.*" \
+ "continue until abort"
+gdb_test "set sysroot $non_existing_directory" \
+ ".*warning: Unable to find dynamic linker breakpoint function.*" \
+ "set sysroot"
+gdb_test "bt" "__kernel_vsyscall.*" "backtrace with __kernel_vsyscall"