summaryrefslogtreecommitdiff
path: root/tools/llvm-dwarfdump
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2011-09-15 21:17:40 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2011-09-15 21:17:40 +0000
commit6b3ae4638bc5a3fb3bad286f96a1234b8a53053a (patch)
treeef9b0feaf5f2eb8188fd6c017383e4ef9959280f /tools/llvm-dwarfdump
parent356c759908e1c6b968293d54bc4aa26bc8415407 (diff)
downloadllvm-6b3ae4638bc5a3fb3bad286f96a1234b8a53053a.tar.gz
llvm-6b3ae4638bc5a3fb3bad286f96a1234b8a53053a.tar.bz2
llvm-6b3ae4638bc5a3fb3bad286f96a1234b8a53053a.tar.xz
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
Diffstat (limited to 'tools/llvm-dwarfdump')
-rw-r--r--tools/llvm-dwarfdump/llvm-dwarfdump.cpp20
1 files changed, 15 insertions, 5 deletions
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<std::string>
InputFilenames(cl::Positional, cl::desc("<input object files>"),
cl::ZeroOrMore);
+static cl::opt<unsigned long long>
+Address("address", cl::init(-1ULL),
+ cl::desc("Print line information for a given address"));
+
static void DumpInput(const StringRef &Filename) {
OwningPtr<MemoryBuffer> Buff;
@@ -45,10 +49,6 @@ static void DumpInput(const StringRef &Filename) {
OwningPtr<ObjectFile> 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() : "<unknown>") << ':'
+ << dli.getLine() << ':' << dli.getColumn() << '\n';
+ }
}
int main(int argc, char **argv) {