Files
ai-forth-experiment/kernel_entry.S
T
haxala1r 53b4cff56a fix: remove redundant .bss zeroing that destroyed page tables
Co-authored-by: aider (openrouter/moonshotai/kimi-k2.6) <aider@aider.chat>
2026-05-04 11:34:31 +03:00

109 lines
1.6 KiB
ArmAsm

# Multiboot2 header and x86_64 long-mode bootstrap
.section .multiboot2, "a"
.align 8
multiboot_header:
.long 0xe85250d6
.long 0
.long multiboot_header_end - multiboot_header
.long -(0xe85250d6 + 0 + (multiboot_header_end - multiboot_header))
.align 8
.word 0
.word 0
.long 8
multiboot_header_end:
.section .bss, "aw", @nobits
.align 4096
pml4:
.space 4096
pdpt:
.space 4096
pd:
.space 4096
.align 16
stack_bottom:
.space 16384
stack_top:
.section .text
.code32
.global _start
.type _start, @function
_start:
movl $stack_top, %esp
cld
movl $__bss_start, %edi
movl $__bss_end, %ecx
subl %edi, %ecx
xorl %eax, %eax
rep stosb
movl $pdpt, %eax
orl $0x03, %eax
movl %eax, pml4
movl $pd, %eax
orl $0x03, %eax
movl %eax, pdpt
movl $0x00000083, %eax
movl $pd, %edi
movl $512, %ecx
1:
movl %eax, (%edi)
addl $0x200000, %eax
addl $8, %edi
loop 1b
movl $pml4, %eax
movl %eax, %cr3
movl %cr4, %eax
orl $0x20, %eax
movl %eax, %cr4
movl $0xC0000080, %ecx
rdmsr
orl $0x100, %eax
wrmsr
movl %cr0, %eax
orl $0x80000000, %eax
movl %eax, %cr0
lgdt gdt64_pointer
ljmp $0x08, $long_mode_start
.code64
long_mode_start:
movabsq $stack_top, %rax
movq %rax, %rsp
call kernel_main
cli
1:
hlt
jmp 1b
.section .note.Xen, "a", @note
.align 4
.long 4
.long 4
.long 18
.asciz "Xen"
.align 4
.long _start
.section .rodata
.align 8
gdt64:
.quad 0x0000000000000000
.quad 0x00209A0000000000
gdt64_pointer:
.word gdt64_pointer - gdt64 - 1
.quad gdt64