blob: bc79727edd4412bfb0f0acceff8f407b29490071 [file] [log] [blame]
From 57ecf7205feedd23f901e1bb9d193787e559e433 Mon Sep 17 00:00:00 2001
From: Andre McCurdy <armccurdy@gmail.com>
Date: Tue, 23 Jan 2018 15:13:26 -0800
Subject: [PATCH] disable calls to getcontext() with musl
Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
---
src/client/linux/handler/exception_handler.cc | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
Index: git/src/client/linux/handler/exception_handler.cc
===================================================================
--- git.orig/src/client/linux/handler/exception_handler.cc
+++ git/src/client/linux/handler/exception_handler.cc
@@ -495,7 +495,19 @@ bool ExceptionHandler::SimulateSignalDel
siginfo.si_code = SI_USER;
siginfo.si_pid = getpid();
ucontext_t context;
+#if defined(__GLIBC__)
getcontext(&context);
+#else
+ // Extreme hack: Allow musl builds to compile - but don't expect them to work.
+ // Although musl provides a definition for getcontext() in ucontext.h (which
+ // enough to build libbreakpad_client) musl does not provide a corresponding
+ // getcontext() function, so builds will fail when attempting to link anything
+ // with libbreakpad_client. Disabling calls to getcontext() is a temporary
+ // hack. The real fix is probably to enable Breakpad's own implementation of
+ // getcontext() when building for musl (it's currently only enabled when
+ // building for Android).
+ memset (&context, 0, sizeof(context));
+#endif
return HandleSignal(sig, &siginfo, &context);
}
@@ -680,9 +692,14 @@ bool ExceptionHandler::WriteMinidump() {
sys_prctl(PR_SET_DUMPABLE, 1, 0, 0, 0);
CrashContext context;
+#if defined(__GLIBC__)
int getcontext_result = getcontext(&context.context);
if (getcontext_result)
return false;
+#else
+ // Extreme hack - see comments above.
+ memset (&context.context, 0, sizeof(context.context));
+#endif
#if defined(__i386__)
// In CPUFillFromUContext in minidumpwriter.cc the stack pointer is retrieved