On 7/6/2021 5:47 AM, H.J. Lu via Gcc-patches wrote:
On Sat, Jun 19, 2021 at 7:10 PM H.J. Lu <hjl.to...@gmail.com> wrote:
1. On some targets, like PowerPC, reference to ifunc function resolver
must be non-local so that compiler will properly emit PLT call.  Add
TARGET_IFUNC_REF_LOCAL_OK to allow binding indirect function resolver
locally for targets which don't require special PLT call sequence.
2. Add ix86_call_use_plt_p to call local ifunc function resolvers via
PLT.

gcc/

         PR target/51469
         PR target/83782
         * target.def (ifunc_ref_local_ok): Add a target hook.
         * varasm.c (default_binds_local_p_3): Force indirect function
         resolver non-local only if targetm.ifunc_ref_local_ok returns
         false.
         * config/i386/i386-expand.c (ix86_expand_call): Call
         ix86_call_use_plt_p to check if PLT should be used.
         * config/i386/i386-protos.h (ix86_call_use_plt_p): New.
         * config/i386/i386.c (output_pic_addr_const): Call
         ix86_call_use_plt_p to check if "@PLT" is needed.
         (ix86_call_use_plt_p): New.
         (TARGET_IFUNC_REF_LOCAL_OK): New.
         * doc/tm.texi.in: Add TARGET_IFUNC_REF_LOCAL_OK.
         * doc/tm.texi: Regenerated.

gcc/testsuite/

         PR target/51469
         PR target/83782
         * gcc.target/i386/pr83782-1.c: New test.
         * gcc.target/i386/pr83782-2.c: Likewise.
This is OK.  Please re-test (I don't expect problems, but it's an old outstanding patch) & install.

jeff

Reply via email to