X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/5039898b102401ecbad9a3f08f7931c806aefc08..ef1a9823a5da0c626766dad7afc858e15b57a2d0:/main/bsod.cpp diff --git a/main/bsod.cpp b/main/bsod.cpp index 2248d01c..bb4c7ad7 100644 --- a/main/bsod.cpp +++ b/main/bsod.cpp @@ -6,6 +6,9 @@ #include #include #include +#ifdef WITH_SDL +#include +#endif #include "version.h" @@ -86,16 +89,44 @@ 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); } +#ifdef WITH_SDL + ePtr my_dc; + gSDLDC::getInstance(my_dc); +#else ePtr my_dc; gFBDC::getInstance(my_dc); +#endif { gPainter p(my_dc); p.resetOffset(); p.resetClip(eRect(ePoint(0, 0), my_dc->size())); - p.setBackgroundColor(gRGB(0x0000C0)); +#ifdef ENIGMA2_CHECKOUT_TAG + if (ENIGMA2_CHECKOUT_TAG[0] == 'T') /* tagged checkout (release) */ + p.setBackgroundColor(gRGB(0x0000C0)); + else if (ENIGMA2_CHECKOUT_TAG[0] == 'D') /* dated checkout (daily experimental build) */ + { + srand(time(0)); + int r = rand(); + unsigned int col = 0; + if (r & 1) + col |= 0x800000; + if (r & 2) + col |= 0x008000; + if (r & 4) + col |= 0x0000c0; + p.setBackgroundColor(gRGB(col)); + } +#else + p.setBackgroundColor(gRGB(0x008000)); +#endif + p.setForegroundColor(gRGB(0xFFFFFF)); ePtr font = new gFont("Regular", 20); @@ -132,7 +163,6 @@ void bsodFatal() p.renderText(usable_area, lines.substr(start), gPainter::RT_HALIGN_LEFT); - p.flush(); sleep(10); } @@ -143,14 +173,20 @@ 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("%08x:", (unsigned long)context.pc); + eDebugNoNewLine("%08lx:", (unsigned long)context.pc); for (i=0; i<0x20; ++i) eDebugNoNewLine(" %02x", ((unsigned char*)context.pc)[i]); eDebug(" (end)"); @@ -158,7 +194,6 @@ void oops(const mcontext_t &context, int dumpcode) } #else #warning "no oops support!" -#error bla #define NO_OOPS_SUPPORT #endif @@ -167,7 +202,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(); @@ -186,6 +221,7 @@ void bsodCatchSignals() sigaction(SIGSEGV, &act, 0); sigaction(SIGILL, &act, 0); sigaction(SIGBUS, &act, 0); + sigaction(SIGABRT, &act, 0); } void bsodLogInit()