PR22374 testcase, function pointer references in .data
authorAlan Modra <amodra@gmail.com>
Tue, 31 Oct 2017 00:43:30 +0000 (11:13 +1030)
committerAlan Modra <amodra@gmail.com>
Wed, 1 Nov 2017 08:15:34 +0000 (18:45 +1030)
Function pointer references in .data ought to use a dynamic reloc.
There shouldn't be any need for a PLT entry and definitely no copy
reloc.

This test fails on quite a few targets, but isn't something that
anyone should worry about too much.  It's really just a missed
optimization.

PR 22374
* testsuite/ld-elf/pr22374a.s,
* testsuite/ld-elf/pr22374b.s,
* testsuite/ld-elf/pr22374-1.r,
* testsuite/ld-elf/pr22374-2.r: New test.
* testsuite/ld-elf/elf.exp: Run it.

ld/ChangeLog
ld/testsuite/ld-elf/elf.exp
ld/testsuite/ld-elf/pr22374-1.r [new file with mode: 0644]
ld/testsuite/ld-elf/pr22374-2.r [new file with mode: 0644]
ld/testsuite/ld-elf/pr22374a.s [new file with mode: 0644]
ld/testsuite/ld-elf/pr22374b.s [new file with mode: 0644]

index 4fb7e84826bf8922e260b6752966f6fe00597e50..84bebb3f1fd9530151beaa3f828919249a578f82 100644 (file)
@@ -1,3 +1,12 @@
+2017-11-01  Alan Modra  <amodra@gmail.com>
+
+       PR 22374
+       * testsuite/ld-elf/pr22374a.s,
+       * testsuite/ld-elf/pr22374b.s,
+       * testsuite/ld-elf/pr22374-1.r,
+       * testsuite/ld-elf/pr22374-2.r: New test.
+       * testsuite/ld-elf/elf.exp: Run it.
+
 2017-11-01  Alan Modra  <amodra@gmail.com>
 
        * testsuite/ld-elf/elf.exp: Merge some conditionals, a better
index 29cc5e06e20fe42d2dc7f00d98f21b83b8bd7d60..acdad8db22ae09191200849cd349905ab83690fa 100644 (file)
@@ -192,6 +192,17 @@ if { [check_shared_lib_support] } then {
            "pr20995-2" \
            "" "tmpdir/pr20995-2.so" "$AFLAGS_NONPIC" \
            {pr20995a.s} {{readelf {-S --wide} pr20995.r}} "pr20995-2"]]
+
+    setup_xfail "tic6x-*-*"
+    run_ld_link_tests {
+       {"Build pr22374 shared library"
+           "-shared" "" "" "pr22374b.s" {} "pr22374.so" }
+       {"pr22374 function pointer initialization"
+           "" "tmpdir/pr22374.so" "" "pr22374a.s"
+           { {readelf {--wide -r --dyn-syms} "pr22374-1.r"}
+             {readelf {--wide -r} "pr22374-2.r"} }
+           "pr22374" }
+    }
 }
 
 if [is_underscore_target] {
diff --git a/ld/testsuite/ld-elf/pr22374-1.r b/ld/testsuite/ld-elf/pr22374-1.r
new file mode 100644 (file)
index 0000000..0c4fac4
--- /dev/null
@@ -0,0 +1,8 @@
+Relocation section .* contains 1 entries:
+.*
+.* +0+ +foo.*
+
+Symbol table '.dynsym' contains .* entries:
+#...
+.*: 0+ +0 FUNC +GLOBAL DEFAULT +UND foo
+#pass
diff --git a/ld/testsuite/ld-elf/pr22374-2.r b/ld/testsuite/ld-elf/pr22374-2.r
new file mode 100644 (file)
index 0000000..67cd845
--- /dev/null
@@ -0,0 +1,4 @@
+#failif
+Relocation section .* contains 1 entries:
+.*
+.*COPY.*
diff --git a/ld/testsuite/ld-elf/pr22374a.s b/ld/testsuite/ld-elf/pr22374a.s
new file mode 100644 (file)
index 0000000..e85c120
--- /dev/null
@@ -0,0 +1,2 @@
+ .data
+ .dc.a foo
diff --git a/ld/testsuite/ld-elf/pr22374b.s b/ld/testsuite/ld-elf/pr22374b.s
new file mode 100644 (file)
index 0000000..24d89de
--- /dev/null
@@ -0,0 +1,5 @@
+ .global foo
+ .type foo, %function
+foo:
+ .dc.a 0
+ .size foo, .-foo