summaryrefslogtreecommitdiff
path: root/viengoos/sysdeps/x86_64/boot32.c
diff options
context:
space:
mode:
Diffstat (limited to 'viengoos/sysdeps/x86_64/boot32.c')
-rw-r--r--viengoos/sysdeps/x86_64/boot32.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/viengoos/sysdeps/x86_64/boot32.c b/viengoos/sysdeps/x86_64/boot32.c
index cf73f0d..cfe93fd 100644
--- a/viengoos/sysdeps/x86_64/boot32.c
+++ b/viengoos/sysdeps/x86_64/boot32.c
@@ -30,10 +30,15 @@
#define KERNEL_OFFSET 0xffffffff80000000ul
+/* We can't use <stdint.h>: we are compiling in 32-bit mode. */
typedef unsigned short u16;
typedef unsigned long u32;
typedef unsigned long long u64;
+build_assert (sizeof (u16) == 2);
+build_assert (sizeof (u32) == 4);
+build_assert (sizeof (u64) == 8);
+
#define CR4_PAE (1 << 5)
#define CR0_PE (1 << 31)
@@ -68,7 +73,7 @@ cmain32 (u32 magic, u32 addr)
/* b) setup (initial) PML4 (maps first 1G) */
int i;
for (i = 0; i < PTES; ++i)
- pdir.entry[i] = pde (i * 0x200000, false, PTE_RWX, true);
+ pdir.entry[i] = pde (i * (1 << (9 + 12)), false, PTE_RWX, true);
pdp.entry[0] = pdpe ((uint64_t) (uint32_t) &pdir, false, PTE_RWX, false);
pdp.entry[ADDR_PDP_INDEX (KERNEL_OFFSET)] = pdp.entry[0];