File s390-unwind-info.patch of Package glibc.26367

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.

Index: glibc-2.22/sysdeps/s390/s390-32/start.S
===================================================================
--- glibc-2.22.orig/sysdeps/s390/s390-32/start.S
+++ glibc-2.22/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
Index: glibc-2.22/sysdeps/s390/s390-64/start.S
===================================================================
--- glibc-2.22.orig/sysdeps/s390/s390-64/start.S
+++ glibc-2.22/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
Index: glibc-2.22/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
===================================================================
--- glibc-2.22.orig/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
+++ glibc-2.22/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
Index: glibc-2.22/sysdeps/unix/sysv/linux/s390/s390-32/clone.S
===================================================================
--- glibc-2.22.orig/sysdeps/unix/sysv/linux/s390/s390-32/clone.S
+++ glibc-2.22/sysdeps/unix/sysv/linux/s390/s390-32/clone.S
@@ -54,6 +54,9 @@ error:
 PSEUDO_END (__clone)
 
 thread_start:
+	cfi_startproc
+	/* Mark r14 as undefined in order to stop unwinding here!  */
+	cfi_undefined (r14)
 	tmh	%r3,1		/* CLONE_THREAD == 0x00010000 */
 	jne	1f
 	lhi	%r2,-1
@@ -70,4 +73,5 @@ thread_start:
 	xc	0(4,%r15),0(%r15)
 	basr    %r14,%r1        /* jump to fn */
 	DO_CALL (exit, 1)
+	cfi_endproc
 weak_alias (__clone, clone)
Index: glibc-2.22/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S
===================================================================
--- glibc-2.22.orig/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S
+++ glibc-2.22/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
Index: glibc-2.22/sysdeps/unix/sysv/linux/s390/s390-64/clone.S
===================================================================
--- glibc-2.22.orig/sysdeps/unix/sysv/linux/s390/s390-64/clone.S
+++ glibc-2.22/sysdeps/unix/sysv/linux/s390/s390-64/clone.S
@@ -55,6 +55,9 @@ error:
 PSEUDO_END (__clone)
 
 thread_start:
+	cfi_startproc
+	/* Mark r14 as undefined in order to stop unwinding here!  */
+	cfi_undefined (r14)
 	tmh	%r3,1		/* CLONE_THREAD == 0x00010000 */
 	jne	1f
 	lhi	%r2,-1
@@ -73,4 +76,5 @@ thread_start:
 	xc	0(8,%r15),0(%r15)
 	basr	%r14,%r1	/* jump to fn */
 	DO_CALL	(exit, 1)
+	cfi_endproc
 weak_alias (__clone, clone)
openSUSE Build Service is sponsored by