NetBSD-Bugs archive

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

re: toolchain/53918: X crashes on pinebook and stack unwinding broken



The following reply was made to PR toolchain/53918; it has been noted by GNATS.

From: matthew green <mrg%eterna.com.au@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: toolchain-manager%netbsd.org@localhost, gnats-admin%netbsd.org@localhost,
    netbsd-bugs%netbsd.org@localhost
Subject: re: toolchain/53918: X crashes on pinebook and stack unwinding broken
Date: Tue, 29 Jan 2019 11:19:08 +1100

 i hacked the xorg_backtrace() function into a simple test case that
 also hangs on arm64 for me.
 
 
 .mrg.
 
 
 #include <dlfcn.h>
 #include <execinfo.h>
 #include <stdio.h>
 #include <signal.h>
 
 #define ErrorFSigSafe printf
 
 void
 xorg_backtrace(void)
 {   
     const int BT_SIZE = 64;
     void *array[BT_SIZE];
     const char *mod;
     int size, i;
     Dl_info info;
 
     ErrorFSigSafe("\n");
     ErrorFSigSafe("Backtrace:\n");
     size = backtrace(array, BT_SIZE);
     ErrorFSigSafe("bt size = %d\n", size);
     for (i = 0; i < size; i++) {
         int rc = dladdr(array[i], &info);
 
         if (rc == 0) {
             ErrorFSigSafe("%u: ?? [%p]\n", i, array[i]);
             continue;
         }
         mod = (info.dli_fname && *info.dli_fname) ? info.dli_fname : "(vdso)";
         if (info.dli_saddr)
             ErrorFSigSafe(
                 "%u: %s (%s+0x%x) [%p]\n",
                 i,
                 mod,
                 info.dli_sname,
                 (unsigned int)((char *) array[i] -
                                (char *) info.dli_saddr),
                 array[i]);
         else
             ErrorFSigSafe(
                 "%u: %s (%p+0x%x) [%p]\n",
                 i,
                 mod,
                 info.dli_fbase,
                 (unsigned int)((char *) array[i] -
                                (char *) info.dli_fbase),
                 array[i]);
     }
     ErrorFSigSafe("\n");
 }
 
 void
 call_bt(int signo)
 {
 	printf("signo: %d\n", signo);
 	xorg_backtrace();
 }
 
 int
 main(void)
 {
 	xorg_backtrace();
 
 	signal(SIGSEGV, call_bt);
 	*(volatile char *)0 = 1;
 }
 


Home | Main Index | Thread Index | Old Index