summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S')
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S43
1 files changed, 15 insertions, 28 deletions
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S b/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
index c177aebaa3..52c08a0ada 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2012-2016 Free Software Foundation, Inc.
+/* Copyright (C) 2012-2018 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -17,40 +17,27 @@
#include <sysdep.h>
-/* We do not want .eh_frame info so that __makecontext_ret stops unwinding
- if backtrace was called within a context created by makecontext. (There
- is also no .eh_frame info for _start or thread_start.) */
-#undef cfi_startproc
-#define cfi_startproc
-#undef cfi_endproc
-#define cfi_endproc
-
ENTRY(__makecontext_ret)
+ /* Mark r14 as undefined in order to stop unwinding here! */
+ cfi_undefined (r14)
basr %r14,%r7
ltr %r8,%r8 /* Check whether uc_link is 0. */
jz 1f
lr %r2,%r8
br %r9
1: lhi %r2,0 /* EXIT return value. */
- basr %r13,0
-2:
-#ifdef PIC
- l %r12,4f-2b(%r13)
- la %r12,0(%r12,%r13) /* GOT pointer in r12 after this. */
- l %r1,3f-2b(%r13)
- bas %r14,0(%r1,%r12)
- .align 4
-3:
- .long HIDDEN_JUMPTARGET (exit)@GOTOFF
-4:
- .long _GLOBAL_OFFSET_TABLE_-2b
-#else
- l %r1,3f-2b(%r13)
- basr %r14,%r1
- .align 4
-3:
- .long HIDDEN_JUMPTARGET (exit)
+#ifdef NO_HIDDEN
+ /* If SHARED and NO_HIDDEN is defined, we need to setup got pointer
+ as HIDDEN_JUMPTARGET expands to JUMPTARGET which expands to
+ exit@PLT. Otherwise HIDDEN_JUMPTARGET expands to __GI_exit if
+ SHARED is defined and to exit if SHARED is not defined. */
+ SYSCALL_PIC_SETUP
#endif
- .align 2
+ basr %r1,0
+2:
+ al %r1,3f-2b(%r1)
+ basr %r14,%r1 /* Call exit. */
j .+2 /* Trap if exit returns for some reason. */
+3:
+ .long HIDDEN_JUMPTARGET (exit) - 2b
END(__makecontext_ret)