From 03dbd6757d043581b5d250107b6f1cda6ae203a9 Mon Sep 17 00:00:00 2001 From: Frederik Deweerdt Date: Wed, 25 Oct 2017 13:52:28 -0700 Subject: [PATCH] Autodetect backtrace and backtrace_symbols_fd --- CMakeLists.txt | 13 +++++++++++++ src/main.c | 10 ++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index abfab1f19..2a26fb98a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,6 +58,19 @@ __sync_add_and_fetch(&a, 1); return 0; }" ARCH_SUPPORTS_64BIT_ATOMICS) +CHECK_C_SOURCE_COMPILES(" +#include +int main(void) { +void *p[10]; +int ret = backtrace(p, 10); +backtrace_symbols_fd(p, ret, 2); +return 0; +}" LIBC_HAS_BACKTRACE) + +IF (LIBC_HAS_BACKTRACE) + ADD_DEFINITIONS("-DLIBC_HAS_BACKTRACE") +ENDIF () + SET(WITH_BUNDLED_SSL_DEFAULT "ON") IF ((NOT UNIX) OR CYGWIN) SET(WITH_BUNDLED_SSL_DEFAULT "OFF") diff --git a/src/main.c b/src/main.c index 7c346af18..edc7d5eb3 100644 --- a/src/main.c +++ b/src/main.c @@ -48,7 +48,7 @@ #include #include #include -#ifdef __GLIBC__ +#ifdef LIBC_HAS_BACKTRACE #include #endif #if H2O_USE_PICOTLS @@ -1435,7 +1435,8 @@ static void on_sigterm(int signo) notify_all_threads(); } -#ifdef __GLIBC__ +#ifdef LIBC_HAS_BACKTRACE + static int popen_crash_handler(void) { char *cmd_fullpath = h2o_configurator_get_cmd_path(conf.crash_handler), *argv[] = {cmd_fullpath, NULL}; @@ -1487,13 +1488,14 @@ static void on_sigfatal(int signo) raise(signo); } -#endif + +#endif /* LIBC_HAS_BACKTRACE */ static void setup_signal_handlers(void) { h2o_set_signal_handler(SIGTERM, on_sigterm); h2o_set_signal_handler(SIGPIPE, SIG_IGN); -#ifdef __GLIBC__ +#ifdef LIBC_HAS_BACKTRACE if ((crash_handler_fd = popen_crash_handler()) == -1) crash_handler_fd = 2; h2o_set_signal_handler(SIGABRT, on_sigfatal);