Index: docs/CommandGuide/llvm-symbolizer.rst =================================================================== --- docs/CommandGuide/llvm-symbolizer.rst +++ docs/CommandGuide/llvm-symbolizer.rst @@ -98,6 +98,8 @@ location, look for the debug info at the .dSYM path provided via the ``-dsym-hint`` flag. This flag can be used multiple times. +.. option:: -print-address + Print address before the source code location. Defaults to false. EXIT STATUS ----------- Index: test/tools/llvm-symbolizer/Inputs/addr.inp =================================================================== --- /dev/null +++ test/tools/llvm-symbolizer/Inputs/addr.inp @@ -0,0 +1 @@ +0x40054d Index: test/tools/llvm-symbolizer/sym.test =================================================================== --- /dev/null +++ test/tools/llvm-symbolizer/sym.test @@ -0,0 +1,19 @@ +#Source: +##include +#static inline int inc (int *a) { +# printf ("%d\n",(*a)++); +# return (*a)++; +#} +# +#int main () { +# int x = 1; +# return inc(&x); +#} +#Build as : clang -g -O2 addr.c + +RUN: llvm-symbolizer -inlining -print-address -obj=%p/Inputs/addr.exe < %p/Inputs/addr.inp | FileCheck %s + +#CHECK: 0x40054d +#CHECK: main +#CHECK: /prj/qct/sunray-austin/scratch/khemant/x.c:9:0 + Index: tools/llvm-symbolizer/llvm-symbolizer.cpp =================================================================== --- tools/llvm-symbolizer/llvm-symbolizer.cpp +++ tools/llvm-symbolizer/llvm-symbolizer.cpp @@ -73,6 +73,9 @@ ClDsymHint("dsym-hint", cl::ZeroOrMore, cl::desc("Path to .dSYM bundles to search for debug info for the " "object files")); +static cl::opt + ClPrintAddress("print-address", cl::init(false), + cl::desc("Show address before line information")); static bool parseCommand(bool &IsData, std::string &ModuleName, uint64_t &ModuleOffset) { @@ -152,6 +155,11 @@ std::string Result = IsData ? Symbolizer.symbolizeData(ModuleName, ModuleOffset) : Symbolizer.symbolizeCode(ModuleName, ModuleOffset); + if (ClPrintAddress) { + outs() << "0x"; + outs().write_hex(ModuleOffset); + outs() << "\n"; + } outs() << Result << "\n"; outs().flush(); }