[lld] Write the DataCRC to the output PDB.

llvm-svn: 310297
This commit is contained in:
Zachary Turner 2017-08-07 20:23:45 +00:00
parent 08f8831e57
commit 676386ff30
2 changed files with 11 additions and 5 deletions

View File

@ -44,6 +44,7 @@
#include "llvm/Support/BinaryByteStream.h" #include "llvm/Support/BinaryByteStream.h"
#include "llvm/Support/Endian.h" #include "llvm/Support/Endian.h"
#include "llvm/Support/FileOutputBuffer.h" #include "llvm/Support/FileOutputBuffer.h"
#include "llvm/Support/JamCRC.h"
#include "llvm/Support/Path.h" #include "llvm/Support/Path.h"
#include "llvm/Support/ScopedPrinter.h" #include "llvm/Support/ScopedPrinter.h"
#include <memory> #include <memory>
@ -690,12 +691,17 @@ void PDBLinker::addSectionContrib(pdb::DbiModuleDescriptorBuilder &LinkerModule,
if (auto *SecChunk = dyn_cast<SectionChunk>(C)) { if (auto *SecChunk = dyn_cast<SectionChunk>(C)) {
SC.Characteristics = SecChunk->Header->Characteristics; SC.Characteristics = SecChunk->Header->Characteristics;
SC.Imod = SecChunk->File->ModuleDBI->getModuleIndex(); SC.Imod = SecChunk->File->ModuleDBI->getModuleIndex();
ArrayRef<uint8_t> Contents = SecChunk->getContents();
JamCRC CRC(0);
ArrayRef<char> CharContents = makeArrayRef(
reinterpret_cast<const char *>(Contents.data()), Contents.size());
CRC.update(CharContents);
SC.DataCrc = CRC.getCRC();
} else { } else {
SC.Characteristics = OS->getCharacteristics(); SC.Characteristics = OS->getCharacteristics();
// FIXME: When we start creating DBI for import libraries, use those here. // FIXME: When we start creating DBI for import libraries, use those here.
SC.Imod = LinkerModule.getModuleIndex(); SC.Imod = LinkerModule.getModuleIndex();
} }
SC.DataCrc = 0; // FIXME
SC.RelocCrc = 0; // FIXME SC.RelocCrc = 0; // FIXME
Builder.getDbiBuilder().addSectionContrib(SC); Builder.getDbiBuilder().addSectionContrib(SC);
} }

View File

@ -248,15 +248,15 @@ RAW-NEXT: ============================================================
RAW-NEXT: PDB does not contain the requested image section header type RAW-NEXT: PDB does not contain the requested image section header type
RAW: Section Contributions RAW: Section Contributions
RAW-NEXT: ============================================================ 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: 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_CNT_CODE | IMAGE_SCN_ALIGN_16BYTES | IMAGE_SCN_MEM_EXECUTE |
RAW-NEXT: IMAGE_SCN_MEM_READ 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_CNT_CODE | IMAGE_SCN_ALIGN_16BYTES | IMAGE_SCN_MEM_EXECUTE |
RAW-NEXT: IMAGE_SCN_MEM_READ 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-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ
RAW: Section Map RAW: Section Map
RAW-NEXT: ============================================================ RAW-NEXT: ============================================================