From 6b3ae4638bc5a3fb3bad286f96a1234b8a53053a Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Thu, 15 Sep 2011 21:17:40 +0000 Subject: llvm-dwarfdump: Add an option to print out line info for a specific address Usage: $ llvm-dwarfdump -address=0x0000000100000ed4 a.out.dSYM/Contents/Resources/DWARF/a.out xxx.c:6:0 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139850 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/llvm-dwarfdump/llvm-dwarfdump.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'tools/llvm-dwarfdump') diff --git a/tools/llvm-dwarfdump/llvm-dwarfdump.cpp b/tools/llvm-dwarfdump/llvm-dwarfdump.cpp index 9618a1a4bb..66d5a72ea4 100644 --- a/tools/llvm-dwarfdump/llvm-dwarfdump.cpp +++ b/tools/llvm-dwarfdump/llvm-dwarfdump.cpp @@ -35,6 +35,10 @@ 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 void DumpInput(const StringRef &Filename) { OwningPtr Buff; @@ -45,10 +49,6 @@ static void DumpInput(const StringRef &Filename) { OwningPtr Obj(ObjectFile::createObjectFile(Buff.take())); - outs() << '\n'; - outs() << Filename - << ":\tfile format " << Obj->getFileFormatName() << "\n\n"; - StringRef DebugInfoSection; StringRef DebugAbbrevSection; StringRef DebugLineSection; @@ -85,7 +85,17 @@ static void DumpInput(const StringRef &Filename) { DebugArangesSection, DebugLineSection, DebugStringSection)); - dictx->dump(outs()); + if (Address == -1ULL) { + outs() << Filename + << ":\tfile format " << Obj->getFileFormatName() << "\n\n"; + // Dump the complete DWARF structure. + dictx->dump(outs()); + } else { + // Print line info for the specified address. + DILineInfo dli = dictx->getLineInfoForAddress(Address); + outs() << (dli.getFileName() ? dli.getFileName() : "") << ':' + << dli.getLine() << ':' << dli.getColumn() << '\n'; + } } int main(int argc, char **argv) { -- cgit v1.2.3