From: Jan Kratochvil Date: Thu, 14 Jan 2010 21:04:53 +0000 (+0000) Subject: gdb/testsuite/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=06a6f27066c695efbde2773efafd2be68f7a7d1c;p=binutils-gdb.git 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. --- diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 735d4501ed7..37561094896 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,11 @@ +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. 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 00000000000..c103da34626 --- /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 00000000000..57b81f6ffa5 --- /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 d2799489b7e..ce86cabc4e8 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} }