[lld] r337438 - [COFF] Don't produce base relocs for discardable sections
Martin Storsjo via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 18 21:25:23 PDT 2018
Author: mstorsjo
Date: Wed Jul 18 21:25:22 2018
New Revision: 337438
URL: http://llvm.org/viewvc/llvm-project?rev=337438&view=rev
Log:
[COFF] Don't produce base relocs for discardable sections
Dwarf debug info contains some data that contains absolute addresses.
Since these sections are discardable and aren't loaded at runtime,
there's no point in adding base relocations for them.
This makes sure that after stripping out dwarf debug info, there are no
base relocations that point to nonexistent sections.
Differential Revision: https://reviews.llvm.org/D49350
Added:
lld/trunk/test/COFF/debug-reloc.s
Modified:
lld/trunk/COFF/Writer.cpp
Modified: lld/trunk/COFF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Writer.cpp?rev=337438&r1=337437&r2=337438&view=diff
==============================================================================
--- lld/trunk/COFF/Writer.cpp (original)
+++ lld/trunk/COFF/Writer.cpp Wed Jul 18 21:25:22 2018
@@ -1260,7 +1260,7 @@ void Writer::addBaserels() {
return;
std::vector<Baserel> V;
for (OutputSection *Sec : OutputSections) {
- if (Sec == RelocSec)
+ if (Sec->Header.Characteristics & IMAGE_SCN_MEM_DISCARDABLE)
continue;
// Collect all locations for base relocations.
for (Chunk *C : Sec->getChunks())
Added: lld/trunk/test/COFF/debug-reloc.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/debug-reloc.s?rev=337438&view=auto
==============================================================================
--- lld/trunk/test/COFF/debug-reloc.s (added)
+++ lld/trunk/test/COFF/debug-reloc.s Wed Jul 18 21:25:22 2018
@@ -0,0 +1,42 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -triple=x86_64-windows-gnu %s -filetype=obj -o %t.obj
+
+# RUN: lld-link -lldmingw -debug:dwarf -out:%t.exe -entry:mainfunc -subsystem:console %t.obj
+# RUN: llvm-readobj -sections %t.exe | FileCheck %s -check-prefix SECTIONS
+# RUN: llvm-readobj -coff-basereloc %t.exe | FileCheck %s -check-prefix RELOCS
+
+# SECTIONS: Number: 3
+# SECTIONS-NEXT: Name: .data (2E 64 61 74 61 00 00 00)
+# SECTIONS-NEXT: VirtualSize: 0x8
+# SECTIONS-NEXT: VirtualAddress: 0x3000
+
+# RELOCS: BaseReloc [
+# RELOCS-NEXT: Entry {
+# RELOCS-NEXT: Type: DIR64
+# RELOCS-NEXT: Address: 0x3000
+# RELOCS-NEXT: }
+# RELOCS-NEXT: Entry {
+# RELOCS-NEXT: Type: ABSOLUTE
+# RELOCS-NEXT: Address: 0x3000
+# RELOCS-NEXT: }
+# RELOCS-NEXT: ]
+
+ .text
+ .def mainfunc;
+ .scl 2;
+ .type 32;
+ .endef
+ .globl mainfunc
+mainfunc:
+.Lfunc_begin0:
+ xorl %eax, %eax
+ retq
+
+ .data
+ .globl ptr
+ptr:
+ .quad mainfunc
+
+ .section .debug_info,"dr"
+ .quad .Lfunc_begin0
More information about the llvm-commits
mailing list