[efi] Do not attempt to use console output after ExitBootServices()

A successful call to ExitBootServices() will result in the EFI console
becoming unusable.  Ensure that the EFI wrapper produces a complete
line of debug output before calling the wrapped ExitBootServices()
method, and attempt subsequent debug output only if the call fails.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/522/head
Michael Brown 2021-11-21 13:19:55 +00:00
parent 236299baa3
commit 51612b6e69
1 changed files with 6 additions and 3 deletions

View File

@ -735,11 +735,14 @@ efi_exit_boot_services_wrapper ( EFI_HANDLE image_handle, UINTN map_key ) {
void *retaddr = __builtin_return_address ( 0 ); void *retaddr = __builtin_return_address ( 0 );
EFI_STATUS efirc; EFI_STATUS efirc;
DBGC ( colour, "ExitBootServices ( %s, %#llx ) ", DBGC ( colour, "ExitBootServices ( %s, %#llx ) -> %p\n",
efi_handle_name ( image_handle ), efi_handle_name ( image_handle ),
( ( unsigned long long ) map_key ) ); ( ( unsigned long long ) map_key ), retaddr );
efirc = bs->ExitBootServices ( image_handle, map_key ); efirc = bs->ExitBootServices ( image_handle, map_key );
DBGC ( colour, "= %s -> %p\n", efi_status ( efirc ), retaddr ); if ( efirc != 0 ) {
DBGC ( colour, "ExitBootServices ( ... ) = %s -> %p\n",
efi_status ( efirc ), retaddr );
}
return efirc; return efirc;
} }