]> Zhao Yanbai Git Server - kernel.git/commitdiff
改用链接器来计算跳入保护模式的ljmp指令的内核偏移地址
authoracevest <zhaoyanbai@126.com>
Thu, 1 Jan 2026 04:05:23 +0000 (12:05 +0800)
committeracevest <zhaoyanbai@126.com>
Thu, 1 Jan 2026 04:05:23 +0000 (12:05 +0800)
boot/multiboot.S

index 98d2b536af6ceb0daafa049919ec98bdca228767..24f9398faa92e1360e33fff001751aa3220a126a 100644 (file)
@@ -79,16 +79,12 @@ real_kernel_entry:
     addl    $kernel_virtual_addr_start, %esp
 
 
-    # 由于编译器不支持下面这种写法
-    # ljmp    $0x08, $p_label + kernel_virtual_addr_start
+    .extern p_entry_vaddr
+    ljmp    $0x08, $p_entry_vaddr
 
-    # 所以采用下面的方法跳转
-    leal    p_label,%eax
-    addl    $kernel_virtual_addr_start, %eax
-    movl    %eax, p_label_far_ptr
-    ljmp    *p_label_far_ptr
-
-p_label:
+.align 4
+.global p_entry # 为了让链接器计算出 p_entry_vaddr
+p_entry:
     leal    check_kernel, %eax
     call    *%eax