Index: COFF/PDB.cpp =================================================================== --- COFF/PDB.cpp +++ COFF/PDB.cpp @@ -19,6 +19,7 @@ #include "llvm/DebugInfo/PDB/Raw/PDBFileBuilder.h" #include "llvm/DebugInfo/PDB/Raw/TpiStream.h" #include "llvm/DebugInfo/PDB/Raw/TpiStreamBuilder.h" +#include "llvm/Object/COFF.h" #include "llvm/Support/Endian.h" #include "llvm/Support/FileOutputBuffer.h" #include @@ -63,6 +64,14 @@ auto &IpiBuilder = Builder.getIpiBuilder(); IpiBuilder.setVersionHeader(pdb::PdbTpiV80); + // Add Section Map stream. + ArrayRef Sections + = {(object::coff_section *)SectionTable.data(), + SectionTable.size() / sizeof(object::coff_section)}; + std::vector SectionMap = + pdb::DbiStreamBuilder::createSectionMap(Sections); + DbiBuilder.setSectionMap(SectionMap); + // Add COFF section header stream. ExitOnErr( DbiBuilder.addDbgStream(pdb::DbgHeaderType::SectionHdr, SectionTable)); Index: test/COFF/pdb.test =================================================================== --- test/COFF/pdb.test +++ test/COFF/pdb.test @@ -3,7 +3,8 @@ # RUN: llvm-pdbdump pdb2yaml -stream-metadata -stream-directory -pdb-stream \ # RUN: -dbi-stream -ipi-stream %t.pdb | FileCheck %s -# RUN: llvm-pdbdump raw -section-headers %t.pdb | FileCheck -check-prefix RAW %s +# RUN: llvm-pdbdump raw -section-map -section-headers %t.pdb | \ +# RUN: FileCheck -check-prefix RAW %s # CHECK: MSF: # CHECK-NEXT: SuperBlock: @@ -17,7 +18,7 @@ # CHECK-NEXT: DirectoryBlocks: [ 9 ] # CHECK-NEXT: NumStreams: 6 # CHECK-NEXT: FileSize: 40960 -# CHECK-NEXT: StreamSizes: [ 0, 48, 56, 90, 56, 80 ] +# CHECK-NEXT: StreamSizes: [ 0, 48, 56, 154, 56, 80 ] # CHECK-NEXT: StreamMap: # CHECK-NEXT: - Stream: [ ] # CHECK-NEXT: - Stream: [ 5 ] @@ -43,7 +44,51 @@ # CHECK-NEXT: Version: VC80 # CHECK-NEXT: Records: -# RAW: Section Headers [ +# RAW: Section Map [ +# RAW-NEXT: Entry { +# RAW-NEXT: Flags [ (0x10D) +# RAW-NEXT: AddressIs32Bit (0x8) +# RAW-NEXT: Execute (0x4) +# RAW-NEXT: IsSelector (0x100) +# RAW-NEXT: Read (0x1) +# RAW-NEXT: ] +# RAW-NEXT: Ovl: 0 +# RAW-NEXT: Group: 0 +# RAW-NEXT: Frame: 1 +# RAW-NEXT: SecName: 65535 +# RAW-NEXT: ClassName: 65535 +# RAW-NEXT: Offset: 0 +# RAW-NEXT: SecByteLength: 3 +# RAW-NEXT: } +# RAW-NEXT: Entry { +# RAW-NEXT: Flags [ (0x109) +# RAW-NEXT: AddressIs32Bit (0x8) +# RAW-NEXT: IsSelector (0x100) +# RAW-NEXT: Read (0x1) +# RAW-NEXT: ] +# RAW-NEXT: Ovl: 0 +# RAW-NEXT: Group: 0 +# RAW-NEXT: Frame: 2 +# RAW-NEXT: SecName: 65535 +# RAW-NEXT: ClassName: 65535 +# RAW-NEXT: Offset: 0 +# RAW-NEXT: SecByteLength: 107 +# RAW-NEXT: } +# RAW-NEXT: Entry { +# RAW-NEXT: Flags [ (0x208) +# RAW-NEXT: AddressIs32Bit (0x8) +# RAW-NEXT: IsAbsoluteAddress (0x200) +# RAW-NEXT: ] +# RAW-NEXT: Ovl: 0 +# RAW-NEXT: Group: 0 +# RAW-NEXT: Frame: 3 +# RAW-NEXT: SecName: 65535 +# RAW-NEXT: ClassName: 65535 +# RAW-NEXT: Offset: 0 +# RAW-NEXT: SecByteLength: 4294967295 +# RAW-NEXT: } +# RAW-NEXT: ] +# RAW-NEXT: Section Headers [ # RAW-NEXT: { # RAW-NEXT: Name: .text # RAW-NEXT: Virtual Size: