From 57ecf7205feedd23f901e1bb9d193787e559e433 Mon Sep 17 00:00:00 2001 From: Andre McCurdy Date: Tue, 23 Jan 2018 15:13:26 -0800 Subject: [PATCH] disable calls to getcontext() with musl Signed-off-by: Andre McCurdy --- 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