From 4efa0a4201c5df01817895f476dfac71b3064acc Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Tue, 8 Nov 2016 22:24:53 +0000 Subject: [CodeView] Hook up CodeViewRecordIO to type serialization path. Previously support had been added for using CodeViewRecordIO to read (deserialize) CodeView type records. This patch adds support for writing those same records. With this patch, reading and writing of CodeView type records finally uses a single codepath. Differential Revision: https://reviews.llvm.org/D26253 llvm-svn: 286304 --- llvm/tools/llvm-readobj/COFFDumper.cpp | 13 ++++++------- llvm/tools/llvm-readobj/ObjDumper.h | 7 +++---- llvm/tools/llvm-readobj/llvm-readobj.cpp | 10 +++++----- 3 files changed, 14 insertions(+), 16 deletions(-) (limited to 'llvm/tools/llvm-readobj') diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp index 73118eb7cd0..0ca186519cd 100644 --- a/llvm/tools/llvm-readobj/COFFDumper.cpp +++ b/llvm/tools/llvm-readobj/COFFDumper.cpp @@ -24,7 +24,6 @@ #include "llvm/ADT/StringExtras.h" #include "llvm/DebugInfo/CodeView/CodeView.h" #include "llvm/DebugInfo/CodeView/Line.h" -#include "llvm/DebugInfo/CodeView/MemoryTypeTableBuilder.h" #include "llvm/DebugInfo/CodeView/RecordSerialization.h" #include "llvm/DebugInfo/CodeView/SymbolDeserializer.h" #include "llvm/DebugInfo/CodeView/SymbolDumpDelegate.h" @@ -34,6 +33,7 @@ #include "llvm/DebugInfo/CodeView/TypeIndex.h" #include "llvm/DebugInfo/CodeView/TypeRecord.h" #include "llvm/DebugInfo/CodeView/TypeStreamMerger.h" +#include "llvm/DebugInfo/CodeView/TypeTableBuilder.h" #include "llvm/DebugInfo/MSF/ByteStream.h" #include "llvm/Object/COFF.h" #include "llvm/Object/ObjectFile.h" @@ -79,8 +79,7 @@ public: void printCOFFBaseReloc() override; void printCOFFDebugDirectory() override; void printCodeViewDebugInfo() override; - void - mergeCodeViewTypes(llvm::codeview::MemoryTypeTableBuilder &CVTypes) override; + void mergeCodeViewTypes(llvm::codeview::TypeTableBuilder &CVTypes) override; void printStackMap() const override; private: void printSymbol(const SymbolRef &Sym); @@ -1063,7 +1062,7 @@ void COFFDumper::printFileNameForOffset(StringRef Label, uint32_t FileOffset) { W.printHex(Label, getFileNameForFileOffset(FileOffset), FileOffset); } -void COFFDumper::mergeCodeViewTypes(MemoryTypeTableBuilder &CVTypes) { +void COFFDumper::mergeCodeViewTypes(TypeTableBuilder &CVTypes) { for (const SectionRef &S : Obj->sections()) { StringRef SectionName; error(S.getName(SectionName)); @@ -1545,12 +1544,12 @@ void COFFDumper::printStackMap() const { StackMapV2Parser(StackMapContentsArray)); } -void llvm::dumpCodeViewMergedTypes( - ScopedPrinter &Writer, llvm::codeview::MemoryTypeTableBuilder &CVTypes) { +void llvm::dumpCodeViewMergedTypes(ScopedPrinter &Writer, + llvm::codeview::TypeTableBuilder &CVTypes) { // Flatten it first, then run our dumper on it. ListScope S(Writer, "MergedTypeStream"); SmallString<0> Buf; - CVTypes.ForEachRecord([&](TypeIndex TI, StringRef Record) { + CVTypes.ForEachRecord([&](TypeIndex TI, ArrayRef Record) { Buf.append(Record.begin(), Record.end()); }); CVTypeDumper CVTD(&Writer, opts::CodeViewSubsectionBytes); diff --git a/llvm/tools/llvm-readobj/ObjDumper.h b/llvm/tools/llvm-readobj/ObjDumper.h index 9368cc562fe..e3b65038aeb 100644 --- a/llvm/tools/llvm-readobj/ObjDumper.h +++ b/llvm/tools/llvm-readobj/ObjDumper.h @@ -19,7 +19,7 @@ class COFFImportFile; class ObjectFile; } namespace codeview { -class MemoryTypeTableBuilder; +class TypeTableBuilder; } class ScopedPrinter; @@ -65,8 +65,7 @@ public: virtual void printCOFFBaseReloc() { } virtual void printCOFFDebugDirectory() { } virtual void printCodeViewDebugInfo() { } - virtual void - mergeCodeViewTypes(llvm::codeview::MemoryTypeTableBuilder &CVTypes) {} + virtual void mergeCodeViewTypes(llvm::codeview::TypeTableBuilder &CVTypes) {} // Only implemented for MachO. virtual void printMachODataInCode() { } @@ -97,7 +96,7 @@ std::error_code createMachODumper(const object::ObjectFile *Obj, void dumpCOFFImportFile(const object::COFFImportFile *File); void dumpCodeViewMergedTypes(ScopedPrinter &Writer, - llvm::codeview::MemoryTypeTableBuilder &CVTypes); + llvm::codeview::TypeTableBuilder &CVTypes); } // namespace llvm diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp index caf44311a9c..ede1f0712bd 100644 --- a/llvm/tools/llvm-readobj/llvm-readobj.cpp +++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -22,7 +22,7 @@ #include "llvm-readobj.h" #include "Error.h" #include "ObjDumper.h" -#include "llvm/DebugInfo/CodeView/MemoryTypeTableBuilder.h" +#include "llvm/DebugInfo/CodeView/TypeTableBuilder.h" #include "llvm/Object/Archive.h" #include "llvm/Object/COFFImportFile.h" #include "llvm/Object/ELFObjectFile.h" @@ -332,14 +332,14 @@ static bool isMipsArch(unsigned Arch) { } } namespace { -struct TypeTableBuilder { - TypeTableBuilder() : Allocator(), Builder(Allocator) {} +struct ReadObjTypeTableBuilder { + ReadObjTypeTableBuilder() : Allocator(), Builder(Allocator) {} llvm::BumpPtrAllocator Allocator; - llvm::codeview::MemoryTypeTableBuilder Builder; + llvm::codeview::TypeTableBuilder Builder; }; } -static TypeTableBuilder CVTypes; +static ReadObjTypeTableBuilder CVTypes; /// @brief Creates an format-specific object file dumper. static std::error_code createDumper(const ObjectFile *Obj, -- cgit v1.2.3