| .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 |