aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2010-01-14 21:04:53 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2010-01-14 21:04:53 +0000
commit06a6f27066c695efbde2773efafd2be68f7a7d1c (patch)
tree16bd06f816102ce5b84163db80e753e7a2ccc0d0
parent51bee8e9b74abe4f87f96d3ec97e98d34426aae7 (diff)
downloadgdb-06a6f27066c695efbde2773efafd2be68f7a7d1c.zip
gdb-06a6f27066c695efbde2773efafd2be68f7a7d1c.tar.gz
gdb-06a6f27066c695efbde2773efafd2be68f7a7d1c.tar.bz2
gdb/testsuite/
* gdb.base/break-interp-main.c, gdb.base/break-interp-lib.c: New. * gdb.base/break-interp.exp: Exit on skip_shlib_tests. Change $srcfile. New variables $binfile_lib and $srcfile_lib. Call get_compiler_info and gdb_compile_shlib. Use new -Wl compiler options. (dl bt, main bt): New tests.
-rw-r--r--gdb/testsuite/ChangeLog8
-rw-r--r--gdb/testsuite/gdb.base/break-interp-lib.c24
-rw-r--r--gdb/testsuite/gdb.base/break-interp-main.c26
-rw-r--r--gdb/testsuite/gdb.base/break-interp.exp26
4 files changed, 82 insertions, 2 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 735d450..3756109 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,13 @@
2010-01-14 Jan Kratochvil <jan.kratochvil@redhat.com>
+ * gdb.base/break-interp-main.c, gdb.base/break-interp-lib.c: New.
+ * gdb.base/break-interp.exp: Exit on skip_shlib_tests. Change $srcfile.
+ New variables $binfile_lib and $srcfile_lib. Call get_compiler_info
+ and gdb_compile_shlib. Use new -Wl compiler options.
+ (dl bt, main bt): New tests.
+
+2010-01-14 Jan Kratochvil <jan.kratochvil@redhat.com>
+
Support PIEs with no symfile_objfile.
* gdb.base/break-interp.exp: New argument at the test_ld calls.
(test_ld): New parameter trynosym.
diff --git a/gdb/testsuite/gdb.base/break-interp-lib.c b/gdb/testsuite/gdb.base/break-interp-lib.c
new file mode 100644
index 0000000..c103da3
--- /dev/null
+++ b/gdb/testsuite/gdb.base/break-interp-lib.c
@@ -0,0 +1,24 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2009 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 <signal.h>
+
+void
+libfunc (void)
+{
+ raise (SIGSEGV);
+}
diff --git a/gdb/testsuite/gdb.base/break-interp-main.c b/gdb/testsuite/gdb.base/break-interp-main.c
new file mode 100644
index 0000000..57b81f6
--- /dev/null
+++ b/gdb/testsuite/gdb.base/break-interp-main.c
@@ -0,0 +1,26 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2009 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/>. */
+
+extern void libfunc (void);
+
+int
+main (void)
+{
+ libfunc ();
+
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.base/break-interp.exp b/gdb/testsuite/gdb.base/break-interp.exp
index d279948..ce86cab 100644
--- a/gdb/testsuite/gdb.base/break-interp.exp
+++ b/gdb/testsuite/gdb.base/break-interp.exp
@@ -14,7 +14,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# This test only works on GNU/Linux.
-if { ![isnative] || [is_remote host] || ![istarget *-linux*] } {
+if { ![isnative] || [is_remote host] || ![istarget *-linux*] || [skip_shlib_tests]} {
continue
}
@@ -23,7 +23,21 @@ set binprefix ${objdir}/${subdir}/${test}
# Only to get the $interp_system name.
set srcfile_test "start.c"
set binfile_test ${test}-test
-set srcfile "start.c"
+set binfile_lib ${objdir}/${subdir}/${test}.so
+set srcfile "${test}-main.c"
+set srcfile_lib "${test}-lib.c"
+
+if [get_compiler_info ${binfile_lib}] {
+ return -1
+}
+
+# Use -soname so that it is listed with " => " by ldd and this testcase makes
+# a copy of ${binfile_lib} for each prelink variant.
+
+if {[gdb_compile_shlib ${srcdir}/${subdir}/${srcfile_lib} ${binfile_lib} [list debug additional_flags=-Wl,-soname,${test}.so]] != ""} {
+ return -1
+}
+
if {[build_executable ${test}.exp $binfile_test ${srcfile_test} {}] == -1} {
return -1
}
@@ -236,8 +250,15 @@ proc test_ld {file ifmain trynosym} {
gdb_load $file
reach "dl_main" run
+
+ gdb_test "bt" "#0 +\[^\r\n\]*\\mdl_main\\M.*" "dl bt"
+
if $ifmain {
reach "main" continue
+
+ reach "libfunc" continue
+
+ gdb_test "bt" "#0 +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#1 +\[^\r\n\]*\\mmain\\M.*" "main bt"
}
if !$trynosym {
@@ -389,6 +410,7 @@ foreach ldprelink {NO YES} {
lappend pf_prefix "$binname:"
set opts "additional_flags=-Wl,--dynamic-linker,$interp,-rpath,$dir"
+ lappend opts "additional_flags=-Wl,$binfile_lib,-rpath,[file dirname $binfile_lib]"
if {$binsepdebug != "NO"} {
lappend opts {debug}
}