From: H.J. Lu Date: Mon, 18 Jan 2021 00:43:45 +0000 (-0800) Subject: gold: Remove the circular IFUNC dependency in ifuncmain6pie X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=25294ff049728a081c703b68f848d2cc04eef483;p=binutils-gdb.git gold: Remove the circular IFUNC dependency in ifuncmain6pie On Fedora 33 x86-64 with glibc 2.32-3, ifuncmain6pie failed with: ./ifuncmain6pie: IFUNC symbol 'foo' referenced in './ifuncmod6.so' is defined in the executable and creates an unsatisfiable circular dependency. FAIL ifuncmain6pie (exit status: 127) Remove non-JUMP_SLOT relocations against foo in ifuncmod6.so, which trigger the circular IFUNC dependency. * testsuite/ifuncmain6pie.c: Remove non-JUMP_SLOT relocations against foo in ifuncmod6.so. * testsuite/ifuncmod6.c: Likewise. --- diff --git a/gold/ChangeLog b/gold/ChangeLog index 33d97ddde9c..a1d3d3004f0 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,9 @@ +2021-01-17 H.J. Lu + + * testsuite/ifuncmain6pie.c: Remove non-JUMP_SLOT relocations + against foo in ifuncmod6.so. + * testsuite/ifuncmod6.c: Likewise. + 2021-01-14 Nick Clifton * po/fr.po: Updated French translation. diff --git a/gold/testsuite/ifuncmain6pie.c b/gold/testsuite/ifuncmain6pie.c index 8478d4c408d..5c3eb60d4e5 100644 --- a/gold/testsuite/ifuncmain6pie.c +++ b/gold/testsuite/ifuncmain6pie.c @@ -9,7 +9,6 @@ #include "ifunc-sel.h" typedef int (*foo_p) (void); -extern foo_p foo_ptr; static int one (void) @@ -27,20 +26,17 @@ foo_ifunc (void) } extern int foo (void); -extern foo_p get_foo (void); +extern int call_foo (void); extern foo_p get_foo_p (void); -foo_p my_foo_ptr = foo; +foo_p foo_ptr = foo; int main (void) { foo_p p; - p = get_foo (); - if (p != foo) - abort (); - if ((*p) () != -30) + if (call_foo () != -30) abort (); p = get_foo_p (); @@ -51,12 +47,8 @@ main (void) if (foo_ptr != foo) abort (); - if (my_foo_ptr != foo) - abort (); if ((*foo_ptr) () != -30) abort (); - if ((*my_foo_ptr) () != -30) - abort (); if (foo () != -30) abort (); diff --git a/gold/testsuite/ifuncmod6.c b/gold/testsuite/ifuncmod6.c index 89a50f931b4..d324a82d5ea 100644 --- a/gold/testsuite/ifuncmod6.c +++ b/gold/testsuite/ifuncmod6.c @@ -5,9 +5,9 @@ extern int foo (void); typedef int (*foo_p) (void); extern foo_p get_foo_p (void); -extern foo_p get_foo (void); +extern int call_foo (void); -foo_p foo_ptr = foo; +extern foo_p foo_ptr; foo_p get_foo_p (void) @@ -15,8 +15,8 @@ get_foo_p (void) return foo_ptr; } -foo_p -get_foo (void) +int +call_foo (void) { - return foo; + return foo (); }