[boot] Improve non-printing error handling

Add an implicit __LINE__ to the try_or_raise macro, which gets set in
r11 on cpu_assert. Also made status lines smarter about when to call
cpu_assert.
This commit is contained in:
Justin C. Miller
2021-01-20 01:18:31 -08:00
parent 847d7ab38d
commit 14aad62e02
6 changed files with 24 additions and 12 deletions

View File

@@ -35,27 +35,28 @@ message(uefi::status status)
}
[[ noreturn ]] static void
cpu_assert(uefi::status s, const wchar_t *message)
cpu_assert(uefi::status s, const wchar_t *message, size_t line)
{
asm volatile (
"movq $0xeeeeeeebadbadbad, %%r8;"
"movq %0, %%r9;"
"movq %1, %%r10;"
"movq %2, %%r11;"
"movq $0, %%rdx;"
"divq %%rdx;"
:
: "r"((uint64_t)s), "r"(message)
: "r"((uint64_t)s), "r"(message), "r"(line)
: "rax", "rdx", "r8", "r9", "r10");
while (1) asm("hlt");
}
[[ noreturn ]] void
raise(uefi::status status, const wchar_t *message)
raise(uefi::status status, const wchar_t *message, size_t line)
{
if(status_line::fail(message, status))
while (1) asm("hlt");
else
cpu_assert(status, message);
cpu_assert(status, message, line);
}