X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=tools%2Fllvm-dwarfdump%2Fllvm-dwarfdump.cpp;h=b4aeb6b8d4aa2ae48c808ee9cff680751283b01c;hp=c46bd6b06b405ea012c4e0d23e64cb476290e803;hb=24ae56d4c97fe85345481e16329684a947e62c5b;hpb=498ffb8a568992d613e654ddec69b04d350aec20 diff --git a/tools/llvm-dwarfdump/llvm-dwarfdump.cpp b/tools/llvm-dwarfdump/llvm-dwarfdump.cpp index c46bd6b06b4..b4aeb6b8d4a 100644 --- a/tools/llvm-dwarfdump/llvm-dwarfdump.cpp +++ b/tools/llvm-dwarfdump/llvm-dwarfdump.cpp @@ -11,7 +11,6 @@ // //===----------------------------------------------------------------------===// -#include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/Triple.h" #include "llvm/DebugInfo/DIContext.h" @@ -26,11 +25,11 @@ #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/Signals.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/Support/system_error.h" #include #include #include #include +#include using namespace llvm; using namespace object; @@ -39,19 +38,6 @@ static cl::list InputFilenames(cl::Positional, cl::desc(""), cl::ZeroOrMore); -static cl::opt -Address("address", cl::init(-1ULL), - cl::desc("Print line information for a given address")); - -static cl::opt -PrintFunctions("functions", cl::init(false), - cl::desc("Print function names as well as line information " - "for a given address")); - -static cl::opt -PrintInlining("inlining", cl::init(false), - cl::desc("Print all inlined frames for a given address")); - static cl::opt DumpType("debug-dump", cl::init(DIDT_All), cl::desc("Dump of debug sections:"), @@ -62,8 +48,12 @@ DumpType("debug-dump", cl::init(DIDT_All), clEnumValN(DIDT_Aranges, "aranges", ".debug_aranges"), clEnumValN(DIDT_Info, "info", ".debug_info"), clEnumValN(DIDT_InfoDwo, "info.dwo", ".debug_info.dwo"), + clEnumValN(DIDT_Types, "types", ".debug_types"), + clEnumValN(DIDT_TypesDwo, "types.dwo", ".debug_types.dwo"), clEnumValN(DIDT_Line, "line", ".debug_line"), + clEnumValN(DIDT_LineDwo, "line.dwo", ".debug_line.dwo"), clEnumValN(DIDT_Loc, "loc", ".debug_loc"), + clEnumValN(DIDT_LocDwo, "loc.dwo", ".debug_loc.dwo"), clEnumValN(DIDT_Frames, "frames", ".debug_frame"), clEnumValN(DIDT_Ranges, "ranges", ".debug_ranges"), clEnumValN(DIDT_Pubnames, "pubnames", ".debug_pubnames"), @@ -75,59 +65,30 @@ DumpType("debug-dump", cl::init(DIDT_All), clEnumValN(DIDT_StrOffsetsDwo, "str_offsets.dwo", ".debug_str_offsets.dwo"), clEnumValEnd)); -static void PrintDILineInfo(DILineInfo dli) { - if (PrintFunctions) - outs() << (dli.getFunctionName() ? dli.getFunctionName() : "") - << "\n"; - outs() << (dli.getFileName() ? dli.getFileName() : "") << ':' - << dli.getLine() << ':' << dli.getColumn() << '\n'; -} - -static void DumpInput(const StringRef &Filename) { - OwningPtr Buff; +static void DumpInput(StringRef Filename) { + ErrorOr> BuffOrErr = + MemoryBuffer::getFileOrSTDIN(Filename); - if (error_code ec = MemoryBuffer::getFileOrSTDIN(Filename, Buff)) { - errs() << Filename << ": " << ec.message() << "\n"; + if (std::error_code EC = BuffOrErr.getError()) { + errs() << Filename << ": " << EC.message() << "\n"; return; } + std::unique_ptr Buff = std::move(BuffOrErr.get()); - OwningPtr Obj(ObjectFile::createObjectFile(Buff.take())); - if (!Obj) { - errs() << Filename << ": Unknown object file format\n"; + ErrorOr> ObjOrErr = + ObjectFile::createObjectFile(Buff->getMemBufferRef()); + if (std::error_code EC = ObjOrErr.getError()) { + errs() << Filename << ": " << EC.message() << '\n'; return; } + ObjectFile &Obj = *ObjOrErr.get(); - OwningPtr DICtx(DIContext::getDWARFContext(Obj.get())); + std::unique_ptr DICtx(DIContext::getDWARFContext(Obj)); - if (Address == -1ULL) { - outs() << Filename - << ":\tfile format " << Obj->getFileFormatName() << "\n\n"; - // Dump the complete DWARF structure. - DICtx->dump(outs(), DumpType); - } else { - // Print line info for the specified address. - int SpecFlags = DILineInfoSpecifier::FileLineInfo | - DILineInfoSpecifier::AbsoluteFilePath; - if (PrintFunctions) - SpecFlags |= DILineInfoSpecifier::FunctionName; - if (PrintInlining) { - DIInliningInfo InliningInfo = - DICtx->getInliningInfoForAddress(Address, SpecFlags); - uint32_t n = InliningInfo.getNumberOfFrames(); - if (n == 0) { - // Print one empty debug line info in any case. - PrintDILineInfo(DILineInfo()); - } else { - for (uint32_t i = 0; i < n; i++) { - DILineInfo dli = InliningInfo.getFrame(i); - PrintDILineInfo(dli); - } - } - } else { - DILineInfo dli = DICtx->getLineInfoForAddress(Address, SpecFlags); - PrintDILineInfo(dli); - } - } + outs() << Filename + << ":\tfile format " << Obj.getFileFormatName() << "\n\n"; + // Dump the complete DWARF structure. + DICtx->dump(outs(), DumpType); } int main(int argc, char **argv) {