1/*
2 * Copyright (c) 2006-2021, RT-Thread Development Team
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Change Logs:
7 * Date           Author       Notes
8 * 2021-7-14      JasonHu      first version
9 */
10
11#include "rtconfig.h"
12
13.section      .text.lwp
14
15/*
16 * void lwp_switch_to_user(frame);
17 */
18.global lwp_switch_to_user
19lwp_switch_to_user:
20    movl 0x4(%esp), %esp
21    addl $4,%esp    // skip intr no
22    popal
23    popl %gs
24    popl %fs
25    popl %es
26    popl %ds
27    addl $4, %esp   // skip error_code
28    iret    // enter to user mode
29
30.extern arch_syscall_exit
31.global sys_fork
32.global sys_vfork
33.global arch_fork_exit
34sys_fork:
35sys_vfork:
36    jmp _sys_fork
37arch_fork_exit:
38    jmp arch_syscall_exit
39
40.global sys_clone
41.global arch_clone_exit
42sys_clone:
43    jmp _sys_clone
44arch_clone_exit:
45    jmp arch_syscall_exit
46
47/**
48 * rt thread return code
49 */
50.align 4
51.global lwp_thread_return
52lwp_thread_return:
53    movl $1, %eax   // eax = 1, sys_exit
54    movl $0, %ebx
55    int $0x80
56.align 4
57.global lwp_thread_return_end
58lwp_thread_return_end:
59
60#ifdef RT_USING_SIGNALS
61/**
62 * signal return code
63 */
64.align 4
65.global lwp_signal_return
66lwp_signal_return:
67    movl $0xe000, %eax // special syscall id for return code
68    int $0x80
69.align 4
70.global lwp_signal_return_end
71lwp_signal_return_end:
72
73#endif /* RT_USING_SIGNALS */
74