From b0bd092c0d4bff2bf9c36ceba636a8906f47cc37 Mon Sep 17 00:00:00 2001 From: Daniel Victor Date: Tue, 17 Mar 2026 12:24:14 -0300 Subject: [PATCH] [FREELDR] Make ASSERT bugcheck on failure (#8730) Show a bugcheck with message showing where and why the ASSERT failed. --- boot/freeldr/freeldr/arch/arm/debug.c | 2 +- boot/freeldr/freeldr/arch/i386/i386bug.c | 2 +- boot/freeldr/freeldr/include/debug.h | 3 ++- boot/freeldr/freeldr/lib/debug.c | 26 ++++++++++++++++++++++-- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/boot/freeldr/freeldr/arch/arm/debug.c b/boot/freeldr/freeldr/arch/arm/debug.c index 97fea6e6a31..ac1f13350db 100644 --- a/boot/freeldr/freeldr/arch/arm/debug.c +++ b/boot/freeldr/freeldr/arch/arm/debug.c @@ -30,7 +30,7 @@ FrLdrBugCheckWithMessage( ULONG BugCode, PCHAR File, ULONG Line, - PSTR Format, + PCSTR Format, ...) { } diff --git a/boot/freeldr/freeldr/arch/i386/i386bug.c b/boot/freeldr/freeldr/arch/i386/i386bug.c index 0627f1d5d24..b85b7ca886a 100644 --- a/boot/freeldr/freeldr/arch/i386/i386bug.c +++ b/boot/freeldr/freeldr/arch/i386/i386bug.c @@ -203,7 +203,7 @@ FrLdrBugCheckWithMessage( ULONG BugCode, PCHAR File, ULONG Line, - PSTR Format, + PCSTR Format, ...) { va_list argptr; diff --git a/boot/freeldr/freeldr/include/debug.h b/boot/freeldr/freeldr/include/debug.h index cf2ef906472..9530639b40f 100644 --- a/boot/freeldr/freeldr/include/debug.h +++ b/boot/freeldr/freeldr/include/debug.h @@ -146,7 +146,7 @@ FrLdrBugCheckWithMessage( ULONG BugCode, PCHAR File, ULONG Line, - PSTR Format, + PCSTR Format, ...); /* Bugcheck codes */ @@ -156,6 +156,7 @@ enum _FRLDR_BUGCHECK_CODES MISSING_HARDWARE_REQUIREMENTS, FREELDR_IMAGE_CORRUPTION, MEMORY_INIT_FAILURE, + ASSERT_FAILURE, #ifdef UEFIBOOT EXIT_BOOTSERVICES_FAILURE, #endif diff --git a/boot/freeldr/freeldr/lib/debug.c b/boot/freeldr/freeldr/lib/debug.c index 9f4dac422e4..a04cadc3822 100644 --- a/boot/freeldr/freeldr/lib/debug.c +++ b/boot/freeldr/freeldr/lib/debug.c @@ -524,9 +524,21 @@ RtlAssert(IN PVOID FailedAssertion, IN ULONG LineNumber, IN PCHAR Message OPTIONAL) { + PCSTR Format; + if (Message) { - DbgPrint("Assertion \'%s\' failed at %s line %lu: %s\n", + Format = "Assertion \'%s\' failed at %s line %lu: %s\n"; + + DbgPrint(Format, + (PCHAR)FailedAssertion, + (PCHAR)FileName, + LineNumber, + Message); + + FrLdrBugCheckWithMessage( + ASSERT_FAILURE, FileName, LineNumber, + Format, (PCHAR)FailedAssertion, (PCHAR)FileName, LineNumber, @@ -534,7 +546,16 @@ RtlAssert(IN PVOID FailedAssertion, } else { - DbgPrint("Assertion \'%s\' failed at %s line %lu\n", + Format = "Assertion \'%s\' failed at %s line %lu\n"; + + DbgPrint(Format, + (PCHAR)FailedAssertion, + (PCHAR)FileName, + LineNumber); + + FrLdrBugCheckWithMessage( + ASSERT_FAILURE, FileName, LineNumber, + Format, (PCHAR)FailedAssertion, (PCHAR)FileName, LineNumber); @@ -549,6 +570,7 @@ char *BugCodeStrings[] = "MISSING_HARDWARE_REQUIREMENTS", "FREELDR_IMAGE_CORRUPTION", "MEMORY_INIT_FAILURE", + "ASSERT_FAILURE", #ifdef UEFIBOOT "EXIT_BOOTSERVICES_FAILURE", #endif