feature: mirror all diagnostics to syslog, add VESA fallback for gfxd crashes
- syslogDump now outputs all five diagnostic sections (Fault Info, CPU Registers, Process Info, System Info, Call Stack) to serial, matching the on-screen BSOD content - panic() detects if the crash occurred in the gfxd process and falls back to rendering the BSOD directly to the VESA framebuffer via driver.video text drawing, bypassing LVGL entirely - Add DrawChar, DrawString, DrawHex, DrawInt to driver.video for 8x16 bitmap font rendering directly to the framebuffer - Export SHOULD_CRASH flag from svc.gfxd interface so test commands can trigger a deliberate gfxd crash - Add app.divzero with DIV0, PF, and CRASHGFXD test commands - Update doc/src/core/core.panic.md and doc/src/driver/video/driver.video.md
This commit is contained in:
1 parent
97b4460c48
commit
aa28d62e03
7 files changed
+444
-11
No files matched your search
@@ -0,0 +1,57 @@
|
||||
{
|
||||
Prog->Ping - ICMP Ping command.
|
||||
|
||||
Sends 10 ICMP echo requests to a host, printing round-trip time
|
||||
for each reply. Sleeps 1 second between pings. Each invocation
|
||||
uses a heap-allocated state record so multiple terminals can app.ping
|
||||
concurrently without corrupting each other.
|
||||
|
||||
@author(Kieron Morris <[email protected]>)
|
||||
}
|
||||
unit app.divzero;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
io.stdio, debug.tracer;
|
||||
|
||||
procedure init();
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
arch.x86.bda, driver.net.types, driver.net.proto.icmp, driver.net.util, core.strings,
|
||||
proc.mgr, core.util, arch.x86.util, memory.heap, svc.gfxd;
|
||||
|
||||
{ ---- Command entry point (runs as a process) ---- }
|
||||
|
||||
procedure run_div0(Params : PParamList; stdin_buf, stdout_buf, stderr_buf : POutBuf);
|
||||
begin
|
||||
asm
|
||||
XOR EAX, EAX
|
||||
DIV EAX { this will trigger a divide by zero exception (interrupt 0) }
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure run_pf(Params : PParamList; stdin_buf, stdout_buf, stderr_buf : POutBuf);
|
||||
begin
|
||||
asm
|
||||
MOV EAX, $DEADBEEF
|
||||
MOV [EAX], EAX { this will trigger a page fault (interrupt 14) }
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure run_div0_gfxd(Params : PParamList; stdin_buf, stdout_buf, stderr_buf : POutBuf);
|
||||
begin
|
||||
svc.gfxd.SHOULD_CRASH := true; { set flag to trigger crash in graphics service }
|
||||
end;
|
||||
|
||||
procedure init();
|
||||
begin
|
||||
debug.tracer.push_trace('divzero.init');
|
||||
io.stdio.registerCommand('DIV0', @run_div0, 'Force a divide by zero exception.');
|
||||
io.stdio.registerCommand('PF', @run_pf, 'Force a page fault.');
|
||||
io.stdio.registerCommand('CRASHGFXD', @run_div0_gfxd, 'Force a divide by zero exception in the graphics service.');
|
||||
end;
|
||||
|
||||
end.
|
||||
+3
-1
@@ -33,7 +33,8 @@ uses
|
||||
//dispatch
|
||||
driver.storage.filedispatch,
|
||||
//wasm
|
||||
app.wasm.runner;
|
||||
app.wasm.runner,
|
||||
app.divzero;
|
||||
|
||||
{ Initialize all baked-in programs }
|
||||
procedure init();
|
||||
@@ -81,6 +82,7 @@ begin
|
||||
driver.storage.filedispatch.init();
|
||||
app.wasm.runner.init();
|
||||
app.setres.init();
|
||||
app.divzero.init();
|
||||
end;
|
||||
|
||||
end.
|
||||
Reference in new issue
Block a user