diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/s390/s390-32')
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c | 24 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S (renamed from sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S) | 50 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S | 10 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S | 24 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym | 26 |
6 files changed, 22 insertions, 113 deletions
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c b/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c index a1b7a6a1ae..e74f335768 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c +++ b/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c @@ -26,8 +26,8 @@ #include <stdint.h> #include <signal.h> #include <sys/syscall.h> -#include <libc-symbols.h> -#include <shlib-compat.h> + +#define __longjmp ____longjmp_chk #define CHECK_SP(env, guard) \ do \ @@ -51,22 +51,4 @@ } \ } while (0) - -#if defined NOT_IN_libc -/* Build a non-versioned object for rtld-*. */ -# define __longjmp ____longjmp_chk -# include "__longjmp-common.c" - -#else /* !NOT_IN_libc */ -# define __longjmp ____v2__longjmp_chk -# include "__longjmp-common.c" - -# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_11, GLIBC_2_19) -# undef __longjmp -# define __V1_JMPBUF -# define __longjmp ____v1__longjmp_chk -# include "__longjmp-common.c" -# undef __longjmp - -# endif -#endif /* !NOT_IN_libc */ +#include "__longjmp.c" diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S b/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S index 4992030239..f35bc5c39a 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/getcontext-common.S +++ b/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S @@ -19,9 +19,10 @@ #include <sysdep.h> #include <features.h> -#include "rtld-global-offsets.h" #include "ucontext_i.h" +#include <shlib-compat.h> + /* __getcontext (const ucontext_t *ucp) Saves the machine context in UCP such that when it is activated, @@ -37,7 +38,7 @@ ENTRY(__getcontext) /* rt_sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask, sigsetsize). */ la %r2,SIG_BLOCK slr %r3,%r3 - la %r4,SC_MASK(%r1) + la %r4,SC_MASK(%r1) lhi %r5,_NSIG8 svc SYS_ify(rt_sigprocmask) @@ -60,42 +61,6 @@ ENTRY(__getcontext) std %f14,SC_FPRS+112(%r1) std %f15,SC_FPRS+120(%r1) - lhi %r2,0 -#ifndef __V1_UCONTEXT - bras %r3,0f -# ifdef IS_IN_rtld - /* Within ld.so we can do slightly better by addressing dl_hwap - relative to GOT start. */ -1: .long _GLOBAL_OFFSET_TABLE_ - 1b - .long C_SYMBOL_NAME(_rtld_global_ro)@GOTOFF -0: l %r4,0(%r3) - la %r4,0(%r3,%r4) - l %r5,4(%r3) - /* _dl_hwcap is 64 bit and we need the lower 32. */ - l %r3,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+4(%r4,%r5) -# elif PIC -1: .long _GLOBAL_OFFSET_TABLE_ - 1b - .long C_SYMBOL_NAME(_rtld_global_ro)@GOT -0: l %r4,0(%r3) - la %r4,0(%r3,%r4) /* GOT pointer -> r4 */ - l %r5,4(%r3) /* GOT offset -> r5 */ - l %r5,0(%r4,%r5) /* GOT slot -> r5 */ - l %r3,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+4(%r5) -# else - .long C_SYMBOL_NAME(_dl_hwcap) -0: l %r3,0(%r3) - l %r3,0(%r3) -# endif - tml %r3,512 /* HWCAP_S390_HIGH_GPRS */ - jz 2f - /* highgprs implies zarch so stmh/oill is ok here. */ - .machine "z900" - .machinemode "zarch_nohighgprs" - stmh %r0,%r15,SC_HIGHGPRS(%r1) - oill %r2,1 /* UCONTEXT_UC_FLAGS_HIGH_GPRS */ -#endif -2: st %r2,SC_FLGS(%r1) - /* Set __getcontext return value to 0. */ slr %r2,%r2 @@ -110,3 +75,12 @@ ENTRY(__getcontext) END(__getcontext) weak_alias (__getcontext, getcontext) + +#if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20) +/* In glibc release 2.19 a new version of getcontext was introduced, + but was reverted before 2.20. Thus both versions are the same function. */ +weak_alias (__getcontext, __v1__getcontext) +weak_alias (__getcontext, __v2__getcontext) +versioned_symbol (libc, __v1__getcontext, getcontext, GLIBC_2_1) +compat_symbol (libc, __v2__getcontext, getcontext, GLIBC_2_19) +#endif diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist index 03f2e83805..0194f0b086 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -1777,7 +1777,6 @@ GLIBC_2.18 GLIBC_2.19 GLIBC_2.19 A __longjmp_chk F - __setjmp F __sigsetjmp F _longjmp F _setjmp F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S b/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S index fbe8b77caf..42839e26f1 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S +++ b/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S @@ -62,16 +62,8 @@ ENTRY(__setcontext) /* Don't touch %a0, used for thread purposes. */ lam %a1,%a15,SC_ACRS+4(%r1) - /* Restore the upper halfs if available. */ - l %r2,SC_FLGS(%r1) - tml %r2,1 /* UCONTEXT_UC_FLAGS_HIGH_GPRS */ - jz 0f - .machine "z900" - .machinemode "zarch_nohighgprs" - lmh %r0,%r15,SC_HIGHGPRS(%r1) - /* Load general purpose registers. */ -0: lm %r0,%r15,SC_GPRS(%r1) + lm %r0,%r15,SC_GPRS(%r1) /* Return. */ br %r14 diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S b/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S index 41ede4b7b2..9206aa334d 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S +++ b/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S @@ -65,31 +65,19 @@ ENTRY(__swapcontext) std %f14,SC_FPRS+112(%r1) std %f15,SC_FPRS+120(%r1) - /* Store access registers. */ - stam %a0,%a15,SC_ACRS(%r1) - /* Set __swapcontext return value to 0. */ slr %r2,%r2 + /* Store access registers. */ + stam %a0,%a15,SC_ACRS(%r1) + /* Store general purpose registers. */ stm %r0,%r15,SC_GPRS(%r1) - /* Copy uc_flags into the new ucontext_t. */ + /* sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL). */ + la %r2,SIG_BLOCK lr %r5,%r0 - l %r2,SC_FLGS(%r5) - st %r2,SC_FLGS(%r1) - - /* Save/restore the upper halfs if necessary. */ - tml %r2,1 /* UCONTEXT_UC_FLAGS_HIGH_GPRS */ - jz 0f - .machine "z900" - .machinemode "zarch_nohighgprs" - stmh %r0,%r15,SC_HIGHGPRS(%r1) - lmh %r0,%r15,SC_HIGHGPRS(%r5) - - /* rt_sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL, sigsetsize). */ -0: la %r2,SIG_BLOCK - la %r3,SC_MASK(%r5) + la %r3,SC_MASK(%r5) slr %r4,%r4 lhi %r5,_NSIG8 svc SYS_ify(rt_sigprocmask) diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym b/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym deleted file mode 100644 index 705c7ab6cf..0000000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.sym +++ /dev/null @@ -1,26 +0,0 @@ -#include <stddef.h> -#include <signal.h> -#include <sys/ucontext.h> - --- - -SIG_BLOCK -SIG_UNBLOCK -SIG_SETMASK - -_NSIG8 (_NSIG / 8) - -#define ucontext(member) offsetof (ucontext_t, member) -#define mcontext(member) ucontext (uc_mcontext.member) - -SC_FLGS ucontext (uc_flags) -SC_LINK ucontext (uc_link) -SC_STCK ucontext (uc_stack.ss_sp) -SC_STSZ ucontext (uc_stack.ss_size) -SC_PSW mcontext (psw) -SC_GPRS mcontext (gregs) -SC_ACRS mcontext (aregs) -SC_FPC mcontext (fpregs.fpc) -SC_FPRS mcontext (fpregs.fprs) -SC_MASK ucontext (uc_sigmask) -SC_HIGHGPRS ucontext (uc_high_gprs) |