]> git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/powerpc/powerpc32/setjmp-common.S
f271d244e9a0e20721a202bb1a6fb3812c50d8e5
[thirdparty/glibc.git] / sysdeps / powerpc / powerpc32 / setjmp-common.S
1 /* setjmp for PowerPC.
2 Copyright (C) 1995-2018 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
4
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.
9
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.
14
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 <http://www.gnu.org/licenses/>. */
18
19 #include <sysdep.h>
20 #include <stap-probe.h>
21 #define _ASM
22 #ifdef __NO_VMX__
23 # include <novmxsetjmp.h>
24 #else
25 # include <jmpbuf-offsets.h>
26 #endif
27
28 #if defined __SPE__ || (defined __NO_FPRS__ && !defined _SOFT_FLOAT)
29 # define SAVE_GP(N) evstdd r##N,((JB_FPRS+((N)-14)*2)*4)(3)
30 #else
31 # define SAVE_GP(N) stw r##N,((JB_GPRS+(N)-14)*4)(3)
32 #endif
33
34 ENTRY (__sigsetjmp_symbol)
35
36 #ifdef PTR_MANGLE
37 mr r5,r1
38 PTR_MANGLE(r5, r10)
39 stw r5,(JB_GPR1*4)(3)
40 #else
41 stw r1,(JB_GPR1*4)(3)
42 #endif
43 mflr r0
44 /* setjmp probe expects longjmp first argument (4@3), second argument
45 (-4@4), and target address (4@0), respectively. */
46 LIBC_PROBE (setjmp, 3, 4@3, -4@4, 4@0)
47 SAVE_GP (14)
48 #ifdef PTR_MANGLE
49 PTR_MANGLE2 (r0, r10)
50 li r10,0
51 #endif
52 stw r0,(JB_LR*4)(3)
53 SAVE_GP (15)
54 mfcr r0
55 SAVE_GP (16)
56 stw r0,(JB_CR*4)(3)
57 SAVE_GP (17)
58 SAVE_GP (18)
59 SAVE_GP (19)
60 SAVE_GP (20)
61 SAVE_GP (21)
62 SAVE_GP (22)
63 SAVE_GP (23)
64 SAVE_GP (24)
65 SAVE_GP (25)
66 SAVE_GP (26)
67 SAVE_GP (27)
68 SAVE_GP (28)
69 SAVE_GP (29)
70 SAVE_GP (30)
71 SAVE_GP (31)
72 #if IS_IN (rtld)
73 li r3,0
74 blr
75 #else
76 b __sigjmp_save_symbol@local
77 #endif
78 END (__sigsetjmp_symbol)