diff options
author | Daniel Jacobowitz <drow@false.org> | 2006-12-01 18:14:30 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2006-12-01 18:14:30 +0000 |
commit | 08232497166ecbf332f0144a8352dd41d033bbec (patch) | |
tree | 8417b3940c577d4dc6ca390d7cc259c1c5c6436a /gdb/testsuite/gdb.base/solib-weak.exp | |
parent | 6a4699867a44b59f726f108b489d4462d5ce9fa3 (diff) | |
download | gdb-08232497166ecbf332f0144a8352dd41d033bbec.zip gdb-08232497166ecbf332f0144a8352dd41d033bbec.tar.gz gdb-08232497166ecbf332f0144a8352dd41d033bbec.tar.bz2 |
gdb/
* elfread.c (elf_symtab_read): Treat weak functions as global.
gdb/testsuite/
* gdb.base/solib-weak.c, gdb.base/solib-weak.exp, gdb.base/weaklib1.c,
gdb.base/weaklib2.c: New files.
Diffstat (limited to 'gdb/testsuite/gdb.base/solib-weak.exp')
-rw-r--r-- | gdb/testsuite/gdb.base/solib-weak.exp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/solib-weak.exp b/gdb/testsuite/gdb.base/solib-weak.exp new file mode 100644 index 0000000..79bdec9 --- /dev/null +++ b/gdb/testsuite/gdb.base/solib-weak.exp @@ -0,0 +1,109 @@ +# Copyright 2006 +# 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Test setting breakpoints on shared library functions provided by more +# than one shared library, when one of the implementations is a "weak" +# symbol. GDB should set a breakpoint at the first copy it finds. + +# Don't try to run shared library test cases on a remote target for now. +if ![isnative] then { + return 0 +} + +# This test uses GCC-specific syntax. +if [get_compiler_info not-used] { + return -1 +} + +if {![test_compiler_info "gcc-*"]} { + return 0 +} + +proc do_test { lib1opts lib2opts lib1first } { + global objdir srcdir subdir + + set testopts "" + if {$lib1opts == ""} { + append testopts "lib1 nodebug, " + } else { + append testopts "lib1 debug, " + } + if {$lib2opts == ""} { + append testopts "lib2 nodebug, " + } else { + append testopts "lib2 debug, " + } + if {$lib1first} { + append testopts "lib1 first" + } else { + append testopts "lib2 first" + } + + set testfile "solib-weak" + set srcfile ${testfile}.c + set binfile ${objdir}/${subdir}/${testfile} + + set libfile1 "weaklib1" + set libfile2 "weaklib2" + set lib1src ${srcdir}/${subdir}/${libfile1}.c + set lib2src ${srcdir}/${subdir}/${libfile2}.c + set lib1 ${objdir}/${subdir}/${libfile1}.sl + set lib2 ${objdir}/${subdir}/${libfile2}.sl + + if $lib1first { + set exec_opts [list debug shlib=${lib1} shlib=${lib2}] + set expected_file ${libfile1} + } else { + set exec_opts [list debug shlib=${lib2} shlib=${lib1}] + set expected_file ${libfile2} + } + + if { [gdb_compile_shlib ${lib1src} ${lib1} ${lib1opts}] != "" + || [gdb_compile_shlib ${lib2src} ${lib2} ${lib2opts}] != "" + || [gdb_compile "${srcdir}/${subdir}/${srcfile}" ${binfile} executable $exec_opts] != ""} { + return -1 + } + + gdb_exit + gdb_start + gdb_reinitialize_dir $srcdir/$subdir + gdb_load ${binfile} + + runto_main + + gdb_breakpoint "bar" + + # If the library which will be used is compiled without debugging + # information, GDB will pick the wrong copy of "bar", i.e. the one + # with debugging information. + + if {(${lib1opts} == "" && ${lib2opts} != "" && ${lib1first} == 1) + || (${lib1opts} != "" && ${lib2opts} == "" && ${lib1first} == 0)} { + setup_kfail *-*-* gdb/1824 + } + + gdb_test "continue" "Breakpoint .* bar .*${expected_file}\\..*" \ + "run to breakpoint - $testopts" +} + +foreach lib1opts {{} {debug}} { + foreach lib2opts {{} {debug}} { + foreach lib1first {1 0} { + do_test $lib1opts $lib2opts $lib1first + } + } +} |