diff options
author | Alexey Samsonov <vonosmas@gmail.com> | 2014-10-10 22:58:26 +0000 |
---|---|---|
committer | Alexey Samsonov <vonosmas@gmail.com> | 2014-10-10 22:58:26 +0000 |
commit | 96983b89b01e65a96919760557f3b6e90a32408a (patch) | |
tree | 3a01d36ab115d30eeb53d779a7303f600db5cd00 /llvm/lib/Support/Unix/Signals.inc | |
parent | 0aa6926d0b7f049bdaf82c6f1503f232f157968e (diff) | |
download | bcm5719-llvm-96983b89b01e65a96919760557f3b6e90a32408a.tar.gz bcm5719-llvm-96983b89b01e65a96919760557f3b6e90a32408a.zip |
Follow-up to r219534 to make symbolization more robust.
1) Explicitly provide important arguments to llvm-symbolizer,
not relying on defaults.
2) Be more defensive about symbolizer output.
This might fix weird failures on ninja-x64-msvc-RA-centos6 buildbot.
llvm-svn: 219541
Diffstat (limited to 'llvm/lib/Support/Unix/Signals.inc')
-rw-r--r-- | llvm/lib/Support/Unix/Signals.inc | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/Support/Unix/Signals.inc b/llvm/lib/Support/Unix/Signals.inc index a9e484003e1..a19cc61c3c1 100644 --- a/llvm/lib/Support/Unix/Signals.inc +++ b/llvm/lib/Support/Unix/Signals.inc @@ -363,9 +363,10 @@ static bool printSymbolizedStackTrace(void **StackTrace, int Depth, FILE *FD) { } } - const char *args[] = {"llvm-symbolizer", nullptr}; + const char *Args[] = {"llvm-symbolizer", "--functions=linkage", "--inlining", + "--demangle", nullptr}; int RunResult = - sys::ExecuteAndWait(LLVMSymbolizerPath, args, nullptr, Redirects.data()); + sys::ExecuteAndWait(LLVMSymbolizerPath, Args, nullptr, Redirects.data()); if (RunResult != 0) return false; @@ -385,12 +386,16 @@ static bool printSymbolizedStackTrace(void **StackTrace, int Depth, FILE *FD) { // Read pairs of lines (function name and file/line info) until we // encounter empty line. for (;;) { + if (CurLine == Lines.end()) + return false; StringRef FunctionName = *CurLine++; if (FunctionName.empty()) break; fprintf(FD, "#%d %p ", frame_no++, StackTrace[i]); if (!FunctionName.startswith("??")) fprintf(FD, "%s ", FunctionName.str().c_str()); + if (CurLine == Lines.end()) + return false; StringRef FileLineInfo = *CurLine++; if (!FileLineInfo.startswith("??")) fprintf(FD, "%s", FileLineInfo.str().c_str()); |