aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/testsuite/ChangeLog6
-rw-r--r--ld/testsuite/ld-ifunc/ifunc.exp26
-rw-r--r--ld/testsuite/ld-ifunc/pr18841c.c17
3 files changed, 44 insertions, 5 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index b8546d0..ce3b310 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,6 +1,12 @@
2015-08-18 H.J. Lu <hongjiu.lu@intel.com>
PR ld/18841
+ * ld-ifunc/ifunc.exp: Add another test for PR ld/18841.
+ * ld-ifunc/pr18841c.c: New file.
+
+2015-08-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/18841
* ld-ifunc/ifunc.exp: Add a test for PR ld/18841.
* ld-ifunc/pr18841.out: New file.
* ld-ifunc/pr18841a.c: Likewise.
diff --git a/ld/testsuite/ld-ifunc/ifunc.exp b/ld/testsuite/ld-ifunc/ifunc.exp
index b0f6de0..d3bebdd 100644
--- a/ld/testsuite/ld-ifunc/ifunc.exp
+++ b/ld/testsuite/ld-ifunc/ifunc.exp
@@ -473,12 +473,20 @@ run_cc_link_tests [list \
"libpr18808.so" \
] \
[list \
- "Build libpr18841.so" \
+ "Build libpr18841b.so" \
"-shared" \
"-fPIC -O0 -g" \
{ pr18841b.c } \
{} \
- "libpr18841.so" \
+ "libpr18841b.so" \
+ ] \
+ [list \
+ "Build libpr18841c.so" \
+ "-shared" \
+ "-fPIC -O0 -g" \
+ { pr18841c.c } \
+ {} \
+ "libpr18841c.so" \
] \
]
@@ -492,11 +500,19 @@ run_ld_link_exec_tests [] [list \
"pr18808.out" \
] \
[list \
- "Run pr18841" \
- "tmpdir/libpr18841.so" \
+ "Run pr18841 with libpr18841b.so" \
+ "tmpdir/libpr18841b.so" \
+ "" \
+ { pr18841a.c } \
+ "pr18841b" \
+ "pr18841.out" \
+ ] \
+ [list \
+ "Run pr18841 with libpr18841c.so" \
+ "tmpdir/libpr18841c.so" \
"" \
{ pr18841a.c } \
- "pr18841" \
+ "pr18841c" \
"pr18841.out" \
] \
]
diff --git a/ld/testsuite/ld-ifunc/pr18841c.c b/ld/testsuite/ld-ifunc/pr18841c.c
new file mode 100644
index 0000000..03a6354
--- /dev/null
+++ b/ld/testsuite/ld-ifunc/pr18841c.c
@@ -0,0 +1,17 @@
+void foo() __attribute__((ifunc("resolve_foo")));
+
+static void foo_impl() {}
+extern void zoo(void);
+void (*pz)(void) = zoo;
+
+void test()
+{
+ void (*pg)(void) = foo;
+ pg();
+}
+
+static void* resolve_foo()
+{
+ pz();
+ return foo_impl;
+}