aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2011-03-14 15:53:33 +0000
committerRichard Sandiford <rdsandiford@googlemail.com>2011-03-14 15:53:33 +0000
commitf6e32f6db5fd9c527d978a27dbeef9f2f36f212a (patch)
treee1542b5f11897a86c8c9820dc9ff2dc4e62e22d2 /ld
parentb436d85411e682b845d3d0d1d385e00504a4411a (diff)
downloadfsf-binutils-gdb-f6e32f6db5fd9c527d978a27dbeef9f2f36f212a.zip
fsf-binutils-gdb-f6e32f6db5fd9c527d978a27dbeef9f2f36f212a.tar.gz
fsf-binutils-gdb-f6e32f6db5fd9c527d978a27dbeef9f2f36f212a.tar.bz2
bfd/
* elf32-arm.c (elf32_arm_check_relocs): Use call_reloc_p, may_need_local_target_p and may_become_dynamic_p to classify the relocation type. Don't check info->symbolic or h->def_regular when deciding whether to record a potential dynamic reloc. Don't treat potential dynamic relocs as PLT references. (elf32_arm_gc_sweep_hook): Update to match. Assert that we don't try to make the PLT reference count go negative. ld/testsuite/ * ld-arm/arm-lib-plt-2a.s, ld-arm/arm-lib-plt-2b.s, ld-arm/arm-lib-plt-2.dd, ld-arm/arm-lib-plt-2.rd: New tests. * ld-arm/arm-elf.exp: Run them.
Diffstat (limited to 'ld')
-rw-r--r--ld/testsuite/ChangeLog6
-rw-r--r--ld/testsuite/ld-arm/arm-elf.exp8
-rw-r--r--ld/testsuite/ld-arm/arm-lib-plt-2.dd4
-rw-r--r--ld/testsuite/ld-arm/arm-lib-plt-2.rd6
-rw-r--r--ld/testsuite/ld-arm/arm-lib-plt-2a.s5
-rw-r--r--ld/testsuite/ld-arm/arm-lib-plt-2b.s2
6 files changed, 31 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index fdeaf77..d253267 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,5 +1,11 @@
2011-03-14 Richard Sandiford <richard.sandiford@linaro.org>
+ * ld-arm/arm-lib-plt-2a.s, ld-arm/arm-lib-plt-2b.s,
+ ld-arm/arm-lib-plt-2.dd, ld-arm/arm-lib-plt-2.rd: New tests.
+ * ld-arm/arm-elf.exp: Run them.
+
+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.
diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp
index dcdc231..11ee575 100644
--- a/ld/testsuite/ld-arm/arm-elf.exp
+++ b/ld/testsuite/ld-arm/arm-elf.exp
@@ -80,6 +80,14 @@ set armelftests {
{"Simple PIC shared library" "-shared" "" {arm-lib-plt32.s}
{{objdump -fdw arm-lib-plt32.d} {objdump -Rw arm-lib-plt32.r}}
"arm-lib-plt32.so"}
+ {"Indirect cross-library function reference (set-up)"
+ "-shared" "" {arm-lib-plt-2a.s}
+ {}
+ "arm-lib-plt-2a.so"}
+ {"Indirect cross-library function reference"
+ "-shared tmpdir/arm-lib-plt-2a.so" "" {arm-lib-plt-2b.s}
+ {{objdump -dr arm-lib-plt-2.dd} {readelf --relocs arm-lib-plt-2.rd}}
+ "arm-lib-plt-2b.so"}
{"Simple dynamic application" "tmpdir/arm-lib.so" "" {arm-app.s}
{{objdump -fdw arm-app.d} {objdump -Rw arm-app.r}}
"arm-app"}
diff --git a/ld/testsuite/ld-arm/arm-lib-plt-2.dd b/ld/testsuite/ld-arm/arm-lib-plt-2.dd
new file mode 100644
index 0000000..fd61b73
--- /dev/null
+++ b/ld/testsuite/ld-arm/arm-lib-plt-2.dd
@@ -0,0 +1,4 @@
+
+.*: file format .*
+
+# There shouldn't be any code at all.
diff --git a/ld/testsuite/ld-arm/arm-lib-plt-2.rd b/ld/testsuite/ld-arm/arm-lib-plt-2.rd
new file mode 100644
index 0000000..3860bdd
--- /dev/null
+++ b/ld/testsuite/ld-arm/arm-lib-plt-2.rd
@@ -0,0 +1,6 @@
+
+Relocation section '.rel.dyn' .*:
+ Offset .*
+.* R_ARM_ABS32 00000000 foo
+
+# There shouldn't be any .rel.plt relocations.
diff --git a/ld/testsuite/ld-arm/arm-lib-plt-2a.s b/ld/testsuite/ld-arm/arm-lib-plt-2a.s
new file mode 100644
index 0000000..6c8edac
--- /dev/null
+++ b/ld/testsuite/ld-arm/arm-lib-plt-2a.s
@@ -0,0 +1,5 @@
+ .globl foo
+ .type foo,%function
+foo:
+ mov pc,lr
+ .size foo,.-foo
diff --git a/ld/testsuite/ld-arm/arm-lib-plt-2b.s b/ld/testsuite/ld-arm/arm-lib-plt-2b.s
new file mode 100644
index 0000000..fa5b135
--- /dev/null
+++ b/ld/testsuite/ld-arm/arm-lib-plt-2b.s
@@ -0,0 +1,2 @@
+ .data
+ .word foo