diff --git a/x86_64/startup-x86_64.asm b/x86_64/startup-x86_64.asm
index 91923f014e0e0c0b45a3518ef703bc6eab2a41c2..8a45ea3f44f026104d96cc3ce2a3b6363f8e8ed5 100644
--- a/x86_64/startup-x86_64.asm
+++ b/x86_64/startup-x86_64.asm
@@ -63,12 +63,12 @@ startup_arch:
     rep stosd
 
     xor edi, edi
-    ;Link first PML4 and second to last PML4 to PDP
+    ;Link first user and first kernel PML4 to PDP
     mov DWORD [es:edi], 0x71000 | 1 << 1 | 1
-    mov DWORD [es:edi + 510*8], 0x71000 | 1 << 1 | 1
+    mov DWORD [es:edi + 256*8], 0x71000 | 1 << 1 | 1
+    ; Link last PML4 to PML4 for recursive compatibility
+    mov DWORD [es:edi + 511*8], 0x70000 | 1 << 1 | 1
     add edi, 0x1000
-    ;Link last PML4 to PML4
-    mov DWORD [es:edi - 8], 0x70000 | 1 << 1 | 1
     ;Link first four PDP to PD
     mov DWORD [es:edi], 0x72000 | 1 << 1 | 1
     mov DWORD [es:edi + 8], 0x73000 | 1 << 1 | 1
@@ -123,7 +123,7 @@ long_mode:
     mov ss, rax
 
     ; stack_base
-    mov rsi, 0xFFFFFF0000080000
+    mov rsi, 0xFFFF800000080000
     mov [args.stack_base], rsi
     ; stack_size
     mov rcx, 0x1F000