summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/Unix/Signals.inc
diff options
context:
space:
mode:
authorChris Bieneman <beanz@apple.com>2016-05-20 20:15:17 +0000
committerChris Bieneman <beanz@apple.com>2016-05-20 20:15:17 +0000
commit6b58c4723a94c8e89cb91e8e83d9fb8047fee329 (patch)
tree1d7a9be0f053e7cfb2e79b09ec89ca7d3de84a95 /llvm/lib/Support/Unix/Signals.inc
parent74f3dbe438d322a15657e56c99f33ee67c38d68c (diff)
downloadbcm5719-llvm-6b58c4723a94c8e89cb91e8e83d9fb8047fee329.tar.gz
bcm5719-llvm-6b58c4723a94c8e89cb91e8e83d9fb8047fee329.zip
Revert "Work around a glibc bug: backtrace() spuriously fails if..."
This commit has been breaking the FreeBSD bots: http://lab.llvm.org:8011/builders/lld-x86_64-freebsd This reverts commit r269992. llvm-svn: 270267
Diffstat (limited to 'llvm/lib/Support/Unix/Signals.inc')
-rw-r--r--llvm/lib/Support/Unix/Signals.inc55
1 files changed, 4 insertions, 51 deletions
diff --git a/llvm/lib/Support/Unix/Signals.inc b/llvm/lib/Support/Unix/Signals.inc
index 27f3414ce57..061cdb3da21 100644
--- a/llvm/lib/Support/Unix/Signals.inc
+++ b/llvm/lib/Support/Unix/Signals.inc
@@ -45,9 +45,6 @@
#if HAVE_LINK_H
#include <link.h>
#endif
-#if HAVE_UNWIND_BACKTRACE
-#include <unwind.h>
-#endif
using namespace llvm;
@@ -312,61 +309,17 @@ static bool findModulesAndOffsets(void **StackTrace, int Depth,
}
#endif // defined(HAVE_BACKTRACE) && defined(ENABLE_BACKTRACES) && ...
-#if defined(ENABLE_BACKTRACES) && defined(HAVE_UNWIND_BACKTRACE)
-static int unwindBacktrace(void **StackTrace, int MaxEntries) {
- if (MaxEntries < 0)
- return 0;
-
- // Skip the first frame ('unwindBacktrace' itself).
- int Entries = -1;
-
- auto HandleFrame = [&](_Unwind_Context *Context) -> _Unwind_Reason_Code {
- // Apparently we need to detect reaching the end of the stack ourselves.
- void *IP = (void *)_Unwind_GetIP(Context);
- if (!IP)
- return _URC_END_OF_STACK;
-
- assert(Entries < MaxEntries && "recursively called after END_OF_STACK?");
- if (Entries >= 0)
- StackTrace[Entries] = IP;
-
- if (++Entries == MaxEntries)
- return _URC_END_OF_STACK;
- return _URC_NO_REASON;
- };
-
- _Unwind_Backtrace(
- [](_Unwind_Context *Context, void *Handler) {
- return (*static_cast<decltype(HandleFrame) *>(Handler))(Context);
- },
- static_cast<void *>(&HandleFrame));
- return std::max(Entries, 0);
-}
-#endif
-
// PrintStackTrace - In the case of a program crash or fault, print out a stack
// trace so that the user has an indication of why and where we died.
//
// On glibc systems we have the 'backtrace' function, which works nicely, but
// doesn't demangle symbols.
void llvm::sys::PrintStackTrace(raw_ostream &OS) {
-#if defined(ENABLE_BACKTRACES)
- static void *StackTrace[256];
- int depth = 0;
-#if defined(HAVE_BACKTRACE)
+#if defined(HAVE_BACKTRACE) && defined(ENABLE_BACKTRACES)
+ static void* StackTrace[256];
// Use backtrace() to output a backtrace on Linux systems with glibc.
- if (!depth)
- depth = backtrace(StackTrace, static_cast<int>(array_lengthof(StackTrace)));
-#endif
-#if defined(HAVE_UNWIND_BACKTRACE)
- // Try _Unwind_Backtrace() if backtrace() failed.
- if (!depth)
- depth = unwindBacktrace(StackTrace,
+ int depth = backtrace(StackTrace,
static_cast<int>(array_lengthof(StackTrace)));
-#endif
- if (!depth)
- return;
-
if (printSymbolizedStackTrace(StackTrace, depth, OS))
return;
#if HAVE_DLFCN_H && __GNUG__
@@ -416,7 +369,7 @@ void llvm::sys::PrintStackTrace(raw_ostream &OS) {
}
OS << '\n';
}
-#elif defined(HAVE_BACKTRACE)
+#else
backtrace_symbols_fd(StackTrace, depth, STDERR_FILENO);
#endif
#endif
OpenPOWER on IntegriCloud