38 lines
761 B
ArmAsm
38 lines
761 B
ArmAsm
.globl __switch_to
|
|
.type __switch_to, @function
|
|
__switch_to:
|
|
movl __current, %edx
|
|
pushl %ebx
|
|
pushl %ebp
|
|
pushl %esi
|
|
pushl %edi
|
|
pushl RealModeSSSP
|
|
pushl errno /* Hack! */
|
|
movl %esp, (%edx)
|
|
|
|
movl %eax, __current
|
|
movl (%eax), %esp
|
|
popl errno
|
|
popl RealModeSSSP
|
|
popl %edi
|
|
popl %esi
|
|
popl %ebp
|
|
popl %ebx
|
|
ret
|
|
.size __switch_to, .-__switch_to
|
|
|
|
.globl __start_thread
|
|
.type __start_thread, @function
|
|
__start_thread:
|
|
movl %edi, %eax /* Thread function argument */
|
|
|
|
pushl $0 /* For gdb's benefit */
|
|
movl %esp, %ebp /* For gdb's benefit */
|
|
|
|
pushl %ebx /* Set up the flags/interrupt state */
|
|
popfl
|
|
|
|
call *%esi /* Run the desired function */
|
|
jmp __exit_thread /* If we get here, kill the thread */
|
|
.size __start_thread, .-__start_thread
|