Browse Source

riscv: remove incomplete context implementation, use libucontext

Waldemar Brodkorb 8 months ago
parent
commit
593eff77fa

+ 0 - 74
libc/sysdeps/linux/riscv32/getcontext.S

@@ -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
-   <http://www.gnu.org/licenses/>.  */
-
-#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)

+ 0 - 112
libc/sysdeps/linux/riscv32/setcontext.S

@@ -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
-   <http://www.gnu.org/licenses/>.  */
-
-#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)

+ 0 - 122
libc/sysdeps/linux/riscv32/swapcontext.S

@@ -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
-   <http://www.gnu.org/licenses/>.  */
-
-#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)

+ 0 - 74
libc/sysdeps/linux/riscv64/getcontext.S

@@ -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
-   <http://www.gnu.org/licenses/>.  */
-
-#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)

+ 0 - 112
libc/sysdeps/linux/riscv64/setcontext.S

@@ -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
-   <http://www.gnu.org/licenses/>.  */
-
-#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)

+ 0 - 122
libc/sysdeps/linux/riscv64/swapcontext.S

@@ -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
-   <http://www.gnu.org/licenses/>.  */
-
-#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)