]> git.hungrycats.org Git - linux/commitdiff
ia64: Fix a bug in sigtramp() which corrupted ar.rnat when unwinding
authorDavid Mosberger <davidm@tiger.hpl.hp.com>
Wed, 26 Nov 2003 07:03:24 +0000 (23:03 -0800)
committerDavid Mosberger <davidm@tiger.hpl.hp.com>
Wed, 26 Nov 2003 07:03:24 +0000 (23:03 -0800)
across a signal trampoline (in user space).  Reported by
Laurent Morichetti.

arch/ia64/kernel/gate.S

index 86d91995a4d5481c87ea48f861c1f99a43303201..ed6fea86b83151b08de025f9fefff32f61b26cba 100644 (file)
@@ -195,10 +195,10 @@ GLOBAL_ENTRY(__kernel_sigtramp)
        ld8 r15=[base1]                                 // get address of new RBS base (or NULL)
        cover                           // push args in interrupted frame onto backing store
        ;;
-       cmp.ne p8,p0=r15,r0             // do we need to switch the rbs?
+       cmp.ne p1,p0=r15,r0             // do we need to switch rbs? (note: pr is saved by kernel)
        mov.m r9=ar.bsp                 // fetch ar.bsp
-       .spillsp.p p8, ar.rnat, RNAT_OFF+SIGCONTEXT_OFF
-(p8)   br.cond.spnt setup_rbs          // yup -> (clobbers p8, r14-r16, and r18-r20)
+       .spillsp.p p1, ar.rnat, RNAT_OFF+SIGCONTEXT_OFF
+(p1)   br.cond.spnt setup_rbs          // yup -> (clobbers p8, r14-r16, and r18-r20)
 back_from_setup_rbs:
        alloc r8=ar.pfs,0,0,3,0
        ld8 out0=[base0],16             // load arg0 (signum)
@@ -237,8 +237,8 @@ back_from_setup_rbs:
        ld8 r15=[base0],(CFM_OFF-BSP_OFF)       // fetch sc_ar_bsp and advance to CFM_OFF
        mov r14=ar.bsp
        ;;
-       cmp.ne p8,p0=r14,r15                    // do we need to restore the rbs?
-(p8)   br.cond.spnt restore_rbs                // yup -> (clobbers r14-r18, f6 & f7)
+       cmp.ne p1,p0=r14,r15                    // do we need to restore the rbs?
+(p1)   br.cond.spnt restore_rbs                // yup -> (clobbers r14-r18, f6 & f7)
        ;;
 back_from_restore_rbs:
        adds base0=(FR6_OFF+SIGCONTEXT_OFF),sp