X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/bf614597c93e12e267a18928da300ac2760d4bfe..c862e78892bcf02650d3a490f274fb067a964872:/main/bsod.cpp diff --git a/main/bsod.cpp b/main/bsod.cpp index d0d2ec7e..b273eacf 100644 --- a/main/bsod.cpp +++ b/main/bsod.cpp @@ -86,6 +86,10 @@ void bsodFatal() std::string buffer = getLogBuffer(); fwrite(buffer.c_str(), buffer.size(), 1, f); fclose(f); + + char cmd[256]; + sprintf(cmd, "find /usr/lib/enigma2/python/ -name \"*.py\" | xargs md5sum >> %s", logfile); + system(cmd); } ePtr my_dc; @@ -143,10 +147,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 @@ -155,7 +176,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(); @@ -174,6 +195,7 @@ void bsodCatchSignals() sigaction(SIGSEGV, &act, 0); sigaction(SIGILL, &act, 0); sigaction(SIGBUS, &act, 0); + sigaction(SIGABRT, &act, 0); } void bsodLogInit()