From 676386ff30e47de49df984cef30c3a932ca9e16e Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Mon, 7 Aug 2017 20:23:45 +0000 Subject: [PATCH] [lld] Write the DataCRC to the output PDB. llvm-svn: 310297 --- lld/COFF/PDB.cpp | 8 +++++++- lld/test/COFF/pdb.test | 8 ++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lld/COFF/PDB.cpp b/lld/COFF/PDB.cpp index 2b9d4f2..296ef9c 100644 --- a/lld/COFF/PDB.cpp +++ b/lld/COFF/PDB.cpp @@ -44,6 +44,7 @@ #include "llvm/Support/BinaryByteStream.h" #include "llvm/Support/Endian.h" #include "llvm/Support/FileOutputBuffer.h" +#include "llvm/Support/JamCRC.h" #include "llvm/Support/Path.h" #include "llvm/Support/ScopedPrinter.h" #include @@ -690,12 +691,17 @@ void PDBLinker::addSectionContrib(pdb::DbiModuleDescriptorBuilder &LinkerModule, if (auto *SecChunk = dyn_cast(C)) { SC.Characteristics = SecChunk->Header->Characteristics; SC.Imod = SecChunk->File->ModuleDBI->getModuleIndex(); + ArrayRef Contents = SecChunk->getContents(); + JamCRC CRC(0); + ArrayRef CharContents = makeArrayRef( + reinterpret_cast(Contents.data()), Contents.size()); + CRC.update(CharContents); + SC.DataCrc = CRC.getCRC(); } else { SC.Characteristics = OS->getCharacteristics(); // FIXME: When we start creating DBI for import libraries, use those here. SC.Imod = LinkerModule.getModuleIndex(); } - SC.DataCrc = 0; // FIXME SC.RelocCrc = 0; // FIXME Builder.getDbiBuilder().addSectionContrib(SC); } diff --git a/lld/test/COFF/pdb.test b/lld/test/COFF/pdb.test index b1f9ab5..612b198 100644 --- a/lld/test/COFF/pdb.test +++ b/lld/test/COFF/pdb.test @@ -248,15 +248,15 @@ RAW-NEXT: ============================================================ RAW-NEXT: PDB does not contain the requested image section header type RAW: Section Contributions RAW-NEXT: ============================================================ -RAW-NEXT: SC[.pdata] | mod = 0, 0001:0000, size = 12, data crc = 0, reloc crc = 0 +RAW-NEXT: SC[.pdata] | mod = 0, 0001:0000, size = 12, data crc = 361370162, reloc crc = 0 RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ -RAW-NEXT: SC[.text] | mod = 0, 0002:0000, size = 14, data crc = 0, reloc crc = 0 +RAW-NEXT: SC[.text] | mod = 0, 0002:0000, size = 14, data crc = 1682752513, reloc crc = 0 RAW-NEXT: IMAGE_SCN_CNT_CODE | IMAGE_SCN_ALIGN_16BYTES | IMAGE_SCN_MEM_EXECUTE | RAW-NEXT: IMAGE_SCN_MEM_READ -RAW-NEXT: SC[.text] | mod = 1, 0002:0016, size = 6, data crc = 0, reloc crc = 0 +RAW-NEXT: SC[.text] | mod = 1, 0002:0016, size = 6, data crc = 2139436471, reloc crc = 0 RAW-NEXT: IMAGE_SCN_CNT_CODE | IMAGE_SCN_ALIGN_16BYTES | IMAGE_SCN_MEM_EXECUTE | RAW-NEXT: IMAGE_SCN_MEM_READ -RAW-NEXT: SC[.xdata] | mod = 0, 0003:0000, size = 8, data crc = 0, reloc crc = 0 +RAW-NEXT: SC[.xdata] | mod = 0, 0003:0000, size = 8, data crc = 264583633, reloc crc = 0 RAW-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ RAW: Section Map RAW-NEXT: ============================================================ -- 2.7.4