static void signal_handler()

in aws/utils/signal_handler.cc [43:108]


static void signal_handler(int, siginfo_t *info, void *) {
    WRITE_MESSAGE("\n++++\n");
    if (info->si_signo == SIGUSR1) {
        WRITE_MESSAGE("[INFO]\n");
        WRITE_MESSAGE("User Requested Stack Trace\n");
        WRITE_MESSAGE("---BEGIN INFO---\n");
    } else {
        WRITE_MESSAGE("[ERROR]\n");
        WRITE_MESSAGE("---BEGIN ERROR----\n");
    }
    WRITE_MESSAGE("Signal: ");

    switch (info->si_signo) {
    case SIGQUIT:
        WRITE_MESSAGE("SIGQUIT")
            break;
    case SIGILL:
        WRITE_MESSAGE("SIGILL: ");
        WRITE_MESSAGE(" Code: (");
        WRITE_CODE(info->si_code);
        WRITE_MESSAGE(") Address: ");
        WRITE_POINTER(info->si_addr);
        break;
    case SIGBUS:
        WRITE_MESSAGE("SIGBUS");
        WRITE_MESSAGE(" Code: (");
        WRITE_CODE(info->si_code);
        WRITE_MESSAGE(") Address: ");
        WRITE_POINTER(info->si_addr);
        break;
    case SIGSEGV:
        WRITE_MESSAGE("SIGSEGV");
        WRITE_MESSAGE(" Code: (");
        WRITE_CODE(info->si_code);
        WRITE_MESSAGE(") Address: ");
        WRITE_POINTER(info->si_addr);
        break;
    case SIGUSR1:
        WRITE_MESSAGE("SIGUSR1");
        break;
    default:
        WRITE_MESSAGE("Unhandled Signal(");
        WRITE_NUM_CHECKED(info->si_signo, "Negative Signal?");
        WRITE_MESSAGE(")");
        break;
    }
    WRITE_MESSAGE("\n");
    WRITE_MESSAGE("Description: ");
    write_signal_description(info->si_signo);
    WRITE_MESSAGE("\n");
    WRITE_MESSAGE("---BEGIN STACK TRACE---\n");
    aws::utils::backtrace::stack_trace_for_signal();
    WRITE_MESSAGE("---END STACK TRACE---\n");
    if (info->si_signo == SIGUSR1) {
        WRITE_MESSAGE("---END INFO---\n");
    } else {
        WRITE_MESSAGE("---END ERROR---\n");
    }
    WRITE_MESSAGE("----\n");
    

    if (info->si_signo != SIGUSR1) {
        abort();
    }

}