1/* Copyright (C) 1991-2021 Free Software Foundation, Inc.
2   This file is part of the GNU C Library.
3
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.
8
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.
13
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/>.  */
17
18#include <sysdep.h>
19#include <sys/trap.h>
20
21#include <jmpbuf-offsets.h>
22
23ENTRY(_setjmp)
24	b	1f
25	 set	0, %o1
26END(_setjmp)
27libc_hidden_def (_setjmp)
28
29ENTRY(setjmp)
30	set	1, %o1
31END(setjmp)
32
33ENTRY (__sigsetjmp)
341:
35	/* Save our PC, SP and FP.  Save the signal mask if requested with
36	   a tail-call for simplicity; it always returns zero.  */
37	ta	ST_FLUSH_WINDOWS
38
39#ifdef PTR_MANGLE
40	PTR_MANGLE (%g1, %o7, %g4)
41	PTR_MANGLE2 (%g2, %sp, %g4)
42	PTR_MANGLE2 (%g3, %fp, %g4)
43	st	%g1, [%o0 + (JB_PC * 4)]
44	st	%g2, [%o0 + (JB_SP * 4)]
45	st	%g3, [%o0 + (JB_FP * 4)]
46#else
47	st	%o7, [%o0 + (JB_PC * 4)]
48	st	%sp, [%o0 + (JB_SP * 4)]
49	st	%fp, [%o0 + (JB_FP * 4)]
50#endif
51
52	mov	%o7, %g1
53	call	__sigjmp_save
54	 mov	%g1, %o7
55END(__sigsetjmp)
56hidden_def (__sigsetjmp)
57
58weak_extern(_setjmp)
59weak_extern(setjmp)
60