]> git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
2a2283410853608caca68c1634354e80f6c42ec3
[thirdparty/glibc.git] / sysdeps / unix / sysv / linux / s390 / s390-32 / __makecontext_ret.S
1 /* Copyright (C) 2012-2013 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 <http://www.gnu.org/licenses/>. */
17
18 #include <sysdep.h>
19
20 ENTRY(__makecontext_ret)
21 basr %r14,%r7
22 ltr %r8,%r8 /* Check whether uc_link is 0. */
23 jz 1f
24 lr %r2,%r8
25 br %r9
26 1: lhi %r2,0 /* EXIT return value. */
27 basr %r13,0
28 2:
29 #ifdef PIC
30 l %r12,4f-2b(%r13)
31 la %r12,0(%r12,%r13) /* GOT pointer in r12 after this. */
32 l %r1,3f-2b(%r13)
33 bas %r14,0(%r1,%r12)
34 .align 4
35 3:
36 .long HIDDEN_JUMPTARGET (exit)@GOTOFF
37 4:
38 .long _GLOBAL_OFFSET_TABLE_-2b
39 #else
40 l %r1,3f-2b(%r13)
41 basr %r14,%r1
42 .align 4
43 3:
44 .long HIDDEN_JUMPTARGET (exit)
45 #endif
46 .align 2
47 j .+2 /* Trap if exit returns for some reason. */
48 END(__makecontext_ret)