[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