yes -- it is good to turn this on by default in LTO mode without
requiring user to specify the option.

David

On Fri, May 1, 2015 at 9:23 AM, H.J. Lu <hjl.to...@gmail.com> wrote:
> On Fri, May 1, 2015 at 9:19 AM, Xinliang David Li <davi...@google.com> wrote:
>> On Fri, May 1, 2015 at 8:01 AM, Andi Kleen <a...@firstfloor.org> wrote:
>>> Sriraman Tallam <tmsri...@google.com> writes:
>>>>
>>>> This comes with  caveats.  This cannot be generally done for all
>>>> functions marked extern as it is impossible for the compiler to say if
>>>> a function is "truly extern" (defined in a shared library). If a
>>>> function is not truly extern(ends up defined in the final executable),
>>>> then calling it indirectly is a performance penalty as it could have
>>>> been a direct call.  Further, the newly created GOT entries are fixed
>>>> up at start-up and do not get lazily bound.
>>>
>>> This means you need to make it depend on -fno-semantic-interposition ?
>>>
>>>> Given this, I propose adding a new option called
>>>> -fno-plt=<function-name> to the compiler.  This tells the compiler
>>>> that we know that the function is truly extern and we want the
>>>> indirect call only for these call-sites.  I have attached a patch that
>>>> adds -fno-plt= to GCC.  Any number of "-fno-plt=" can be specified and
>>>> all call-sites corresponding to these named functions will be done
>>>> indirectly using the mechanism described above without the use of a
>>>> PLT stub.
>>>
>>> The argument seems awkward. The command line may get very long.
>>> Better an attribute?
>>
>> They are complementary. Perhaps another option like linker's
>> --dynamic-list=<> that can take a file specifying the list of symbols.
>>
>>>
>>> Longer term it would be probably better to support it properly
>>> in the linker.
>>>
>>
>> Linker solution has its own downside -- it require reserving more
>> space conservatively for many callsites which end up being direct
>> calls.
>>
>
> Can we do it automatically for LTO?
>
>
> --
> H.J.

Reply via email to