aboutsummaryrefslogtreecommitdiff
path: root/src/stdlib/stdlib.h
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-04-12 13:44:04 -0400
committerBruce Hill <bruce@bruce-hill.com>2025-04-12 13:44:04 -0400
commit90a323e3b34cfecdf9df55d8a03d03649609f162 (patch)
treec9dcf3b40e6b0de736f0c38864383a01b369439c /src/stdlib/stdlib.h
parentba555a8aca47a78acb173780fd252b19d3cdd36e (diff)
Replace addr2line with libbacktrace to get improved stack traces
Diffstat (limited to 'src/stdlib/stdlib.h')
-rw-r--r--src/stdlib/stdlib.h18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/stdlib/stdlib.h b/src/stdlib/stdlib.h
index aaa4a1d6..51983bc8 100644
--- a/src/stdlib/stdlib.h
+++ b/src/stdlib/stdlib.h
@@ -10,6 +10,7 @@
#include "datatypes.h"
#include "files.h"
#include "print.h"
+#include "stacktrace.h"
#include "types.h"
#include "util.h"
@@ -29,12 +30,14 @@ void _tomo_parse_args(int argc, char *argv[], Text_t usage, Text_t help, int spe
#define fail(...) ({ \
fflush(stdout); \
- if (USE_COLOR) fputs("\x1b[31;7m ==================== ERROR ==================== \n\n\x1b[0;1m", stderr); \
+ if (USE_COLOR) fputs("\x1b[31;7m ==================== ERROR ==================== \033[m\n\n", stderr); \
else fputs("==================== ERROR ====================\n\n", stderr); \
- fprint_inline(stderr, __VA_ARGS__); \
- if (USE_COLOR) fputs("\x1b[m", stderr); \
- fputs("\n\n", stderr); \
- print_stack_trace(stderr, 2, 4); \
+ print_stacktrace(stderr, 2); \
+ if (USE_COLOR) fputs("\n\x1b[31;1m", stderr); \
+ else fputs("\n", stderr); \
+ fprint_inline(stderr, "Error: ", __VA_ARGS__); \
+ if (USE_COLOR) fputs("\x1b[m\n", stderr); \
+ else fputs("\n", stderr); \
fflush(stderr); \
raise(SIGABRT); \
_exit(1); \
@@ -53,9 +56,7 @@ void _tomo_parse_args(int argc, char *argv[], Text_t usage, Text_t help, int spe
fputs("\n", stderr); \
} \
if (USE_COLOR) fputs("\x1b[m", stderr); \
- print_stack_trace(stderr, 2, 4); \
- fputs("\n\n", stderr); \
- print_stack_trace(stderr, 2, 4); \
+ print_stacktrace(stderr, 2); \
fflush(stderr); \
raise(SIGABRT); \
_exit(1); \
@@ -86,7 +87,6 @@ _Noreturn void tomo_exit(Text_t text, int32_t status);
Closure_t spawn(Closure_t fn);
bool pop_flag(char **argv, int *i, const char *flag, Text_t *result);
-void print_stack_trace(FILE *out, int start, int stop);
void sleep_num(double seconds);
// vim: ts=4 sw=0 et cino=L2,l1,(0,W4,m1,\:0