static void die_signal_handler(int signum, siginfo_t *siginfo, void *context) { void *stack_syms[32]; int frames; const char *cp; fprintf(stderr, "Signal (%d) %s ", signum, lookup_table_fallback(signum, sig_table)); if (siginfo->si_code == SI_USER) fprintf(stderr, "(sent from pid %u) ", siginfo->si_pid); cp = lookup_table(siginfo->si_code, generic_code_table); if (cp) fprintf(stderr, "si_code=%s ", cp); else if (signum == SIGILL) fprintf(stderr, "si_code=%s ", lookup_table_fallback(siginfo->si_code, sigill_code_table)); else if (signum == SIGFPE) fprintf(stderr, "si_code=%s ", lookup_table_fallback(siginfo->si_code, sigfpe_code_table)); else if (signum == SIGSEGV) fprintf(stderr, "si_code=%s ", lookup_table_fallback(siginfo->si_code, sigsegv_code_table)); else if (signum == SIGBUS) fprintf(stderr, "si_code=%s ", lookup_table_fallback(siginfo->si_code, sigbus_code_table)); else if (signum == SIGCHLD) fprintf(stderr, "si_code=%s ", lookup_table_fallback(siginfo->si_code, sigcld_code_table)); else fprintf(stderr, "si code=%d ", siginfo->si_code); if ((siginfo->si_code != SI_USER) && (signum == SIGILL || signum == SIGFPE || signum == SIGSEGV || signum == SIGBUS)) fprintf(stderr, "fault addr=%p", siginfo->si_addr); fprintf(stderr, "\n"); #ifdef HAVE_BACKTRACE #ifdef __GLIBC__ frames = backtrace(stack_syms, 32); backtrace_symbols_fd(stack_syms, frames, 2); #else #warning "HAVE_BACKTRACE should be disabled on android OS!" /* Hopefully, you're on an Android device and debuggerd will do this. */ #endif /* __GLIBC__ */ #endif /* HAVE_BACKTRACE */ exit(FSCK_ERROR); }
static void die_signal_handler(int signum, siginfo_t *siginfo, void *context) { void *stack_syms[32]; int frames; const char *cp; fprintf(stderr, "Signal (%d) %s ", signum, lookup_table_fallback(signum, sig_table)); if (siginfo->si_code == SI_USER) fprintf(stderr, "(sent from pid %u) ", siginfo->si_pid); cp = lookup_table(siginfo->si_code, generic_code_table); if (cp) fprintf(stderr, "si_code=%s ", cp); else if (signum == SIGILL) fprintf(stderr, "si_code=%s ", lookup_table_fallback(siginfo->si_code, sigill_code_table)); else if (signum == SIGFPE) fprintf(stderr, "si_code=%s ", lookup_table_fallback(siginfo->si_code, sigfpe_code_table)); else if (signum == SIGSEGV) fprintf(stderr, "si_code=%s ", lookup_table_fallback(siginfo->si_code, sigsegv_code_table)); else if (signum == SIGBUS) fprintf(stderr, "si_code=%s ", lookup_table_fallback(siginfo->si_code, sigbus_code_table)); else if (signum == SIGCHLD) fprintf(stderr, "si_code=%s ", lookup_table_fallback(siginfo->si_code, sigcld_code_table)); else fprintf(stderr, "si code=%d ", siginfo->si_code); if ((siginfo->si_code != SI_USER) && (signum == SIGILL || signum == SIGFPE || signum == SIGSEGV || signum == SIGBUS)) fprintf(stderr, "fault addr=%p", siginfo->si_addr); fprintf(stderr, "\n"); #ifdef HAVE_BACKTRACE frames = backtrace(stack_syms, 32); backtrace_symbols_fd(stack_syms, frames, 2); #endif exit(FSCK_ERROR); }
if (ret) return ret; snprintf(buf, sizeof(buf), "%d", num); buf[sizeof(buf)-1] = 0; return buf; } static void die_signal_handler(int signum, siginfo_t *siginfo, void *context EXT2FS_ATTR((unused))) { void *stack_syms[32]; int frames; const char *cp; fprintf(stderr, "Signal (%d) %s ", signum, lookup_table_fallback(signum, sig_table)); if (siginfo->si_code == SI_USER) fprintf(stderr, "(sent from pid %u) ", siginfo->si_pid); cp = lookup_table(siginfo->si_code, generic_code_table); if (cp) fprintf(stderr, "si_code=%s ", cp); else if (signum == SIGILL) fprintf(stderr, "si_code=%s ", lookup_table_fallback(siginfo->si_code, sigill_code_table)); else if (signum == SIGFPE) fprintf(stderr, "si_code=%s ", lookup_table_fallback(siginfo->si_code, sigfpe_code_table)); else if (signum == SIGSEGV) fprintf(stderr, "si_code=%s ",