forked from Bananymous/banan-os
Kernel: Use local labels in assembly
This commit is contained in:
@@ -33,13 +33,13 @@ sys_fork_trampoline:
|
||||
|
||||
call read_ip
|
||||
testq %rax, %rax
|
||||
jz .done
|
||||
jz .Lsys_fork_trampoline_done
|
||||
|
||||
movq %rax, %rsi
|
||||
movq %rsp, %rdi
|
||||
call sys_fork
|
||||
|
||||
.done:
|
||||
.Lsys_fork_trampoline_done:
|
||||
popq %r15
|
||||
popq %r14
|
||||
popq %r13
|
||||
|
||||
+14
-14
@@ -20,28 +20,28 @@ safe_user_strncpy:
|
||||
testq %rcx, %rcx
|
||||
jz safe_user_strncpy_fault
|
||||
|
||||
.safe_user_strncpy_align_loop:
|
||||
.Lsafe_user_strncpy_align_loop:
|
||||
testb $0x7, %sil
|
||||
jz .safe_user_strncpy_align_done
|
||||
jz .Lsafe_user_strncpy_align_done
|
||||
|
||||
movb (%rsi), %al
|
||||
movb %al, (%rdi)
|
||||
testb %al, %al
|
||||
jz .safe_user_strncpy_done
|
||||
jz .Lsafe_user_strncpy_done
|
||||
|
||||
incq %rdi
|
||||
incq %rsi
|
||||
decq %rcx
|
||||
jnz .safe_user_strncpy_align_loop
|
||||
jnz .Lsafe_user_strncpy_align_loop
|
||||
jmp safe_user_strncpy_fault
|
||||
|
||||
.safe_user_strncpy_align_done:
|
||||
.Lsafe_user_strncpy_align_done:
|
||||
movq $0x0101010101010101, %r8
|
||||
movq $0x8080808080808080, %r9
|
||||
|
||||
.safe_user_strncpy_qword_loop:
|
||||
.Lsafe_user_strncpy_qword_loop:
|
||||
cmpq $8, %rcx
|
||||
jb .safe_user_strncpy_qword_done
|
||||
jb .Lsafe_user_strncpy_qword_done
|
||||
|
||||
movq (%rsi), %rax
|
||||
movq %rax, %r10
|
||||
@@ -52,36 +52,36 @@ safe_user_strncpy:
|
||||
notq %r11
|
||||
andq %r11, %r10
|
||||
andq %r9, %r10
|
||||
jnz .safe_user_strncpy_byte_loop
|
||||
jnz .Lsafe_user_strncpy_byte_loop
|
||||
|
||||
movq %rax, (%rdi)
|
||||
|
||||
addq $8, %rdi
|
||||
addq $8, %rsi
|
||||
subq $8, %rcx
|
||||
jnz .safe_user_strncpy_qword_loop
|
||||
jnz .Lsafe_user_strncpy_qword_loop
|
||||
jmp safe_user_strncpy_fault
|
||||
|
||||
.safe_user_strncpy_qword_done:
|
||||
.Lsafe_user_strncpy_qword_done:
|
||||
testq %rcx, %rcx
|
||||
jz safe_user_strncpy_fault
|
||||
|
||||
.safe_user_strncpy_byte_loop:
|
||||
.Lsafe_user_strncpy_byte_loop:
|
||||
movb (%rsi), %al
|
||||
movb %al, (%rdi)
|
||||
testb %al, %al
|
||||
jz .safe_user_strncpy_done
|
||||
jz .Lsafe_user_strncpy_done
|
||||
|
||||
incq %rdi
|
||||
incq %rsi
|
||||
decq %rcx
|
||||
jnz .safe_user_strncpy_byte_loop
|
||||
jnz .Lsafe_user_strncpy_byte_loop
|
||||
|
||||
safe_user_strncpy_fault:
|
||||
xorq %rax, %rax
|
||||
ret
|
||||
|
||||
.safe_user_strncpy_done:
|
||||
.Lsafe_user_strncpy_done:
|
||||
movb $1, %al
|
||||
ret
|
||||
safe_user_strncpy_end:
|
||||
|
||||
+14
-16
@@ -161,12 +161,10 @@ is_64_bit:
|
||||
|
||||
check_requirements:
|
||||
call has_cpuid
|
||||
jz .exit
|
||||
jz system_halt
|
||||
call is_64_bit
|
||||
jz .exit
|
||||
jz system_halt
|
||||
ret
|
||||
.exit:
|
||||
jmp system_halt
|
||||
|
||||
enable_sse:
|
||||
movl %cr0, %eax
|
||||
@@ -226,10 +224,10 @@ _start:
|
||||
|
||||
# flush gdt and jump to 64 bit
|
||||
lgdt V2P(boot_gdtr)
|
||||
ljmpl $0x08, $V2P(long_mode)
|
||||
ljmpl $0x08, $V2P(.Llong_mode)
|
||||
|
||||
.code64
|
||||
long_mode:
|
||||
.Llong_mode:
|
||||
movw $0x10, %ax
|
||||
movw %ax, %ds
|
||||
movw %ax, %ss
|
||||
@@ -240,10 +238,10 @@ long_mode:
|
||||
addq $KERNEL_OFFSET, %rsp
|
||||
|
||||
# jump to higher half
|
||||
movabsq $higher_half, %rcx
|
||||
movabsq $.Lhigher_half, %rcx
|
||||
jmp *%rcx
|
||||
|
||||
higher_half:
|
||||
.Lhigher_half:
|
||||
# call global constuctors
|
||||
call _init
|
||||
|
||||
@@ -293,18 +291,18 @@ ap_ready:
|
||||
.skip 8
|
||||
|
||||
1: cli; cld
|
||||
ljmpl $0x00, $AP_REL(ap_cs_clear)
|
||||
ljmpl $0x00, $AP_REL(.Lap_cs_clear)
|
||||
|
||||
ap_cs_clear:
|
||||
.Lap_cs_clear:
|
||||
# load ap gdt and enter protected mode
|
||||
lgdt AP_REL(ap_gdtr)
|
||||
movl %cr0, %eax
|
||||
orb $1, %al
|
||||
movl %eax, %cr0
|
||||
ljmpl $0x08, $AP_REL(ap_protected_mode)
|
||||
ljmpl $0x08, $AP_REL(.Lap_protected_mode)
|
||||
|
||||
.code32
|
||||
ap_protected_mode:
|
||||
.Lap_protected_mode:
|
||||
movw $0x10, %ax
|
||||
movw %ax, %ds
|
||||
movw %ax, %ss
|
||||
@@ -318,14 +316,14 @@ ap_protected_mode:
|
||||
|
||||
# load boot gdt and enter long mode
|
||||
lgdt V2P(boot_gdtr)
|
||||
ljmpl $0x08, $AP_REL(ap_long_mode)
|
||||
ljmpl $0x08, $AP_REL(.Lap_long_mode)
|
||||
|
||||
.code64
|
||||
ap_long_mode:
|
||||
movq $ap_higher_half, %rax
|
||||
.Lap_long_mode:
|
||||
movq $.Lap_higher_half, %rax
|
||||
jmp *%rax
|
||||
|
||||
ap_higher_half:
|
||||
.Lap_higher_half:
|
||||
movq AP_REL(ap_prepare_paging), %rax
|
||||
call *%rax
|
||||
|
||||
|
||||
Reference in New Issue
Block a user