[PATCH] fix missing backtraces on macOS by using _Unwind_Backtrace

Bob Wilson via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 11 13:55:02 PST 2016


This is a follow up to r270276:

commit f77c43d1f362f817c7801f48c59b715eae726613
Author: Richard Smith <richard-llvm at metafoo.co.uk>
Date:   Fri May 20 21:18:12 2016 +0000

    Reinstate r269992 (reverting r270267), but restricted to cases where glibc is
    the C standard library implementation in use.
    
    This works around a glibc bug in the backtrace() function where it fails to
    produce a backtrace on x86_64 if libgcc / libunwind is statically linked.

It turns out that Darwin’s backtrace() function does not work with sigaltstack (which was enabled when available with r270395) — it does a sanity check to make sure that the current frame pointer is within the expected stack area (which it is not when using an alternate stack) and gives up otherwise. I’ve asked to see if we can get that fixed, but even if we do, it will take a while to get it released. I’d rather not disable the use of sigaltstack on macOS so instead I tried using the _Unwind_Backtrace code. It seems to work fine. The comment there says that it does not work on FreeBSD, and the commit above changed it to only be used with glibc. Is there any reason why it shouldn’t be used for macOS? I’d like to apply this simple patch to do that. Note that we then use backtrace_symbols_fd() with the addresses from _Unwind_Backtrace, but I’ve tested that and it seems to work fine.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: apple-unwind-backtrace.patch
Type: application/octet-stream
Size: 474 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161111/ddf69d50/attachment.obj>


More information about the llvm-commits mailing list