From 109617aee83591aac6ac3dd3d0ca71856b7f960c Mon Sep 17 00:00:00 2001 From: jkratoch Date: Fri, 15 Jan 2010 06:04:52 +0000 Subject: [PATCH] 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. --- gdb/testsuite/ChangeLog | 8 ++++++++ gdb/testsuite/gdb.base/break-interp-lib.c | 24 ++++++++++++++++++++++++ gdb/testsuite/gdb.base/break-interp-main.c | 26 ++++++++++++++++++++++++++ gdb/testsuite/gdb.base/break-interp.exp | 26 ++++++++++++++++++++++++-- 4 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 gdb/testsuite/gdb.base/break-interp-lib.c create mode 100644 gdb/testsuite/gdb.base/break-interp-main.c diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 735d4501ed..3756109489 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,13 @@ 2010-01-14 Jan Kratochvil + * 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 + 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 0000000000..c103da3462 --- /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 . */ + +#include + +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 0000000000..57b81f6ffa --- /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 . */ + +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 d2799489b7..ce86cabc4e 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 . # 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} } -- 2.11.0