tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[PATCH 2/3] bootloader: Handle 64-bit bootinfo
On my darp10-b the bootloader is loaded around 32GiB mark and so all
BI_ADD with a static address end up way over 4GiB and are truncated
when passed to the kernel. Instead keep the whole pointer until we move
all bootinfos to the heap
---
sys/arch/i386/stand/lib/bootinfo.h | 9 +++++++--
sys/arch/i386/stand/lib/exec.c | 8 +++++++-
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/sys/arch/i386/stand/lib/bootinfo.h b/sys/arch/i386/stand/lib/bootinfo.h
index 8def5f4d273..3173c06e6a1 100644
--- a/sys/arch/i386/stand/lib/bootinfo.h
+++ b/sys/arch/i386/stand/lib/bootinfo.h
@@ -28,17 +28,22 @@
#include <machine/bootinfo.h>
-struct bootinfo {
+struct bootinfo32 {
uint32_t nentries;
uint32_t entry[1];
};
+struct bootinfo {
+ uint32_t nentries;
+ uintptr_t entry[1];
+};
+
extern struct bootinfo *bootinfo;
#define BTINFO_MAX 64
#define BI_ALLOC(max) (bootinfo = alloc(sizeof(struct bootinfo) \
- + ((max) - 1) * sizeof(uint32_t))) \
+ + ((max) - 1) * sizeof(uintptr_t))) \
->nentries = 0
#define BI_FREE() dealloc(bootinfo, 0)
diff --git a/sys/arch/i386/stand/lib/exec.c b/sys/arch/i386/stand/lib/exec.c
index adddaab6aac..9b0e1e54425 100644
--- a/sys/arch/i386/stand/lib/exec.c
+++ b/sys/arch/i386/stand/lib/exec.c
@@ -564,13 +564,19 @@ exec_netbsd(const char *file, physaddr_t loadaddr, int boothowto, int floppy,
entry = marks[MARK_ENTRY];
#ifdef EFIBOOT
+ struct bootinfo32 *bootinfo32 = alloc(sizeof(struct bootinfo32)
+ + (bootinfo->nentries - 1)
+ * sizeof(uint32_t));
+ bootinfo32->nentries = bootinfo->nentries;
+
/* Copy bootinfo to safe arena. */
for (i = 0; i < bootinfo->nentries; i++) {
struct btinfo_common *bi = (void *)(u_long)bootinfo->entry[i];
char *p = alloc(bi->len);
memcpy(p, bi, bi->len);
- bootinfo->entry[i] = vtophys(p);
+ bootinfo32->entry[i] = vtophys(p);
}
+ boot_argv[2] = vtophys(bootinfo32);
efi_kernel_start = marks[MARK_START];
efi_kernel_size = image_end - (efi_loadaddr + efi_kernel_start);
--
2.48.1
Home |
Main Index |
Thread Index |
Old Index