From 20df4ecf4f5a07ec4a16d9435174d3ef2bf9c729 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Mon, 31 Oct 2016 21:09:21 +0000 Subject: [PATCH] Re-commit r285607: Emit Section Map stream." Removed some test fields that overspecified test conditions. llvm-svn: 285638 --- lld/COFF/PDB.cpp | 9 +++++++++ lld/test/COFF/pdb.test | 51 +++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/lld/COFF/PDB.cpp b/lld/COFF/PDB.cpp index 53f50f3..283b75a 100644 --- a/lld/COFF/PDB.cpp +++ b/lld/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 @@ void coff::createPDB(StringRef Path, ArrayRef SectionTable) { 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)); diff --git a/lld/test/COFF/pdb.test b/lld/test/COFF/pdb.test index 59005d2..be9267c 100644 --- a/lld/test/COFF/pdb.test +++ b/lld/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: +# 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: +# 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: -- 2.7.4