malloc/Makefile: Split and sort tests
[glibc.git] / sysdeps / unix / sysv / linux / sparc / sparc64 / setjmp.S
blob6366af496eb0250aa4f33bd38832b3af53389817
1 /* Copyright (C) 1997-2024 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, see
16    <https://www.gnu.org/licenses/>.  */
18 /* __sigsetjmp is implemented in terms of the getcontext trap on
19    Linux/Sparc64.  */
21 #include <sysdep.h>
23 /* Offsets into the jmp_buf structure.  */
25 #define O_mask_was_saved        512
26 #define O_gregs                 32
27 #define O_g1                    (O_gregs + 4*8)
29 /* int _setjmp(jmp_buf) */
31 ENTRY(_setjmp)
32         ba      __sigsetjmp_local
33          set    0, %o1
34 END(_setjmp)
35 libc_hidden_def (_setjmp)
37 /* int setjmp(jmp_buf) */
39 ENTRY(setjmp)
40         ba,pt   %xcc, __sigsetjmp_local
41          set    1, %o1
42 END(setjmp)
44 /* int __sigsetjmp(jmp_buf, savemask)  */
46 ENTRY(__sigsetjmp)
47 __sigsetjmp_local:
49         /* Record whether the user is intending to save the sigmask.  */
50         st      %o1, [%o0 + O_mask_was_saved]
52         /* Load up our return value, as longjmp is going to override
53            the jmp_buf on its way back.  */
54         mov     %g0, %g1
56         /* And call getcontext!  */
57         ta      0x6e
59         retl
60          mov    %g1, %o0
62 END(__sigsetjmp)
63 hidden_def (__sigsetjmp)
65 weak_extern(_setjmp)
66 weak_extern(setjmp)