[lld] r295385 - Merge reloc sections in -emit-reloc mode.
Rafael Espindola via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 16 16:28:18 PST 2017
Author: rafael
Date: Thu Feb 16 18:28:17 2017
New Revision: 295385
URL: http://llvm.org/viewvc/llvm-project?rev=295385&view=rev
Log:
Merge reloc sections in -emit-reloc mode.
Without this we would produce two relocation sections pointing to the
same section, which gnu tools reject.
This fixes pr31986.
The implementation of -r/--emit-reloc is getting fairly
complicated. But lets get the test passing before trying to refactor
it.
Added:
lld/trunk/test/ELF/emit-relocs-merge.s
Modified:
lld/trunk/ELF/Writer.cpp
Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=295385&r1=295384&r2=295385&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Thu Feb 16 18:28:17 2017
@@ -98,6 +98,15 @@ StringRef elf::getOutputSectionName(Stri
if (Config->Relocatable)
return Name;
+ if (Config->EmitRelocs) {
+ for (StringRef V : {".rel.", ".rela."}) {
+ if (Name.startswith(V)) {
+ StringRef Inner = getOutputSectionName(Name.substr(V.size() - 1));
+ return Saver.save(Twine(V.drop_back()) + Inner);
+ }
+ }
+ }
+
for (StringRef V :
{".text.", ".rodata.", ".data.rel.ro.", ".data.", ".bss.",
".init_array.", ".fini_array.", ".ctors.", ".dtors.", ".tbss.",
Added: lld/trunk/test/ELF/emit-relocs-merge.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/emit-relocs-merge.s?rev=295385&view=auto
==============================================================================
--- lld/trunk/test/ELF/emit-relocs-merge.s (added)
+++ lld/trunk/test/ELF/emit-relocs-merge.s Thu Feb 16 18:28:17 2017
@@ -0,0 +1,20 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+# RUN: ld.lld --emit-relocs %t.o -o %t.so -shared
+# RUN: llvm-readobj -r %t.so | FileCheck %s
+
+# CHECK: Relocations [
+# CHECK-NEXT: Section ({{.*}}) .rela.dyn {
+# CHECK-NEXT: 0x1000 R_X86_64_64 zed 0x0
+# CHECK-NEXT: 0x1008 R_X86_64_64 zed 0x0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section ({{.*}}) .rela.data {
+# CHECK-NEXT: 0x1000 R_X86_64_64 zed 0x0
+# CHECK-NEXT: 0x1008 R_X86_64_64 zed 0x0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+.section .data.foo,"aw",%progbits
+.quad zed
+.section .data.bar,"aw",%progbits
+.quad zed
More information about the llvm-commits
mailing list