diff options
Diffstat (limited to 'ld')
-rw-r--r-- | ld/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-ifunc/ifunc.exp | 26 | ||||
-rw-r--r-- | ld/testsuite/ld-ifunc/pr18841c.c | 17 |
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; +} |