diff options
author | Fangrui Song <maskray@google.com> | 2019-06-03 05:25:03 +0000 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2019-06-03 05:25:03 +0000 |
commit | c78c999a9cd7a77b9d13c610c9faebac5d560a55 (patch) | |
tree | 97deaf0dd8ac30aafcd74e9ce21236577852e86f /clang/lib/Sema/TreeTransform.h | |
parent | 471f11805f741b0b22328e0fd111be4329f245a3 (diff) | |
download | bcm5719-llvm-c78c999a9cd7a77b9d13c610c9faebac5d560a55.tar.gz bcm5719-llvm-c78c999a9cd7a77b9d13c610c9faebac5d560a55.zip |
[ELF] Simplify the condition to create .interp
(1) {gcc,clang} -fuse-ld=bfd -pie -fPIE -nostdlib a.c => .interp created
(2) {gcc,clang} -fuse-ld=lld -pie -fPIE -nostdlib a.c => .interp not created
(3) {gcc,clang} -fuse-ld=lld -pie -fPIE -nostdlib a.c a.so => .interp created
The inconsistency of (2) is due to the condition `!Config->SharedFiles.empty()`.
To make lld behave more like ld.bfd, we could change the condition to:
Config->HasDynSymTab && !Config->DynamicLinker.empty() && Script->needsInterpSection();
However, that would bring another inconsistency as can be observed with:
(4) {gcc,clang} -fuse-ld=bfd -no-pie -nostdlib a.c => .interp not created
So instead, use `!Config->DynamicLinker.empty() && Script->needsInterpSection()`,
which is both simple and consistent in these cases.
The inconsistency of (4) likely originated from ld.bfd and gold's choice to have a default --dynamic-linker.
Their condition to create .interp is ANDed with (not -shared).
Since lld doesn't have a default --dynamic-linker,
compiler drivers (gcc/clang) don't pass --dynamic-linker for -shared,
and direct ld users are not supposed to specify --dynamic-linker for -shared,
we do not need the condition !Config->Shared.
Reviewed By: ruiu
Differential Revision: https://reviews.llvm.org/D62765
llvm-svn: 362355
Diffstat (limited to 'clang/lib/Sema/TreeTransform.h')
0 files changed, 0 insertions, 0 deletions