libunwind-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Missing backtrace information on aarch64


From: Stephen Hemminger
Subject: Re: Missing backtrace information on aarch64
Date: Wed, 18 Mar 2020 20:59:32 -0700

On Thu, 19 Mar 2020 08:34:35 +0800
Phil Reid <address@hidden> wrote:

> On 19/03/2020 01:45, Stephen Hemminger wrote:
> > Trying to use libunwind on Arm64 and discovered that it is not working
> > as expected. Only one function is printed.
> > 
> > On x86 Debian 10 (1.2.1-9)
> > $ ./bt
> > ^\Signal Quit recevied
> > #0 0x5640deb47308 (sigquit+0x29)
> > #1 0x7f4337b8587f (killpg+0x40)
> > #2 0x7f4337c146f4 (nanosleep+0x14)
> > #3 0x7f4337c1462a (sleep+0x3a)
> > #4 0x5640deb4732c (main+0x1f)
> > #5 0x7f4337b7209b (__libc_start_main+0xeb)
> > #6 0x564
> > 
> > 
> > On Arm64
> > 
> > # /tmp/bt
> > ^\Signal Quit recevied
> > #0 0xab9f2f927bf0 (sigquit+0x34)
> > Aborted (core dumped)
> >   
>

It is a problem with the libunwind version.
Here is the glibc backtrace version on Arm64:

$ /tmp/bt
^\Signal Quit recevied
8: [/tmp/bt(+0x884) [0xab7351d21884]]
7: [/lib/libc.so.6(__libc_start_main+0xe4) [0xff4f6b618ce4]]
6: [/tmp/bt(+0xa54) [0xab7351d21a54]]
5: [/lib/libc.so.6(sleep+0x34) [0xff4f6b697304]]
4: [/lib/libc.so.6(nanosleep+0x24) [0xff4f6b69741c]]
3: [linux-vdso.so.1(__kernel_rt_sigreturn+0) [0xff4f6b7905b8]]
2: [/tmp/bt(+0xa28) [0xab7351d21a28]]
1: [/tmp/bt(+0x974) [0xab7351d21974]]
Aborted (core dumped)


Source:
/* Simple example of glibc-backtrace */

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <execinfo.h>
#include <unistd.h>

#define BACKTRACE_SIZE 256

static void print_backtrace(void)
{
        void *func[BACKTRACE_SIZE];
        char **symb = NULL;
        int size;

        size = backtrace(func, BACKTRACE_SIZE);
        symb = backtrace_symbols(func, size);

        if (symb == NULL)
                return;

        while (size > 0) {
                fprintf(stderr,
                        "%d: [%s]\n", size, symb[size - 1]);
                size--;
        }

        free(symb);
}

static void sigquit(int signo)
{
        fprintf(stderr, "Signal %s recevied\n", strsignal(signo));
        print_backtrace();
        abort();
}

int main(int ac, char **av)
{
        signal(SIGQUIT, sigquit);

        for(;;)
                sleep(30);
}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]