StarletBootstrapProbe: report StarOS's panic words
StarOS's panic path (ADR-0014 R6) writes no trace line: it sets the guard word __panic_state, stores __panic_code and halts. LoadBootstrapELF now returns both symbols when an image has them (optional, but both or neither, as words of the data segment), and the probe stops a run whose guard is set: it prints the trace published so far and "Starlet panic state <n> code <n>", and passes --expect-panic when the state is 1. Images without these symbols (StarletOS) load and run as before; a REV:PANIC trace line still satisfies --expect-panic. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
cdec826bb8
commit
612cab7b30
4 files changed
+84
No files matched your search
@@ -192,6 +192,14 @@ bool LoadBootstrapELF(std::span<const u8> image, ARMBus& bus, BootstrapELFInfo*
|
||||
parsed.fault_spsr = address;
|
||||
found_fault_spsr = true;
|
||||
}
|
||||
else if (*name == "__panic_state")
|
||||
{
|
||||
parsed.panic_state = address;
|
||||
}
|
||||
else if (*name == "__panic_code")
|
||||
{
|
||||
parsed.panic_code = address;
|
||||
}
|
||||
}
|
||||
}
|
||||
const auto data_segment =
|
||||
@@ -208,6 +216,12 @@ bool LoadBootstrapELF(std::span<const u8> image, ARMBus& bus, BootstrapELFInfo*
|
||||
{
|
||||
return Fail(error, "bootstrap ELF is missing the trace or fault symbols");
|
||||
}
|
||||
// The panic words are optional, but both or neither, as words of the data segment.
|
||||
if ((parsed.panic_state != 0) != (parsed.panic_code != 0) ||
|
||||
(parsed.panic_state != 0 && (!in_data(parsed.panic_state, 4) || !in_data(parsed.panic_code, 4))))
|
||||
{
|
||||
return Fail(error, "bootstrap ELF has an invalid panic symbol");
|
||||
}
|
||||
|
||||
for (const Segment& segment : segments)
|
||||
{
|
||||
|
||||
@@ -19,6 +19,10 @@ struct BootstrapELFInfo
|
||||
u32 fault_code = 0;
|
||||
u32 fault_lr = 0;
|
||||
u32 fault_spsr = 0;
|
||||
// Optional (StarOS ADR-0014 R6): the panic path's guard and code words, 0 when the image has
|
||||
// none. A nonzero guard means the panic handler ran.
|
||||
u32 panic_state = 0;
|
||||
u32 panic_code = 0;
|
||||
};
|
||||
|
||||
// Load the Phase 01 ELF into a bus already configured with the high SRAM mapping.
|
||||
|
||||
Reference in new issue
Block a user