From b436d85411e682b845d3d0d1d385e00504a4411a Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 14 Mar 2011 15:52:53 +0000 Subject: bfd/ * elf32-arm.c (elf32_arm_final_link_relocate): Always fill in the GOT entry here, rather than leaving it to finish_dynamic_symbol. Only create a dynamic relocation for local references if info->shared. (allocate_dynrelocs_for_symbol): Update dynamic relocation allocation accordingly. (elf32_arm_finish_dynamic_symbol): Don't initialise the GOT entry here. ld/testsuite/ * ld-arm/exec-got-1a.s, ld-arm/exec-got-1b.s, ld-arm/exec-got-1.d, ld-arm/unresolved-1.s, ld-arm/unresolved-1.d, ld-arm/unresolved-1-dyn.d: New tests. * ld-arm/arm-elf.exp: Run them. --- ld/testsuite/ChangeLog | 7 +++++++ ld/testsuite/ld-arm/arm-elf.exp | 10 ++++++++++ ld/testsuite/ld-arm/exec-got-1.d | 4 ++++ ld/testsuite/ld-arm/exec-got-1a.s | 5 +++++ ld/testsuite/ld-arm/exec-got-1b.s | 10 ++++++++++ ld/testsuite/ld-arm/unresolved-1-dyn.d | 8 ++++++++ ld/testsuite/ld-arm/unresolved-1.d | 8 ++++++++ ld/testsuite/ld-arm/unresolved-1.s | 6 ++++++ 8 files changed, 58 insertions(+) create mode 100644 ld/testsuite/ld-arm/exec-got-1.d create mode 100644 ld/testsuite/ld-arm/exec-got-1a.s create mode 100644 ld/testsuite/ld-arm/exec-got-1b.s create mode 100644 ld/testsuite/ld-arm/unresolved-1-dyn.d create mode 100644 ld/testsuite/ld-arm/unresolved-1.d create mode 100644 ld/testsuite/ld-arm/unresolved-1.s (limited to 'ld') diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 603089c..fdeaf77 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2011-03-14 Richard Sandiford + + * ld-arm/exec-got-1a.s, ld-arm/exec-got-1b.s, ld-arm/exec-got-1.d, + ld-arm/unresolved-1.s, ld-arm/unresolved-1.d, + ld-arm/unresolved-1-dyn.d: New tests. + * ld-arm/arm-elf.exp: Run them. + 2011-03-12 H.J. Lu * ld-x86-64/tlsgd4.dd: New. diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp index 798b2cb..dcdc231 100644 --- a/ld/testsuite/ld-arm/arm-elf.exp +++ b/ld/testsuite/ld-arm/arm-elf.exp @@ -295,6 +295,14 @@ set armelftests { {"Data only mapping symbols" "-T data-only-map.ld -Map map" "" {data-only-map.s} {{objdump -dr data-only-map.d}} "data-only-map"} + {"GOT relocations in executables (setup)" "-shared" + "" {exec-got-1a.s} + {} + "exec-got-1.so"} + {"GOT relocations in executables" "tmpdir/exec-got-1.so" + "" {exec-got-1b.s} + {{readelf --relocs exec-got-1.d}} + "exec-got-1"} } run_ld_link_tests $armelftests @@ -582,3 +590,5 @@ run_dump_test "attr-merge-vfp-5r" run_dump_test "attr-merge-vfp-6" run_dump_test "attr-merge-vfp-6r" run_dump_test "attr-merge-incompatible" +run_dump_test "unresolved-1" +run_dump_test "unresolved-1-dyn" diff --git a/ld/testsuite/ld-arm/exec-got-1.d b/ld/testsuite/ld-arm/exec-got-1.d new file mode 100644 index 0000000..af067d3 --- /dev/null +++ b/ld/testsuite/ld-arm/exec-got-1.d @@ -0,0 +1,4 @@ + +Relocation section '\.rel\.dyn' .* + Offset .* +.* R_ARM_GLOB_DAT * 00000000 * foo diff --git a/ld/testsuite/ld-arm/exec-got-1a.s b/ld/testsuite/ld-arm/exec-got-1a.s new file mode 100644 index 0000000..6a7637c --- /dev/null +++ b/ld/testsuite/ld-arm/exec-got-1a.s @@ -0,0 +1,5 @@ + .globl foo + .type foo,%object + .size foo,4 + .data +foo: .word 1 diff --git a/ld/testsuite/ld-arm/exec-got-1b.s b/ld/testsuite/ld-arm/exec-got-1b.s new file mode 100644 index 0000000..71546d7 --- /dev/null +++ b/ld/testsuite/ld-arm/exec-got-1b.s @@ -0,0 +1,10 @@ + .globl _start + .type _start,%function +_start: + ldr r1,1f + ldr r1,2f +1: + .word foo(GOT) +2: + .word _start(GOT) + .size _start,.-_start diff --git a/ld/testsuite/ld-arm/unresolved-1-dyn.d b/ld/testsuite/ld-arm/unresolved-1-dyn.d new file mode 100644 index 0000000..21cd959 --- /dev/null +++ b/ld/testsuite/ld-arm/unresolved-1-dyn.d @@ -0,0 +1,8 @@ +#source: unresolved-1.s +#ld: --warn-unresolved tmpdir/mixed-lib.so +#warning: \(\.text\+0x8\): warning: undefined reference to `foo' +#readelf: -r + +Relocation section '\.rel\.dyn' .* + Offset .* +.* R_ARM_GLOB_DAT +00000000 +foo diff --git a/ld/testsuite/ld-arm/unresolved-1.d b/ld/testsuite/ld-arm/unresolved-1.d new file mode 100644 index 0000000..cfc1b04 --- /dev/null +++ b/ld/testsuite/ld-arm/unresolved-1.d @@ -0,0 +1,8 @@ +#ld: --warn-unresolved +#warning: \(\.text\+0x8\): warning: undefined reference to `foo' +#objdump: -sj.rel.dyn -sj.got + +.* + +Contents of section \.got: + *[^ ]* 00000000 00000000 00000000 00000000 .* diff --git a/ld/testsuite/ld-arm/unresolved-1.s b/ld/testsuite/ld-arm/unresolved-1.s new file mode 100644 index 0000000..4db4aea --- /dev/null +++ b/ld/testsuite/ld-arm/unresolved-1.s @@ -0,0 +1,6 @@ + .globl _start +_start: + ldr r4,1f + mov pc,lr +1: + .word foo(GOT) -- cgit v1.1