The branch main has been updated by tsoome:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=ed19c4ff846e09e00d8e2a756845261e2b6b7345

commit ed19c4ff846e09e00d8e2a756845261e2b6b7345
Author:     Toomas Soome <tso...@freebsd.org>
AuthorDate: 2025-09-04 12:24:25 +0000
Commit:     Toomas Soome <tso...@freebsd.org>
CommitDate: 2025-09-11 15:47:53 +0000

    loader.efi: improve StartImage error message
    
    StartImage() may return additional data from failure. This data
    has text message followed by optional binary blob. Print
    out the text message (if present) and free the data.
    See 7.4.2 EFI_BOOT_SERVICES.StartImage() page 199
    UEFI_Spec_Final_2.11.pdf.
    
    Reviewed by:    imp
---
 stand/efi/loader/main.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/stand/efi/loader/main.c b/stand/efi/loader/main.c
index 208b8b424e60..3e179bd4296c 100644
--- a/stand/efi/loader/main.c
+++ b/stand/efi/loader/main.c
@@ -1854,6 +1854,8 @@ command_chain(int argc, char *argv[])
        EFI_GUID LoadedImageGUID = LOADED_IMAGE_PROTOCOL;
        EFI_HANDLE loaderhandle;
        EFI_LOADED_IMAGE *loaded_image;
+       UINTN ExitDataSize;
+       CHAR16 *ExitData = NULL;
        EFI_STATUS status;
        struct stat st;
        struct devdesc *dev;
@@ -1969,9 +1971,16 @@ command_chain(int argc, char *argv[])
        }
 
        dev_cleanup();
-       status = BS->StartImage(loaderhandle, NULL, NULL);
+
+       status = BS->StartImage(loaderhandle, &ExitDataSize, &ExitData);
        if (status != EFI_SUCCESS) {
-               command_errmsg = "StartImage failed";
+               printf("StartImage failed (%lu)", EFI_ERROR_CODE(status));
+               if (ExitData != NULL) {
+                       printf(": %S", ExitData);
+                       BS->FreePool(ExitData);
+               }
+               putchar('\n');
+               command_errmsg = "";
                free(loaded_image->LoadOptions);
                loaded_image->LoadOptions = NULL;
                status = BS->UnloadImage(loaded_image);

Reply via email to