1
/* setjmp for s390, ELF version.
2
Copyright (C) 2000-2014 Free Software Foundation, Inc.
3
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
4
This file is part of the GNU C Library.
6
The GNU C Library is free software; you can redistribute it and/or
7
modify it under the terms of the GNU Lesser General Public
8
License as published by the Free Software Foundation; either
9
version 2.1 of the License, or (at your option) any later version.
11
The GNU C Library is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
Lesser General Public License for more details.
16
You should have received a copy of the GNU Lesser General Public
17
License along with the GNU C Library; if not, see
18
<http://www.gnu.org/licenses/>. */
23
#include <bits/setjmp.h>
25
/* We include the BSD entry points here as well but we make
28
.weak C_SYMBOL_NAME (setjmp)
29
lhi %r3,1 /* second argument of one */
30
j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
33
/* Binary compatibility entry point. */
35
.weak C_SYMBOL_NAME (_setjmp)
36
lhi %r3,0 /* second argument of zero */
37
j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
39
libc_hidden_def (_setjmp)
42
lhi %r3,0 /* second argument of zero */
43
j .Linternal_sigsetjmp /* branch relativ to __sigsetjmp */
49
stm %r6,%r13,0(%r2) /* store registers in jmp_buf */
53
PTR_MANGLE2 (%r5, %r1)
56
stm %r6,%r15,0(%r2) /* store registers in jmp_buf */
60
#if defined NOT_IN_libc && defined IS_IN_rtld
61
/* In ld.so we never save the signal mask. */
65
/* We cannot use the PLT, because it requires that %r12 be set, but
66
we can't save and restore our caller's value. Instead, we do an
67
indirect jump through the GOT. */
69
.L0: al %r1,.L1 - .L0(0,%r1) /* get address of global offset table */
70
/* get address of __sigjmp_save from got */
71
l %r1,__sigjmp_save@GOT12(0,%r1)
73
.L1: .long _GLOBAL_OFFSET_TABLE_ - .L0
76
.L0: l %r1,.L1-.L0(0,%r1) /* load address of __sigjmp_save */
77
br %r1 /* tail-call __sigjmp_save */
78
.L1: .long __sigjmp_save