<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jun 2, 2020 at 3:38 PM Fangrui Song <<a href="mailto:maskray@google.com">maskray@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 2020-06-02, Eric Christopher wrote:<br>
>I'll elaborate on this a bit more since it may not be coming across clearly:<br>
><br>
>a) gcc and clang differ here:<br>
><br>
>clang++/g++  -o foo.x foo.c -fPIE<br>
><br>
>gcc passes -pie to the linker and clang doesn't. This mostly seems like an<br>
>oversight that can be fixed.<br>
><br>
>b) gcc and clang differ here<br>
><br>
>clang++/g++ -o foo.x foo.c<br>
><br>
>where gcc defaults to -pie and pie code generation and clang doesn't.<br>
><br>
>This is something where we should at least have the discussion. For what<br>
>it's worth my thought is that we should move to PIE by default for linux<br>
>if, for not other reason, as the system compiler (gcc) already does this.<br>
>We also already do this on android and in some sanitizer cases.<br>
><br>
>Anyone else have any thoughts?<br>
><br>
>Thanks!<br>
><br>
>-eric<br>
<br>
GCC 6 introduced a configure option --enable-default-pie (default -fPIE and -pie)<br>
(<a href="https://gcc.gnu.org/git/?p=gcc.git&a=commit;h=428b381275bc95032274440f02d7719225de2c17" rel="noreferrer" target="_blank">https://gcc.gnu.org/git/?p=gcc.git&a=commit;h=428b381275bc95032274440f02d7719225de2c17</a> )<br>
<br>
Distributions can decide whether they want to enable it.<br>
<br>
There are two questions:<br>
<br>
(1) Do we want to make default-pie configurable (which requires a CMake option)<br></blockquote><div><br></div><div><br></div><div>I have no strong opinions here.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
(2) Whether or not this is configurable, do we want Generic_GCC::isPIEDefault() to return true<br>
<br></blockquote><div><br></div><div>At this point I think so.</div><div><br></div><div><a class="gmail_plusreply" id="plusReplyChip-0" href="mailto:craig.topper@gmail.com" tabindex="-1">+Craig Topper</a> for the x86 backend side of things in case he wants to comment.<br></div><div><br></div><div>-eric</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
At this point, it is probably that more distributions enable it by default.<br>
So switching Generic_GCC::isPIEDefault() probably makes sense.<br>
I want to avoid a CMake variable to reduce issues in testing.<br>
(These CLANG_DEFAULT_* are a source of test instability.)<br>
<br>
(I suspect some distributions already ship downstream patches to enable<br>
-fPIE and -pie by default.)<br>
<br>
>On Tue, Jun 2, 2020 at 2:44 PM Mitch Phillips via cfe-dev <<br>
><a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>> wrote:<br>
><br>
>> Hi folks,<br>
>><br>
>> I recently noticed that clang and GCC differ on the default PIE/PIC flags.<br>
>> In particular, clang doesn't default to PIE/PIC on Linux x86-64, and GCC<br>
>> does.<br>
>><br>
>> $ clang++ a.cpp && readelf -l a.out | egrep '(LOAD|VirtAddr)'<br>
>>>   Type           Offset             VirtAddr           PhysAddr<br>
>>>   LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000<br>
>>><br>
>><br>
>> $ g++ a.cpp && readelf -l a.out | egrep '(LOAD|VirtAddr)'<br>
>>>   Type           Offset             VirtAddr           PhysAddr<br>
>><br>
>>   LOAD           0x0000000000000000 0x0000000000000000 0x0000000000000000<br>
>><br>
>><br>
>> Are there any concerns about changing the clang default to emit PIC and<br>
>> pass PIE to the linker?<br>
>><br>
>> Also, using `clang++ -fPIC -fPIE <...>` doesn't emit a PIE. Any opponents<br>
>> to making `-fPIE` imply passing `-pie` to the linker?<br>
>><br>
>> - Mitch.<br>
>> _______________________________________________<br>
>> cfe-dev mailing list<br>
>> <a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
>> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
>><br>
</blockquote></div></div>