Bug#186654: FW: IMPORTANT bug fix for setjmp()/getcontext()
Package: libc6.1 Version: 2.3.1-16 - Forwarded message from David Mosberger [EMAIL PROTECTED] - Content-Description: forwarded message Mailing-List: contact [EMAIL PROTECTED]; run by ezmlm List-Unsubscribe: mailto:[EMAIL PROTECTED] List-Subscribe: mailto:[EMAIL PROTECTED] List-Archive: http://sources.redhat.com/ml/libc-hacker/ List-Post: mailto:[EMAIL PROTECTED] List-Help: mailto:[EMAIL PROTECTED], http://sources.redhat.com/ml/#faqs X-MailScanner: Found to be clean X-MailScanner-SpamCheck: not spam, SpamAssassin (score=-6.3, required 7, PATCH_UNIFIED_DIFF) From: David Mosberger [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: ia64: unat restoration fixes for setjmp() getcontext() Reply-To: [EMAIL PROTECTED] The ia64 versions of __sigsetjmp() and getcontext() failed to restore ar.unat before returning. Patch below should fix that. --david 2003-03-27 David Mosberger [EMAIL PROTECTED] * sysdeps/unix/sysv/linux/ia64/getcontext.S: Restore caller's ar.unat before returning. Add missing .mem.offset directives to ensure file gets assembled without warnings. * sysdeps/unix/sysv/linux/ia64/setjmp.S: Ditto. Index: sysdeps/unix/sysv/linux/ia64/setjmp.S === RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/ia64/setjmp.S,v retrieving revision 1.7 diff -u -r1.7 setjmp.S --- sysdeps/unix/sysv/linux/ia64/setjmp.S 31 Dec 2002 20:37:30 - 1.7 +++ sysdeps/unix/sysv/linux/ia64/setjmp.S 27 Mar 2003 18:05:14 - @@ -87,21 +87,22 @@ ENTRY(__sigsetjmp) .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2) alloc loc1=ar.pfs,2,2,2,0 + .save ar.unat, r16 mov r16=ar.unat ;; mov r17=ar.fpsr mov r2=in0 add r3=8,in0 ;; - st8.spill.nta [r2]=sp,16// r12 (sp) - st8.spill.nta [r3]=gp,16// r1 (gp) +.mem.offset 8,0; st8.spill.nta [r2]=sp,16// r12 (sp) +.mem.offset 0,0; st8.spill.nta [r3]=gp,16// r1 (gp) ;; st8.nta [r2]=r16,16 // save caller's unat st8.nta [r3]=r17,16 // save fpsr add r8=0xa0,in0 ;; - st8.spill.nta [r2]=r4,16// r4 - st8.spill.nta [r3]=r5,16// r5 +.mem.offset 8,0; st8.spill.nta [r2]=r4,16// r4 +.mem.offset 0,0; st8.spill.nta [r3]=r5,16// r5 add r9=0xb0,in0 ;; stf.spill.nta [r8]=f2,32 @@ -143,8 +144,8 @@ stf.spill.nta [r8]=f30 stf.spill.nta [r9]=f31 - st8.spill.nta [r2]=r6,16// r6 - st8.spill.nta [r3]=r7,16// r7 +.mem.offset 8,0; st8.spill.nta [r2]=r6,16// r6 +.mem.offset 0,0; st8.spill.nta [r3]=r7,16// r7 ;; mov r23=ar.bsp mov r25=ar.unat @@ -170,9 +171,10 @@ st8.nta [r3]=in0// __jmp_buf br.call.dpnt.few rp=__sigjmp_save .ret0: // force a new bundle ::q - mov r8=0 + mov.m ar.unat=r16 // restore caller's unat mov rp=loc0 mov ar.pfs=loc1 + mov r8=0 ret END(__sigsetjmp) Index: sysdeps/unix/sysv/linux/ia64/getcontext.S === RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/ia64/getcontext.S,v retrieving revision 1.6 diff -u -r1.6 getcontext.S --- sysdeps/unix/sysv/linux/ia64/getcontext.S 9 Oct 2002 09:57:46 - 1.6 +++ sysdeps/unix/sysv/linux/ia64/getcontext.S 27 Mar 2003 19:33:04 - @@ -34,6 +34,7 @@ other than the PRESERVED state. */ ENTRY(__getcontext) + .prologue alloc r16 = ar.pfs, 1, 0, 3, 0 // sigprocmask (SIG_BLOCK, NULL, sc-sc_mask): @@ -53,7 +54,9 @@ add r2 = SC_GR+1*8, r32 ;; mov.m rBSP = ar.bsp + .save ar.unat, rUNAT mov.m rUNAT = ar.unat + .body add r3 = SC_GR+4*8, r32 ;; @@ -65,8 +68,8 @@ .mem.offset 8,0; st8.spill [r3] = r6, 48 and rTMP = ~0x3, rRSC ;; - st8.spill [r2] = r7, (SC_FR+2*16-(SC_GR+7*8)) - st8.spill [r3] = sp, (SC_FR+3*16-(SC_GR+12*8)) +.mem.offset 0,0; st8.spill [r2] = r7, (SC_FR+2*16-(SC_GR+7*8)) +.mem.offset 8,0; st8.spill [r3] = sp, (SC_FR+3*16-(SC_GR+12*8)) ;; mov.m ar.rsc = rTMP // put RSE into enforced lazy mode mov.m rNAT = ar.unat @@ -119,8 +122,8 @@ stf.spill [r3] = f31, 32 mov rB1 = b1 ;; + mov ar.unat = rUNAT // we're done spilling integer regs; restore caller's UNaT add r2 = SC_NAT, r32 - nop 0 add r3 = SC_BSP, r32 ;; st8 [r2] = rNAT, (SC_RNAT-SC_NAT) - End forwarded message - -- --- dann frazier Hewlett-Packard Linux Systems Division [EMAIL PROTECTED] (970) 898-0800 -- To UNSUBSCRIBE, email to [EMAIL
Bug#186654: FW: IMPORTANT bug fix for setjmp()/getcontext()
Package: libc6.1 Version: 2.3.1-16 - Forwarded message from David Mosberger [EMAIL PROTECTED] - Content-Description: forwarded message Mailing-List: contact [EMAIL PROTECTED]; run by ezmlm List-Unsubscribe: mailto:[EMAIL PROTECTED] List-Subscribe: mailto:[EMAIL PROTECTED] List-Archive: http://sources.redhat.com/ml/libc-hacker/ List-Post: mailto:[EMAIL PROTECTED] List-Help: mailto:[EMAIL PROTECTED], http://sources.redhat.com/ml/#faqs X-MailScanner: Found to be clean X-MailScanner-SpamCheck: not spam, SpamAssassin (score=-6.3, required 7, PATCH_UNIFIED_DIFF) From: David Mosberger [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: ia64: unat restoration fixes for setjmp() getcontext() Reply-To: [EMAIL PROTECTED] The ia64 versions of __sigsetjmp() and getcontext() failed to restore ar.unat before returning. Patch below should fix that. --david 2003-03-27 David Mosberger [EMAIL PROTECTED] * sysdeps/unix/sysv/linux/ia64/getcontext.S: Restore caller's ar.unat before returning. Add missing .mem.offset directives to ensure file gets assembled without warnings. * sysdeps/unix/sysv/linux/ia64/setjmp.S: Ditto. Index: sysdeps/unix/sysv/linux/ia64/setjmp.S === RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/ia64/setjmp.S,v retrieving revision 1.7 diff -u -r1.7 setjmp.S --- sysdeps/unix/sysv/linux/ia64/setjmp.S 31 Dec 2002 20:37:30 - 1.7 +++ sysdeps/unix/sysv/linux/ia64/setjmp.S 27 Mar 2003 18:05:14 - @@ -87,21 +87,22 @@ ENTRY(__sigsetjmp) .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2) alloc loc1=ar.pfs,2,2,2,0 + .save ar.unat, r16 mov r16=ar.unat ;; mov r17=ar.fpsr mov r2=in0 add r3=8,in0 ;; - st8.spill.nta [r2]=sp,16// r12 (sp) - st8.spill.nta [r3]=gp,16// r1 (gp) +.mem.offset 8,0; st8.spill.nta [r2]=sp,16// r12 (sp) +.mem.offset 0,0; st8.spill.nta [r3]=gp,16// r1 (gp) ;; st8.nta [r2]=r16,16 // save caller's unat st8.nta [r3]=r17,16 // save fpsr add r8=0xa0,in0 ;; - st8.spill.nta [r2]=r4,16// r4 - st8.spill.nta [r3]=r5,16// r5 +.mem.offset 8,0; st8.spill.nta [r2]=r4,16// r4 +.mem.offset 0,0; st8.spill.nta [r3]=r5,16// r5 add r9=0xb0,in0 ;; stf.spill.nta [r8]=f2,32 @@ -143,8 +144,8 @@ stf.spill.nta [r8]=f30 stf.spill.nta [r9]=f31 - st8.spill.nta [r2]=r6,16// r6 - st8.spill.nta [r3]=r7,16// r7 +.mem.offset 8,0; st8.spill.nta [r2]=r6,16// r6 +.mem.offset 0,0; st8.spill.nta [r3]=r7,16// r7 ;; mov r23=ar.bsp mov r25=ar.unat @@ -170,9 +171,10 @@ st8.nta [r3]=in0// __jmp_buf br.call.dpnt.few rp=__sigjmp_save .ret0: // force a new bundle ::q - mov r8=0 + mov.m ar.unat=r16 // restore caller's unat mov rp=loc0 mov ar.pfs=loc1 + mov r8=0 ret END(__sigsetjmp) Index: sysdeps/unix/sysv/linux/ia64/getcontext.S === RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/ia64/getcontext.S,v retrieving revision 1.6 diff -u -r1.6 getcontext.S --- sysdeps/unix/sysv/linux/ia64/getcontext.S 9 Oct 2002 09:57:46 - 1.6 +++ sysdeps/unix/sysv/linux/ia64/getcontext.S 27 Mar 2003 19:33:04 - @@ -34,6 +34,7 @@ other than the PRESERVED state. */ ENTRY(__getcontext) + .prologue alloc r16 = ar.pfs, 1, 0, 3, 0 // sigprocmask (SIG_BLOCK, NULL, sc-sc_mask): @@ -53,7 +54,9 @@ add r2 = SC_GR+1*8, r32 ;; mov.m rBSP = ar.bsp + .save ar.unat, rUNAT mov.m rUNAT = ar.unat + .body add r3 = SC_GR+4*8, r32 ;; @@ -65,8 +68,8 @@ .mem.offset 8,0; st8.spill [r3] = r6, 48 and rTMP = ~0x3, rRSC ;; - st8.spill [r2] = r7, (SC_FR+2*16-(SC_GR+7*8)) - st8.spill [r3] = sp, (SC_FR+3*16-(SC_GR+12*8)) +.mem.offset 0,0; st8.spill [r2] = r7, (SC_FR+2*16-(SC_GR+7*8)) +.mem.offset 8,0; st8.spill [r3] = sp, (SC_FR+3*16-(SC_GR+12*8)) ;; mov.m ar.rsc = rTMP // put RSE into enforced lazy mode mov.m rNAT = ar.unat @@ -119,8 +122,8 @@ stf.spill [r3] = f31, 32 mov rB1 = b1 ;; + mov ar.unat = rUNAT // we're done spilling integer regs; restore caller's UNaT add r2 = SC_NAT, r32 - nop 0 add r3 = SC_BSP, r32 ;; st8 [r2] = rNAT, (SC_RNAT-SC_NAT) - End forwarded message - -- --- dann frazier Hewlett-Packard Linux Systems Division [EMAIL PROTECTED] (970) 898-0800