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