This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] PR22374 testcase, function pointer references in .data


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=e48f0c8f1b9fdb195394dc7afea02ce55e4ba5e4

commit e48f0c8f1b9fdb195394dc7afea02ce55e4ba5e4
Author: Alan Modra <amodra@gmail.com>
Date:   Tue Oct 31 11:13:30 2017 +1030

    PR22374 testcase, function pointer references in .data
    
    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.

Diff:
---
 ld/ChangeLog                    |  9 +++++++++
 ld/testsuite/ld-elf/elf.exp     | 11 +++++++++++
 ld/testsuite/ld-elf/pr22374-1.r |  8 ++++++++
 ld/testsuite/ld-elf/pr22374-2.r |  4 ++++
 ld/testsuite/ld-elf/pr22374a.s  |  2 ++
 ld/testsuite/ld-elf/pr22374b.s  |  5 +++++
 6 files changed, 39 insertions(+)

diff --git a/ld/ChangeLog b/ld/ChangeLog
index 4fb7e84..84bebb3 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,5 +1,14 @@
 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
 	name than "shared library for next test", and use xfail arg
 	of run_ld_link_tests in a few places.
diff --git a/ld/testsuite/ld-elf/elf.exp b/ld/testsuite/ld-elf/elf.exp
index 29cc5e0..acdad8d 100644
--- a/ld/testsuite/ld-elf/elf.exp
+++ b/ld/testsuite/ld-elf/elf.exp
@@ -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
index 0000000..0c4fac4
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr22374-1.r
@@ -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
index 0000000..67cd845
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr22374-2.r
@@ -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
index 0000000..e85c120
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr22374a.s
@@ -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
index 0000000..24d89de
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr22374b.s
@@ -0,0 +1,5 @@
+ .global foo
+ .type foo, %function
+foo:
+ .dc.a 0
+ .size foo, .-foo


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]