diff options
author | Hongliang Wang <wanghongliang@loongson.cn> | 2023-09-26 09:12:01 +0800 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2024-02-16 09:33:10 -0500 |
commit | 522bd54edaa2fa404fd428f8ad0bcb0f0bec5639 (patch) | |
tree | dfe88361bcbbd17ac53b8af36cb52337f21095e9 /src/thread/loongarch64/clone.s | |
parent | 4a16ddf53e7c634169d0a649782f8a724611f263 (diff) | |
download | musl-522bd54edaa2fa404fd428f8ad0bcb0f0bec5639.tar.gz |
add loongarch64 port
Author: Xiaojuan Zhai <zhaixiaojuan@loongson.cn>
Author: Meidan Li <limeidan@loongson.cn>
Author: Guoqi Chen <chenguoqi@loongson.cn>
Author: Xiaolin Zhao <zhaoxiaolin@loongson.cn>
Author: Fan peng <fanpeng@loongson.cn>
Author: Jiantao Shan <shanjiantao@loongson.cn>
Author: Xuhui Qiang <qiangxuhui@loongson.cn>
Author: Jingyun Hua <huajingyun@loongson.cn>
Author: Liu xue <liuxue@loongson.cn>
Author: Hongliang Wang <wanghongliang@loongson.cn>
Diffstat (limited to 'src/thread/loongarch64/clone.s')
-rw-r--r-- | src/thread/loongarch64/clone.s | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/thread/loongarch64/clone.s b/src/thread/loongarch64/clone.s new file mode 100644 index 00000000..e971ab4b --- /dev/null +++ b/src/thread/loongarch64/clone.s @@ -0,0 +1,28 @@ +#__clone(func, stack, flags, arg, ptid, tls, ctid) +# a0, a1, a2, a3, a4, a5, a6 +# sys_clone(flags, stack, ptid, ctid, tls) +# a0, a1, a2, a3, a4 + +.global __clone +.hidden __clone +.type __clone,@function +__clone: + # Save function pointer and argument pointer on new thread stack + addi.d $a1, $a1, -16 + st.d $a0, $a1, 0 # save function pointer + st.d $a3, $a1, 8 # save argument pointer + or $a0, $a2, $zero + or $a2, $a4, $zero + or $a3, $a6, $zero + or $a4, $a5, $zero + ori $a7, $zero, 220 + syscall 0 # call clone + + beqz $a0, 1f # whether child process + jirl $zero, $ra, 0 # parent process return +1: + ld.d $t8, $sp, 0 # function pointer + ld.d $a0, $sp, 8 # argument pointer + jirl $ra, $t8, 0 # call the user's function + ori $a7, $zero, 93 + syscall 0 # child process exit |