[PATCH] D49352: [LLD] [COFF] Write the debug directory and build id to a separate section for MinGW

Martin Storsjö via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 19 22:49:52 PDT 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL337526: [COFF] Write the debug directory and build id to a separate section for MinGW (authored by mstorsjo, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D49352?vs=155597&id=156429#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D49352

Files:
  lld/trunk/COFF/Writer.cpp
  lld/trunk/test/COFF/debug-reloc.s


Index: lld/trunk/COFF/Writer.cpp
===================================================================
--- lld/trunk/COFF/Writer.cpp
+++ lld/trunk/COFF/Writer.cpp
@@ -201,6 +201,7 @@
 
   OutputSection *TextSec;
   OutputSection *RdataSec;
+  OutputSection *BuildidSec;
   OutputSection *DataSec;
   OutputSection *PdataSec;
   OutputSection *IdataSec;
@@ -420,6 +421,7 @@
   TextSec = CreateSection(".text", CODE | R | X);
   CreateSection(".bss", BSS | R | W);
   RdataSec = CreateSection(".rdata", DATA | R);
+  BuildidSec = CreateSection(".buildid", DATA | R);
   DataSec = CreateSection(".data", DATA | R | W);
   PdataSec = CreateSection(".pdata", DATA | R);
   IdataSec = CreateSection(".idata", DATA | R);
@@ -503,17 +505,19 @@
   if (Config->Debug) {
     DebugDirectory = make<DebugDirectoryChunk>(DebugRecords);
 
+    OutputSection *DebugInfoSec = Config->MinGW ? BuildidSec : RdataSec;
+
     // Make a CVDebugRecordChunk even when /DEBUG:CV is not specified.  We
     // output a PDB no matter what, and this chunk provides the only means of
     // allowing a debugger to match a PDB and an executable.  So we need it even
     // if we're ultimately not going to write CodeView data to the PDB.
     auto *CVChunk = make<CVDebugRecordChunk>();
     BuildId = CVChunk;
     DebugRecords.push_back(CVChunk);
 
-    RdataSec->addChunk(DebugDirectory);
+    DebugInfoSec->addChunk(DebugDirectory);
     for (Chunk *C : DebugRecords)
-      RdataSec->addChunk(C);
+      DebugInfoSec->addChunk(C);
   }
 
   // Create SEH table. x86-only.
Index: lld/trunk/test/COFF/debug-reloc.s
===================================================================
--- lld/trunk/test/COFF/debug-reloc.s
+++ lld/trunk/test/COFF/debug-reloc.s
@@ -5,7 +5,13 @@
 # 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
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s -check-prefix HEADERS
+# RUN: llvm-readobj -coff-debug-directory %t.exe | FileCheck %s -check-prefix DEBUG
 
+# SECTIONS:         Number: 2
+# SECTIONS-NEXT:    Name: .buildid (2E 62 75 69 6C 64 69 64)
+# SECTIONS-NEXT:    VirtualSize: 0x35
+# SECTIONS-NEXT:    VirtualAddress: 0x2000
 # SECTIONS:         Number: 3
 # SECTIONS-NEXT:    Name: .data (2E 64 61 74 61 00 00 00)
 # SECTIONS-NEXT:    VirtualSize: 0x8
@@ -22,6 +28,16 @@
 # RELOCS-NEXT:   }
 # RELOCS-NEXT: ]
 
+# HEADERS:     DebugRVA: 0x2000
+# HEADERS:     DebugSize: 0x1C
+
+# DEBUG: DebugDirectory [
+# DEBUG:   DebugEntry {
+# DEBUG:     Type: CodeView (0x2)
+# DEBUG:     SizeOfData: 0x19
+# DEBUG:     AddressOfRawData: 0x201C
+# DEBUG:     PointerToRawData: 0x61C
+
 	.text
 	.def	 mainfunc;
 	.scl	2;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49352.156429.patch
Type: text/x-patch
Size: 2829 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180720/a71fdd83/attachment.bin>


More information about the llvm-commits mailing list