[haiku-commits] Change in haiku[master]: bootloader/efi: Support 32-bit kernels

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 30 Jul 2020 03:04:40 +0000

From Alex von Gluck IV <kallisti5@xxxxxxxxxxx>:

Alex von Gluck IV has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/3106 ;)


Change subject: bootloader/efi: Support 32-bit kernels
......................................................................

bootloader/efi: Support 32-bit kernels

Change-Id: I82465c3002cbf58fad79b9621074cafd8fbd16e5
---
M src/system/boot/platform/efi/start.cpp
1 file changed, 21 insertions(+), 6 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/06/3106/1

diff --git a/src/system/boot/platform/efi/start.cpp 
b/src/system/boot/platform/efi/start.cpp
index c0e535c..468e27d 100644
--- a/src/system/boot/platform/efi/start.cpp
+++ b/src/system/boot/platform/efi/start.cpp
@@ -84,6 +84,9 @@
 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);
@@ -121,22 +124,34 @@
 }


+static addr_t
+platform_kernel_entry(void)
+{
+       if (gKernelArgs.kernel_image->elf_class == ELFCLASS64) {
+               preloaded_elf64_image *image = 
static_cast<preloaded_elf64_image *>(
+                       gKernelArgs.kernel_image.Pointer());
+               return image->elf_header.e_entry;
+       } else if (gKernelArgs.kernel_image->elf_class == ELFCLASS32) {
+               preloaded_elf32_image *image = 
static_cast<preloaded_elf32_image *>(
+                       gKernelArgs.kernel_image.Pointer());
+               return image->elf_header.e_entry;
+       }
+       panic("Unknown kernel format! Not 32-bit or 64-bit!");
+       return NULL;
+}
+
+
 extern "C" void
 platform_start_kernel(void)
 {
-       if (gKernelArgs.kernel_image->elf_class != ELFCLASS64)
-               panic("32-bit kernels not supported with EFI");
-
        smp_init_other_cpus();

-       preloaded_elf64_image *image = static_cast<preloaded_elf64_image *>(
-               gKernelArgs.kernel_image.Pointer());
+       addr_t kernelEntry = platform_kernel_entry();

        arch_mmu_init();
        convert_kernel_args();

        // Save the kernel entry point address.
-       addr_t kernelEntry = image->elf_header.e_entry;
        dprintf("kernel entry at %#lx\n", kernelEntry);

        // map in a kernel stack

--
To view, visit https://review.haiku-os.org/c/haiku/+/3106
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I82465c3002cbf58fad79b9621074cafd8fbd16e5
Gerrit-Change-Number: 3106
Gerrit-PatchSet: 1
Gerrit-Owner: Alex von Gluck IV <kallisti5@xxxxxxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: bootloader/efi: Support 32-bit kernels - Gerrit