blob: ec3e0add8a0e81deef3a108f096d7ae81f03f99a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
.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
|