};
static struct sigaction old_action[SIGNO_MAX];
-static logger_h logger;
-static int logger_fd = -1;
static const char *__unix_signal_get_signo_string(int signal)
{
static void __unix_signal_handler(int signal, siginfo_t *info, void *arg)
{
enum signo_e signo;
- int nptrs;
- void *buffer[BT_BUF_SIZE];
sigset_t old_mask;
sigset_t mask;
_W("[__UNIX_SIGNAL__] signal: %d(%s)",
signal, __unix_signal_get_signo_string(signal));
- nptrs = backtrace(buffer, BT_BUF_SIZE);
- backtrace_symbols_fd(buffer, nptrs,
- (logger_fd > 0) ? logger_fd : STDERR_FILENO);
-
sigprocmask(SIG_SETMASK, &old_mask, NULL);
signo = __unix_signal_get_signo(signal);
int _unix_signal_init(void)
{
struct sigaction action = { 0, };
- char path[PATH_MAX];
int ret;
int i;
}
}
- snprintf(path, sizeof(path), "%s/amd_backtrace.log",
- _logger_get_dir_name());
- ret = _logger_create(path, &logger);
- if (ret != 0)
- return ret;
-
- _logger_print(logger, "BACKTRACE", "pid: %d", getpid());
- _logger_get_fd(logger, &logger_fd);
-
return 0;
}
_W("UNIX_SIGNAL_FINI");
- _logger_destroy(logger);
-
for (i = 0; i < SIGNO_MAX; ++i)
sigaction(signo_map[i].value, &old_action[i], NULL);
}