summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base/dup-sect.exp
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2010-03-25 20:29:30 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2010-03-25 20:29:30 +0000
commit82ccf5a5777fc9fda05b4d107a476a69b66002dc (patch)
treea758bf3b7cde537e14fd7a6cda007743b6f9609f /gdb/testsuite/gdb.base/dup-sect.exp
parentba7f26422c092fa655b9e3aac6e59f1e6ec60f6e (diff)
downloadbinutils-gdb-82ccf5a5777fc9fda05b4d107a476a69b66002dc.tar.gz
gdb/
* symfile.c (build_section_addr_info_from_bfd): New. (build_section_addr_info_from_objfile): Base it on build_section_addr_info_from_bfd. (addrs_section_compar, addrs_section_sort): New. (addr_info_make_relative): New variables my_cleanup, abfd_addrs, addrs_sorted, abfd_addrs_sorted and addrs_to_abfd_addrs. Build addrs_to_abfd_addrs. Use it for recalculating ADDRS. gdb/testsuite/ * gdb.base/dup-sect.exp, gdb.base/dup-sect.S: New.
Diffstat (limited to 'gdb/testsuite/gdb.base/dup-sect.exp')
-rw-r--r--gdb/testsuite/gdb.base/dup-sect.exp79
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 00000000000..08ab1d04641
--- /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"