boot/efi: implement convert_kernel_args for 32-bit

Change-Id: I528d6f8ca576b38c50dc314972636e7156d24705
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4784
Reviewed-by: Adrien Destugues <[email protected]>
This commit is contained in:
David Karoly
2021-12-17 08:58:57 +00:00
committed by Adrien Destugues
parent af90bfd3bb
commit 18e885db51
+14 -9
View File
@@ -71,9 +71,10 @@ platform_boot_options()
} }
static void template<class T> static void
convert_preloaded_image(preloaded_elf64_image* image) convert_preloaded_image(preloaded_image* _image)
{ {
T* image = static_cast<T*>(_image);
fix_address(image->next); fix_address(image->next);
fix_address(image->name); fix_address(image->name);
fix_address(image->debug_string_table); 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 static void
convert_kernel_args() convert_kernel_args()
{ {
if (gKernelArgs.kernel_image->elf_class != ELFCLASS64)
return;
fix_address(gKernelArgs.boot_volume); fix_address(gKernelArgs.boot_volume);
fix_address(gKernelArgs.vesa_modes); fix_address(gKernelArgs.vesa_modes);
fix_address(gKernelArgs.edid_info); fix_address(gKernelArgs.edid_info);
@@ -100,8 +98,11 @@ convert_kernel_args()
arch_convert_kernel_args(); arch_convert_kernel_args();
convert_preloaded_image(static_cast<preloaded_elf64_image*>( if (gKernelArgs.kernel_image->elf_class == ELFCLASS64) {
gKernelArgs.kernel_image.Pointer())); convert_preloaded_image<preloaded_elf64_image>(gKernelArgs.kernel_image);
} else {
convert_preloaded_image<preloaded_elf32_image>(gKernelArgs.kernel_image);
}
fix_address(gKernelArgs.kernel_image); fix_address(gKernelArgs.kernel_image);
// Iterate over the preloaded images. Must save the next address before // Iterate over the preloaded images. Must save the next address before
@@ -110,7 +111,11 @@ convert_kernel_args()
fix_address(gKernelArgs.preloaded_images); fix_address(gKernelArgs.preloaded_images);
while (image != NULL) { while (image != NULL) {
preloaded_image* next = image->next; preloaded_image* next = image->next;
convert_preloaded_image(static_cast<preloaded_elf64_image*>(image)); if (image->elf_class == ELFCLASS64) {
convert_preloaded_image<preloaded_elf64_image>(image);
} else {
convert_preloaded_image<preloaded_elf32_image>(image);
}
image = next; image = next;
} }