aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2011-03-14 15:52:53 +0000
committerRichard Sandiford <rdsandiford@googlemail.com>2011-03-14 15:52:53 +0000
commitb436d85411e682b845d3d0d1d385e00504a4411a (patch)
tree96d6b4dca871a4eb7e8b2c13cdad2f7b54091485 /ld
parent47beaa6a213f48eaf6e0bd3d3768ba559c42b1b6 (diff)
downloadgdb-b436d85411e682b845d3d0d1d385e00504a4411a.zip
gdb-b436d85411e682b845d3d0d1d385e00504a4411a.tar.gz
gdb-b436d85411e682b845d3d0d1d385e00504a4411a.tar.bz2
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.
Diffstat (limited to 'ld')
-rw-r--r--ld/testsuite/ChangeLog7
-rw-r--r--ld/testsuite/ld-arm/arm-elf.exp10
-rw-r--r--ld/testsuite/ld-arm/exec-got-1.d4
-rw-r--r--ld/testsuite/ld-arm/exec-got-1a.s5
-rw-r--r--ld/testsuite/ld-arm/exec-got-1b.s10
-rw-r--r--ld/testsuite/ld-arm/unresolved-1-dyn.d8
-rw-r--r--ld/testsuite/ld-arm/unresolved-1.d8
-rw-r--r--ld/testsuite/ld-arm/unresolved-1.s6
8 files changed, 58 insertions, 0 deletions
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 <richard.sandiford@linaro.org>
+
+ * 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 <hongjiu.lu@intel.com>
* 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)