diff --git a/src/system/boot/platform/efi/start.cpp b/src/system/boot/platform/efi/start.cpp index c6b45d715d..fefead9327 100644 --- a/src/system/boot/platform/efi/start.cpp +++ b/src/system/boot/platform/efi/start.cpp @@ -71,9 +71,10 @@ platform_boot_options() } -static void -convert_preloaded_image(preloaded_elf64_image* image) +template static void +convert_preloaded_image(preloaded_image* _image) { + T* image = static_cast(_image); fix_address(image->next); fix_address(image->name); fix_address(image->debug_string_table); @@ -85,13 +86,10 @@ convert_preloaded_image(preloaded_elf64_image* image) } -/*! Convert all addresses in kernel_args to 64-bit addresses. */ +/*! Convert all addresses in kernel_args to virtual addresses. */ static void convert_kernel_args() { - if (gKernelArgs.kernel_image->elf_class != ELFCLASS64) - return; - fix_address(gKernelArgs.boot_volume); fix_address(gKernelArgs.vesa_modes); fix_address(gKernelArgs.edid_info); @@ -100,8 +98,11 @@ convert_kernel_args() arch_convert_kernel_args(); - convert_preloaded_image(static_cast( - gKernelArgs.kernel_image.Pointer())); + if (gKernelArgs.kernel_image->elf_class == ELFCLASS64) { + convert_preloaded_image(gKernelArgs.kernel_image); + } else { + convert_preloaded_image(gKernelArgs.kernel_image); + } fix_address(gKernelArgs.kernel_image); // Iterate over the preloaded images. Must save the next address before @@ -110,7 +111,11 @@ convert_kernel_args() fix_address(gKernelArgs.preloaded_images); while (image != NULL) { preloaded_image* next = image->next; - convert_preloaded_image(static_cast(image)); + if (image->elf_class == ELFCLASS64) { + convert_preloaded_image(image); + } else { + convert_preloaded_image(image); + } image = next; }