[PATCH] D42216: Use New Module Metadata String "AvoidPLT" to avoid calls via PLT

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 20 09:51:17 PST 2018


Sriraman Tallam <tmsriram at google.com> writes:

> 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.

Sounds reasonable.

Still LGTM.

Cheers,
Rafael


More information about the llvm-commits mailing list