banan-os/kernel/arch/i386/Thread.S

33 lines
529 B
ArmAsm

# uint32_t read_rip()
.global read_rip
read_rip:
popl %eax
jmp *%eax
exit_thread_trampoline:
addl $4, %esp
pushl (%esp)
ret
# void start_thread(uint32_t function, uint32_t esp, uint32_t eip)
.global start_thread
start_thread:
movl 4(%esp), %eax
movl 12(%esp), %ecx
movl 8(%esp), %esp
pushl %eax
pushl $exit_thread_trampoline
movl $0, %ebp
sti
jmp *%ecx
# void continue_thread(uint32_t rsp, uint32_t rip)
.global continue_thread
continue_thread:
movl 8(%esp), %ecx
movl 4(%esp), %esp
movl $0, %eax
jmp *%ecx