From: Michael D. Lowis Date: Wed, 25 Sep 2019 20:02:17 +0000 (-0400) Subject: added handling of abort signal to dbc.c X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=047caeb673f27b3cedb4fd036005ca85cc919118;p=projs%2Ftide.git added handling of abort signal to dbc.c --- diff --git a/Rsconscript b/Rsconscript index 9b01207..458df24 100644 --- a/Rsconscript +++ b/Rsconscript @@ -9,9 +9,10 @@ end build do env = Environment.new + env["prefix"] = ENV["PREFIX"] || env["prefix"] env["CC"] = "./acc" - env["CFLAGS"] += ["-g", "-fsanitize=undefined,address"] - env["LDFLAGS"] += ["-g", "-fsanitize=undefined,address"] +# env["CFLAGS"] += ["-g", "-fsanitize=undefined,address"] +# env["LDFLAGS"] += ["-g", "-fsanitize=undefined,address"] env["CPPPATH"] += %w[. inc] env["LIBPATH"] += %w[.] diff --git a/src/lib/dbc.c b/src/lib/dbc.c index ed17957..24a4596 100644 --- a/src/lib/dbc.c +++ b/src/lib/dbc.c @@ -11,11 +11,13 @@ static void dump_and_abort(char* msg) { fprintf(f, "%s\n\n", msg); if (DumpFn) DumpFn(f); fclose(f); - abort(); + _Exit(1); } static void handle_signal(int sig) { - if (SIGBUS == sig) { + if (SIGABRT == sig) { + dump_and_abort("SIGABRT - Process abort signal"); + } else if (SIGBUS == sig) { dump_and_abort("SIGBUS - Access to an undefined portion of a memory object"); } else if (SIGFPE == sig) { dump_and_abort("SIGFPE - Erroneous arithmetic operation"); @@ -31,6 +33,7 @@ static void handle_signal(int sig) { void dbc_init(char* path, void (*dumpfn)(FILE*)) { DumpPath = path; DumpFn = dumpfn; + signal(SIGABRT, handle_signal); signal(SIGBUS, handle_signal); signal(SIGFPE, handle_signal); signal(SIGILL, handle_signal); diff --git a/src/tide.c b/src/tide.c index c21d88d..26e2815 100644 --- a/src/tide.c +++ b/src/tide.c @@ -65,20 +65,20 @@ void dumpdata(FILE* f) { fprintf(f, "\t.nrows:\t\t%zu\n", Regions[i].nrows); fprintf(f, "\t.rows:\t\t%p\n", (void*)Regions[i].rows); fprintf(f, "\t.buffer:\n"); - fprintf(f, "\t\t.status:\t%d\n", Regions[i].buffer.status); - fprintf(f, "\t\t.modtime:\t%llu\n", Regions[i].buffer.modtime); - fprintf(f, "\t\t.bufsize:\t%zu\n", Regions[i].buffer.bufsize); - fprintf(f, "\t\t.bufstart:\t%p\n", (void*)Regions[i].buffer.bufstart); - fprintf(f, "\t\t.bufend:\t%p\n", (void*)Regions[i].buffer.bufend); - fprintf(f, "\t\t.gapstart:\t%p\n", (void*)Regions[i].buffer.gapstart); - fprintf(f, "\t\t.gapend:\t%p\n", (void*)Regions[i].buffer.gapend); - fprintf(f, "\t\t.undo:\t\t%p\n", (void*)Regions[i].buffer.undo); - fprintf(f, "\t\t.redo:\t\t%p\n", (void*)Regions[i].buffer.redo); - fprintf(f, "\t\t.save:\t\t%p\n", (void*)Regions[i].buffer.save); - fprintf(f, "\t\t.transid:\t%d\n", Regions[i].buffer.transid); - fprintf(f, "\t\t.selbeg:\t%zu\n", Regions[i].buffer.selection.beg); - fprintf(f, "\t\t.selend:\t%zu\n", Regions[i].buffer.selection.end); - fprintf(f, "\t\t.selcol:\t%zu\n", Regions[i].buffer.selection.col); + fprintf(f, "\t\t.status:\t%d\n", Regions[i].buffer.status); + fprintf(f, "\t\t.modtime:\t%lu\n", Regions[i].buffer.modtime); + fprintf(f, "\t\t.bufsize:\t%zu\n", Regions[i].buffer.bufsize); + fprintf(f, "\t\t.bufstart:\t%p\n", (void*)Regions[i].buffer.bufstart); + fprintf(f, "\t\t.bufend:\t%p\n", (void*)Regions[i].buffer.bufend); + fprintf(f, "\t\t.gapstart:\t%p\n", (void*)Regions[i].buffer.gapstart); + fprintf(f, "\t\t.gapend:\t%p\n", (void*)Regions[i].buffer.gapend); + fprintf(f, "\t\t.undo:\t\t%p\n", (void*)Regions[i].buffer.undo); + fprintf(f, "\t\t.redo:\t\t%p\n", (void*)Regions[i].buffer.redo); + fprintf(f, "\t\t.save:\t\t%p\n", (void*)Regions[i].buffer.save); + fprintf(f, "\t\t.transid:\t%d\n", Regions[i].buffer.transid); + fprintf(f, "\t\t.selbeg:\t%zu\n", Regions[i].buffer.selection.beg); + fprintf(f, "\t\t.selend:\t%zu\n", Regions[i].buffer.selection.end); + fprintf(f, "\t\t.selcol:\t%zu\n", Regions[i].buffer.selection.col); } }