# This testcase is part of GDB, the GNU debugger. # Copyright 2010-2013 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 . # 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 arm*-*-symbianelf*] && ![istarget powerpc-*-eabi*]} { return 0 } standard_testfile .S set srcmainfile start.c set executable ${testfile} 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"