diff options
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/s390/s390-32/start.S | 7 | ||||
-rw-r--r-- | sysdeps/s390/s390-64/start.S | 7 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S | 10 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-32/clone.S | 4 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S | 10 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-64/clone.S | 4 |
6 files changed, 26 insertions, 16 deletions
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) |