aboutsummaryrefslogtreecommitdiffstats
path: root/testing/a2jmidid/check-for-libc-backtrace.patch
diff options
context:
space:
mode:
Diffstat (limited to 'testing/a2jmidid/check-for-libc-backtrace.patch')
-rw-r--r--testing/a2jmidid/check-for-libc-backtrace.patch34
1 files changed, 34 insertions, 0 deletions
diff --git a/testing/a2jmidid/check-for-libc-backtrace.patch b/testing/a2jmidid/check-for-libc-backtrace.patch
new file mode 100644
index 0000000000..774914cf6b
--- /dev/null
+++ b/testing/a2jmidid/check-for-libc-backtrace.patch
@@ -0,0 +1,34 @@
+Check if libc supports error backtracing from execinfo.h before attempting
+to use it (musl does not support this).
+--- a2jmidid-9/sigsegv.c
++++ a2jmidid-9/sigsegv.c
+@@ -28,7 +28,9 @@
+ #include <signal.h>
+ #include <ucontext.h>
+ #include <dlfcn.h>
++#ifdef LIBC_HAS_BACKTRACE
+ #include <execinfo.h>
++#endif
+ #include <errno.h>
+ #ifndef NO_CPP_DEMANGLE
+ //#include <cxxabi.h>
+@@ -148,12 +150,14 @@
+ bp = (void**)bp[0];
+ }
+ #else
+- a2j_error("Stack trace (non-dedicated):");
+- sz = backtrace(bt, 20);
+- strings = backtrace_symbols(bt, sz);
++ #ifdef LIBC_HAS_BACKTRACE
++ a2j_error("Stack trace (non-dedicated):");
++ sz = backtrace(bt, 20);
++ strings = backtrace_symbols(bt, sz);
+
+- for(i = 0; i < sz; ++i)
+- a2j_error("%s", strings[i]);
++ for(i = 0; i < sz; ++i)
++ a2j_error("%s", strings[i]);
++ #endif
+ #endif
+ a2j_error("End of stack trace");
+ exit (-1);