diff options
Diffstat (limited to 'gdb/testsuite/gdb.base/dup-sect.exp')
-rw-r--r-- | gdb/testsuite/gdb.base/dup-sect.exp | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/dup-sect.exp b/gdb/testsuite/gdb.base/dup-sect.exp new file mode 100644 index 0000000..08ab1d0 --- /dev/null +++ b/gdb/testsuite/gdb.base/dup-sect.exp @@ -0,0 +1,79 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2010 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/>. + +# Test inappropriate offseting of multiple sections with the same name. +# When kept in object file (before final executable link) it still works. +# When separate debug info file is not used it still works. +# When the ELF symbol table is kept in the main binary it still works. +# Used .S file as in .c file we would need __attriute__((section)) which is +# a GCC extension. + +# This test can only be run on targets which support ELF and use gas. +# For now pick a sampling of likely targets. +if {![istarget *-*-linux*] + && ![istarget *-*-gnu*] + && ![istarget *-*-elf*] + && ![istarget arm-*-eabi*] + && ![istarget powerpc-*-eabi*]} { + return 0 +} + +set testfile dup-sect +set srcfile ${testfile}.S +set srcmainfile start.c +set executable ${testfile} +set binfile ${objdir}/${subdir}/${executable} + +if {[build_executable ${testfile}.exp $executable [list ${srcfile} ${srcmainfile}] {}] == -1} { + return -1 +} + +set test "rename section" +set objcopy_program [transform objcopy] +set result [catch "exec $objcopy_program --rename-section sect2=sect1 $binfile" output] +verbose "result is $result" +verbose "output is $output" +if {$result != 0} { + fail $test + return +} +pass $test + +set test "split" +if {[gdb_gnu_strip_debug $binfile] != 0} { + fail $test +} else { + pass $test +} + +# gdb_gnu_strip_debug uses only --strip-debug and keeps the ELF symbol table +# in $binfile. +set test "strip" +set strip_program [transform strip] +set result [catch "exec $strip_program $binfile" output] +verbose "result is $result" +verbose "output is $output" +if {$result != 0} { + fail $test + return +} +pass $test + +clean_restart $executable + +gdb_test "p/d *(const char *) &var1" " = 1" "var1 after strip" +gdb_test "p/d *(const char *) &var2" " = 2" "var2 after strip" |