llvm-cxxdump: Rename llvm-vtabledump to llvm-cxxdump

llvm-vtabledump has grown enough functionality not related to vtables
that it deserves a name which is more descriptive.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232301 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Majnemer
2015-03-15 01:30:58 +00:00
parent e7a356409d
commit c976146d31
16 changed files with 55 additions and 54 deletions

View File

@ -28,6 +28,7 @@ set(LLVM_TEST_DEPENDS
llvm-bcanalyzer llvm-bcanalyzer
llvm-c-test llvm-c-test
llvm-cov llvm-cov
llvm-cxxdump
llvm-diff llvm-diff
llvm-dis llvm-dis
llvm-dsymutil llvm-dsymutil
@ -46,7 +47,6 @@ set(LLVM_TEST_DEPENDS
llvm-size llvm-size
llvm-symbolizer llvm-symbolizer
llvm-tblgen llvm-tblgen
llvm-vtabledump
macho-dump macho-dump
opt opt
FileCheck FileCheck

View File

@ -41,7 +41,7 @@ config.test_format = lit.formats.ShTest(execute_external)
# suffixes: A list of file extensions to treat as test files. This is overriden # suffixes: A list of file extensions to treat as test files. This is overriden
# by individual lit.local.cfg files in the test subdirectories. # by individual lit.local.cfg files in the test subdirectories.
config.suffixes = ['.ll', '.c', '.cpp', '.test', '.txt', '.s'] config.suffixes = ['.ll', '.c', '.cxx', '.test', '.txt', '.s']
# excludes: A list of directories to exclude from the testsuite. The 'Inputs' # excludes: A list of directories to exclude from the testsuite. The 'Inputs'
# subdirectories contain auxiliary inputs for various tests in their parent # subdirectories contain auxiliary inputs for various tests in their parent
@ -228,6 +228,7 @@ for pattern in [r"\bbugpoint\b(?!-)",
r"\bllvm-bcanalyzer\b", r"\bllvm-bcanalyzer\b",
r"\bllvm-config\b", r"\bllvm-config\b",
r"\bllvm-cov\b", r"\bllvm-cov\b",
r"\bllvm-cxxdump\b",
r"\bllvm-diff\b", r"\bllvm-diff\b",
r"\bllvm-dis\b", r"\bllvm-dis\b",
r"\bllvm-dsymutil\b", r"\bllvm-dsymutil\b",
@ -246,7 +247,6 @@ for pattern in [r"\bbugpoint\b(?!-)",
r"\bllvm-rtdyld\b", r"\bllvm-rtdyld\b",
r"\bllvm-size\b", r"\bllvm-size\b",
r"\bllvm-tblgen\b", r"\bllvm-tblgen\b",
r"\bllvm-vtabledump\b",
r"\bllvm-c-test\b", r"\bllvm-c-test\b",
r"\bmacho-dump\b", r"\bmacho-dump\b",
NOJUNK + r"\bopt\b", NOJUNK + r"\bopt\b",

View File

@ -1,4 +1,4 @@
RUN: llvm-vtabledump %p/Inputs/eh.obj.coff-i386 \ RUN: llvm-cxxdump %p/Inputs/eh.obj.coff-i386 \
RUN: | FileCheck %s --check-prefix=COFF-I386 RUN: | FileCheck %s --check-prefix=COFF-I386

View File

@ -1,7 +1,7 @@
RUN: llvm-vtabledump %p/Inputs/trivial.obj.coff-i386 \ RUN: llvm-cxxdump %p/Inputs/trivial.obj.coff-i386 \
RUN: | FileCheck %s --check-prefix=COFF-I386 RUN: | FileCheck %s --check-prefix=COFF-I386
RUN: llvm-vtabledump %p/Inputs/trivial.obj.elf-i386 \ RUN: llvm-cxxdump %p/Inputs/trivial.obj.elf-i386 \
RUN: | FileCheck %s --check-prefix=ELF-I386 RUN: | FileCheck %s --check-prefix=ELF-I386
COFF-I386: ??_7S@@6B@[0]: ??_R4S@@6B@ COFF-I386: ??_7S@@6B@[0]: ??_R4S@@6B@

View File

@ -37,7 +37,7 @@ add_llvm_tool_subdirectory(llvm-readobj)
add_llvm_tool_subdirectory(llvm-rtdyld) add_llvm_tool_subdirectory(llvm-rtdyld)
add_llvm_tool_subdirectory(llvm-dwarfdump) add_llvm_tool_subdirectory(llvm-dwarfdump)
add_llvm_tool_subdirectory(dsymutil) add_llvm_tool_subdirectory(dsymutil)
add_llvm_tool_subdirectory(llvm-vtabledump) add_llvm_tool_subdirectory(llvm-cxxdump)
if( LLVM_USE_INTEL_JITEVENTS ) if( LLVM_USE_INTEL_JITEVENTS )
add_llvm_tool_subdirectory(llvm-jitlistener) add_llvm_tool_subdirectory(llvm-jitlistener)
else() else()

View File

@ -33,7 +33,7 @@ PARALLEL_DIRS := opt llvm-as llvm-dis llc llvm-ar llvm-nm llvm-link \
macho-dump llvm-objdump llvm-readobj llvm-rtdyld \ macho-dump llvm-objdump llvm-readobj llvm-rtdyld \
llvm-dwarfdump llvm-cov llvm-size llvm-stress llvm-mcmarkup \ llvm-dwarfdump llvm-cov llvm-size llvm-stress llvm-mcmarkup \
llvm-profdata llvm-symbolizer obj2yaml yaml2obj llvm-c-test \ llvm-profdata llvm-symbolizer obj2yaml yaml2obj llvm-c-test \
llvm-vtabledump verify-uselistorder dsymutil llvm-pdbdump llvm-cxxdump verify-uselistorder dsymutil llvm-pdbdump
# If Intel JIT Events support is configured, build an extra tool to test it. # If Intel JIT Events support is configured, build an extra tool to test it.
ifeq ($(USE_INTEL_JITEVENTS), 1) ifeq ($(USE_INTEL_JITEVENTS), 1)

View File

@ -4,7 +4,7 @@ set(LLVM_LINK_COMPONENTS
Support Support
) )
add_llvm_tool(llvm-vtabledump add_llvm_tool(llvm-cxxdump
llvm-vtabledump.cpp llvm-cxxdump.cpp
Error.cpp Error.cpp
) )

View File

@ -1,4 +1,4 @@
//===- Error.cpp - system_error extensions for llvm-vtabledump --*- C++ -*-===// //===- Error.cxx - system_error extensions for llvm-cxxdump -----*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,7 +7,7 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// This defines a new error_category for the llvm-vtabledump tool. // This defines a new error_category for the llvm-cxxdump tool.
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
@ -17,27 +17,27 @@
using namespace llvm; using namespace llvm;
namespace { namespace {
class vtabledump_error_category : public std::error_category { class cxxdump_error_category : public std::error_category {
public: public:
const char *name() const LLVM_NOEXCEPT override { return "llvm.vtabledump"; } const char *name() const LLVM_NOEXCEPT override { return "llvm.cxxdump"; }
std::string message(int ev) const override { std::string message(int ev) const override {
switch (static_cast<vtabledump_error>(ev)) { switch (static_cast<cxxdump_error>(ev)) {
case vtabledump_error::success: case cxxdump_error::success:
return "Success"; return "Success";
case vtabledump_error::file_not_found: case cxxdump_error::file_not_found:
return "No such file."; return "No such file.";
case vtabledump_error::unrecognized_file_format: case cxxdump_error::unrecognized_file_format:
return "Unrecognized file type."; return "Unrecognized file type.";
} }
llvm_unreachable( llvm_unreachable(
"An enumerator of vtabledump_error does not have a message defined."); "An enumerator of cxxdump_error does not have a message defined.");
} }
}; };
} // namespace } // namespace
namespace llvm { namespace llvm {
const std::error_category &vtabledump_category() { const std::error_category &cxxdump_category() {
static vtabledump_error_category o; static cxxdump_error_category o;
return o; return o;
} }
} // namespace llvm } // namespace llvm

View File

@ -1,4 +1,4 @@
//===- Error.h - system_error extensions for llvm-vtabledump ----*- C++ -*-===// //===- Error.h - system_error extensions for llvm-cxxdump -------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,33 +7,33 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// This declares a new error_category for the llvm-vtabledump tool. // This declares a new error_category for the llvm-cxxdump tool.
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#ifndef LLVM_TOOLS_LLVM_VTABLEDUMP_ERROR_H #ifndef LLVM_TOOLS_LLVM_CXXDUMP_ERROR_H
#define LLVM_TOOLS_LLVM_VTABLEDUMP_ERROR_H #define LLVM_TOOLS_LLVM_CXXDUMP_ERROR_H
#include <system_error> #include <system_error>
namespace llvm { namespace llvm {
const std::error_category &vtabledump_category(); const std::error_category &cxxdump_category();
enum class vtabledump_error { enum class cxxdump_error {
success = 0, success = 0,
file_not_found, file_not_found,
unrecognized_file_format, unrecognized_file_format,
}; };
inline std::error_code make_error_code(vtabledump_error e) { inline std::error_code make_error_code(cxxdump_error e) {
return std::error_code(static_cast<int>(e), vtabledump_category()); return std::error_code(static_cast<int>(e), cxxdump_category());
} }
} // namespace llvm } // namespace llvm
namespace std { namespace std {
template <> template <>
struct is_error_code_enum<llvm::vtabledump_error> : std::true_type {}; struct is_error_code_enum<llvm::cxxdump_error> : std::true_type {};
} }
#endif #endif

View File

@ -1,4 +1,4 @@
;===- ./tools/llvm-vtabledump/LLVMBuild.txt --------------------*- Conf -*--===; ;===- ./tools/llvm-cxxdump/LLVMBuild.txt -----------------------*- Conf -*--===;
; ;
; The LLVM Compiler Infrastructure ; The LLVM Compiler Infrastructure
; ;
@ -17,6 +17,6 @@
[component_0] [component_0]
type = Tool type = Tool
name = llvm-vtabledump name = llvm-cxxdump
parent = Tools parent = Tools
required_libraries = all-targets BitReader Object required_libraries = all-targets BitReader Object

View File

@ -1,4 +1,4 @@
##===- tools/llvm-vtabledump/Makefile ----------------------*- Makefile -*-===## ##===- tools/llvm-cxxdump/Makefile -------------------------*- Makefile -*-===##
# #
# The LLVM Compiler Infrastructure # The LLVM Compiler Infrastructure
# #
@ -8,7 +8,7 @@
##===----------------------------------------------------------------------===## ##===----------------------------------------------------------------------===##
LEVEL := ../.. LEVEL := ../..
TOOLNAME := llvm-vtabledump TOOLNAME := llvm-cxxdump
LINK_COMPONENTS := bitreader object all-targets LINK_COMPONENTS := bitreader object all-targets
# This tool has no plugins, optimize startup time. # This tool has no plugins, optimize startup time.

View File

@ -1,4 +1,4 @@
//===- llvm-vtabledump.cpp - Dump vtables in an Object File -----*- C++ -*-===// //===- llvm-cxxdump.cpp - Dump C++ data in an Object File -------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,11 +7,11 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// Dumps VTables resident in object files and archives. // Dumps C++ data resident in object files and archives.
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm-vtabledump.h" #include "llvm-cxxdump.h"
#include "Error.h" #include "Error.h"
#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/ArrayRef.h"
#include "llvm/Object/Archive.h" #include "llvm/Object/Archive.h"
@ -134,7 +134,7 @@ static bool collectRelocationOffsets(
return false; return false;
} }
static void dumpVTables(const ObjectFile *Obj) { static void dumpCXXData(const ObjectFile *Obj) {
struct CompleteObjectLocator { struct CompleteObjectLocator {
StringRef Symbols[2]; StringRef Symbols[2];
ArrayRef<little32_t> Data; ArrayRef<little32_t> Data;
@ -333,7 +333,8 @@ static void dumpVTables(const ObjectFile *Obj) {
auto Key = std::make_pair(SymName, SymOffI); auto Key = std::make_pair(SymName, SymOffI);
if (VTableSymEntries.count(Key)) if (VTableSymEntries.count(Key))
continue; continue;
const char *DataPtr = SymContents.substr(SymOffI, BytesInAddress).data(); const char *DataPtr =
SymContents.substr(SymOffI, BytesInAddress).data();
int64_t VData; int64_t VData;
if (BytesInAddress == 8) if (BytesInAddress == 8)
VData = *reinterpret_cast<const little64_t *>(DataPtr); VData = *reinterpret_cast<const little64_t *>(DataPtr);
@ -347,8 +348,7 @@ static void dumpVTables(const ObjectFile *Obj) {
// FIXME: Do something with these! // FIXME: Do something with these!
} }
} }
for (const std::pair<std::pair<StringRef, uint64_t>, StringRef> &VFTableEntry : for (const auto &VFTableEntry : VFTableEntries) {
VFTableEntries) {
StringRef VFTableName = VFTableEntry.first.first; StringRef VFTableName = VFTableEntry.first.first;
uint64_t Offset = VFTableEntry.first.second; uint64_t Offset = VFTableEntry.first.second;
StringRef SymName = VFTableEntry.second; StringRef SymName = VFTableEntry.second;
@ -369,7 +369,8 @@ static void dumpVTables(const ObjectFile *Obj) {
outs() << COLName << "[OffsetToTop]: " << COL.Data[1] << '\n'; outs() << COLName << "[OffsetToTop]: " << COL.Data[1] << '\n';
outs() << COLName << "[VFPtrOffset]: " << COL.Data[2] << '\n'; outs() << COLName << "[VFPtrOffset]: " << COL.Data[2] << '\n';
outs() << COLName << "[TypeDescriptor]: " << COL.Symbols[0] << '\n'; outs() << COLName << "[TypeDescriptor]: " << COL.Symbols[0] << '\n';
outs() << COLName << "[ClassHierarchyDescriptor]: " << COL.Symbols[1] << '\n'; outs() << COLName << "[ClassHierarchyDescriptor]: " << COL.Symbols[1]
<< '\n';
} }
for (const std::pair<StringRef, ClassHierarchyDescriptor> &CHDPair : CHDs) { for (const std::pair<StringRef, ClassHierarchyDescriptor> &CHDPair : CHDs) {
StringRef CHDName = CHDPair.first; StringRef CHDName = CHDPair.first;
@ -395,7 +396,8 @@ static void dumpVTables(const ObjectFile *Obj) {
outs() << BCDName << "[VBPtrOffset]: " << BCD.Data[2] << '\n'; outs() << BCDName << "[VBPtrOffset]: " << BCD.Data[2] << '\n';
outs() << BCDName << "[OffsetInVBTable]: " << BCD.Data[3] << '\n'; outs() << BCDName << "[OffsetInVBTable]: " << BCD.Data[3] << '\n';
outs() << BCDName << "[Flags]: " << BCD.Data[4] << '\n'; outs() << BCDName << "[Flags]: " << BCD.Data[4] << '\n';
outs() << BCDName << "[ClassHierarchyDescriptor]: " << BCD.Symbols[1] << '\n'; outs() << BCDName << "[ClassHierarchyDescriptor]: " << BCD.Symbols[1]
<< '\n';
} }
for (const std::pair<StringRef, TypeDescriptor> &TDPair : TDs) { for (const std::pair<StringRef, TypeDescriptor> &TDPair : TDs) {
StringRef TDName = TDPair.first; StringRef TDName = TDPair.first;
@ -515,17 +517,16 @@ static void dumpArchive(const Archive *Arc) {
} }
if (ObjectFile *Obj = dyn_cast<ObjectFile>(&*ChildOrErr.get())) if (ObjectFile *Obj = dyn_cast<ObjectFile>(&*ChildOrErr.get()))
dumpVTables(Obj); dumpCXXData(Obj);
else else
reportError(Arc->getFileName(), reportError(Arc->getFileName(), cxxdump_error::unrecognized_file_format);
vtabledump_error::unrecognized_file_format);
} }
} }
static void dumpInput(StringRef File) { static void dumpInput(StringRef File) {
// If file isn't stdin, check that it exists. // If file isn't stdin, check that it exists.
if (File != "-" && !sys::fs::exists(File)) { if (File != "-" && !sys::fs::exists(File)) {
reportError(File, vtabledump_error::file_not_found); reportError(File, cxxdump_error::file_not_found);
return; return;
} }
@ -540,9 +541,9 @@ static void dumpInput(StringRef File) {
if (Archive *Arc = dyn_cast<Archive>(&Binary)) if (Archive *Arc = dyn_cast<Archive>(&Binary))
dumpArchive(Arc); dumpArchive(Arc);
else if (ObjectFile *Obj = dyn_cast<ObjectFile>(&Binary)) else if (ObjectFile *Obj = dyn_cast<ObjectFile>(&Binary))
dumpVTables(Obj); dumpCXXData(Obj);
else else
reportError(File, vtabledump_error::unrecognized_file_format); reportError(File, cxxdump_error::unrecognized_file_format);
} }
int main(int argc, const char *argv[]) { int main(int argc, const char *argv[]) {
@ -556,7 +557,7 @@ int main(int argc, const char *argv[]) {
// Register the target printer for --version. // Register the target printer for --version.
cl::AddExtraVersionPrinter(TargetRegistry::printRegisteredTargetsForVersion); cl::AddExtraVersionPrinter(TargetRegistry::printRegisteredTargetsForVersion);
cl::ParseCommandLineOptions(argc, argv, "LLVM VTable Dumper\n"); cl::ParseCommandLineOptions(argc, argv, "LLVM C++ ABI Data Dumper\n");
// Default to stdin if no filename is specified. // Default to stdin if no filename is specified.
if (opts::InputFilenames.size() == 0) if (opts::InputFilenames.size() == 0)

View File

@ -1,4 +1,4 @@
//===-- llvm-vtabledump.h ---------------------------------------*- C++ -*-===// //===-- llvm-cxxdump.h ------------------------------------------*- C++ -*-===//
// //
// The LLVM Compiler Infrastructure // The LLVM Compiler Infrastructure
// //
@ -7,8 +7,8 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#ifndef LLVM_TOOLS_LLVM_VTABLEDUMP_LLVM_VTABLEDUMP_H #ifndef LLVM_TOOLS_LLVM_CXXDUMP_LLVM_CXXDUMP_H
#define LLVM_TOOLS_LLVM_VTABLEDUMP_LLVM_VTABLEDUMP_H #define LLVM_TOOLS_LLVM_CXXDUMP_LLVM_CXXDUMP_H
#include "llvm/Support/CommandLine.h" #include "llvm/Support/CommandLine.h"
#include <string> #include <string>
@ -17,7 +17,7 @@ namespace opts {
extern llvm::cl::list<std::string> InputFilenames; extern llvm::cl::list<std::string> InputFilenames;
} // namespace opts } // namespace opts
#define LLVM_VTABLEDUMP_ENUM_ENT(ns, enum) \ #define LLVM_CXXDUMP_ENUM_ENT(ns, enum) \
{ #enum, ns::enum } { #enum, ns::enum }
#endif #endif