diff --git a/framework/jinux-frame/src/arch/x86/boot/multiboot2/boot.S b/framework/jinux-frame/src/arch/x86/boot/multiboot2/boot.S index 7a5676c8d..6492e447a 100644 --- a/framework/jinux-frame/src/arch/x86/boot/multiboot2/boot.S +++ b/framework/jinux-frame/src/arch/x86/boot/multiboot2/boot.S @@ -280,7 +280,8 @@ long_mode: // Clear the frame pointer to stop backtracing here. xor rbp, rbp - lea rax, [rip + boot] // jump into Rust code +.extern __multiboot2_entry + lea rax, [rip + __multiboot2_entry] // jump into Rust code call rax // In case boot() returns. diff --git a/framework/jinux-frame/src/arch/x86/boot/multiboot2/mod.rs b/framework/jinux-frame/src/arch/x86/boot/multiboot2/mod.rs index 9d1c8c1a2..487b9a28d 100644 --- a/framework/jinux-frame/src/arch/x86/boot/multiboot2/mod.rs +++ b/framework/jinux-frame/src/arch/x86/boot/multiboot2/mod.rs @@ -186,7 +186,7 @@ extern "Rust" { #[no_mangle] /// The entry point of Rust code called by inline asm. -unsafe extern "C" fn boot(boot_magic: u32, boot_params: u64) -> ! { +unsafe extern "C" fn __multiboot2_entry(boot_magic: u32, boot_params: u64) -> ! { assert_eq!(boot_magic, 0x36d76289_u32); MB2_INFO.call_once(|| unsafe { BootInformation::load(boot_params as *const BootInformationHeader).unwrap()