summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2012-07-02 05:54:45 +0000
committerAlexey Samsonov <samsonov@google.com>2012-07-02 05:54:45 +0000
commitf4462fa3ca8c709b46604bcbcdc2641c23c078b7 (patch)
treebc51d87c935ba7216a6ef85fa84b62d06ae3d43b /llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
parent03afad8f1e750dad3d1241f511429f4337cf8282 (diff)
downloadbcm5719-llvm-f4462fa3ca8c709b46604bcbcdc2641c23c078b7.tar.gz
bcm5719-llvm-f4462fa3ca8c709b46604bcbcdc2641c23c078b7.zip
This patch extends the libLLVMDebugInfo which contains a minimalistic DWARF parser:
1) DIContext is now able to return function name for a given instruction address (besides file/line info). 2) llvm-dwarfdump accepts flag --functions that prints the function name (if address is specified by --address flag). 3) test case that checks the basic functionality of llvm-dwarfdump added llvm-svn: 159512
Diffstat (limited to 'llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp')
-rw-r--r--llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp b/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
index ca0493de5dd..b6536fa1d71 100644
--- a/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
+++ b/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp
@@ -39,6 +39,11 @@ static cl::opt<unsigned long long>
Address("address", cl::init(-1ULL),
cl::desc("Print line information for a given address"));
+static cl::opt<bool>
+PrintFunctions("functions", cl::init(false),
+ cl::desc("Print function names as well as line information "
+ "for a given address"));
+
static void DumpInput(const StringRef &Filename) {
OwningPtr<MemoryBuffer> Buff;
@@ -92,7 +97,13 @@ static void DumpInput(const StringRef &Filename) {
dictx->dump(outs());
} else {
// Print line info for the specified address.
- DILineInfo dli = dictx->getLineInfoForAddress(Address);
+ int spec_flags = DILineInfoSpecifier::FileLineInfo;
+ if (PrintFunctions)
+ spec_flags |= DILineInfoSpecifier::FunctionName;
+ DILineInfo dli = dictx->getLineInfoForAddress(Address, spec_flags);
+ if (PrintFunctions)
+ outs() << (dli.getFunctionName() ? dli.getFunctionName() : "<unknown>")
+ << "\n";
outs() << (dli.getFileName() ? dli.getFileName() : "<unknown>") << ':'
<< dli.getLine() << ':' << dli.getColumn() << '\n';
}
OpenPOWER on IntegriCloud