diff options
Diffstat (limited to 'core/abort.c')
-rw-r--r-- | core/abort.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/core/abort.c b/core/abort.c new file mode 100644 index 0000000..3b8e536 --- /dev/null +++ b/core/abort.c @@ -0,0 +1,24 @@ +#include <rune/core/abort.h> +#include <rune/core/init.h> +#include <rune/core/logging.h> +#include <execinfo.h> +#include <stdlib.h> + +#define MAX_TRACE_ITEMS 30 + +void _stack_trace(void) { + void* buffer[MAX_TRACE_ITEMS]; + int num_links = backtrace(buffer, MAX_TRACE_ITEMS); + char** symbuf = backtrace_symbols(buffer, num_links); + + for (int i = 0; i < num_links; i++) + log_output(LOG_INFO, "#%d: %s", i, symbuf[i]); + + free(symbuf); +} + +void rune_abort(void) { + log_output(LOG_INFO, "Abort called, printing stack trace"); + _stack_trace(); + rune_exit(); +} |