diff options
Diffstat (limited to 'viengoos/sysdeps/x86_64/boot32.c')
-rw-r--r-- | viengoos/sysdeps/x86_64/boot32.c | 7 |
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]; |