summaryrefslogtreecommitdiff
path: root/core/abort.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/abort.c')
-rw-r--r--core/abort.c24
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();
+}