[oe] [meta-oe][PATCH] breakpad: disable calls to getcontext() with musl

Khem Raj raj.khem at gmail.com
Thu Jan 25 18:57:18 UTC 2018


On 1/25/18 2:11 AM, Andre McCurdy wrote:
> On Wed, Jan 24, 2018 at 11:49 PM, Khem Raj <raj.khem at gmail.com> wrote:
>> On Wed, Jan 24, 2018 at 3:26 PM, Andre McCurdy <armccurdy at gmail.com> wrote:
>>> Musl does not currently provide getcontext().
>>
>> perhaps its better to declare breakpad incompatible with musl instead
>> since if it builds it will raise the hopes of users to work well at runtime
>> which it wont.
> 
> I'm using a distro which unconditionally enables breakpad and it would
> take some surgery to disable it. Unfortunately the distro maintainers
> are generally slow and unresponsive to patches so there's a good
> chance I'd end up carrying the changes to disable breakpad in my own
> tree.

perhaps that surgery is better IMO. Since when it comes time to support
breakpad on musl someone will not just say "it works" which is far worse
then a build break

> 
> At least for me, it's better to have a breakpad which builds but
> doesn't work rather than not building at all.
> 



>>> Signed-off-by: Andre McCurdy <armccurdy at gmail.com>
>>> ---
>>>  ...001-disable-calls-to-getcontext-with-musl.patch | 52 ++++++++++++++++++++++
>>>  meta-oe/recipes-devtools/breakpad/breakpad_git.bb  |  1 +
>>>  2 files changed, 53 insertions(+)
>>>  create mode 100644 meta-oe/recipes-devtools/breakpad/breakpad/0001-disable-calls-to-getcontext-with-musl.patch
>>>
>>> diff --git a/meta-oe/recipes-devtools/breakpad/breakpad/0001-disable-calls-to-getcontext-with-musl.patch b/meta-oe/recipes-devtools/breakpad/breakpad/0001-disable-calls-to-getcontext-with-musl.patch
>>> new file mode 100644
>>> index 0000000..c762754
>>> --- /dev/null
>>> +++ b/meta-oe/recipes-devtools/breakpad/breakpad/0001-disable-calls-to-getcontext-with-musl.patch
>>> @@ -0,0 +1,52 @@
>>> +From 57ecf7205feedd23f901e1bb9d193787e559e433 Mon Sep 17 00:00:00 2001
>>> +From: Andre McCurdy <armccurdy at 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 at 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
>>> +
>>> diff --git a/meta-oe/recipes-devtools/breakpad/breakpad_git.bb b/meta-oe/recipes-devtools/breakpad/breakpad_git.bb
>>> index 5f6d82c..d9773c9 100644
>>> --- a/meta-oe/recipes-devtools/breakpad/breakpad_git.bb
>>> +++ b/meta-oe/recipes-devtools/breakpad/breakpad_git.bb
>>> @@ -41,6 +41,7 @@ SRC_URI = "git://github.com/google/breakpad;name=breakpad \
>>>             file://0005-md2core-Replace-basename.patch \
>>>             file://0002-Use-_fpstate-instead-of-_libc_fpstate-on-linux.patch \
>>>             file://mcontext.patch \
>>> +           file://0001-disable-calls-to-getcontext-with-musl.patch \
>>>             file://0001-lss-Match-syscalls-to-match-musl.patch;patchdir=src/third_party/lss \
>>>             file://mips_asm_sgidefs.patch;patchdir=src/third_party/lss \
>>>  "
>>> --
>>> 1.9.1
>>>
>>> --
>>> _______________________________________________
>>> Openembedded-devel mailing list
>>> Openembedded-devel at lists.openembedded.org
>>> http://lists.openembedded.org/mailman/listinfo/openembedded-devel




More information about the Openembedded-devel mailing list