Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20150827200005.GF3609@port70.net>
Date: Thu, 27 Aug 2015 22:00:06 +0200
From: Szabolcs Nagy <nsz@...t70.net>
To: musl@...ts.openwall.com
Subject: Re: _Unwind_Backtrace crashes

* Andy Lutomirski <luto@...capital.net> [2015-08-27 11:55:24 -0700]:
> This works on glibc.  It aborts on musl on i386 using the latest git version.
> 
> I suspect it's because whatever calls main isn't properly annotated,
> but I don't know how to debug this without rebuilding gcc, which is
> kind of a mess.
> 
> #define _GNU_SOURCE
> 
> #include <stdio.h>
> #include <stdlib.h>
> #include <signal.h>
> #include <unwind.h>
> #include <err.h>
> #include <string.h>
> 
> static void sethandler(int sig, void (*handler)(int, siginfo_t *, void *),
>                int flags)
> {
>     struct sigaction sa;
>     memset(&sa, 0, sizeof(sa));
>     sa.sa_sigaction = handler;
>     sa.sa_flags = SA_SIGINFO | flags;
>     sigemptyset(&sa.sa_mask);
>     if (sigaction(sig, &sa, 0))
>         err(1, "sigaction");
> }
> 
> _Unwind_Reason_Code trace_fn(struct _Unwind_Context * ctx, void *opaque)
> {

you might want to add

	dprintf(1, "ip: %16p  cfa: %16p\n", (void*)_Unwind_GetIP(ctx), (void*)_Unwind_GetCFA(ctx));

here, so you see if trace_fn is called at all
(and s/printf/dprintf/g so you see what is printed before the crash)

>     return _URC_NO_REASON;
> }
> 
> static void sigusr1(int sig, siginfo_t *info, void *ctx_void)
> {
>     printf("In signal handler.  Trying to unwind.\n");
>     _Unwind_Backtrace(trace_fn, 0);
> }
> 
> int main()
> {
>     printf("Unwind directly\n");
>     _Unwind_Backtrace(trace_fn, 0);
> 
>     printf("Unwind from signal handler\n");
>     sethandler(SIGUSR1, sigusr1, 0);
>     raise(SIGUSR1);
> 
>     printf("OK\n");
> }
> 
> 
> -- 
> Andy Lutomirski
> AMA Capital Management, LLC

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.