diff options
author | Igor Kudrin <ikudrin@accesssoftek.com> | 2019-04-19 10:17:52 +0000 |
---|---|---|
committer | Igor Kudrin <ikudrin@accesssoftek.com> | 2019-04-19 10:17:52 +0000 |
commit | 99f641ccadcab1e5b98f6ad09a9344855cdf287a (patch) | |
tree | 27d6759d0e0e8b2ea18c9b920caaaa1e2be75778 /llvm/tools/llvm-symbolizer | |
parent | 1b71b7f3b8869d00ec0da81dacfa738b907df8cf (diff) | |
download | bcm5719-llvm-99f641ccadcab1e5b98f6ad09a9344855cdf287a.tar.gz bcm5719-llvm-99f641ccadcab1e5b98f6ad09a9344855cdf287a.zip |
[llvm-symbolizer] Add llvm-addr2line
This adds an alias for llvm-symbolizer with different defaults so that
it can be used as a drop-in replacement for GNU's addr2line.
If a substring "addr2line" is found in the tool's name:
* it defaults "-i", "-f" and "-C" to OFF;
* it uses "--output-style=GNU" by default.
Differential Revision: https://reviews.llvm.org/D60067
llvm-svn: 358749
Diffstat (limited to 'llvm/tools/llvm-symbolizer')
-rw-r--r-- | llvm/tools/llvm-symbolizer/CMakeLists.txt | 2 | ||||
-rw-r--r-- | llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp | 14 |
2 files changed, 14 insertions, 2 deletions
diff --git a/llvm/tools/llvm-symbolizer/CMakeLists.txt b/llvm/tools/llvm-symbolizer/CMakeLists.txt index 8185c296c50..13da12fba7b 100644 --- a/llvm/tools/llvm-symbolizer/CMakeLists.txt +++ b/llvm/tools/llvm-symbolizer/CMakeLists.txt @@ -16,6 +16,8 @@ add_llvm_tool(llvm-symbolizer llvm-symbolizer.cpp ) +add_llvm_tool_symlink(llvm-addr2line llvm-symbolizer) + if(LLVM_INSTALL_BINUTILS_SYMLINKS) add_llvm_tool_symlink(addr2line llvm-symbolizer) endif() diff --git a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp index aa6635fc92f..0195241f7b5 100644 --- a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp +++ b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp @@ -43,7 +43,7 @@ static cl::opt<FunctionNameKind> ClPrintFunctions( clEnumValN(FunctionNameKind::ShortName, "short", "print short function name"), clEnumValN(FunctionNameKind::LinkageName, "linkage", - "print function linkage name (default)"), + "print function linkage name"), // Sentinel value for unspecified value. clEnumValN(FunctionNameKind::LinkageName, "", ""))); static cl::alias ClPrintFunctionsShort("f", cl::desc("Alias for -functions"), @@ -252,8 +252,18 @@ static void symbolizeInput(StringRef InputString, LLVMSymbolizer &Symbolizer, int main(int argc, char **argv) { InitLLVM X(argc, argv); + bool IsAddr2Line = sys::path::stem(argv[0]).contains("addr2line"); + + if (IsAddr2Line) { + ClDemangle.setInitialValue(false); + ClPrintFunctions.setInitialValue(FunctionNameKind::None); + ClPrintInlining.setInitialValue(false); + ClOutputStyle.setInitialValue(DIPrinter::OutputStyle::GNU); + } + llvm::sys::InitializeCOMRAII COM(llvm::sys::COMThreadingMode::MultiThreaded); - cl::ParseCommandLineOptions(argc, argv, "llvm-symbolizer\n"); + cl::ParseCommandLineOptions(argc, argv, IsAddr2Line ? "llvm-addr2line\n" + : "llvm-symbolizer\n"); // If both --demangle and --no-demangle are specified then pick the last one. if (ClNoDemangle.getPosition() > ClDemangle.getPosition()) |