[lld] r297789 - Don't create copy relocs or dummy plt's if given -z notext.
Rafael Espindola via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 14 15:50:07 PDT 2017
Author: rafael
Date: Tue Mar 14 17:50:07 2017
New Revision: 297789
URL: http://llvm.org/viewvc/llvm-project?rev=297789&view=rev
Log:
Don't create copy relocs or dummy plt's if given -z notext.
Being passed -z notext is a pretty strong indication that the user is
OK with text relocations. This is not the same behavior as bfd, but
bfd defaults to -z notext, so it has to try to avoid text relocations
and use them as a last resort.
Added:
lld/trunk/test/ELF/Inputs/ztext-text-notext.s
Modified:
lld/trunk/ELF/Relocations.cpp
lld/trunk/test/ELF/ztext-text-notext.s
Modified: lld/trunk/ELF/Relocations.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Relocations.cpp?rev=297789&r1=297788&r2=297789&view=diff
==============================================================================
--- lld/trunk/ELF/Relocations.cpp (original)
+++ lld/trunk/ELF/Relocations.cpp Tue Mar 14 17:50:07 2017
@@ -520,12 +520,11 @@ static RelExpr adjustExpr(const elf::Obj
// only memory. We can hack around it if we are producing an executable and
// the refered symbol can be preemepted to refer to the executable.
if (Config->Shared || (Config->pic() && !isRelExpr(Expr))) {
- if (Config->ZText)
- error(S.getLocation<ELFT>(RelOff) + ": can't create dynamic relocation " +
- toString(Type) + " against " +
- (Body.getName().empty() ? "local symbol in readonly segment"
- : "symbol '" + toString(Body) + "'") +
- " defined in " + toString(Body.File));
+ error(S.getLocation<ELFT>(RelOff) + ": can't create dynamic relocation " +
+ toString(Type) + " against " +
+ (Body.getName().empty() ? "local symbol in readonly segment"
+ : "symbol '" + toString(Body) + "'") +
+ " defined in " + toString(Body.File));
return Expr;
}
if (Body.getVisibility() != STV_DEFAULT) {
@@ -655,6 +654,8 @@ static void scanRelocs(InputSectionBase
typedef typename ELFT::uint uintX_t;
bool IsWrite = C.Flags & SHF_WRITE;
+ if (!Config->ZText)
+ IsWrite = true;
auto AddDyn = [=](const DynamicReloc<ELFT> &Reloc) {
In<ELFT>::RelaDyn->addReloc(Reloc);
Added: lld/trunk/test/ELF/Inputs/ztext-text-notext.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/Inputs/ztext-text-notext.s?rev=297789&view=auto
==============================================================================
--- lld/trunk/test/ELF/Inputs/ztext-text-notext.s (added)
+++ lld/trunk/test/ELF/Inputs/ztext-text-notext.s Tue Mar 14 17:50:07 2017
@@ -0,0 +1,10 @@
+ .global bar
+ .type bar, @object
+ .size bar, 8
+bar:
+ .quad 0
+
+ .global zed
+ .type zed, @function
+zed:
+ nop
Modified: lld/trunk/test/ELF/ztext-text-notext.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/ztext-text-notext.s?rev=297789&r1=297788&r2=297789&view=diff
==============================================================================
--- lld/trunk/test/ELF/ztext-text-notext.s (original)
+++ lld/trunk/test/ELF/ztext-text-notext.s Tue Mar 14 17:50:07 2017
@@ -1,15 +1,36 @@
# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
-# RUN: ld.lld -z notext %t.o -o %t -shared
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/ztext-text-notext.s -o %t2.o
+# RUN: ld.lld %t2.o -o %t2.so -shared
+# RUN: ld.lld -z notext %t.o %t2.so -o %t -shared
# RUN: llvm-readobj -dynamic-table -r %t | FileCheck %s
+# RUN: ld.lld -z notext %t.o %t2.so -o %t2 -pie
+# RUN: llvm-readobj -dynamic-table -r %t2 | FileCheck %s
+# RUN: ld.lld -z notext %t.o %t2.so -o %t3
+# RUN: llvm-readobj -dynamic-table -r %t3 | FileCheck --check-prefix=STATIC %s
+
+# If the preference is to have text relocations, don't create plt of copy relocations.
# CHECK: Relocations [
# CHECK-NEXT: Section {{.*}} .rela.dyn {
# CHECK-NEXT: 0x1000 R_X86_64_RELATIVE - 0x1000
+# CHECK-NEXT: 0x1008 R_X86_64_64 bar 0x0
+# CHECK-NEXT: 0x1010 R_X86_64_PC64 zed 0x0
# CHECK-NEXT: }
# CHECK-NEXT: ]
# CHECK: DynamicSection [
# CHECK: 0x0000000000000016 TEXTREL 0x0
+# STATIC: Relocations [
+# STATIC-NEXT: Section {{.*}} .rela.dyn {
+# STATIC-NEXT: 0x201008 R_X86_64_64 bar 0x0
+# STATIC-NEXT: 0x201010 R_X86_64_PC64 zed 0x0
+# STATIC-NEXT: }
+# STATIC-NEXT: ]
+# STATIC: DynamicSection [
+# STATIC: 0x0000000000000016 TEXTREL 0x0
+
foo:
.quad foo
+.quad bar
+.quad zed - .
More information about the llvm-commits
mailing list