summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/main.c b/main.c
index 1c7c9e9..f50b9ac 100644
--- a/main.c
+++ b/main.c
@@ -9,6 +9,8 @@
/*
TODO:
defer
+make sure defer works with for
+make sure you can't return a #C() (because of the current defer system)
use
&&, ||
start making a standard library... (printf; stringbuilder would be nice to have)
@@ -37,6 +39,9 @@ macros
#include <signal.h>
#include <execinfo.h>
#include <unistd.h>
+
+static char *program_name;
+
static void signal_handler(int num) {
switch (num) {
case SIGABRT:
@@ -55,7 +60,10 @@ static void signal_handler(int num) {
int naddrs = (int)(sizeof addrs / sizeof *addrs);
naddrs = backtrace(addrs, naddrs);
/* char **syms = backtrace_symbols(addrs, naddrs); */
- char command[2048] = "addr2line -p -f -a -e toc ";
+ char command[2048] = "addr2line -p -f -a -e ";
+ strcat(command, program_name);
+ strcat(command, " ");
+
for (int i = 4; i < naddrs; ++i) {
snprintf(command + strlen(command), sizeof command - strlen(command), "%p ", addrs[i]);
}
@@ -67,6 +75,7 @@ static void signal_handler(int num) {
int main(int argc, char **argv) {
#ifdef BACKTRACE
+ program_name = argv[0];
signal(SIGABRT, signal_handler);
signal(SIGSEGV, signal_handler);
#endif