[PATCH] D42216: Use New Module Metadata String "AvoidPLT" to avoid calls via PLT
Sriraman Tallam via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 29 14:40:56 PST 2018
On Mon, Jan 29, 2018 at 2:35 PM, Rafael Avila de Espindola
<rafael.espindola at gmail.com> wrote:
> Sriraman Tallam via Phabricator <reviews at reviews.llvm.org> writes:
>
> This LGTM with a llvm-link patch added.
>
>> --- lib/Target/X86/X86Subtarget.cpp
>> +++ lib/Target/X86/X86Subtarget.cpp
>> @@ -157,8 +157,11 @@
>> // In Regcall calling convention those registers are used for passing
>> // parameters. Thus we need to prevent lazy binding in Regcall.
>> return X86II::MO_GOTPCREL;
>> - if (F && F->hasFnAttribute(Attribute::NonLazyBind) && is64Bit())
>> - return X86II::MO_GOTPCREL;
>> + // If PLT must be avoided then the call should be via GOTPCREL.
>> + if (((F && F->hasFnAttribute(Attribute::NonLazyBind)) ||
>> + (!F && M.getRtLibUseGOT())) &&
>> + is64Bit())
>> + return X86II::MO_GOTPCREL;
>> return X86II::MO_PLT;
>> }
>
> Should we deprecate the non lazy bind attribute and always use the
> module flag?
There is still a use case for the attribute. I was hoping to expose a
function attribute in clang that can be used to set the nonlazybind
attribute only for a subset of functions. Would be useful for linkers
which do not know how to undo indirect calls to direct for functions
that are not external or for 32-bit.
Thanks
Sri
>
> Cheers,
> Rafael
More information about the llvm-commits
mailing list