X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=tools%2Fllvm-dwarfdump%2Fllvm-dwarfdump.cpp;h=b4aeb6b8d4aa2ae48c808ee9cff680751283b01c;hb=12af22e8cc217827cf4f118b0f5e4ebbda9925ae;hp=e41ae251683cf337d6c20e88799df007c8fb73d0;hpb=08ef0202ce1b2324cccafba3d640cc8a9b859dd0;p=oota-llvm.git diff --git a/tools/llvm-dwarfdump/llvm-dwarfdump.cpp b/tools/llvm-dwarfdump/llvm-dwarfdump.cpp index e41ae251683..b4aeb6b8d4a 100644 --- a/tools/llvm-dwarfdump/llvm-dwarfdump.cpp +++ b/tools/llvm-dwarfdump/llvm-dwarfdump.cpp @@ -25,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; @@ -38,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:"), @@ -78,58 +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.FunctionName << "\n"; - outs() << dli.FileName << ':' << dli.Line << ':' << dli.Column << '\n'; -} - -static void DumpInput(const StringRef &Filename) { - std::unique_ptr 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()); - ErrorOr ObjOrErr(ObjectFile::createObjectFile(Buff.release())); - if (error_code EC = ObjOrErr.getError()) { + ErrorOr> ObjOrErr = + ObjectFile::createObjectFile(Buff->getMemBufferRef()); + if (std::error_code EC = ObjOrErr.getError()) { errs() << Filename << ": " << EC.message() << '\n'; return; } - std::unique_ptr Obj(ObjOrErr.get()); + ObjectFile &Obj = *ObjOrErr.get(); - std::unique_ptr 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) {