From 8dd7777e4d49ab02a57f4d029afda4944b4773e0 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Tue, 14 Aug 2018 14:07:44 -0400 Subject: [PATCH] arm/arm64 loader: better error messages. Signed-off-by: Peter Jones --- grub-core/loader/arm64/linux.c | 54 ++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c index 93b5cd306eb..3d73861421d 100644 --- a/grub-core/loader/arm64/linux.c +++ b/grub-core/loader/arm64/linux.c @@ -70,13 +70,15 @@ finalize_params_linux (void) { grub_efi_loaded_image_t *loaded_image = NULL; int node, retval, len; - + grub_err_t err = GRUB_ERR_NONE; void *fdt; fdt = grub_fdt_load (0x400); - if (!fdt) - goto failure; + { + err = grub_error(GRUB_ERR_BAD_OS, "failed to load FDT"); + goto failure; + } node = grub_fdt_find_subnode (fdt, 0, "chosen"); if (node < 0) @@ -87,17 +89,26 @@ finalize_params_linux (void) */ retval = grub_fdt_set_prop32(fdt, 0, "#address-cells", 2); if (retval) - goto failure; + { + err = grub_error(retval, "Could not find #address-cells"); + goto failure; + } retval = grub_fdt_set_prop32(fdt, 0, "#size-cells", 2); if (retval) - goto failure; + { + err = grub_error(retval, "Could not find #size-cells"); + goto failure; + } node = grub_fdt_add_subnode (fdt, 0, "chosen"); } if (node < 1) - goto failure; + { + err = grub_error(grub_errno, "failed to load chosen fdt node."); + goto failure; + } /* Set initrd info */ if (initrd_start && initrd_end > initrd_start) @@ -108,15 +119,26 @@ finalize_params_linux (void) retval = grub_fdt_set_prop64 (fdt, node, "linux,initrd-start", initrd_start); if (retval) - goto failure; + { + err = grub_error(retval, "Failed to set linux,initrd-start property"); + goto failure; + } + retval = grub_fdt_set_prop64 (fdt, node, "linux,initrd-end", initrd_end); if (retval) - goto failure; + { + err = grub_error(retval, "Failed to set linux,initrd-end property"); + goto failure; + } } - if (grub_fdt_install() != GRUB_ERR_NONE) - goto failure; + retval = grub_fdt_install(); + if (retval != GRUB_ERR_NONE) + { + err = grub_error(retval, "Failed to install fdt"); + goto failure; + } grub_dprintf ("linux", "Installed/updated FDT configuration table @ %p\n", fdt); @@ -124,14 +146,20 @@ finalize_params_linux (void) /* Convert command line to UCS-2 */ loaded_image = grub_efi_get_loaded_image (grub_efi_image_handle); if (!loaded_image) - goto failure; + { + err = grub_error(grub_errno, "Failed to install fdt"); + goto failure; + } loaded_image->load_options_size = len = (grub_strlen (linux_args) + 1) * sizeof (grub_efi_char16_t); loaded_image->load_options = grub_efi_allocate_any_pages (GRUB_EFI_BYTES_TO_PAGES (loaded_image->load_options_size)); if (!loaded_image->load_options) - return grub_error(GRUB_ERR_BAD_OS, "failed to create kernel parameters"); + { + err = grub_error(GRUB_ERR_BAD_OS, "failed to create kernel parameters"); + goto failure; + } loaded_image->load_options_size = 2 * grub_utf8_to_utf16 (loaded_image->load_options, len, @@ -141,7 +169,7 @@ finalize_params_linux (void) failure: grub_fdt_unload(); - return grub_error(GRUB_ERR_BAD_OS, "failed to install/update FDT"); + return err; } static void -- 2.17.1