1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00

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

llvm-svn: 139850
This commit is contained in:
Benjamin Kramer 2011-09-15 21:17:40 +00:00
parent aeb7320fa5
commit b5c3c42a54

View File

@ -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) {