MaskRay added a comment.

In D92633#2433999 <https://reviews.llvm.org/D92633#2433999>, @tmsriram wrote:

> In D92633#2433979 <https://reviews.llvm.org/D92633#2433979>, @MaskRay wrote:
>
>> In D92633#2433108 <https://reviews.llvm.org/D92633#2433108>, @tmsriram wrote:
>>
>>> You said : "The name -mpie-copy-relocations is misleading [1] and does not 
>>> capture the idea that this option can actually apply to all of 
>>> -fno-pic,-fpie, ..."
>>>
>>> Could you please clarify why this option needs to apply to -fno-pic?  Here 
>>> is what I tried with trunk clang:
>>
>> If the user wants to guarantee no copy relocations in -fno-pic code, they 
>> can theoretically apply -fno-direct-access-external-data to use a GOT 
>> indirection.
>> This is not implemented, though.
>>
>>> extern int var;
>>> int get() { return var; }
>>>
>>> $ clang -S foo.c -o -
>>> ....
>>>     movl    var, %eax
>>>     popq    %rbp
>>> ...
>>>
>>> With -fno-pic,  this will never need to use -mpie-copy-relocations at all, 
>>> so this case is not relevant right?  Did I miss anything?
>>
>> -fno-pic code can only be used with -no-pie links (position-dependent 
>> executables) If var is not defined in the linked executable, it will have a 
>> copy relocation.
>
> Thanks for explaining.  I know that by default (i.e. no-pic and no-pie), copy 
> relocations will be used for external data accesses.  So, you are saying that 
> you are adding a mechanism to disable copy relocations for the no-pic/no-pie 
> case too. Is there a need for this, purely a question.  I know that copy 
> relocations are frowned upon so maybe there was a feature request. If so, 
> citing that would make it more clear. Thanks.

I don't know of a feature request.

> Is there a need for this, purely a question.

A weak need: more to make the behavior more align with the option name and 
perhaps align with potential GCC behavior 
(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98112).
It can also be argued that this can be used to remove a special case for ppc64 
ELFv2, which essentially defaults to -fno-direct-access-external-data for 
-fno-pic (they prefer to not have copy relocations)

Supporting -fno-direct-access-external-data for -fno-pic is not difficult: a 
one/two line change to `TargetMachine::shouldAssumeDSOLocal` refining `if (!(GV 
&& GV->isThreadLocal()) && RM == Reloc::Static)`.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D92633/new/

https://reviews.llvm.org/D92633

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to