From b9c28bc7f1d9a86e45bd92b6d0b368d960697749 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Wed, 4 Mar 2015 06:09:53 +0000 Subject: [PATCH] [llvm-pdbdump] Display full enum definitions. This will now display enum definitions both at the global scope as well as nested inside of classes. Additionally, it will no longer display enums at the global scope if the enum is nested. Instead, it will omit the definition of the enum globally and instead emit it in the corresponding class definition. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231215 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h | 3 ++ lib/DebugInfo/PDB/PDBExtras.cpp | 4 +- lib/DebugInfo/PDB/PDBSymbolTypeEnum.cpp | 12 +++++ test/DebugInfo/PDB/pdbdump-symbol-format.test | 50 ++++++++---------- test/tools/llvm-pdbdump/enum-layout.test | 20 +++++++ test/tools/llvm-pdbdump/regex-filter.test | 13 +++-- tools/llvm-pdbdump/CMakeLists.txt | 1 + tools/llvm-pdbdump/ClassDefinitionDumper.cpp | 5 +- tools/llvm-pdbdump/EnumDumper.cpp | 52 +++++++++++++++++++ tools/llvm-pdbdump/EnumDumper.h | 30 +++++++++++ tools/llvm-pdbdump/TypeDumper.cpp | 23 ++++---- tools/llvm-pdbdump/TypeDumper.h | 3 +- tools/llvm-pdbdump/VariableDumper.cpp | 17 ++++-- tools/llvm-pdbdump/llvm-pdbdump.cpp | 15 +++--- tools/llvm-pdbdump/llvm-pdbdump.h | 3 +- 15 files changed, 188 insertions(+), 63 deletions(-) create mode 100644 test/tools/llvm-pdbdump/enum-layout.test create mode 100644 tools/llvm-pdbdump/EnumDumper.cpp create mode 100644 tools/llvm-pdbdump/EnumDumper.h diff --git a/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h b/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h index a4f8abe6dc0..3188c711915 100644 --- a/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h +++ b/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h @@ -26,6 +26,9 @@ public: void dump(PDBSymDumper &Dumper) const override; + std::unique_ptr getClassParent() const; + std::unique_ptr getUnderlyingType() const; + FORWARD_SYMBOL_METHOD(getBuiltinType) FORWARD_SYMBOL_METHOD(getClassParentId) FORWARD_SYMBOL_METHOD(getUnmodifiedTypeId) diff --git a/lib/DebugInfo/PDB/PDBExtras.cpp b/lib/DebugInfo/PDB/PDBExtras.cpp index beec3279a8d..4b9437c5824 100644 --- a/lib/DebugInfo/PDB/PDBExtras.cpp +++ b/lib/DebugInfo/PDB/PDBExtras.cpp @@ -303,7 +303,7 @@ raw_ostream &llvm::operator<<(raw_ostream &OS, const Variant &Value) { OS << Value.Int64; break; case PDB_VariantType::Int8: - OS << Value.Int8; + OS << static_cast(Value.Int8); break; case PDB_VariantType::Single: OS << Value.Single; @@ -318,7 +318,7 @@ raw_ostream &llvm::operator<<(raw_ostream &OS, const Variant &Value) { OS << Value.UInt64; break; case PDB_VariantType::UInt8: - OS << Value.UInt8; + OS << static_cast(Value.UInt8); break; default: OS << Value.Type; diff --git a/lib/DebugInfo/PDB/PDBSymbolTypeEnum.cpp b/lib/DebugInfo/PDB/PDBSymbolTypeEnum.cpp index 87faef82937..8dd26a342e7 100644 --- a/lib/DebugInfo/PDB/PDBSymbolTypeEnum.cpp +++ b/lib/DebugInfo/PDB/PDBSymbolTypeEnum.cpp @@ -9,7 +9,10 @@ #include "llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h" +#include "llvm/DebugInfo/PDB/IPDBSession.h" #include "llvm/DebugInfo/PDB/PDBSymDumper.h" +#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h" +#include "llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h" #include @@ -19,4 +22,13 @@ PDBSymbolTypeEnum::PDBSymbolTypeEnum(const IPDBSession &PDBSession, std::unique_ptr Symbol) : PDBSymbol(PDBSession, std::move(Symbol)) {} +std::unique_ptr PDBSymbolTypeEnum::getClassParent() const { + return Session.getConcreteSymbolById(getClassParentId()); +} + +std::unique_ptr +PDBSymbolTypeEnum::getUnderlyingType() const { + return Session.getConcreteSymbolById(getTypeId()); +} + void PDBSymbolTypeEnum::dump(PDBSymDumper &Dumper) const { Dumper.dump(*this); } diff --git a/test/DebugInfo/PDB/pdbdump-symbol-format.test b/test/DebugInfo/PDB/pdbdump-symbol-format.test index 90381f1d91f..6dd15fee4c5 100644 --- a/test/DebugInfo/PDB/pdbdump-symbol-format.test +++ b/test/DebugInfo/PDB/pdbdump-symbol-format.test @@ -1,6 +1,5 @@ ; RUN: llvm-pdbdump -symbols %p/Inputs/symbolformat.pdb | FileCheck --check-prefix=SYM_FORMAT %s ; RUN: llvm-pdbdump -types %p/Inputs/symbolformat.pdb | FileCheck --check-prefix=TYPES_FORMAT %s -; RUN: llvm-pdbdump -types -class-definitions %p/Inputs/symbolformat.pdb | FileCheck --check-prefix=FULL_CLASS %s ; RUN: llvm-pdbdump -globals %p/Inputs/symbolformat.pdb | FileCheck --check-prefix=GLOBALS %s ; The format is func [0x+ - 0x-] @@ -25,33 +24,28 @@ ; TYPES_FORMAT-DAG: typedef int IntType ; TYPES_FORMAT-DAG: typedef class A ClassAType ; TYPES_FORMAT: Classes -; TYPES_FORMAT-DAG: class A -; TYPES_FORMAT-DAG: class B - -; FULL_CLASS: ---TYPES--- -; FULL_CLASS: Classes -; FULL_CLASS-DAG: struct A { -; FULL_CLASS: public: -; FULL_CLASS: virtual void PureFunc() = 0 -; FULL_CLASS: virtual void VirtualFunc() -; FULL_CLASS: void RegularFunc() -; FULL_CLASS: } -; FULL_CLASS-DAG: struct MemberTest { -; FULL_CLASS: data +0x00 MemberTest::NestedEnum m_nested_enum -; FULL_CLASS: data +0x04 int m_typedef -; FULL_CLASS: data +0x08 bool m_bool -; FULL_CLASS: data +0x09 char m_char -; FULL_CLASS: data +0x0a wchar_t m_wchar_t -; FULL_CLASS: data +0x0c int m_int -; FULL_CLASS: data +0x10 unsigned m_unsigned -; FULL_CLASS: data +0x14 long m_long -; FULL_CLASS: data +0x18 unsigned long m_unsigned_long -; FULL_CLASS: data +0x20 __int64 m_int64 -; FULL_CLASS: data +0x28 unsigned __int64 m_unsigned_int64 -; FULL_CLASS: data +0x30 float m_float -; FULL_CLASS: data +0x38 double m_double -; FULL_CLASS: data +0x40 void (__cdecl *m_pfn_2_args)(int, double) -; FULL_CLASS: } +; TYPES_FORMAT: struct A { +; TYPES_FORMAT: public: +; TYPES_FORMAT: virtual void PureFunc() = 0 +; TYPES_FORMAT: virtual void VirtualFunc() +; TYPES_FORMAT: void RegularFunc() +; TYPES_FORMAT: } +; TYPES_FORMAT-DAG: struct MemberTest { +; TYPES_FORMAT: data +0x00 MemberTest::NestedEnum m_nested_enum +; TYPES_FORMAT: data +0x04 int m_typedef +; TYPES_FORMAT: data +0x08 bool m_bool +; TYPES_FORMAT: data +0x09 char m_char +; TYPES_FORMAT: data +0x0a wchar_t m_wchar_t +; TYPES_FORMAT: data +0x0c int m_int +; TYPES_FORMAT: data +0x10 unsigned m_unsigned +; TYPES_FORMAT: data +0x14 long m_long +; TYPES_FORMAT: data +0x18 unsigned long m_unsigned_long +; TYPES_FORMAT: data +0x20 __int64 m_int64 +; TYPES_FORMAT: data +0x28 unsigned __int64 m_unsigned_int64 +; TYPES_FORMAT: data +0x30 float m_float +; TYPES_FORMAT: data +0x38 double m_double +; TYPES_FORMAT: data +0x40 void (__cdecl *m_pfn_2_args)(int, double) +; TYPES_FORMAT: } ; GLOBALS: ---GLOBALS--- ; GLOBALS-DAG: func [{{.*}}] (FPO) unsigned __cdecl fpo_func(unsigned n) diff --git a/test/tools/llvm-pdbdump/enum-layout.test b/test/tools/llvm-pdbdump/enum-layout.test new file mode 100644 index 00000000000..c6145533899 --- /dev/null +++ b/test/tools/llvm-pdbdump/enum-layout.test @@ -0,0 +1,20 @@ +; RUN: llvm-pdbdump -types %p/Inputs/ClassLayoutTest.pdb > %t +; RUN: FileCheck -input-file=%t %s -check-prefix=GLOBAL_ENUM +; RUN: FileCheck -input-file=%t %s -check-prefix=MEMBER_ENUM + +; GLOBAL_ENUM: ---TYPES--- +; GLOBAL_ENUM: Enums: +; GLOBAL_ENUM: enum GlobalsTest::Enum { +; GLOBAL_ENUM-NEXT: Val1 = 0 +; GLOBAL_ENUM-NEXT: } + +; MEMBER_ENUM: ---TYPES--- +; MEMBER_ENUM: Classes: +; MEMBER_ENUM: struct __vc_attributes::threadingAttribute { +; MEMBER_ENUM-NEXT: enum threading_e { +; MEMBER_ENUM-NEXT: apartment = 1 +; MEMBER_ENUM-NEXT: single = 2 +; MEMBER_ENUM-NEXT: free = 3 +; MEMBER_ENUM-NEXT: neutral = 4 +; MEMBER_ENUM-NEXT: both = 5 +; MEMBER_ENUM-NEXT: } diff --git a/test/tools/llvm-pdbdump/regex-filter.test b/test/tools/llvm-pdbdump/regex-filter.test index a0ad17636dd..8b9eca63f58 100644 --- a/test/tools/llvm-pdbdump/regex-filter.test +++ b/test/tools/llvm-pdbdump/regex-filter.test @@ -1,13 +1,12 @@ -; RUN: llvm-pdbdump -symbols -globals -class-definitions -types %p/Inputs/FilterTest.pdb \ +; RUN: llvm-pdbdump -symbols -globals -types %p/Inputs/FilterTest.pdb \ ; RUN: | FileCheck --check-prefix=NO_FILTER %s -; RUN: llvm-pdbdump -class-definitions -types -exclude-types="GlobalTypedef|NestedTypedef" \ +; RUN: llvm-pdbdump -types -exclude-types="GlobalTypedef|NestedTypedef" \ ; RUN: %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=EXCLUDE_TYPEDEFS %s -; RUN: llvm-pdbdump -class-definitions -types -exclude-types="GlobalEnum|NestedEnum" \ +; RUN: llvm-pdbdump -types -exclude-types="GlobalEnum|NestedEnum" \ ; RUN: %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=EXCLUDE_ENUMS %s -; RUN: llvm-pdbdump -class-definitions -types -symbols -globals \ -; RUN: -exclude-symbols="MemberVar|GlobalVar" %p/Inputs/FilterTest.pdb | FileCheck \ -; RUN: --check-prefix=EXCLUDE_VARS %s -; RUN: llvm-pdbdump -types -class-definitions -exclude-types="FilterTestClass" \ +; RUN: llvm-pdbdump -types -symbols -globals -exclude-symbols="MemberVar|GlobalVar" \ +; RUN: %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=EXCLUDE_VARS %s +; RUN: llvm-pdbdump -types -exclude-types="FilterTestClass" \ ; RUN: %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=EXCLUDE_WHOLE_CLASS %s ; RUN: llvm-pdbdump -symbols -globals -exclude-compilands="FilterTest.obj" \ ; RUN: %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=EXCLUDE_COMPILAND %s diff --git a/tools/llvm-pdbdump/CMakeLists.txt b/tools/llvm-pdbdump/CMakeLists.txt index 341a8496a1b..4dd339cee57 100644 --- a/tools/llvm-pdbdump/CMakeLists.txt +++ b/tools/llvm-pdbdump/CMakeLists.txt @@ -8,6 +8,7 @@ add_llvm_tool(llvm-pdbdump BuiltinDumper.cpp ClassDefinitionDumper.cpp CompilandDumper.cpp + EnumDumper.cpp FunctionDumper.cpp LinePrinter.cpp TypeDumper.cpp diff --git a/tools/llvm-pdbdump/ClassDefinitionDumper.cpp b/tools/llvm-pdbdump/ClassDefinitionDumper.cpp index 5db33a82457..8abf3fa3912 100644 --- a/tools/llvm-pdbdump/ClassDefinitionDumper.cpp +++ b/tools/llvm-pdbdump/ClassDefinitionDumper.cpp @@ -8,6 +8,7 @@ //===----------------------------------------------------------------------===// #include "ClassDefinitionDumper.h" +#include "EnumDumper.h" #include "FunctionDumper.h" #include "LinePrinter.h" #include "llvm-pdbdump.h" @@ -173,8 +174,8 @@ void ClassDefinitionDumper::dump(const PDBSymbolTypeEnum &Symbol) { return; Printer.NewLine(); - WithColor(Printer, PDB_ColorItem::Keyword).get() << "enum "; - WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName(); + EnumDumper Dumper(Printer); + Dumper.start(Symbol); } void ClassDefinitionDumper::dump(const PDBSymbolTypeTypedef &Symbol) { diff --git a/tools/llvm-pdbdump/EnumDumper.cpp b/tools/llvm-pdbdump/EnumDumper.cpp new file mode 100644 index 00000000000..3514c39f6e0 --- /dev/null +++ b/tools/llvm-pdbdump/EnumDumper.cpp @@ -0,0 +1,52 @@ +//===- EnumDumper.cpp -------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "EnumDumper.h" + +#include "BuiltinDumper.h" +#include "LinePrinter.h" +#include "llvm-pdbdump.h" + +#include "llvm/DebugInfo/PDB/PDBSymbolData.h" +#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h" +#include "llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h" + +using namespace llvm; + +EnumDumper::EnumDumper(LinePrinter &P) : PDBSymDumper(true), Printer(P) {} + +void EnumDumper::start(const PDBSymbolTypeEnum &Symbol) { + WithColor(Printer, PDB_ColorItem::Keyword).get() << "enum "; + WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName(); + if (!opts::NoEnumDefs) { + auto BuiltinType = Symbol.getUnderlyingType(); + if (BuiltinType->getBuiltinType() != PDB_BuiltinType::Int || + BuiltinType->getLength() != 4) { + Printer << " : "; + BuiltinDumper Dumper(Printer); + Dumper.start(*BuiltinType); + } + Printer << " {"; + Printer.Indent(); + auto EnumValues = Symbol.findAllChildren(); + while (auto EnumValue = EnumValues->getNext()) { + if (EnumValue->getDataKind() != PDB_DataKind::Constant) + continue; + Printer.NewLine(); + WithColor(Printer, PDB_ColorItem::Identifier).get() + << EnumValue->getName(); + Printer << " = "; + WithColor(Printer, PDB_ColorItem::LiteralValue).get() + << EnumValue->getValue(); + } + Printer.Unindent(); + Printer.NewLine(); + Printer << "}"; + } +} diff --git a/tools/llvm-pdbdump/EnumDumper.h b/tools/llvm-pdbdump/EnumDumper.h new file mode 100644 index 00000000000..23de0614247 --- /dev/null +++ b/tools/llvm-pdbdump/EnumDumper.h @@ -0,0 +1,30 @@ +//===- EnumDumper.h - -------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_TOOLS_LLVMPDBDUMP_ENUMDUMPER_H +#define LLVM_TOOLS_LLVMPDBDUMP_ENUMDUMPER_H + +#include "llvm/DebugInfo/PDB/PDBSymDumper.h" + +namespace llvm { + +class LinePrinter; + +class EnumDumper : public PDBSymDumper { +public: + EnumDumper(LinePrinter &P); + + void start(const PDBSymbolTypeEnum &Symbol); + +private: + LinePrinter &Printer; +}; +} + +#endif diff --git a/tools/llvm-pdbdump/TypeDumper.cpp b/tools/llvm-pdbdump/TypeDumper.cpp index cd0be1227ad..88c0bd65697 100644 --- a/tools/llvm-pdbdump/TypeDumper.cpp +++ b/tools/llvm-pdbdump/TypeDumper.cpp @@ -9,21 +9,23 @@ #include "TypeDumper.h" +#include "BuiltinDumper.h" #include "ClassDefinitionDumper.h" +#include "EnumDumper.h" #include "LinePrinter.h" #include "llvm-pdbdump.h" #include "TypedefDumper.h" #include "llvm/DebugInfo/PDB/IPDBSession.h" #include "llvm/DebugInfo/PDB/PDBSymbolExe.h" +#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h" #include "llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h" #include "llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h" #include "llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h" using namespace llvm; -TypeDumper::TypeDumper(LinePrinter &P, bool ClassDefs) - : PDBSymDumper(true), Printer(P), FullClassDefs(ClassDefs) {} +TypeDumper::TypeDumper(LinePrinter &P) : PDBSymDumper(true), Printer(P) {} void TypeDumper::start(const PDBSymbolExe &Exe) { auto Enums = Exe.findAllChildren(); @@ -59,10 +61,13 @@ void TypeDumper::dump(const PDBSymbolTypeEnum &Symbol) { return; if (Printer.IsTypeExcluded(Symbol.getName())) return; - Printer.NewLine(); + // Dump member enums when dumping their class definition. + if (Symbol.isNested()) + return; - WithColor(Printer, PDB_ColorItem::Keyword).get() << "enum "; - WithColor(Printer, PDB_ColorItem::Identifier).get() << Symbol.getName(); + Printer.NewLine(); + EnumDumper Dumper(Printer); + Dumper.start(Symbol); } void TypeDumper::dump(const PDBSymbolTypeTypedef &Symbol) { @@ -82,11 +87,11 @@ void TypeDumper::dump(const PDBSymbolTypeUDT &Symbol) { Printer.NewLine(); - if (FullClassDefs) { - ClassDefinitionDumper Dumper(Printer); - Dumper.start(Symbol); - } else { + if (opts::NoClassDefs) { WithColor(Printer, PDB_ColorItem::Keyword).get() << "class "; WithColor(Printer, PDB_ColorItem::Identifier).get() << Symbol.getName(); + } else { + ClassDefinitionDumper Dumper(Printer); + Dumper.start(Symbol); } } diff --git a/tools/llvm-pdbdump/TypeDumper.h b/tools/llvm-pdbdump/TypeDumper.h index d63019be236..5c0832eccaf 100644 --- a/tools/llvm-pdbdump/TypeDumper.h +++ b/tools/llvm-pdbdump/TypeDumper.h @@ -18,7 +18,7 @@ class LinePrinter; class TypeDumper : public PDBSymDumper { public: - TypeDumper(LinePrinter &P, bool ClassDefs); + TypeDumper(LinePrinter &P); void start(const PDBSymbolExe &Exe); @@ -28,7 +28,6 @@ public: private: LinePrinter &Printer; - bool FullClassDefs; }; } diff --git a/tools/llvm-pdbdump/VariableDumper.cpp b/tools/llvm-pdbdump/VariableDumper.cpp index a46e1b0c4e9..030610c8c58 100644 --- a/tools/llvm-pdbdump/VariableDumper.cpp +++ b/tools/llvm-pdbdump/VariableDumper.cpp @@ -17,6 +17,7 @@ #include "llvm/DebugInfo/PDB/PDBSymbolData.h" #include "llvm/DebugInfo/PDB/PDBSymbolFunc.h" #include "llvm/DebugInfo/PDB/PDBSymbolTypeArray.h" +#include "llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h" #include "llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h" #include "llvm/DebugInfo/PDB/PDBSymbolTypePointer.h" #include "llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h" @@ -36,14 +37,12 @@ void VariableDumper::start(const PDBSymbolData &Var) { if (Printer.IsSymbolExcluded(Var.getName())) return; - Printer.NewLine(); - Printer << "data "; - auto VarType = Var.getType(); switch (auto LocType = Var.getLocationType()) { case PDB_LocType::Static: - Printer << "["; + Printer.NewLine(); + Printer << "data ["; WithColor(Printer, PDB_ColorItem::Address).get() << format_hex(Var.getRelativeVirtualAddress(), 10); Printer << "] "; @@ -51,17 +50,25 @@ void VariableDumper::start(const PDBSymbolData &Var) { dumpSymbolTypeAndName(*VarType, Var.getName()); break; case PDB_LocType::Constant: + if (isa(*VarType)) + break; + Printer.NewLine(); + Printer << "data "; WithColor(Printer, PDB_ColorItem::Keyword).get() << "const "; dumpSymbolTypeAndName(*VarType, Var.getName()); Printer << " = "; WithColor(Printer, PDB_ColorItem::LiteralValue).get() << Var.getValue(); break; case PDB_LocType::ThisRel: + Printer.NewLine(); + Printer << "data "; WithColor(Printer, PDB_ColorItem::Offset).get() << "+" << format_hex(Var.getOffset(), 4) << " "; dumpSymbolTypeAndName(*VarType, Var.getName()); break; case PDB_LocType::BitField: + Printer.NewLine(); + Printer << "data "; WithColor(Printer, PDB_ColorItem::Offset).get() << "+" << format_hex(Var.getOffset(), 4) << " "; dumpSymbolTypeAndName(*VarType, Var.getName()); @@ -69,6 +76,8 @@ void VariableDumper::start(const PDBSymbolData &Var) { WithColor(Printer, PDB_ColorItem::LiteralValue).get() << Var.getLength(); break; default: + Printer.NewLine(); + Printer << "data "; Printer << "unknown(" << LocType << ") "; WithColor(Printer, PDB_ColorItem::Identifier).get() << Var.getName(); break; diff --git a/tools/llvm-pdbdump/llvm-pdbdump.cpp b/tools/llvm-pdbdump/llvm-pdbdump.cpp index 1181307fd8a..78535ec0be9 100644 --- a/tools/llvm-pdbdump/llvm-pdbdump.cpp +++ b/tools/llvm-pdbdump/llvm-pdbdump.cpp @@ -66,10 +66,6 @@ cl::opt Symbols("symbols", cl::desc("Display symbols for each compiland"), cl::opt Globals("globals", cl::desc("Dump global symbols"), cl::cat(TypeCategory)); cl::opt Types("types", cl::desc("Display types"), cl::cat(TypeCategory)); -cl::opt - ClassDefs("class-definitions", - cl::desc("Display full class definitions (implies -types)"), - cl::cat(TypeCategory)); cl::opt All("all", cl::desc("Implies all other options in 'Symbol Types' category"), cl::cat(TypeCategory)); @@ -94,6 +90,12 @@ cl::opt ExcludeSystemLibraries("no-system-libs", cl::desc("Don't show symbols from system libraries"), cl::cat(FilterCategory)); +cl::opt NoClassDefs("no-class-definitions", + cl::desc("Don't display full class definitions"), + cl::cat(FilterCategory)); +cl::opt NoEnumDefs("no-enum-definitions", + cl::desc("Don't display full enum definitions"), + cl::cat(FilterCategory)); } static void dumpInput(StringRef Path) { @@ -171,7 +173,7 @@ static void dumpInput(StringRef Path) { Printer.NewLine(); WithColor(Printer, PDB_ColorItem::SectionHeader).get() << "---TYPES---"; Printer.Indent(); - TypeDumper Dumper(Printer, opts::ClassDefs); + TypeDumper Dumper(Printer); Dumper.start(*GlobalScope); Printer.Unindent(); } @@ -233,14 +235,11 @@ int main(int argc_, const char *argv_[]) { llvm_shutdown_obj Y; // Call llvm_shutdown() on exit. cl::ParseCommandLineOptions(argv.size(), argv.data(), "LLVM PDB Dumper\n"); - if (opts::ClassDefs) - opts::Types = true; if (opts::All) { opts::Compilands = true; opts::Symbols = true; opts::Globals = true; opts::Types = true; - opts::ClassDefs = true; } if (opts::ExcludeCompilerGenerated) { opts::ExcludeTypes.push_back("__vc_attributes"); diff --git a/tools/llvm-pdbdump/llvm-pdbdump.h b/tools/llvm-pdbdump/llvm-pdbdump.h index b2f5004d054..586a9ea374e 100644 --- a/tools/llvm-pdbdump/llvm-pdbdump.h +++ b/tools/llvm-pdbdump/llvm-pdbdump.h @@ -18,11 +18,12 @@ extern llvm::cl::opt Compilands; extern llvm::cl::opt Symbols; extern llvm::cl::opt Globals; extern llvm::cl::opt Types; -extern llvm::cl::opt ClassDefs; extern llvm::cl::opt All; extern llvm::cl::opt ExcludeCompilerGenerated; +extern llvm::cl::opt NoClassDefs; +extern llvm::cl::opt NoEnumDefs; extern llvm::cl::list ExcludeTypes; extern llvm::cl::list ExcludeSymbols; extern llvm::cl::list ExcludeCompilands; -- 2.34.1