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");
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);
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);
}
}