mirror of
https://github.com/RPCSX/llvm.git
synced 2026-01-31 01:05:23 +01:00
The raw CodeView format references strings by "offsets", but it's confusing what table the offset refers to. In the case of line number information, it's an offset into a buffer of records, and an indirection is required to get another offset into a different table to find the final string. And in the case of checksum information, there is no indirection, and the offset refers directly to the location of the string in another buffer. This would be less confusing if we always just referred to the strings by their value, and have the library be smart enough to correctly resolve the offsets on its own from the right location. This patch makes that possible. When either reading or writing, all the user deals with are strings, and the library does the appropriate translations behind the scenes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302053 91177308-0d34-0410-b5e6-96231b3b80d8
61 lines
1.7 KiB
C++
61 lines
1.7 KiB
C++
//===- PDBStringTableBuilder.h - PDB String Table Builder -------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file creates the "/names" stream.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_DEBUGINFO_PDB_RAW_PDBSTRINGTABLEBUILDER_H
|
|
#define LLVM_DEBUGINFO_PDB_RAW_PDBSTRINGTABLEBUILDER_H
|
|
|
|
#include "llvm/ADT/DenseMap.h"
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/DebugInfo/CodeView/StringTable.h"
|
|
#include "llvm/Support/Error.h"
|
|
#include <vector>
|
|
|
|
namespace llvm {
|
|
class BinaryStreamWriter;
|
|
class WritableBinaryStreamRef;
|
|
|
|
namespace msf {
|
|
struct MSFLayout;
|
|
}
|
|
|
|
namespace pdb {
|
|
|
|
class PDBFileBuilder;
|
|
|
|
class PDBStringTableBuilder {
|
|
public:
|
|
// If string S does not exist in the string table, insert it.
|
|
// Returns the ID for S.
|
|
uint32_t insert(StringRef S);
|
|
|
|
uint32_t calculateSerializedSize() const;
|
|
Error commit(BinaryStreamWriter &Writer) const;
|
|
|
|
codeview::StringTable &getStrings() { return Strings; }
|
|
const codeview::StringTable &getStrings() const { return Strings; }
|
|
|
|
private:
|
|
uint32_t calculateHashTableSize() const;
|
|
Error writeHeader(BinaryStreamWriter &Writer) const;
|
|
Error writeStrings(BinaryStreamWriter &Writer) const;
|
|
Error writeHashTable(BinaryStreamWriter &Writer) const;
|
|
Error writeEpilogue(BinaryStreamWriter &Writer) const;
|
|
|
|
codeview::StringTable Strings;
|
|
};
|
|
|
|
} // end namespace pdb
|
|
} // end namespace llvm
|
|
|
|
#endif // LLVM_DEBUGINFO_PDB_RAW_PDBSTRINGTABLEBUILDER_H
|