PR ld/13990
authorHans-Peter Nilsson <hp@axis.com>
Tue, 24 Apr 2012 16:14:31 +0000 (16:14 +0000)
committerHans-Peter Nilsson <hp@axis.com>
Tue, 24 Apr 2012 16:14:31 +0000 (16:14 +0000)
* 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.

ld/testsuite/ChangeLog
ld/testsuite/ld-arm/arm-elf.exp
ld/testsuite/ld-arm/gc-hidden-1.d [new file with mode: 0644]
ld/testsuite/ld-arm/gcdfn.s [new file with mode: 0644]
ld/testsuite/ld-arm/hideall.ld [new file with mode: 0644]
ld/testsuite/ld-arm/hidfn.s [new file with mode: 0644]
ld/testsuite/ld-arm/main.s [new file with mode: 0644]

index e91ed61473d208a5dc88c94fca21aeac5164efe8..c18ba8e17338607a0cb53e56d94f70a108ec6f8c 100644 (file)
@@ -1,3 +1,11 @@
+2012-04-24  Hans-Peter Nilsson  <hp@axis.com>
+
+       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  <schwab@linux-m68k.org>
 
        * ld-pie/pie.exp: Remove extra braces.
index 05dc7bb61bc31585715026197c297603c3ccac57..b6eb3d37270a6c976e74e470cbe401ce2a9a42d4 100644 (file)
@@ -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 (file)
index 0000000..80c7e9e
--- /dev/null
@@ -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 <hidfn>
+ 12c:  e8bd8000        pop     {pc}
+
+0+130 <hidfn>:
+ 130:  e8bd8000        pop     {pc}
diff --git a/ld/testsuite/ld-arm/gcdfn.s b/ld/testsuite/ld-arm/gcdfn.s
new file mode 100644 (file)
index 0000000..f2afae7
--- /dev/null
@@ -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 (file)
index 0000000..077d6b5
--- /dev/null
@@ -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 (file)
index 0000000..a66b558
--- /dev/null
@@ -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 (file)
index 0000000..046d19d
--- /dev/null
@@ -0,0 +1,8 @@
+       .text
+       .globl _start
+       .type _start, %function
+_start:
+       str     lr, [sp, #-4]!
+       bl      hidfn(PLT)
+       ldmfd   sp!, {pc}
+       .size _start, . - _start