aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
-rw-r--r--sysdeps/s390/s390-32/start.S7
-rw-r--r--sysdeps/s390/s390-64/start.S7
-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
7 files changed, 39 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index ca6024c35c..f9e2e18e50 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
2017-11-21 Stefan Liebler <stli@linux.vnet.ibm.com>
+ * sysdeps/s390/s390-64/start.S (_start): Add cfi information for r14.
+ * sysdeps/s390/s390-32/start.S (_start): Likewise
+ * sysdeps/unix/sysv/linux/s390/s390-64/clone.S
+ (thread_start): Likewise.
+ * sysdeps/unix/sysv/linux/s390/s390-32/clone.S
+ (thread_start): Likewise.
+ * sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S
+ (__makecontext_ret): Likewise.
+ * sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
+ (__makecontext_ret): Likewise.
+
+2017-11-21 Stefan Liebler <stli@linux.vnet.ibm.com>
+
* include/wchar.h (__wcsnlen, __wcscat, __wcsncpy, __wcpncpy,
__wcschrnul): Remove attribute_hidden.
diff --git a/sysdeps/s390/s390-32/start.S b/sysdeps/s390/s390-32/start.S
index 07400f1752..66c00f3b0a 100644
--- a/sysdeps/s390/s390-32/start.S
+++ b/sysdeps/s390/s390-32/start.S
@@ -34,6 +34,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
+#include <sysdep.h>
+
/*
This is the canonical entry point, usually the first thing in the text
segment. Most registers' values are unspecified, except for:
@@ -57,6 +59,10 @@
.globl _start
.type _start,@function
_start:
+ cfi_startproc
+ /* Mark r14 as undefined in order to stop unwinding here! */
+ cfi_undefined (r14)
+
/* Check if the kernel provides highgprs facility if needed by
the binary. */
@@ -188,6 +194,7 @@ _start:
/* crash if __libc_start_main returns */
.word 0
+ cfi_endproc
.Llit:
#ifndef PIC
.L1: .long __libc_csu_init
diff --git a/sysdeps/s390/s390-64/start.S b/sysdeps/s390/s390-64/start.S
index d8e65450d8..d3e62d2ec7 100644
--- a/sysdeps/s390/s390-64/start.S
+++ b/sysdeps/s390/s390-64/start.S
@@ -34,6 +34,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
+#include <sysdep.h>
+
/*
This is the canonical entry point, usually the first thing in the text
segment. Most registers' values are unspecified, except for:
@@ -57,6 +59,9 @@
.globl _start
.type _start,@function
_start:
+ cfi_startproc
+ /* Mark r14 as undefined in order to stop unwinding here! */
+ cfi_undefined (r14)
/* Load argc and argv from stack. */
la %r4,8(%r15) # get argv
lg %r3,0(%r15) # get argc
@@ -91,6 +96,8 @@ _start:
/* Crash if __libc_start_main returns. */
.word 0
+ cfi_endproc
+
/* Define a symbol for the first piece of initialized data. */
.data
.globl __data_start
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)