1 /* Set current context for ARC.
2 Copyright (C) 2020-2023 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library. If not, see
17 <https://www.gnu.org/licenses/>. */
19 #include "ucontext-macros.h"
21 /* int setcontext (const ucontext_t *ucp)
22 - Restores the machine context in @ucp and resumes execution
23 (doesn't return to caller). */
27 mov r9, r0 /* Stash @ucp across syscall. */
29 /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8). */
32 add r1, r0, UCONTEXT_SIGMASK
34 mov r8, __NR_rt_sigprocmask
36 brhi r0, -1024, L (call_syscall_err)
38 /* Restore scratch/arg regs for makecontext case. */
39 add r9, r9, UCONTEXT_MCONTEXT
49 /* Restore callee saved registers. */
70 PSEUDO_END (__setcontext)
71 weak_alias (__setcontext, setcontext)
74 /* Helper for activating makecontext created context
75 - r14 has @func, r15 has uc_link. */
77 ENTRY (__startcontext)
82 /* Call user @func, loaded in r14 by setcontext. */
85 /* If uc_link (r15) call setcontext with that. */
91 /* Exit with status 0. */
92 b HIDDEN_JUMPTARGET(exit)