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
convert_preloaded_image(preloaded_elf64_image* image)
template<class T> static void
convert_preloaded_image(preloaded_image* _image)
{
T* image = static_cast<T*>(_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<preloaded_elf64_image*>(
gKernelArgs.kernel_image.Pointer()));
if (gKernelArgs.kernel_image->elf_class == ELFCLASS64) {
convert_preloaded_image<preloaded_elf64_image>(gKernelArgs.kernel_image);
} else {
convert_preloaded_image<preloaded_elf32_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<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;
}