X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=main%2Fbsod.cpp;h=b646394e11edb39f0bd76a8769c011a2d33c68ba;hp=10021787dc7919a7501612fadb76537260338388;hb=6dcb75c26bbfec04b381bb99d75404f9fe50635d;hpb=4d2d58662cca3fcd12bea15482dd13359bc208ad diff --git a/main/bsod.cpp b/main/bsod.cpp index 1002178..b646394 100644 --- a/main/bsod.cpp +++ b/main/bsod.cpp @@ -102,16 +102,17 @@ void bsodFatal() p.setFont(font); p.clear(); - eRect usable_area = eRect(100, 70, my_dc->size().width() - 200, 100); + eRect usable_area = eRect(100, 70, my_dc->size().width() - 150, 100); p.renderText(usable_area, "We are really sorry. Something happened " "which should not have happened, and " "resulted in a crash. If you want to help " "us in improving this situation, please send " - "the logfile created in /hdd/ to " CRASH_EMAILADDR ".", gPainter::RT_WRAP|gPainter::RT_HALIGN_LEFT); + "the logfile created in /hdd/ to " CRASH_EMAILADDR "." + "Your receiver restarts in 10 seconds !", gPainter::RT_WRAP|gPainter::RT_HALIGN_LEFT); - usable_area = eRect(100, 170, my_dc->size().width() - 200, my_dc->size().height() - 20); + usable_area = eRect(100, 170, my_dc->size().width() - 180, my_dc->size().height() - 20); int i; @@ -132,6 +133,7 @@ void bsodFatal() p.renderText(usable_area, lines.substr(start), gPainter::RT_HALIGN_LEFT); p.flush(); + sleep(10); } raise(SIGKILL); @@ -141,10 +143,27 @@ void bsodFatal() void oops(const mcontext_t &context, int dumpcode) { eDebug("PC: %08lx, vaddr: %08lx", (unsigned long)context.pc, (unsigned long)context.badvaddr); + int i; + for (i=0; i<32; ++i) + { + eDebugNoNewLine(" %08x", (int)context.gregs[i]); + if ((i&3) == 3) + eDebug(""); + } + /* this is temporary debug stuff. */ + if (dumpcode && ((unsigned long)context.pc) > 0x10000) /* not a zero pointer */ + { + eDebug("As a final action, i will try to dump a bit of code."); + eDebug("I just hope that this won't crash."); + int i; + eDebugNoNewLine("%08lx:", (unsigned long)context.pc); + for (i=0; i<0x20; ++i) + eDebugNoNewLine(" %02x", ((unsigned char*)context.pc)[i]); + eDebug(" (end)"); + } } #else #warning "no oops support!" -#error bla #define NO_OOPS_SUPPORT #endif @@ -153,7 +172,7 @@ void handleFatalSignal(int signum, siginfo_t *si, void *ctx) ucontext_t *uc = (ucontext_t*)ctx; eDebug("KILLED BY signal %d", signum); #ifndef NO_OOPS_SUPPORT - oops(uc->uc_mcontext, signum == SIGSEGV); + oops(uc->uc_mcontext, signum == SIGSEGV || signum == SIGABRT); #endif eDebug("-------"); bsodFatal(); @@ -164,7 +183,7 @@ void bsodCatchSignals() struct sigaction act; act.sa_handler = SIG_DFL; act.sa_sigaction = handleFatalSignal; - act.sa_flags = 0; + act.sa_flags = SA_RESTART | SA_SIGINFO; if (sigemptyset(&act.sa_mask) == -1) perror("sigemptyset"); @@ -172,6 +191,7 @@ void bsodCatchSignals() sigaction(SIGSEGV, &act, 0); sigaction(SIGILL, &act, 0); sigaction(SIGBUS, &act, 0); + sigaction(SIGABRT, &act, 0); } void bsodLogInit()