51 lines
981 B
ArmAsm
51 lines
981 B
ArmAsm
#include <config.h>
|
|
|
|
.set MULTIBOOT_LOADER_MAGIC, 0x36d76289
|
|
|
|
.section .text
|
|
.global _entry_common
|
|
.type _entry_common, %function
|
|
_entry_common:
|
|
.code32
|
|
// Guess boot method by checking if
|
|
// %eax has loader magic value
|
|
movl $0x36d76289, %edx
|
|
cmp %eax, %edx
|
|
je 1f
|
|
jmp _entry_yboot
|
|
1:
|
|
leal _entry_multiboot - 0xFFFFFF0000000000, %edx
|
|
jmp *%edx
|
|
.code64
|
|
.size _entry_common, . - _entry_common
|
|
|
|
.global kernel_pre_entry
|
|
.type kernel_pre_entry, %function
|
|
kernel_pre_entry:
|
|
// Full 64-bit now
|
|
leaq kernel_stacks_bottom(%rip), %rsp
|
|
addq $8192, %rsp
|
|
|
|
movq %rdi, %rbx
|
|
call _init
|
|
movq %rbx, %rdi
|
|
|
|
xorq %rbp, %rbp
|
|
pushq %rbp
|
|
call kernel_main
|
|
1:
|
|
cli
|
|
hlt
|
|
jmp 1b
|
|
.size kernel_pre_entry, . - kernel_pre_entry
|
|
|
|
.global kernel_stacks_top
|
|
.global kernel_stacks_bottom
|
|
kernel_stacks_bottom:
|
|
#if defined(AMD64_SMP)
|
|
.skip AMD64_KERNEL_STACK * AMD64_MAX_SMP
|
|
#else
|
|
.skip AMD64_KERNEL_STACK
|
|
#endif
|
|
kernel_stacks_top:
|