summaryrefslogtreecommitdiffstats
path: root/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad/0001-disable-calls-to-getcontext-with-musl.patch
blob: c762754ad131d28c55acf86e9aae9947ec4eddce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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(+)

diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc
index cca023f..f3e460c 100644
--- a/src/client/linux/handler/exception_handler.cc
+++ b/src/client/linux/handler/exception_handler.cc
@@ -495,7 +495,19 @@ bool ExceptionHandler::SimulateSignalDelivery(int sig) {
   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
-- 
1.9.1

OpenPOWER on IntegriCloud