<div dir="ltr">I'll elaborate on this a bit more since it may not be coming across clearly:<div><br></div><div>a) gcc and clang differ here:</div><div><br></div><div>clang++/g++  -o foo.x foo.c -fPIE<br></div><div><br></div><div>gcc passes -pie to the linker and clang doesn't. This mostly seems like an oversight that can be fixed.</div><div><br></div><div>b) gcc and clang differ here</div><div><br></div><div>clang++/g++ -o foo.x foo.c<br><br>where gcc defaults to -pie and pie code generation and clang doesn't.</div><div><br></div><div>This is something where we should at least have the discussion. For what it's worth my thought is that we should move to PIE by default for linux if, for not other reason, as the system compiler (gcc) already does this. We also already do this on android and in some sanitizer cases.</div><div><br></div><div>Anyone else have any thoughts?</div><div><br></div><div>Thanks!</div><div><br></div><div>-eric</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jun 2, 2020 at 2:44 PM Mitch Phillips via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</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"><div dir="ltr">Hi folks,<div><br></div><div>I recently noticed that clang and GCC differ on the default PIE/PIC flags. In particular, clang doesn't default to PIE/PIC on Linux x86-64, and GCC does.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace">$ clang++ a.cpp && readelf -l a.out | egrep '(LOAD|VirtAddr)'<br>  Type           Offset             VirtAddr           PhysAddr<br>  LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000</font><br></blockquote><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace">$ g++ a.cpp && readelf -l a.out | egrep '(LOAD|VirtAddr)'<br>  Type           Offset             VirtAddr           PhysAddr</font></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace">  LOAD           0x0000000000000000 0x0000000000000000 0x0000000000000000 </font></blockquote><div><br></div><div>Are there any concerns about changing the clang default to emit PIC and pass PIE to the linker?<br></div><div><br></div><div>Also, using `clang++ -fPIC -fPIE <...>` doesn't emit a PIE. Any opponents to making `-fPIE` imply passing `-pie` to the linker?</div><div><br></div><div>- Mitch.</div></div>
_______________________________________________<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>
</blockquote></div>