diff options
Diffstat (limited to 'binutils-2.21/ld/testsuite/ld-gc')
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-gc/abi-note.d | 9 | ||||
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-gc/abi-note.s | 15 | ||||
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-gc/dummy.s | 1 | ||||
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-gc/gc.c | 41 | ||||
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-gc/gc.exp | 102 | ||||
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-gc/noent.d | 3 | ||||
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-gc/noent.s | 4 | ||||
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-gc/pr11218-1.c | 5 | ||||
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-gc/pr11218-2.c | 13 | ||||
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-gc/pr11218.d | 5 | ||||
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-gc/start.d | 9 | ||||
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-gc/start.s | 6 |
12 files changed, 213 insertions, 0 deletions
diff --git a/binutils-2.21/ld/testsuite/ld-gc/abi-note.d b/binutils-2.21/ld/testsuite/ld-gc/abi-note.d new file mode 100644 index 0000000..aed0a8b --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-gc/abi-note.d @@ -0,0 +1,9 @@ +#name: --gc-sections with note section +#ld: --gc-sections -e _start +#readelf: -S --wide +#target: *-*-linux* +#notarget: *-*-*aout *-*-*oldld + +#... +.* .note.ABI-tag[ ]+NOTE.* +#... diff --git a/binutils-2.21/ld/testsuite/ld-gc/abi-note.s b/binutils-2.21/ld/testsuite/ld-gc/abi-note.s new file mode 100644 index 0000000..22536c0 --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-gc/abi-note.s @@ -0,0 +1,15 @@ + .text + .global _start +_start: + .long 1 + + .section ".note.ABI-tag", "a" + .p2align 2 + .long 1f - 0f /* name length */ + .long 3f - 2f /* data length */ + .long 1 /* note type */ +0: .asciz "GNU" /* vendor name */ +1: .p2align 2 +2: .long 1 + .long 2 +3: .p2align 2 /* pad out section */ diff --git a/binutils-2.21/ld/testsuite/ld-gc/dummy.s b/binutils-2.21/ld/testsuite/ld-gc/dummy.s new file mode 100644 index 0000000..403f980 --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-gc/dummy.s @@ -0,0 +1 @@ +# Dummy diff --git a/binutils-2.21/ld/testsuite/ld-gc/gc.c b/binutils-2.21/ld/testsuite/ld-gc/gc.c new file mode 100644 index 0000000..3b0e655 --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-gc/gc.c @@ -0,0 +1,41 @@ +int unused_var = 7; +int used_var = 7; + +int +unused_func (int v) +{ + return 3 * unused_var; +} + +int +__attribute__((noinline)) +used_func (int v) +{ + return 2 * used_var; +} + +int +main (void) +{ + return used_func (5); +} + +void +dummy_func (void) +{ + /* These are here in case the target prepends an underscore to + the start of function names. They are inside a dummy function + so that they will appear at the end of gcc's assembler output, + after the definitions of main() and used_func(), rather than + at the beginning of the file. */ + + __asm__(".ifndef main\n\ +.global main\n\ +.set main, _main\n\ +.endif"); + + __asm__(".ifndef used_func\n\ +.global used_func\n\ +.set used_func, _used_func\n\ +.endif"); +} diff --git a/binutils-2.21/ld/testsuite/ld-gc/gc.exp b/binutils-2.21/ld/testsuite/ld-gc/gc.exp new file mode 100644 index 0000000..7005442 --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-gc/gc.exp @@ -0,0 +1,102 @@ +# Expect script for ld-gc tests +# Copyright 2008, 2009, 2010 +# 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. + +# These tests require --gc-sections +if ![check_gc_sections_available] { + return +} + +set cflags "-ffunction-sections -fdata-sections" +set objfile "tmpdir/gc.o" + +if { [is_remote host] || [which $CC] != 0 } { + ld_compile "$CC -c $CFLAGS $cflags" $srcdir/$subdir/gc.c $objfile +} + +proc test_gc { testname filename linker ldflags} { + global nm + global srcdir + global subdir + global nm_output + global objfile + + if ![file readable $objfile ] { + untested $testname + return + } + + set outfile "tmpdir/$filename" + set options "-L$srcdir/$subdir" + append options " " $ldflags " " [ld_simple_link_defsyms] " " $objfile + + # SH64 targets needs an extra ld option for this test. + if [istarget sh64*-*-*] { + if [istarget sh64*l*-*-*] { + set options "-mshlelf32 $options" + } else { + set options "-mshelf32 $options" + } + } + + if ![ld_simple_link $linker $outfile $options] { + fail $testname + return + } + if ![ld_nm $nm "" $outfile] { + unresolved $testname + return + } + if {![info exists nm_output(used_func)] \ + || ![info exists nm_output(used_var)]} { + send_log "used sections do not exist\n" + verbose "used sections do not exist" + fail $testname + return + } + #ppc64_elf_gc_mark_hook needs to be taught how to look through + #the .toc section to properly mark variable sections for gc. + setup_xfail "powerpc64*-*-*" + if {[info exists nm_output(unused_func)] \ + || [info exists nm_output(unused_var)]} { + send_log "unused section still here\n" + verbose "unused section still here" + fail $testname + return + } + pass $testname +} + +test_gc "Check --gc-section" "gcexe" $ld "--gc-sections -e main" +test_gc "Check --gc-section/-q" "gcrexe" $ld "--gc-sections -q -e main" +test_gc "Check --gc-section/-r/-e" "gcrel" $ld "-r --gc-sections -e main" +test_gc "Check --gc-section/-r/-u" "gcrel" $ld "-r --gc-sections -u used_func" + +run_dump_test "noent" +run_dump_test "abi-note" +run_dump_test "start" +if { [is_remote host] || [which $CC] != 0 } { + if { [istarget "*-*-linux*"] } { + ld_compile "$CC -fPIC $CFLAGS $cflags" $srcdir/$subdir/pr11218-1.c tmpdir/pr11218-1.o + ld_simple_link $ld tmpdir/pr11218-1.so "-shared tmpdir/pr11218-1.o" + ld_compile "$CC -c $CFLAGS $cflags" $srcdir/$subdir/pr11218-2.c tmpdir/pr11218-2.o + run_dump_test "pr11218" + } +} diff --git a/binutils-2.21/ld/testsuite/ld-gc/noent.d b/binutils-2.21/ld/testsuite/ld-gc/noent.d new file mode 100644 index 0000000..1741a74 --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-gc/noent.d @@ -0,0 +1,3 @@ +# name: --gc-sections -r without -e +# ld: --gc-sections -r +# error: gc-sections requires either an entry or an undefined symbol diff --git a/binutils-2.21/ld/testsuite/ld-gc/noent.s b/binutils-2.21/ld/testsuite/ld-gc/noent.s new file mode 100644 index 0000000..ea74bf4 --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-gc/noent.s @@ -0,0 +1,4 @@ + .text + .globl entry +entry: + .long 0 diff --git a/binutils-2.21/ld/testsuite/ld-gc/pr11218-1.c b/binutils-2.21/ld/testsuite/ld-gc/pr11218-1.c new file mode 100644 index 0000000..9cc79f0 --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-gc/pr11218-1.c @@ -0,0 +1,5 @@ +extern void unresolved_detected_at_runtime_not_at_linktime(void); +void foo_in_so(void) +{ + unresolved_detected_at_runtime_not_at_linktime(); +} diff --git a/binutils-2.21/ld/testsuite/ld-gc/pr11218-2.c b/binutils-2.21/ld/testsuite/ld-gc/pr11218-2.c new file mode 100644 index 0000000..2515bc6 --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-gc/pr11218-2.c @@ -0,0 +1,13 @@ +extern void foo_in_so(void); + +void call_unresolved(void) +{ + unresolved_detected_at_runtime_not_at_linktime(); +} + +int main(int argc, char *argv[]) +{ + foo_in_so(); + + return 0; +} diff --git a/binutils-2.21/ld/testsuite/ld-gc/pr11218.d b/binutils-2.21/ld/testsuite/ld-gc/pr11218.d new file mode 100644 index 0000000..27019a8 --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-gc/pr11218.d @@ -0,0 +1,5 @@ +# name: --gc-sections with shared library +# source: dummy.s +# ld: --gc-sections -e main tmpdir/pr11218-2.o tmpdir/pr11218-1.so +# target: *-*-linux* +# error: undefined reference to `unresolved_detected_at_runtime_not_at_linktime' diff --git a/binutils-2.21/ld/testsuite/ld-gc/start.d b/binutils-2.21/ld/testsuite/ld-gc/start.d new file mode 100644 index 0000000..80c43d9 --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-gc/start.d @@ -0,0 +1,9 @@ +#name: --gc-sections with __start_ +#ld: --gc-sections -e _start +#nm: -n +#target: *-*-linux* +#notarget: *-*-*aout *-*-*oldld + +#... +[0-9a-f]+ A +__start__foo +#... diff --git a/binutils-2.21/ld/testsuite/ld-gc/start.s b/binutils-2.21/ld/testsuite/ld-gc/start.s new file mode 100644 index 0000000..d9f1b2d --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-gc/start.s @@ -0,0 +1,6 @@ +.globl _start +_start: + .long __start__foo + .section _foo,"aw",%progbits +foo: + .long 1 |