1/* setjmp for SH3. 2 Copyright (C) 1999-2022 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 <https://www.gnu.org/licenses/>. */ 18 19#include <sysdep.h> 20#include <jmpbuf-offsets.h> 21 22ENTRY (__sigsetjmp) 23 /* Save registers */ 24 add #(JB_SIZE - 4 * 5), r4 25 stc.l gbr, @-r4 26#ifdef PTR_MANGLE 27 sts pr, r2 28 PTR_MANGLE (r2, r1) 29 mov.l r2, @-r4 30 mov r15, r2 31 PTR_MANGLE2 (r2, r1) 32 mov.l r2, @-r4 33 mov r14, r2 34 PTR_MANGLE2 (r2, r1) 35 mov.l r2, @-r4 36 mov #0, r1 37#else 38 sts.l pr, @-r4 39 mov.l r15, @-r4 40 mov.l r14, @-r4 41#endif 42 mov.l r13, @-r4 43 mov.l r12, @-r4 44 mov.l r11, @-r4 45 mov.l r10, @-r4 46 mov.l r9, @-r4 47 mov.l r8, @-r4 48 49#if IS_IN (rtld) 50 /* In ld.so we never save the signal mask. */ 51 rts 52 mov #0, r0 53#else 54 /* Make a tail call to __sigjmp_save; it takes the same args. */ 55# ifdef SHARED 56 mov.l 1f, r1 57 mova 1f, r0 58 bra 2f 59 add r1, r0 60 .align 2 611: 62 .long _GLOBAL_OFFSET_TABLE_ 632: 64 mov.l .L1, r1 65 mov.l @(r0,r1), r1 66 jmp @r1 67 nop 68 .align 2 69.L1: 70 .long C_SYMBOL_NAME(__sigjmp_save@GOT) 71# else 72 mov.l .L1, r1 73 jmp @r1 74 nop 75 .align 2 76.L1: 77 .long C_SYMBOL_NAME(__sigjmp_save) 78# endif 79#endif 80END (__sigsetjmp) 81hidden_def (__sigsetjmp) 82