aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S10
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/clone.S4
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S10
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/clone.S4
4 files changed, 12 insertions, 16 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 887d841a87..ba38a303ee 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
@@ -17,15 +17,9 @@
#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
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/clone.S b/sysdeps/unix/sysv/linux/s390/s390-32/clone.S
index a8b4dbc90f..91f8ede966 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/clone.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/clone.S
@@ -54,12 +54,16 @@ error:
PSEUDO_END (__clone)
thread_start:
+ cfi_startproc
+ /* Mark r14 as undefined in order to stop unwinding here! */
+ cfi_undefined (r14)
/* fn is in gpr 1, arg in gpr 0 */
lr %r2,%r0 /* set first parameter to void *arg */
ahi %r15,-96 /* make room on the stack for the save area */
xc 0(4,%r15),0(%r15)
basr %r14,%r1 /* jump to fn */
DO_CALL (exit, 1)
+ cfi_endproc
libc_hidden_def (__clone)
weak_alias (__clone, clone)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S b/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S
index 16901638b5..2dcd43ff6e 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S
@@ -17,15 +17,9 @@
#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
ltgr %r8,%r8 /* Check whether uc_link is 0. */
jz 1f
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/clone.S b/sysdeps/unix/sysv/linux/s390/s390-64/clone.S
index daf8a58326..8b0cc7e019 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/clone.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/clone.S
@@ -55,12 +55,16 @@ error:
PSEUDO_END (__clone)
thread_start:
+ cfi_startproc
+ /* Mark r14 as undefined in order to stop unwinding here! */
+ cfi_undefined (r14)
/* fn is in gpr 1, arg in gpr 0 */
lgr %r2,%r0 /* set first parameter to void *arg */
aghi %r15,-160 /* make room on the stack for the save area */
xc 0(8,%r15),0(%r15)
basr %r14,%r1 /* jump to fn */
DO_CALL (exit, 1)
+ cfi_endproc
libc_hidden_def (__clone)
weak_alias (__clone, clone)