diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 90158174106..9722fa0e6da 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,19 @@ +2011-11-29 Maciej W. Rozycki + + PR ld/10144 + * lib/ld-lib.exp (run_ld_link_tests): Handle sources from other + directories. + (run_ld_link_exec_tests): Likewise. + (run_cc_link_tests): Likewise. + * ld-elf/comm-data1.sd: New test. + * ld-elf/comm-data1.s: Source for the new test. + * ld-elf/comm-data2.sd: New test. + * ld-elf/comm-data2.rd: Likewise. + * ld-elf/comm-data2.xd: Likewise. + * ld-elf/comm-data2.s: Source for the new tests. + * ld-elf/comm-data.exp: New file. + * ld-mips-elf/comm-data.exp: Likewise. + 2011-11-09 Matthew Gretton-Dann * ld-arm/jump-reloc-veneers.s: Update for changes to assembler output. diff --git a/ld/testsuite/ld-elf/comm-data.exp b/ld/testsuite/ld-elf/comm-data.exp new file mode 100644 index 00000000000..86e95d11214 --- /dev/null +++ b/ld/testsuite/ld-elf/comm-data.exp @@ -0,0 +1,76 @@ +# Expect script for common symbol override. +# +# Copyright 2011 Free Software Foundation, Inc. +# +# This file is part of the GNU Binutils. +# +# 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. +# + +# +# Written by Maciej W. Rozycki +# + +# Exclude non-ELF targets. +if ![is_elf_format] { + return +} + +# Exclude non-Linux targets; feel free to include your favorite one +# if you like. +if ![istarget *-*-linux*] { + return +} + +set testname "Common symbol override test" + +# Define a global symbol. +run_ld_link_tests [list \ + [list \ + "$testname (auxiliary shared object build)" \ + "-shared" \ + "" \ + { comm-data1.s } \ + { \ + { readelf -s comm-data1.sd } \ + } \ + "libcomm-data.so" \ + ] \ +] + +# Set the pointer size according to the ELF flavor. +set AFLAGS "" +if [is_elf64 "tmpdir/libcomm-data.so"] { + append AFLAGS " --defsym ELF64=1" +} + +# Verify that a common symbol has been converted to an undefined +# reference to the global symbol of the same name defined above +# and that the debug reference has been dropped. +run_ld_link_tests [list \ + [list \ + "$testname" \ + "-Ltmpdir -lcomm-data" \ + "$AFLAGS" \ + { comm-data2.s } \ + { \ + { readelf -s comm-data2.sd } \ + { readelf -r comm-data2.rd } \ + { readelf "-x .debug_foo" comm-data2.xd } \ + } \ + "comm-data" \ + ] \ +] diff --git a/ld/testsuite/ld-elf/comm-data1.s b/ld/testsuite/ld-elf/comm-data1.s new file mode 100644 index 00000000000..ac20a640b1d --- /dev/null +++ b/ld/testsuite/ld-elf/comm-data1.s @@ -0,0 +1,6 @@ + .section .rodata,"a",%progbits + .balign 8 + .globl foo + .type foo,%object +foo: + .skip 4, 0 diff --git a/ld/testsuite/ld-elf/comm-data1.sd b/ld/testsuite/ld-elf/comm-data1.sd new file mode 100644 index 00000000000..d00435bd48b --- /dev/null +++ b/ld/testsuite/ld-elf/comm-data1.sd @@ -0,0 +1,10 @@ +Symbol table '\.dynsym' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +#... + +[0-9]+: +[0-9a-f]+ +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo +#... +Symbol table '\.symtab' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +#... + +[0-9]+: +[0-9a-f]+ +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo +#pass diff --git a/ld/testsuite/ld-elf/comm-data2.rd b/ld/testsuite/ld-elf/comm-data2.rd new file mode 100644 index 00000000000..b852c168953 --- /dev/null +++ b/ld/testsuite/ld-elf/comm-data2.rd @@ -0,0 +1 @@ +There are no relocations in this file\. diff --git a/ld/testsuite/ld-elf/comm-data2.s b/ld/testsuite/ld-elf/comm-data2.s new file mode 100644 index 00000000000..87f981e53a2 --- /dev/null +++ b/ld/testsuite/ld-elf/comm-data2.s @@ -0,0 +1,14 @@ + .text + .globl _start + .globl __start +_start: +__start: + .comm foo, 4, 4 + .section .debug_foo,"",%progbits + .balign 16 + .ifdef ELF64 + .8byte foo + .else + .4byte foo + .endif + .balign 16 diff --git a/ld/testsuite/ld-elf/comm-data2.sd b/ld/testsuite/ld-elf/comm-data2.sd new file mode 100644 index 00000000000..0e44eeb4595 --- /dev/null +++ b/ld/testsuite/ld-elf/comm-data2.sd @@ -0,0 +1,10 @@ +Symbol table '\.dynsym' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +#... + +[0-9]+: +0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +foo +#... +Symbol table '\.symtab' contains [0-9]+ entries: + +Num: +Value +Size +Type +Bind +Vis +Ndx +Name +#... + +[0-9]+: +0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +foo +#pass diff --git a/ld/testsuite/ld-elf/comm-data2.xd b/ld/testsuite/ld-elf/comm-data2.xd new file mode 100644 index 00000000000..37a6d902373 --- /dev/null +++ b/ld/testsuite/ld-elf/comm-data2.xd @@ -0,0 +1,2 @@ +Hex dump of section '\.debug_foo': + +0x0+ +00000000 00000000 00000000 00000000 +\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\. diff --git a/ld/testsuite/ld-mips-elf/comm-data.exp b/ld/testsuite/ld-mips-elf/comm-data.exp new file mode 100644 index 00000000000..bbd3c5589c7 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/comm-data.exp @@ -0,0 +1,86 @@ +# Expect script for common symbol override, MIPS variation. +# +# Copyright 2011 Free Software Foundation, Inc. +# +# This file is part of the GNU Binutils. +# +# 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. +# + +# +# Written by Maciej W. Rozycki +# + +# Exclude non-Linux targets; feel free to include your favorite one +# if you like. +if ![istarget mips*-*-linux*] { + return +} + +proc mips_comm_data_test { abi flag emul reloc } { + + set testname "MIPS $abi/$reloc common symbol override test" + + # There's no "-z copyreloc" option, deal with it. + set ZFLAG [string map [list copyreloc "" nocopyreloc "-z $reloc"] $reloc] + set AFLAGS "$flag -EB" + set LDFLAGS "-m$emul" + + # Define a global symbol. + run_ld_link_tests [list \ + [list \ + "$testname (auxiliary shared object build)" \ + "$LDFLAGS -shared" \ + "$AFLAGS -call_shared" \ + { ../ld-elf/comm-data1.s } \ + { \ + { readelf -s ../ld-elf/comm-data1.sd } \ + } \ + "libmips-$abi-$reloc-comm-data.so" \ + ] \ + ] + + # Set the pointer size according to the ABI. + if { $abi == "n64" } { + append AFLAGS " --defsym ELF64=1" + } + + # Verify that a common symbol has been converted to an undefined + # reference to the global symbol of the same name defined above + # and that the debug reference has been dropped. + run_ld_link_tests [list \ + [list \ + "$testname" \ + "$LDFLAGS $ZFLAG -Ltmpdir -lmips-$abi-$reloc-comm-data" \ + "$AFLAGS -call_nonpic" \ + { ../ld-elf/comm-data2.s } \ + { \ + { readelf -s ../ld-elf/comm-data2.sd } \ + { readelf -r ../ld-elf/comm-data2.rd } \ + { readelf "-x .debug_foo" ../ld-elf/comm-data2.xd } \ + } \ + "mips-$abi-$reloc-comm-data" \ + ] \ + ] +} + +set abis { o32 -32 elf32btsmip n32 -n32 elf32btsmipn32 n64 -64 elf64btsmip } +set relocs { copyreloc nocopyreloc } +foreach { abi flag emul } $abis { + foreach reloc $relocs { + mips_comm_data_test $abi $flag $emul $reloc + } +} diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp index 2c4512b438a..30098c1ae20 100644 --- a/ld/testsuite/lib/ld-lib.exp +++ b/ld/testsuite/lib/ld-lib.exp @@ -964,11 +964,12 @@ proc run_ld_link_tests { ldtests } { # Assemble each file in the test. foreach src_file $src_files { - set objfile "tmpdir/[file rootname $src_file].o" + set fileroot "[file rootname [file tail $src_file]]" + set objfile "tmpdir/$fileroot.o" lappend objfiles $objfile if { [file extension $src_file] == ".c" } { - set as_file "tmpdir/[file rootname $src_file].s" + set as_file "tmpdir/$fileroot.s" if ![ld_compile "$CC -S $CFLAGS $cflags" $srcdir/$subdir/$src_file $as_file] { set is_unresolved 1 break @@ -1162,7 +1163,8 @@ proc run_ld_link_exec_tests { targets_to_xfail ldtests } { # Assemble each file in the test. foreach src_file $src_files { - set objfile "tmpdir/[file rootname $src_file].o" + set fileroot "[file rootname [file tail $src_file]]" + set objfile "tmpdir/$fileroot.o" lappend objfiles $objfile # We ignore warnings since some compilers may generate @@ -1284,7 +1286,8 @@ proc run_cc_link_tests { ldtests } { # Compile each file in the test. foreach src_file $src_files { - set objfile "tmpdir/[file rootname $src_file].o" + set fileroot "[file rootname [file tail $src_file]]" + set objfile "tmpdir/$fileroot.o" lappend objfiles $objfile # We ignore warnings since some compilers may generate