aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@bitrange.com>2017-03-28 23:43:09 +0200
committerHans-Peter Nilsson <hp@bitrange.com>2017-03-28 23:43:09 +0200
commit086554e8e6b222518f12acab34e6cc7b5af7fde7 (patch)
tree2659c075142a0cdf2d7daf584d94e2fdea462403 /ld
parentfe5f7374bef8f23ffa0fe0dee0f9b05e0a218a29 (diff)
downloadfsf-binutils-gdb-086554e8e6b222518f12acab34e6cc7b5af7fde7.zip
fsf-binutils-gdb-086554e8e6b222518f12acab34e6cc7b5af7fde7.tar.gz
fsf-binutils-gdb-086554e8e6b222518f12acab34e6cc7b5af7fde7.tar.bz2
Fix for PR ld/16044: elf32-cris.c h->plt.refcount inconsistency
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/testsuite/ld-cris/dso-1c.s2
-rw-r--r--ld/testsuite/ld-cris/dso-2b.s2
-rw-r--r--ld/testsuite/ld-cris/dso-4.s6
-rw-r--r--ld/testsuite/ld-cris/pr16044.d43
5 files changed, 59 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index d717cce..84ef78e 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2017-03-28 Hans-Peter Nilsson <hp@axis.com>
+
+ PR ld/16044
+ * testsuite/ld-cris/pr16044.d, testsuite/ld-cris/dso-1c.s,
+ testsuite/ld-cris/dso-2b.s, testsuite/ld-cris/dso-4.s: New test.
+
2017-03-21 Sandra Loosemore <sandra@codesourcery.com>
* testsuite/lib/ld-lib.exp (check_shared_lib_support): Return
diff --git a/ld/testsuite/ld-cris/dso-1c.s b/ld/testsuite/ld-cris/dso-1c.s
new file mode 100644
index 0000000..92ad4ee
--- /dev/null
+++ b/ld/testsuite/ld-cris/dso-1c.s
@@ -0,0 +1,2 @@
+ .include "dso-1.s"
+ .hidden dsofn
diff --git a/ld/testsuite/ld-cris/dso-2b.s b/ld/testsuite/ld-cris/dso-2b.s
new file mode 100644
index 0000000..f1fbf14
--- /dev/null
+++ b/ld/testsuite/ld-cris/dso-2b.s
@@ -0,0 +1,2 @@
+ .include "dso-2.s"
+ .hidden dsofn
diff --git a/ld/testsuite/ld-cris/dso-4.s b/ld/testsuite/ld-cris/dso-4.s
new file mode 100644
index 0000000..767a0d8
--- /dev/null
+++ b/ld/testsuite/ld-cris/dso-4.s
@@ -0,0 +1,6 @@
+ .text
+ .global export_2
+ .type export_2,@function
+export_2:
+ .hidden dsofn
+ move.d dsofn:GOTOFF,$r4
diff --git a/ld/testsuite/ld-cris/pr16044.d b/ld/testsuite/ld-cris/pr16044.d
new file mode 100644
index 0000000..e5d373d
--- /dev/null
+++ b/ld/testsuite/ld-cris/pr16044.d
@@ -0,0 +1,43 @@
+#source: dso-4.s
+#source: dso-2b.s
+#source: dso-1c.s
+#as: --pic --no-underscore --em=criself -I$srcdir/$subdir
+#ld: --shared -m crislinux
+#readelf: -s -r
+
+# PR 16044 is about a (compile-time-non-local) hidden function symbol,
+# entered as an undef reference with a R_CRIS_32_PLT_GOTREL relocation
+# referring to a hidden symbol, later defined. Here, we invalidly
+# incremented the h->plt.refcount (from -1) as part of that relocation
+# processing. There are some PLTGOT relocations. As there are no
+# circumstances requiring a PLT entry for this symbol, its PLT entry
+# can be eliminated and the PLTGOT relocations can be made to a static
+# element in the GOT, relocated with the absolute-to-relative
+# R_CRIS_RELATIVE relocation without symbol lookup. As part of
+# eliminating unneeded PLT entries (and PLTGOT to "static" GOT
+# elimination), a later pass noticed the inconsistency through an
+# assert.
+#
+# The key points in this dump that may need future adjustments are the
+# single dynamic relocation, that the dsofn symbol it points to, is
+# local, its absence from the dynamic symbol table and that the
+# relocation and symbol values match.
+
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
+ Offset[ ]+Info[ ]+Type[ ]+Sym\.Value Sym\. Name \+ Addend
+[0-9a-f]+ 0+[0-9a-f]+ R_CRIS_RELATIVE[ ]+184
+
+Symbol table '\.dynsym' contains 7 entries:
+ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
+ +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND
+ +1: [0-9a-f]+ +0 +SECTION +LOCAL +DEFAULT +5
+ +2: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +5 export_1
+ +3: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +7 __bss_start
+ +4: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +7 _edata
+ +5: [0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +7 _end
+ +6: [0-9a-f]+ +0 +FUNC +GLOBAL +DEFAULT +5 export_2
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ +[0-9]+: 0+184 +2 FUNC + LOCAL + DEFAULT + 5 dsofn
+#...