summaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@bitrange.com>2020-09-15 02:57:39 +0200
committerHans-Peter Nilsson <hp@bitrange.com>2020-09-15 02:57:39 +0200
commit4a8f181d196f85ca153fe51ca6bb40942e0e1ed7 (patch)
tree13880086e0071890f366e9c9fd9e4daab008025a /ld
parente1044e6adca7d48674d70a860b3a5939fe44323f (diff)
downloadbinutils-gdb-4a8f181d196f85ca153fe51ca6bb40942e0e1ed7.tar.gz
CRIS: fix PR ld/26589, a missing NULL check in fix for PR ld/22269
Not sure why there wasn't a NULL check in the ld/22269 patch (e01c16a8) at the time, as there was one for the corresponding patch to elf32-m68k.c (5056ba1d). Incidentally, I had missed that in 2017, as a prerequisite for the ld/22269 series, the check_relocs function finally were made "safe"! (I.e. the number of references and symbol types are final, garbage collection done, so port-specific accounting can be made sanely.) Committed. bfd: PR ld/26589 * elf32-cris.c (cris_elf_check_relocs): Add missing NULL check on argument before calling UNDEFWEAK_NO_DYNAMIC_RELOC. ld: PR ld/26589 * testsuite/ld-elf/pr26589.d, testsuite/ld-elf/locref3.s: New test.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog5
-rw-r--r--ld/testsuite/ld-cris/locref3.s14
-rw-r--r--ld/testsuite/ld-cris/pr26589.d16
3 files changed, 35 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 7ab168f1d62..c65a1887360 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,8 @@
+2020-09-15 Hans-Peter Nilsson <hp@axis.com>
+
+ PR ld/26589
+ * testsuite/ld-elf/pr26589.d, testsuite/ld-elf/locref3.s: New test.
+
2020-09-13 Alan Modra <amodra@gmail.com>
PR 26391
diff --git a/ld/testsuite/ld-cris/locref3.s b/ld/testsuite/ld-cris/locref3.s
new file mode 100644
index 00000000000..7991097d99c
--- /dev/null
+++ b/ld/testsuite/ld-cris/locref3.s
@@ -0,0 +1,14 @@
+; Test-case primarily from PR26589, which could have been locref3.d.
+; A local (like "static") function, with all ELF decorations.
+.text
+ .type alocalfunc,@function
+ .p2align 1
+alocalfunc:
+ nop
+.Lfe1:
+ .size alocalfunc,.Lfe1-alocalfunc
+
+; Random absolute reference to the address of alocalfunc, requiring a
+; runtime relocation in code that needs to be PIC/PIE.
+ .data
+ .dword alocalfunc
diff --git a/ld/testsuite/ld-cris/pr26589.d b/ld/testsuite/ld-cris/pr26589.d
new file mode 100644
index 00000000000..aee31434ca2
--- /dev/null
+++ b/ld/testsuite/ld-cris/pr26589.d
@@ -0,0 +1,16 @@
+#source: dso-1.s
+#source: locref3.s
+#as: --pic --no-underscore --em=criself
+#ld: --shared -m crislinux
+#readelf: --dyn-syms -r
+
+# Besides typical DSO stuff (libdso-1.d), we here have a data section
+# with an absolute reloc to a local symbol. For the original
+# test-case, this happened for a destructor (.dtors).
+
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 1 entry:
+ Offset[ ]+Info[ ]+Type[ ]+Sym\.Value Sym\. Name \+ Addend
+[a-f0-9]+[ ]+0+c R_CRIS_RELATIVE[ ]+ [a-f0-9]+
+
+Symbol table '\.dynsym' contains 3 entries:
+#pass