| #Contains the following patches from upstream: |
| # |
| #commit c3e94a953347ecf361ab400111dbb1a62505c7fe |
| #Author: Andreas Krebbel <krebbel@linux.vnet.ibm.com> |
| #Date: Tue Mar 5 08:15:33 2013 +0100 |
| # |
| # S/390: Fix rt_sigprocmask syscall invocation in get/set/swapcontext. |
| # |
| #****commit e21d7aa71c0700b6611bd55881b862ac73c5cd5b |
| #Author: Andreas Krebbel <krebbel@linux.vnet.ibm.com> |
| #Date: Thu Feb 21 09:47:55 2013 +0100 |
| # |
| # S/390: Fix _dl_runtime_profile for 32 bit. |
| # |
| #****commit f78b5caa6ece23ce86f6cabac8edf3ecd6850473 |
| #Author: Andreas Krebbel <krebbel@linux.vnet.ibm.com> |
| #Date: Mon Feb 18 10:29:40 2013 +0100 |
| # |
| # S/390: Fix _dl_runtime_profile |
| # |
| # |
| #****commit bc101e2652728d8a6e8ece7c637e095618546a95 |
| #Author: Andreas Krebbel <krebbel@linux.vnet.ibm.com> |
| #Date: Wed Jan 23 10:00:24 2013 +0100 |
| # |
| # S/390: Fix setjmp/longjmp FPR save/restore |
| # |
| #****commit 5c95f7b66be2e59cf26f3c29cfab7657880bd76d |
| #Author: Heiko Carstens <heiko.carstens@de.ibm.com> |
| #Date: Tue Apr 23 08:53:44 2013 +0200 |
| # |
| # S/390: Change struct statfs[64] member types to unsigned values |
| |
| diff -Nru glibc-2.17-c758a686/sysdeps/s390/bits/setjmp.h glibc-2.17-c758a686/sysdeps/s390/bits/setjmp.h |
| |
| |
| @@ -34,7 +34,7 @@ typedef struct __s390_jmp_buf |
| long int __gregs[10]; |
| |
| # if __WORDSIZE == 64 |
| - /* We save fpu registers 1, 3, 5 and 7. */ |
| + /* We save fpu registers f8 - f15. */ |
| long __fpregs[8]; |
| # else |
| /* We save fpu registers 4 and 6. */ |
| diff -Nru glibc-2.17-c758a686/sysdeps/s390/s390-32/dl-trampoline.S glibc-2.17-c758a686/sysdeps/s390/s390-32/dl-trampoline.S |
| |
| |
| @@ -95,16 +95,16 @@ _dl_runtime_profile: |
| lr %r1,%r2 # function addr returned in r2 |
| icm %r0,15,20(%r12) # load & test framesize |
| jnm 2f |
| + |
| lm %r2,%r6,32(%r12) |
| ld %f0,56(%r12) |
| ld %f2,64(%r12) |
| - basr %r14,%r1 # call resolved function |
| -1: lr %r15,%r12 # remove stack frame |
| + lr %r15,%r12 # remove stack frame |
| cfi_def_cfa_register (15) |
| l %r14,16(%r15) # restore registers |
| l %r12,12(%r15) |
| - l %r6,8(%r15) |
| - br %r14 |
| + br %r1 # tail-call to the resolved function |
| + |
| cfi_def_cfa_register (12) |
| 2: jz 4f # framesize == 0 ? |
| ahi %r0,7 # align framesize to 8 |
| @@ -131,7 +131,13 @@ _dl_runtime_profile: |
| la %r4,32(%r12) # pointer to struct La_s390_32_regs |
| la %r5,72(%r12) # pointer to struct La_s390_32_retval |
| basr %r14,%r1 # call _dl_call_pltexit |
| - j 1b |
| + |
| + lr %r15,%r12 # remove stack frame |
| + cfi_def_cfa_register (15) |
| + l %r14,16(%r15) # restore registers |
| + l %r12,12(%r15) |
| + br %r14 |
| + |
| 6: .long _dl_profile_fixup - 0b |
| 7: .long _dl_call_pltexit - 5b |
| cfi_endproc |
| diff -Nru glibc-2.17-c758a686/sysdeps/s390/s390-64/dl-trampoline.S glibc-2.17-c758a686/sysdeps/s390/s390-64/dl-trampoline.S |
| |
| |
| @@ -1,4 +1,4 @@ |
| -/* PLT trampolines. s390 version. |
| +/* PLT trampolines. s390x version. |
| Copyright (C) 2005 Free Software Foundation, Inc. |
| This file is part of the GNU C Library. |
| |
| @@ -20,8 +20,8 @@ |
| * with the following linkage: |
| * r2 - r6 : parameter registers |
| * f0, f2, f4, f6 : floating point parameter registers |
| - * 24(r15), 28(r15) : PLT arguments PLT1, PLT2 |
| - * 96(r15) : additional stack parameters |
| + * 48(r15), 56(r15) : PLT arguments PLT1, PLT2 |
| + * 160(r15) : additional stack parameters |
| * The normal clobber rules for function calls apply: |
| * r0 - r5 : call clobbered |
| * r6 - r13 : call saved |
| @@ -39,21 +39,21 @@ |
| cfi_startproc |
| .align 16 |
| _dl_runtime_resolve: |
| - stmg 2,5,64(15) # save registers |
| - stg 14,96(15) |
| + stmg %r2,%r5,64(15) # save call-clobbered argument registers |
| + stg %r14,96(15) |
| cfi_offset (r14, -64) |
| - lgr 0,15 # create stack frame |
| - aghi 15,-160 |
| + lgr %r0,%r15 |
| + aghi %r15,-160 # create stack frame |
| cfi_adjust_cfa_offset (160) |
| - stg 0,0(15) |
| - lmg 2,3,208(15) # load args saved by PLT |
| - brasl 14,_dl_fixup # call fixup |
| - lgr 1,2 # function addr returned in r2 |
| - aghi 15,160 # remove stack frame |
| + stg %r0,0(%r15) # write backchain |
| + lmg %r2,%r3,208(%r15)# load args saved by PLT |
| + brasl %r14,_dl_fixup # call fixup |
| + lgr %r1,%r2 # function addr returned in r2 |
| + aghi %r15,160 # remove stack frame |
| cfi_adjust_cfa_offset (-160) |
| - lg 14,96(15) # restore registers |
| - lmg 2,5,64(15) |
| - br 1 |
| + lg %r14,96(15) # restore registers |
| + lmg %r2,%r5,64(15) |
| + br %r1 |
| cfi_endproc |
| .size _dl_runtime_resolve, .-_dl_runtime_resolve |
| |
| @@ -64,13 +64,12 @@ _dl_runtime_resolve: |
| cfi_startproc |
| .align 16 |
| _dl_runtime_profile: |
| - stmg %r2,%r6,64(%r15) # save registers |
| - std %f0,104(%r15) |
| - std %f2,112(%r15) |
| + stmg %r2,%r6,64(%r15) # save call-clobbered arg regs |
| + std %f0,104(%r15) # + r6 needed as arg for |
| + std %f2,112(%r15) # _dl_profile_fixup |
| std %f4,120(%r15) |
| std %f6,128(%r15) |
| - stg %r6,16(%r15) |
| - stg %r12,24(%r15) |
| + stg %r12,24(%r15) # r12 is used as backup of r15 |
| stg %r14,32(%r15) |
| cfi_offset (r6, -96) |
| cfi_offset (f0, -56) |
| @@ -79,10 +78,10 @@ _dl_runtime_profile: |
| cfi_offset (f6, -32) |
| cfi_offset (r12, -136) |
| cfi_offset (r14, -128) |
| - lgr %r12,%r15 # create stack frame |
| + lgr %r12,%r15 # backup stack pointer |
| cfi_def_cfa_register (12) |
| - aghi %r15,-160 |
| - stg %r12,0(%r15) |
| + aghi %r15,-160 # create stack frame |
| + stg %r12,0(%r15) # save backchain |
| lmg %r2,%r3,48(%r12) # load arguments saved by PLT |
| lgr %r4,%r14 # return address as third parameter |
| la %r5,64(%r12) # pointer to struct La_s390_32_regs |
| @@ -92,18 +91,19 @@ _dl_runtime_profile: |
| lg %r0,40(%r12) # load framesize |
| ltgr %r0,%r0 |
| jnm 1f |
| - lmg %r2,%r6,64(%r12) |
| - ld %f0,104(%r12) |
| - ld %f2,112(%r12) |
| + |
| + lmg %r2,%r6,64(%r12) # framesize < 0 means no pltexit call |
| + ld %f0,104(%r12) # so we can do a tail call without |
| + ld %f2,112(%r12) # copying the arg overflow area |
| ld %f4,120(%r12) |
| ld %f6,128(%r12) |
| - basr %r14,%r1 # call resolved function |
| -0: lgr %r15,%r12 # remove stack frame |
| + |
| + lgr %r15,%r12 # remove stack frame |
| cfi_def_cfa_register (15) |
| lg %r14,32(%r15) # restore registers |
| lg %r12,24(%r15) |
| - lg %r6,16(%r15) |
| - br %r14 |
| + br %r1 # tail-call to resolved function |
| + |
| cfi_def_cfa_register (12) |
| 1: jz 4f # framesize == 0 ? |
| aghi %r0,7 # align framesize to 8 |
| @@ -118,7 +118,7 @@ _dl_runtime_profile: |
| la %r3,8(%r3) |
| brctg %r0,3b |
| 4: lmg %r2,%r6,64(%r12) # load register parameters |
| - ld %f0,104(%r12) |
| + ld %f0,104(%r12) # restore call-clobbered arg regs |
| ld %f2,112(%r12) |
| ld %f4,120(%r12) |
| ld %f6,128(%r12) |
| @@ -129,7 +129,13 @@ _dl_runtime_profile: |
| la %r4,32(%r12) # pointer to struct La_s390_32_regs |
| la %r5,72(%r12) # pointer to struct La_s390_32_retval |
| brasl %r14,_dl_call_pltexit |
| - j 0b |
| + |
| + lgr %r15,%r12 # remove stack frame |
| + cfi_def_cfa_register (15) |
| + lg %r14,32(%r15) # restore registers |
| + lg %r12,24(%r15) |
| + br %r14 |
| + |
| cfi_endproc |
| .size _dl_runtime_profile, .-_dl_runtime_profile |
| #endif |
| diff -Nru glibc-2.17-c758a686/sysdeps/s390/s390-64/__longjmp.c glibc-2.17-c758a686/sysdeps/s390/s390-64/__longjmp.c |
| |
| |
| @@ -42,10 +42,14 @@ __longjmp (__jmp_buf env, int val) |
| register void *r1 __asm ("%r1") = (void *) env; |
| #endif |
| /* Restore registers and jump back. */ |
| - asm volatile ("ld %%f7,104(%1)\n\t" |
| - "ld %%f5,96(%1)\n\t" |
| - "ld %%f3,88(%1)\n\t" |
| - "ld %%f1,80(%1)\n\t" |
| + asm volatile ("ld %%f8,80(%1)\n\t" |
| + "ld %%f9,88(%1)\n\t" |
| + "ld %%f10,96(%1)\n\t" |
| + "ld %%f11,104(%1)\n\t" |
| + "ld %%f12,112(%1)\n\t" |
| + "ld %%f13,120(%1)\n\t" |
| + "ld %%f14,128(%1)\n\t" |
| + "ld %%f15,136(%1)\n\t" |
| #ifdef PTR_DEMANGLE |
| "lmg %%r6,%%r13,0(%1)\n\t" |
| "lmg %%r4,%%r5,64(%1)\n\t" |
| diff -Nru glibc-2.17-c758a686/sysdeps/s390/s390-64/setjmp.S glibc-2.17-c758a686/sysdeps/s390/s390-64/setjmp.S |
| |
| |
| @@ -55,10 +55,14 @@ ENTRY(__sigsetjmp) |
| #else |
| stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */ |
| #endif |
| - std %f1,80(%r2) |
| - std %f3,88(%r2) |
| - std %f5,96(%r2) |
| - std %f7,104(%r2) |
| + std %f8,80(%r2) |
| + std %f9,88(%r2) |
| + std %f10,96(%r2) |
| + std %f11,104(%r2) |
| + std %f12,112(%r2) |
| + std %f13,120(%r2) |
| + std %f14,128(%r2) |
| + std %f15,136(%r2) |
| #if defined NOT_IN_libc && defined IS_IN_rtld |
| /* In ld.so we never save the signal mask. */ |
| lghi %r2,0 |
| diff -Nru glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/bits/statfs.h glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/bits/statfs.h |
| |
| |
| @@ -23,8 +23,8 @@ |
| |
| struct statfs |
| { |
| - int f_type; |
| - int f_bsize; |
| + unsigned int f_type; |
| + unsigned int f_bsize; |
| #ifndef __USE_FILE_OFFSET64 |
| __fsblkcnt_t f_blocks; |
| __fsblkcnt_t f_bfree; |
| @@ -39,27 +39,27 @@ struct statfs |
| __fsfilcnt64_t f_ffree; |
| #endif |
| __fsid_t f_fsid; |
| - int f_namelen; |
| - int f_frsize; |
| - int f_flags; |
| - int f_spare[4]; |
| + unsigned int f_namelen; |
| + unsigned int f_frsize; |
| + unsigned int f_flags; |
| + unsigned int f_spare[4]; |
| }; |
| |
| #ifdef __USE_LARGEFILE64 |
| struct statfs64 |
| { |
| - int f_type; |
| - int f_bsize; |
| + unsigned int f_type; |
| + unsigned int f_bsize; |
| __fsblkcnt64_t f_blocks; |
| __fsblkcnt64_t f_bfree; |
| __fsblkcnt64_t f_bavail; |
| __fsfilcnt64_t f_files; |
| __fsfilcnt64_t f_ffree; |
| __fsid_t f_fsid; |
| - int f_namelen; |
| - int f_frsize; |
| - int f_flags; |
| - int f_spare[4]; |
| + unsigned int f_namelen; |
| + unsigned int f_frsize; |
| + unsigned int f_flags; |
| + unsigned int f_spare[4]; |
| }; |
| #endif |
| |
| diff -Nru glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S |
| |
| |
| @@ -31,41 +31,42 @@ |
| other than the PRESERVED state. */ |
| |
| ENTRY(__getcontext) |
| - lr %r5,%r2 |
| + lr %r1,%r2 |
| |
| /* sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask). */ |
| la %r2,SIG_BLOCK |
| slr %r3,%r3 |
| - la %r4,SC_MASK(%r5) |
| + la %r4,SC_MASK(%r1) |
| + lhi %r5,_NSIG8 |
| svc SYS_ify(rt_sigprocmask) |
| |
| /* Store fpu context. */ |
| - stfpc SC_FPC(%r5) |
| - std %f0,SC_FPRS(%r5) |
| - std %f1,SC_FPRS+8(%r5) |
| - std %f2,SC_FPRS+16(%r5) |
| - std %f3,SC_FPRS+24(%r5) |
| - std %f4,SC_FPRS+32(%r5) |
| - std %f5,SC_FPRS+40(%r5) |
| - std %f6,SC_FPRS+48(%r5) |
| - std %f7,SC_FPRS+56(%r5) |
| - std %f8,SC_FPRS+64(%r5) |
| - std %f9,SC_FPRS+72(%r5) |
| - std %f10,SC_FPRS+80(%r5) |
| - std %f11,SC_FPRS+88(%r5) |
| - std %f12,SC_FPRS+96(%r5) |
| - std %f13,SC_FPRS+104(%r5) |
| - std %f14,SC_FPRS+112(%r5) |
| - std %f15,SC_FPRS+120(%r5) |
| + stfpc SC_FPC(%r1) |
| + std %f0,SC_FPRS(%r1) |
| + std %f1,SC_FPRS+8(%r1) |
| + std %f2,SC_FPRS+16(%r1) |
| + std %f3,SC_FPRS+24(%r1) |
| + std %f4,SC_FPRS+32(%r1) |
| + std %f5,SC_FPRS+40(%r1) |
| + std %f6,SC_FPRS+48(%r1) |
| + std %f7,SC_FPRS+56(%r1) |
| + std %f8,SC_FPRS+64(%r1) |
| + std %f9,SC_FPRS+72(%r1) |
| + std %f10,SC_FPRS+80(%r1) |
| + std %f11,SC_FPRS+88(%r1) |
| + std %f12,SC_FPRS+96(%r1) |
| + std %f13,SC_FPRS+104(%r1) |
| + std %f14,SC_FPRS+112(%r1) |
| + std %f15,SC_FPRS+120(%r1) |
| |
| /* Set __getcontext return value to 0. */ |
| slr %r2,%r2 |
| |
| /* Store access registers. */ |
| - stam %a0,%a15,SC_ACRS(%r5) |
| + stam %a0,%a15,SC_ACRS(%r1) |
| |
| /* Store general purpose registers. */ |
| - stm %r0,%r15,SC_GPRS(%r5) |
| + stm %r0,%r15,SC_GPRS(%r1) |
| |
| /* Return. */ |
| br %r14 |
| diff -Nru glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S |
| |
| |
| @@ -31,38 +31,39 @@ |
| other than the PRESERVED state. */ |
| |
| ENTRY(__setcontext) |
| - lr %r5,%r2 |
| + lr %r1,%r2 |
| |
| /* sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL). */ |
| la %r2,SIG_BLOCK |
| - la %r3,SC_MASK(%r5) |
| + la %r3,SC_MASK(%r1) |
| slr %r4,%r4 |
| + lhi %r5,_NSIG8 |
| svc SYS_ify(rt_sigprocmask) |
| |
| /* Load fpu context. */ |
| - lfpc SC_FPC(%r5) |
| - ld %f0,SC_FPRS(%r5) |
| - ld %f1,SC_FPRS+8(%r5) |
| - ld %f2,SC_FPRS+16(%r5) |
| - ld %f3,SC_FPRS+24(%r5) |
| - ld %f4,SC_FPRS+32(%r5) |
| - ld %f5,SC_FPRS+40(%r5) |
| - ld %f6,SC_FPRS+48(%r5) |
| - ld %f7,SC_FPRS+56(%r5) |
| - ld %f8,SC_FPRS+64(%r5) |
| - ld %f9,SC_FPRS+72(%r5) |
| - ld %f10,SC_FPRS+80(%r5) |
| - ld %f11,SC_FPRS+88(%r5) |
| - ld %f12,SC_FPRS+96(%r5) |
| - ld %f13,SC_FPRS+104(%r5) |
| - ld %f14,SC_FPRS+112(%r5) |
| - ld %f15,SC_FPRS+120(%r5) |
| + lfpc SC_FPC(%r1) |
| + ld %f0,SC_FPRS(%r1) |
| + ld %f1,SC_FPRS+8(%r1) |
| + ld %f2,SC_FPRS+16(%r1) |
| + ld %f3,SC_FPRS+24(%r1) |
| + ld %f4,SC_FPRS+32(%r1) |
| + ld %f5,SC_FPRS+40(%r1) |
| + ld %f6,SC_FPRS+48(%r1) |
| + ld %f7,SC_FPRS+56(%r1) |
| + ld %f8,SC_FPRS+64(%r1) |
| + ld %f9,SC_FPRS+72(%r1) |
| + ld %f10,SC_FPRS+80(%r1) |
| + ld %f11,SC_FPRS+88(%r1) |
| + ld %f12,SC_FPRS+96(%r1) |
| + ld %f13,SC_FPRS+104(%r1) |
| + ld %f14,SC_FPRS+112(%r1) |
| + ld %f15,SC_FPRS+120(%r1) |
| |
| /* Don't touch %a0, used for thread purposes. */ |
| - lam %a1,%a15,SC_ACRS+4(%r5) |
| + lam %a1,%a15,SC_ACRS+4(%r1) |
| |
| /* Load general purpose registers. */ |
| - lm %r0,%r15,SC_GPRS(%r5) |
| + lm %r0,%r15,SC_GPRS(%r1) |
| |
| /* Return. */ |
| br %r14 |
| diff -Nru glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S |
| |
| |
| @@ -34,12 +34,13 @@ |
| |
| ENTRY(__swapcontext) |
| lr %r1,%r2 |
| - lr %r5,%r3 |
| + lr %r0,%r3 |
| |
| /* sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask). */ |
| la %r2,SIG_BLOCK |
| slr %r3,%r3 |
| la %r4,SC_MASK(%r1) |
| + lhi %r5,_NSIG8 |
| svc SYS_ify(rt_sigprocmask) |
| |
| /* Store fpu context. */ |
| @@ -72,11 +73,14 @@ ENTRY(__swapcontext) |
| |
| /* sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL). */ |
| la %r2,SIG_BLOCK |
| + lr %r5,%r0 |
| la %r3,SC_MASK(%r5) |
| slr %r4,%r4 |
| + lhi %r5,_NSIG8 |
| svc SYS_ify(rt_sigprocmask) |
| |
| /* Load fpu context. */ |
| + lr %r5,%r0 |
| lfpc SC_FPC(%r5) |
| ld %f0,SC_FPRS(%r5) |
| ld %f1,SC_FPRS+8(%r5) |
| diff -Nru glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S |
| |
| |
| @@ -31,41 +31,42 @@ |
| other than the PRESERVED state. */ |
| |
| ENTRY(__getcontext) |
| - lgr %r5,%r2 |
| + lgr %r1,%r2 |
| |
| /* sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask). */ |
| la %r2,SIG_BLOCK |
| slgr %r3,%r3 |
| - la %r4,SC_MASK(%r5) |
| + la %r4,SC_MASK(%r1) |
| + lghi %r5,_NSIG8 |
| svc SYS_ify(rt_sigprocmask) |
| |
| /* Store fpu context. */ |
| - stfpc SC_FPC(%r5) |
| - std %f0,SC_FPRS(%r5) |
| - std %f1,SC_FPRS+8(%r5) |
| - std %f2,SC_FPRS+16(%r5) |
| - std %f3,SC_FPRS+24(%r5) |
| - std %f4,SC_FPRS+32(%r5) |
| - std %f5,SC_FPRS+40(%r5) |
| - std %f6,SC_FPRS+48(%r5) |
| - std %f7,SC_FPRS+56(%r5) |
| - std %f8,SC_FPRS+64(%r5) |
| - std %f9,SC_FPRS+72(%r5) |
| - std %f10,SC_FPRS+80(%r5) |
| - std %f11,SC_FPRS+88(%r5) |
| - std %f12,SC_FPRS+96(%r5) |
| - std %f13,SC_FPRS+104(%r5) |
| - std %f14,SC_FPRS+112(%r5) |
| - std %f15,SC_FPRS+120(%r5) |
| + stfpc SC_FPC(%r1) |
| + std %f0,SC_FPRS(%r1) |
| + std %f1,SC_FPRS+8(%r1) |
| + std %f2,SC_FPRS+16(%r1) |
| + std %f3,SC_FPRS+24(%r1) |
| + std %f4,SC_FPRS+32(%r1) |
| + std %f5,SC_FPRS+40(%r1) |
| + std %f6,SC_FPRS+48(%r1) |
| + std %f7,SC_FPRS+56(%r1) |
| + std %f8,SC_FPRS+64(%r1) |
| + std %f9,SC_FPRS+72(%r1) |
| + std %f10,SC_FPRS+80(%r1) |
| + std %f11,SC_FPRS+88(%r1) |
| + std %f12,SC_FPRS+96(%r1) |
| + std %f13,SC_FPRS+104(%r1) |
| + std %f14,SC_FPRS+112(%r1) |
| + std %f15,SC_FPRS+120(%r1) |
| |
| /* Set __getcontext return value to 0. */ |
| slgr %r2,%r2 |
| |
| /* Store access registers. */ |
| - stam %a0,%a15,SC_ACRS(%r5) |
| + stam %a0,%a15,SC_ACRS(%r1) |
| |
| /* Store general purpose registers. */ |
| - stmg %r0,%r15,SC_GPRS(%r5) |
| + stmg %r0,%r15,SC_GPRS(%r1) |
| |
| /* Return. */ |
| br %r14 |
| diff -Nru glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S |
| |
| |
| @@ -31,38 +31,39 @@ |
| other than the PRESERVED state. */ |
| |
| ENTRY(__setcontext) |
| - lgr %r5,%r2 |
| + lgr %r1,%r2 |
| |
| /* sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL). */ |
| la %r2,SIG_BLOCK |
| - la %r3,SC_MASK(%r5) |
| + la %r3,SC_MASK(%r1) |
| slgr %r4,%r4 |
| + lghi %r5,_NSIG8 |
| svc SYS_ify(rt_sigprocmask) |
| |
| /* Load fpu context. */ |
| - lfpc SC_FPC(%r5) |
| - ld %f0,SC_FPRS(%r5) |
| - ld %f1,SC_FPRS+8(%r5) |
| - ld %f2,SC_FPRS+16(%r5) |
| - ld %f3,SC_FPRS+24(%r5) |
| - ld %f4,SC_FPRS+32(%r5) |
| - ld %f5,SC_FPRS+40(%r5) |
| - ld %f6,SC_FPRS+48(%r5) |
| - ld %f7,SC_FPRS+56(%r5) |
| - ld %f8,SC_FPRS+64(%r5) |
| - ld %f9,SC_FPRS+72(%r5) |
| - ld %f10,SC_FPRS+80(%r5) |
| - ld %f11,SC_FPRS+88(%r5) |
| - ld %f12,SC_FPRS+96(%r5) |
| - ld %f13,SC_FPRS+104(%r5) |
| - ld %f14,SC_FPRS+112(%r5) |
| - ld %f15,SC_FPRS+120(%r5) |
| + lfpc SC_FPC(%r1) |
| + ld %f0,SC_FPRS(%r1) |
| + ld %f1,SC_FPRS+8(%r1) |
| + ld %f2,SC_FPRS+16(%r1) |
| + ld %f3,SC_FPRS+24(%r1) |
| + ld %f4,SC_FPRS+32(%r1) |
| + ld %f5,SC_FPRS+40(%r1) |
| + ld %f6,SC_FPRS+48(%r1) |
| + ld %f7,SC_FPRS+56(%r1) |
| + ld %f8,SC_FPRS+64(%r1) |
| + ld %f9,SC_FPRS+72(%r1) |
| + ld %f10,SC_FPRS+80(%r1) |
| + ld %f11,SC_FPRS+88(%r1) |
| + ld %f12,SC_FPRS+96(%r1) |
| + ld %f13,SC_FPRS+104(%r1) |
| + ld %f14,SC_FPRS+112(%r1) |
| + ld %f15,SC_FPRS+120(%r1) |
| |
| /* Don't touch %a0 and %a1, used for thread purposes. */ |
| - lam %a2,%a15,SC_ACRS+8(%r5) |
| + lam %a2,%a15,SC_ACRS+8(%r1) |
| |
| /* Load general purpose registers. */ |
| - lmg %r0,%r15,SC_GPRS(%r5) |
| + lmg %r0,%r15,SC_GPRS(%r1) |
| |
| /* Return. */ |
| br %r14 |
| diff -Nru glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S |
| |
| |
| @@ -34,12 +34,13 @@ |
| |
| ENTRY(__swapcontext) |
| lgr %r1,%r2 |
| - lgr %r5,%r3 |
| + lgr %r0,%r3 |
| |
| /* sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask). */ |
| la %r2,SIG_BLOCK |
| slgr %r3,%r3 |
| la %r4,SC_MASK(%r1) |
| + lghi %r5,_NSIG8 |
| svc SYS_ify(rt_sigprocmask) |
| |
| /* Store fpu context. */ |
| @@ -72,11 +73,14 @@ ENTRY(__swapcontext) |
| |
| /* sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL). */ |
| la %r2,SIG_BLOCK |
| + lgr %r5,%r0 |
| la %r3,SC_MASK(%r5) |
| + lghi %r5,_NSIG8 |
| slgr %r4,%r4 |
| svc SYS_ify(rt_sigprocmask) |
| |
| /* Load fpu context. */ |
| + lgr %r5,%r0 |
| lfpc SC_FPC(%r5) |
| ld %f0,SC_FPRS(%r5) |
| ld %f1,SC_FPRS+8(%r5) |
| diff -Nru glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/ucontext_i.sym glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/ucontext_i.sym |
| |
| |
| @@ -8,6 +8,8 @@ SIG_BLOCK |
| SIG_UNBLOCK |
| SIG_SETMASK |
| |
| +_NSIG8 (_NSIG / 8) |
| + |
| #define ucontext(member) offsetof (ucontext_t, member) |
| #define mcontext(member) ucontext (uc_mcontext.member) |
| |