From: Hans-Peter Nilsson Date: Tue, 24 Apr 2012 16:14:31 +0000 (+0000) Subject: PR ld/13990 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4646d23b552899b6993d5d71f31e8d8206b3d3ca;p=binutils-gdb.git PR ld/13990 * ld-arm/arm-elf.exp: Run gc-hidden-1. * ld-arm/gc-hidden-1.d: New test-file. * ld-arm/gcdfn.s, ld-arm/hideall.ld, ld-arm/hidfn.s, ld-arm/main.s: New files. --- diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index e91ed61473d..c18ba8e1733 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2012-04-24 Hans-Peter Nilsson + + PR ld/13990 + * ld-arm/arm-elf.exp: Run gc-hidden-1. + * ld-arm/gc-hidden-1.d: New test-file. + * ld-arm/gcdfn.s, ld-arm/hideall.ld, ld-arm/hidfn.s, + ld-arm/main.s: New files. + 2012-04-23 Andreas Schwab * ld-pie/pie.exp: Remove extra braces. diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp index 05dc7bb61bc..b6eb3d37270 100644 --- a/ld/testsuite/ld-arm/arm-elf.exp +++ b/ld/testsuite/ld-arm/arm-elf.exp @@ -759,3 +759,4 @@ run_dump_test "attr-merge-vfp-6r" run_dump_test "attr-merge-incompatible" run_dump_test "unresolved-1" run_dump_test "unresolved-1-dyn" +run_dump_test "gc-hidden-1" diff --git a/ld/testsuite/ld-arm/gc-hidden-1.d b/ld/testsuite/ld-arm/gc-hidden-1.d new file mode 100644 index 00000000000..80c7e9ed740 --- /dev/null +++ b/ld/testsuite/ld-arm/gc-hidden-1.d @@ -0,0 +1,25 @@ +#target: arm*-*-*eabi +#source: main.s +#source: gcdfn.s +#source: hidfn.s +#ld: --gc-sections --shared --version-script hideall.ld +#objdump: -dRT + +# See PR ld/13990: a forced-local PLT reference to a +# forced-local symbol is GC'ed, trigging a BFD_ASSERT. + +.*: file format elf32-.* + +DYNAMIC SYMBOL TABLE: +0+124 l d .text 0+ .text +0+ g DO \*ABS\* 0+ NS NS + +Disassembly of section .text: + +0+124 <_start>: + 124: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) + 128: eb000000 bl 130 + 12c: e8bd8000 pop {pc} + +0+130 : + 130: e8bd8000 pop {pc} diff --git a/ld/testsuite/ld-arm/gcdfn.s b/ld/testsuite/ld-arm/gcdfn.s new file mode 100644 index 00000000000..f2afae70ba2 --- /dev/null +++ b/ld/testsuite/ld-arm/gcdfn.s @@ -0,0 +1,8 @@ + .text + .globl gcdfn + .type gcdfn, %function +gcdfn: + str lr, [sp, #-4]! + bl hidfn(PLT) + ldmfd sp!, {pc} + .size gcdfn, . - gcdfn diff --git a/ld/testsuite/ld-arm/hideall.ld b/ld/testsuite/ld-arm/hideall.ld new file mode 100644 index 00000000000..077d6b5b0cb --- /dev/null +++ b/ld/testsuite/ld-arm/hideall.ld @@ -0,0 +1 @@ +NS { local: *; }; diff --git a/ld/testsuite/ld-arm/hidfn.s b/ld/testsuite/ld-arm/hidfn.s new file mode 100644 index 00000000000..a66b558d8e5 --- /dev/null +++ b/ld/testsuite/ld-arm/hidfn.s @@ -0,0 +1,7 @@ + .text + .globl hidfn + .hidden hidfn + .type hidfn, %function +hidfn: + ldmfd sp!, {pc} + .size hidfn, . - hidfn diff --git a/ld/testsuite/ld-arm/main.s b/ld/testsuite/ld-arm/main.s new file mode 100644 index 00000000000..046d19d60d2 --- /dev/null +++ b/ld/testsuite/ld-arm/main.s @@ -0,0 +1,8 @@ + .text + .globl _start + .type _start, %function +_start: + str lr, [sp, #-4]! + bl hidfn(PLT) + ldmfd sp!, {pc} + .size _start, . - _start