From 593eff77fa4d9ce95f3a9e7e8207ef9ddf4dcf9b Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Sun, 11 Aug 2024 06:39:07 +0200 Subject: riscv: remove incomplete context implementation, use libucontext --- libc/sysdeps/linux/riscv32/getcontext.S | 74 ------------------- libc/sysdeps/linux/riscv32/setcontext.S | 112 ---------------------------- libc/sysdeps/linux/riscv32/swapcontext.S | 122 ------------------------------- libc/sysdeps/linux/riscv64/getcontext.S | 74 ------------------- libc/sysdeps/linux/riscv64/setcontext.S | 112 ---------------------------- libc/sysdeps/linux/riscv64/swapcontext.S | 122 ------------------------------- 6 files changed, 616 deletions(-) delete mode 100644 libc/sysdeps/linux/riscv32/getcontext.S delete mode 100644 libc/sysdeps/linux/riscv32/setcontext.S delete mode 100644 libc/sysdeps/linux/riscv32/swapcontext.S delete mode 100644 libc/sysdeps/linux/riscv64/getcontext.S delete mode 100644 libc/sysdeps/linux/riscv64/setcontext.S delete mode 100644 libc/sysdeps/linux/riscv64/swapcontext.S diff --git a/libc/sysdeps/linux/riscv32/getcontext.S b/libc/sysdeps/linux/riscv32/getcontext.S deleted file mode 100644 index 0b9e7c2d3..000000000 --- a/libc/sysdeps/linux/riscv32/getcontext.S +++ /dev/null @@ -1,74 +0,0 @@ -/* Save current context. - Copyright (C) 2009-2018 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "ucontext-macros.h" - -/* int getcontext (ucontext_t *ucp) */ - - .text -LEAF (getcontext) - SAVE_INT_REG (ra, 0, a0) - SAVE_INT_REG (ra, 1, a0) - SAVE_INT_REG (sp, 2, a0) - SAVE_INT_REG (s0, 8, a0) - SAVE_INT_REG (s1, 9, a0) - SAVE_INT_REG (x0, 10, a0) /* return 0 by overwriting a0. */ - SAVE_INT_REG (s2, 18, a0) - SAVE_INT_REG (s3, 19, a0) - SAVE_INT_REG (s4, 20, a0) - SAVE_INT_REG (s5, 21, a0) - SAVE_INT_REG (s6, 22, a0) - SAVE_INT_REG (s7, 23, a0) - SAVE_INT_REG (s8, 24, a0) - SAVE_INT_REG (s9, 25, a0) - SAVE_INT_REG (s10, 26, a0) - SAVE_INT_REG (s11, 27, a0) - -#ifndef __riscv_float_abi_soft - frsr a1 - - SAVE_FP_REG (fs0, 8, a0) - SAVE_FP_REG (fs1, 9, a0) - SAVE_FP_REG (fs2, 18, a0) - SAVE_FP_REG (fs3, 19, a0) - SAVE_FP_REG (fs4, 20, a0) - SAVE_FP_REG (fs5, 21, a0) - SAVE_FP_REG (fs6, 22, a0) - SAVE_FP_REG (fs7, 23, a0) - SAVE_FP_REG (fs8, 24, a0) - SAVE_FP_REG (fs9, 25, a0) - SAVE_FP_REG (fs10, 26, a0) - SAVE_FP_REG (fs11, 27, a0) - - sw a1, MCONTEXT_FSR(a0) -#endif /* __riscv_float_abi_soft */ - -/* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ - li a3, _NSIG8 - add a2, a0, UCONTEXT_SIGMASK - mv a1, zero - li a0, SIG_BLOCK - - li a7, SYS_ify (rt_sigprocmask) - scall - bltz a0, 99f - - ret - -99: j __syscall_error - -PSEUDO_END (getcontext) diff --git a/libc/sysdeps/linux/riscv32/setcontext.S b/libc/sysdeps/linux/riscv32/setcontext.S deleted file mode 100644 index 15cc17bd8..000000000 --- a/libc/sysdeps/linux/riscv32/setcontext.S +++ /dev/null @@ -1,112 +0,0 @@ -/* Set current context. - Copyright (C) 2009-2018 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "ucontext-macros.h" - -/* int __setcontext (const ucontext_t *ucp) - - Restores the machine context in UCP and thereby resumes execution - in that context. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to restore anything - other than the PRESERVED state. */ - - .text -LEAF (setcontext) - - mv t0, a0 /* Save ucp into t0. */ - -/* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8) */ - li a3, _NSIG8 - mv a2, zero - add a1, a0, UCONTEXT_SIGMASK - li a0, SIG_SETMASK - - li a7, SYS_ify (rt_sigprocmask) - scall - - bltz a0, 99f - - cfi_def_cfa (t0, 0) - -#ifndef __riscv_float_abi_soft - lw t1, MCONTEXT_FSR(t0) - - RESTORE_FP_REG_CFI (fs0, 8, t0) - RESTORE_FP_REG_CFI (fs1, 9, t0) - RESTORE_FP_REG_CFI (fs2, 18, t0) - RESTORE_FP_REG_CFI (fs3, 19, t0) - RESTORE_FP_REG_CFI (fs4, 20, t0) - RESTORE_FP_REG_CFI (fs5, 21, t0) - RESTORE_FP_REG_CFI (fs6, 22, t0) - RESTORE_FP_REG_CFI (fs7, 23, t0) - RESTORE_FP_REG_CFI (fs8, 24, t0) - RESTORE_FP_REG_CFI (fs9, 25, t0) - RESTORE_FP_REG_CFI (fs10, 26, t0) - RESTORE_FP_REG_CFI (fs11, 27, t0) - - fssr t1 -#endif /* __riscv_float_abi_soft */ - - /* Note the contents of argument registers will be random - unless makecontext() has been called. */ - RESTORE_INT_REG (t1, 0, t0) - RESTORE_INT_REG_CFI (ra, 1, t0) - RESTORE_INT_REG (sp, 2, t0) - RESTORE_INT_REG_CFI (s0, 8, t0) - RESTORE_INT_REG_CFI (s1, 9, t0) - RESTORE_INT_REG (a0, 10, t0) - RESTORE_INT_REG (a1, 11, t0) - RESTORE_INT_REG (a2, 12, t0) - RESTORE_INT_REG (a3, 13, t0) - RESTORE_INT_REG (a4, 14, t0) - RESTORE_INT_REG (a5, 15, t0) - RESTORE_INT_REG (a6, 16, t0) - RESTORE_INT_REG (a7, 17, t0) - RESTORE_INT_REG_CFI (s2, 18, t0) - RESTORE_INT_REG_CFI (s3, 19, t0) - RESTORE_INT_REG_CFI (s4, 20, t0) - RESTORE_INT_REG_CFI (s5, 21, t0) - RESTORE_INT_REG_CFI (s6, 22, t0) - RESTORE_INT_REG_CFI (s7, 23, t0) - RESTORE_INT_REG_CFI (s8, 24, t0) - RESTORE_INT_REG_CFI (s9, 25, t0) - RESTORE_INT_REG_CFI (s10, 26, t0) - RESTORE_INT_REG_CFI (s11, 27, t0) - - jr t1 - -99: j __syscall_error - -PSEUDO_END (setcontext) - -LEAF (start_context) - - /* Terminate call stack by noting ra == 0. Happily, s0 == 0 here. */ - cfi_register (ra, s0) - - /* Call the function passed to makecontext. */ - jalr s1 - - /* Invoke subsequent context if present, else exit(0). */ - mv a0, s2 - beqz s2, 1f - jal setcontext -1: j exit - -PSEUDO_END (start_context) diff --git a/libc/sysdeps/linux/riscv32/swapcontext.S b/libc/sysdeps/linux/riscv32/swapcontext.S deleted file mode 100644 index f5e12b2db..000000000 --- a/libc/sysdeps/linux/riscv32/swapcontext.S +++ /dev/null @@ -1,122 +0,0 @@ -/* Save and set current context. - Copyright (C) 2009-2018 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "ucontext-macros.h" - -/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */ - -LEAF (swapcontext) - mv t0, a1 /* Save ucp into t0. */ - - SAVE_INT_REG (ra, 0, a0) - SAVE_INT_REG (ra, 1, a0) - SAVE_INT_REG (sp, 2, a0) - SAVE_INT_REG (s0, 8, a0) - SAVE_INT_REG (s1, 9, a0) - SAVE_INT_REG (x0, 10, a0) /* return 0 by overwriting a0. */ - SAVE_INT_REG (s2, 18, a0) - SAVE_INT_REG (s3, 19, a0) - SAVE_INT_REG (s4, 20, a0) - SAVE_INT_REG (s5, 21, a0) - SAVE_INT_REG (s6, 22, a0) - SAVE_INT_REG (s7, 23, a0) - SAVE_INT_REG (s8, 24, a0) - SAVE_INT_REG (s9, 25, a0) - SAVE_INT_REG (s10, 26, a0) - SAVE_INT_REG (s11, 27, a0) - -#ifndef __riscv_float_abi_soft - frsr a1 - - SAVE_FP_REG (fs0, 8, a0) - SAVE_FP_REG (fs1, 9, a0) - SAVE_FP_REG (fs2, 18, a0) - SAVE_FP_REG (fs3, 19, a0) - SAVE_FP_REG (fs4, 20, a0) - SAVE_FP_REG (fs5, 21, a0) - SAVE_FP_REG (fs6, 22, a0) - SAVE_FP_REG (fs7, 23, a0) - SAVE_FP_REG (fs8, 24, a0) - SAVE_FP_REG (fs9, 25, a0) - SAVE_FP_REG (fs10, 26, a0) - SAVE_FP_REG (fs11, 27, a0) - - sw a1, MCONTEXT_FSR(a0) -#endif /* __riscv_float_abi_soft */ - -/* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, &oucp->uc_sigmask, _NSIG8) */ - li a3, _NSIG8 - add a2, a0, UCONTEXT_SIGMASK - add a1, t0, UCONTEXT_SIGMASK - li a0, SIG_SETMASK - - li a7, SYS_ify (rt_sigprocmask) - scall - - bltz a0, 99f - -#ifndef __riscv_float_abi_soft - lw t1, MCONTEXT_FSR(t0) - - RESTORE_FP_REG (fs0, 8, t0) - RESTORE_FP_REG (fs1, 9, t0) - RESTORE_FP_REG (fs2, 18, t0) - RESTORE_FP_REG (fs3, 19, t0) - RESTORE_FP_REG (fs4, 20, t0) - RESTORE_FP_REG (fs5, 21, t0) - RESTORE_FP_REG (fs6, 22, t0) - RESTORE_FP_REG (fs7, 23, t0) - RESTORE_FP_REG (fs8, 24, t0) - RESTORE_FP_REG (fs9, 25, t0) - RESTORE_FP_REG (fs10, 26, t0) - RESTORE_FP_REG (fs11, 27, t0) - - fssr t1 -#endif /* __riscv_float_abi_soft */ - - /* Note the contents of argument registers will be random - unless makecontext() has been called. */ - RESTORE_INT_REG (t1, 0, t0) - RESTORE_INT_REG (ra, 1, t0) - RESTORE_INT_REG (sp, 2, t0) - RESTORE_INT_REG (s0, 8, t0) - RESTORE_INT_REG (s1, 9, t0) - RESTORE_INT_REG (a0, 10, t0) - RESTORE_INT_REG (a1, 11, t0) - RESTORE_INT_REG (a2, 12, t0) - RESTORE_INT_REG (a3, 13, t0) - RESTORE_INT_REG (a4, 14, t0) - RESTORE_INT_REG (a5, 15, t0) - RESTORE_INT_REG (a6, 16, t0) - RESTORE_INT_REG (a7, 17, t0) - RESTORE_INT_REG (s2, 18, t0) - RESTORE_INT_REG (s3, 19, t0) - RESTORE_INT_REG (s4, 20, t0) - RESTORE_INT_REG (s5, 21, t0) - RESTORE_INT_REG (s6, 22, t0) - RESTORE_INT_REG (s7, 23, t0) - RESTORE_INT_REG (s8, 24, t0) - RESTORE_INT_REG (s9, 25, t0) - RESTORE_INT_REG (s10, 26, t0) - RESTORE_INT_REG (s11, 27, t0) - - jr t1 - - -99: j __syscall_error - -PSEUDO_END (swapcontext) diff --git a/libc/sysdeps/linux/riscv64/getcontext.S b/libc/sysdeps/linux/riscv64/getcontext.S deleted file mode 100644 index 0b9e7c2d3..000000000 --- a/libc/sysdeps/linux/riscv64/getcontext.S +++ /dev/null @@ -1,74 +0,0 @@ -/* Save current context. - Copyright (C) 2009-2018 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "ucontext-macros.h" - -/* int getcontext (ucontext_t *ucp) */ - - .text -LEAF (getcontext) - SAVE_INT_REG (ra, 0, a0) - SAVE_INT_REG (ra, 1, a0) - SAVE_INT_REG (sp, 2, a0) - SAVE_INT_REG (s0, 8, a0) - SAVE_INT_REG (s1, 9, a0) - SAVE_INT_REG (x0, 10, a0) /* return 0 by overwriting a0. */ - SAVE_INT_REG (s2, 18, a0) - SAVE_INT_REG (s3, 19, a0) - SAVE_INT_REG (s4, 20, a0) - SAVE_INT_REG (s5, 21, a0) - SAVE_INT_REG (s6, 22, a0) - SAVE_INT_REG (s7, 23, a0) - SAVE_INT_REG (s8, 24, a0) - SAVE_INT_REG (s9, 25, a0) - SAVE_INT_REG (s10, 26, a0) - SAVE_INT_REG (s11, 27, a0) - -#ifndef __riscv_float_abi_soft - frsr a1 - - SAVE_FP_REG (fs0, 8, a0) - SAVE_FP_REG (fs1, 9, a0) - SAVE_FP_REG (fs2, 18, a0) - SAVE_FP_REG (fs3, 19, a0) - SAVE_FP_REG (fs4, 20, a0) - SAVE_FP_REG (fs5, 21, a0) - SAVE_FP_REG (fs6, 22, a0) - SAVE_FP_REG (fs7, 23, a0) - SAVE_FP_REG (fs8, 24, a0) - SAVE_FP_REG (fs9, 25, a0) - SAVE_FP_REG (fs10, 26, a0) - SAVE_FP_REG (fs11, 27, a0) - - sw a1, MCONTEXT_FSR(a0) -#endif /* __riscv_float_abi_soft */ - -/* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ - li a3, _NSIG8 - add a2, a0, UCONTEXT_SIGMASK - mv a1, zero - li a0, SIG_BLOCK - - li a7, SYS_ify (rt_sigprocmask) - scall - bltz a0, 99f - - ret - -99: j __syscall_error - -PSEUDO_END (getcontext) diff --git a/libc/sysdeps/linux/riscv64/setcontext.S b/libc/sysdeps/linux/riscv64/setcontext.S deleted file mode 100644 index 15cc17bd8..000000000 --- a/libc/sysdeps/linux/riscv64/setcontext.S +++ /dev/null @@ -1,112 +0,0 @@ -/* Set current context. - Copyright (C) 2009-2018 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "ucontext-macros.h" - -/* int __setcontext (const ucontext_t *ucp) - - Restores the machine context in UCP and thereby resumes execution - in that context. - - This implementation is intended to be used for *synchronous* context - switches only. Therefore, it does not have to restore anything - other than the PRESERVED state. */ - - .text -LEAF (setcontext) - - mv t0, a0 /* Save ucp into t0. */ - -/* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8) */ - li a3, _NSIG8 - mv a2, zero - add a1, a0, UCONTEXT_SIGMASK - li a0, SIG_SETMASK - - li a7, SYS_ify (rt_sigprocmask) - scall - - bltz a0, 99f - - cfi_def_cfa (t0, 0) - -#ifndef __riscv_float_abi_soft - lw t1, MCONTEXT_FSR(t0) - - RESTORE_FP_REG_CFI (fs0, 8, t0) - RESTORE_FP_REG_CFI (fs1, 9, t0) - RESTORE_FP_REG_CFI (fs2, 18, t0) - RESTORE_FP_REG_CFI (fs3, 19, t0) - RESTORE_FP_REG_CFI (fs4, 20, t0) - RESTORE_FP_REG_CFI (fs5, 21, t0) - RESTORE_FP_REG_CFI (fs6, 22, t0) - RESTORE_FP_REG_CFI (fs7, 23, t0) - RESTORE_FP_REG_CFI (fs8, 24, t0) - RESTORE_FP_REG_CFI (fs9, 25, t0) - RESTORE_FP_REG_CFI (fs10, 26, t0) - RESTORE_FP_REG_CFI (fs11, 27, t0) - - fssr t1 -#endif /* __riscv_float_abi_soft */ - - /* Note the contents of argument registers will be random - unless makecontext() has been called. */ - RESTORE_INT_REG (t1, 0, t0) - RESTORE_INT_REG_CFI (ra, 1, t0) - RESTORE_INT_REG (sp, 2, t0) - RESTORE_INT_REG_CFI (s0, 8, t0) - RESTORE_INT_REG_CFI (s1, 9, t0) - RESTORE_INT_REG (a0, 10, t0) - RESTORE_INT_REG (a1, 11, t0) - RESTORE_INT_REG (a2, 12, t0) - RESTORE_INT_REG (a3, 13, t0) - RESTORE_INT_REG (a4, 14, t0) - RESTORE_INT_REG (a5, 15, t0) - RESTORE_INT_REG (a6, 16, t0) - RESTORE_INT_REG (a7, 17, t0) - RESTORE_INT_REG_CFI (s2, 18, t0) - RESTORE_INT_REG_CFI (s3, 19, t0) - RESTORE_INT_REG_CFI (s4, 20, t0) - RESTORE_INT_REG_CFI (s5, 21, t0) - RESTORE_INT_REG_CFI (s6, 22, t0) - RESTORE_INT_REG_CFI (s7, 23, t0) - RESTORE_INT_REG_CFI (s8, 24, t0) - RESTORE_INT_REG_CFI (s9, 25, t0) - RESTORE_INT_REG_CFI (s10, 26, t0) - RESTORE_INT_REG_CFI (s11, 27, t0) - - jr t1 - -99: j __syscall_error - -PSEUDO_END (setcontext) - -LEAF (start_context) - - /* Terminate call stack by noting ra == 0. Happily, s0 == 0 here. */ - cfi_register (ra, s0) - - /* Call the function passed to makecontext. */ - jalr s1 - - /* Invoke subsequent context if present, else exit(0). */ - mv a0, s2 - beqz s2, 1f - jal setcontext -1: j exit - -PSEUDO_END (start_context) diff --git a/libc/sysdeps/linux/riscv64/swapcontext.S b/libc/sysdeps/linux/riscv64/swapcontext.S deleted file mode 100644 index f5e12b2db..000000000 --- a/libc/sysdeps/linux/riscv64/swapcontext.S +++ /dev/null @@ -1,122 +0,0 @@ -/* Save and set current context. - Copyright (C) 2009-2018 Free Software Foundation, Inc. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include "ucontext-macros.h" - -/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */ - -LEAF (swapcontext) - mv t0, a1 /* Save ucp into t0. */ - - SAVE_INT_REG (ra, 0, a0) - SAVE_INT_REG (ra, 1, a0) - SAVE_INT_REG (sp, 2, a0) - SAVE_INT_REG (s0, 8, a0) - SAVE_INT_REG (s1, 9, a0) - SAVE_INT_REG (x0, 10, a0) /* return 0 by overwriting a0. */ - SAVE_INT_REG (s2, 18, a0) - SAVE_INT_REG (s3, 19, a0) - SAVE_INT_REG (s4, 20, a0) - SAVE_INT_REG (s5, 21, a0) - SAVE_INT_REG (s6, 22, a0) - SAVE_INT_REG (s7, 23, a0) - SAVE_INT_REG (s8, 24, a0) - SAVE_INT_REG (s9, 25, a0) - SAVE_INT_REG (s10, 26, a0) - SAVE_INT_REG (s11, 27, a0) - -#ifndef __riscv_float_abi_soft - frsr a1 - - SAVE_FP_REG (fs0, 8, a0) - SAVE_FP_REG (fs1, 9, a0) - SAVE_FP_REG (fs2, 18, a0) - SAVE_FP_REG (fs3, 19, a0) - SAVE_FP_REG (fs4, 20, a0) - SAVE_FP_REG (fs5, 21, a0) - SAVE_FP_REG (fs6, 22, a0) - SAVE_FP_REG (fs7, 23, a0) - SAVE_FP_REG (fs8, 24, a0) - SAVE_FP_REG (fs9, 25, a0) - SAVE_FP_REG (fs10, 26, a0) - SAVE_FP_REG (fs11, 27, a0) - - sw a1, MCONTEXT_FSR(a0) -#endif /* __riscv_float_abi_soft */ - -/* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, &oucp->uc_sigmask, _NSIG8) */ - li a3, _NSIG8 - add a2, a0, UCONTEXT_SIGMASK - add a1, t0, UCONTEXT_SIGMASK - li a0, SIG_SETMASK - - li a7, SYS_ify (rt_sigprocmask) - scall - - bltz a0, 99f - -#ifndef __riscv_float_abi_soft - lw t1, MCONTEXT_FSR(t0) - - RESTORE_FP_REG (fs0, 8, t0) - RESTORE_FP_REG (fs1, 9, t0) - RESTORE_FP_REG (fs2, 18, t0) - RESTORE_FP_REG (fs3, 19, t0) - RESTORE_FP_REG (fs4, 20, t0) - RESTORE_FP_REG (fs5, 21, t0) - RESTORE_FP_REG (fs6, 22, t0) - RESTORE_FP_REG (fs7, 23, t0) - RESTORE_FP_REG (fs8, 24, t0) - RESTORE_FP_REG (fs9, 25, t0) - RESTORE_FP_REG (fs10, 26, t0) - RESTORE_FP_REG (fs11, 27, t0) - - fssr t1 -#endif /* __riscv_float_abi_soft */ - - /* Note the contents of argument registers will be random - unless makecontext() has been called. */ - RESTORE_INT_REG (t1, 0, t0) - RESTORE_INT_REG (ra, 1, t0) - RESTORE_INT_REG (sp, 2, t0) - RESTORE_INT_REG (s0, 8, t0) - RESTORE_INT_REG (s1, 9, t0) - RESTORE_INT_REG (a0, 10, t0) - RESTORE_INT_REG (a1, 11, t0) - RESTORE_INT_REG (a2, 12, t0) - RESTORE_INT_REG (a3, 13, t0) - RESTORE_INT_REG (a4, 14, t0) - RESTORE_INT_REG (a5, 15, t0) - RESTORE_INT_REG (a6, 16, t0) - RESTORE_INT_REG (a7, 17, t0) - RESTORE_INT_REG (s2, 18, t0) - RESTORE_INT_REG (s3, 19, t0) - RESTORE_INT_REG (s4, 20, t0) - RESTORE_INT_REG (s5, 21, t0) - RESTORE_INT_REG (s6, 22, t0) - RESTORE_INT_REG (s7, 23, t0) - RESTORE_INT_REG (s8, 24, t0) - RESTORE_INT_REG (s9, 25, t0) - RESTORE_INT_REG (s10, 26, t0) - RESTORE_INT_REG (s11, 27, t0) - - jr t1 - - -99: j __syscall_error - -PSEUDO_END (swapcontext) -- cgit v1.2.3