summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/COFF/PDB.cpp9
-rw-r--r--lld/test/COFF/pdb.test51
2 files changed, 57 insertions, 3 deletions
diff --git a/lld/COFF/PDB.cpp b/lld/COFF/PDB.cpp
index 53f50f30095..283b75a9c20 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 <memory>
@@ -63,6 +64,14 @@ void coff::createPDB(StringRef Path, ArrayRef<uint8_t> SectionTable) {
auto &IpiBuilder = Builder.getIpiBuilder();
IpiBuilder.setVersionHeader(pdb::PdbTpiV80);
+ // Add Section Map stream.
+ ArrayRef<object::coff_section> Sections = {
+ (object::coff_section *)SectionTable.data(),
+ SectionTable.size() / sizeof(object::coff_section)};
+ std::vector<pdb::SecMapEntry> 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 59005d2fdf3..be9267c629b 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:
OpenPOWER on IntegriCloud