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,6 +505,8 @@ if (Config->Debug) { DebugDirectory = make(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 @@ -511,9 +515,9 @@ 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;