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