[lld] r281643 - Use SuperBlock struct defined in MSFCommon.h.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 15 11:55:18 PDT 2016
Author: ruiu
Date: Thu Sep 15 13:55:18 2016
New Revision: 281643
URL: http://llvm.org/viewvc/llvm-project?rev=281643&view=rev
Log:
Use SuperBlock struct defined in MSFCommon.h.
Modified:
lld/trunk/COFF/PDB.cpp
Modified: lld/trunk/COFF/PDB.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/PDB.cpp?rev=281643&r1=281642&r2=281643&view=diff
==============================================================================
--- lld/trunk/COFF/PDB.cpp (original)
+++ lld/trunk/COFF/PDB.cpp Thu Sep 15 13:55:18 2016
@@ -10,6 +10,7 @@
#include "Driver.h"
#include "Error.h"
#include "Symbols.h"
+#include "llvm/DebugInfo/MSF/MSFCommon.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/FileOutputBuffer.h"
#include <memory>
@@ -18,24 +19,11 @@ using namespace llvm;
using namespace llvm::support;
using namespace llvm::support::endian;
-const int PageSize = 4096;
-const uint8_t Magic[32] = "Microsoft C/C++ MSF 7.00\r\n\032DS\0\0";
-
-namespace {
-struct PDBHeader {
- uint8_t Magic[32];
- ulittle32_t PageSize;
- ulittle32_t FpmPage;
- ulittle32_t PageCount;
- ulittle32_t RootSize;
- ulittle32_t Reserved;
- ulittle32_t RootPointer;
-};
-}
+const int BlockSize = 4096;
void lld::coff::createPDB(StringRef Path) {
// Create a file.
- size_t FileSize = PageSize * 3;
+ size_t FileSize = BlockSize * 3;
ErrorOr<std::unique_ptr<FileOutputBuffer>> BufferOrErr =
FileOutputBuffer::create(Path, FileSize);
if (auto EC = BufferOrErr.getError())
@@ -44,18 +32,23 @@ void lld::coff::createPDB(StringRef Path
// Write the file header.
uint8_t *Buf = Buffer->getBufferStart();
- auto *Hdr = reinterpret_cast<PDBHeader *>(Buf);
- memcpy(Hdr->Magic, Magic, sizeof(Magic));
- Hdr->PageSize = PageSize;
- // I don't know what FpmPage field means, but it must not be 0.
- Hdr->FpmPage = 1;
- Hdr->PageCount = FileSize / PageSize;
+ auto *SB = reinterpret_cast<msf::SuperBlock *>(Buf);
+ memcpy(SB->MagicBytes, msf::Magic, sizeof(msf::Magic));
+ SB->BlockSize = BlockSize;
+
+ // FreeBlockMap is a page number containing free page map bitmap.
+ // Set a dummy value for now.
+ SB->FreeBlockMapBlock = 1;
+
+ SB->NumBlocks = FileSize / BlockSize;
+
// Root directory is empty, containing only the length field.
- Hdr->RootSize = 4;
+ SB->NumDirectoryBytes = 4;
+
// Root directory is on page 1.
- Hdr->RootPointer = 1;
+ SB->BlockMapAddr = 1;
// Write the root directory. Root stream is on page 2.
- write32le(Buf + PageSize, 2);
+ write32le(Buf + BlockSize, 2);
Buffer->commit();
}
More information about the llvm-commits
mailing list