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:
committed by
Adrien Destugues
parent
af90bfd3bb
commit
18e885db51
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user