Author: jhibbits
Date: Wed Feb  3 01:50:27 2016
New Revision: 295186
URL: https://svnweb.freebsd.org/changeset/base/295186

Log:
  Align signal stack pointer to 16 bytes.
  
  The stack must be aligned to 16 bytes at all times.  Clang 3.8 is especially
  adamant about this, and causes strange behavior and segmentation faults if it 
is
  not the case.
  
  PR:           kern/206810

Modified:
  head/sys/powerpc/powerpc/exec_machdep.c
  head/sys/powerpc/powerpc/sigcode32.S

Modified: head/sys/powerpc/powerpc/exec_machdep.c
==============================================================================
--- head/sys/powerpc/powerpc/exec_machdep.c     Wed Feb  3 01:49:02 2016        
(r295185)
+++ head/sys/powerpc/powerpc/exec_machdep.c     Wed Feb  3 01:50:27 2016        
(r295186)
@@ -219,10 +219,10 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, 
         */
        if ((td->td_pflags & TDP_ALTSTACK) != 0 && !oonstack &&
            SIGISMEMBER(psp->ps_sigonstack, sig)) {
-               usfp = (void *)((uintptr_t)td->td_sigstk.ss_sp +
-                  td->td_sigstk.ss_size - rndfsize);
+               usfp = (void *)(((uintptr_t)td->td_sigstk.ss_sp +
+                  td->td_sigstk.ss_size - rndfsize) & ~0xFul);
        } else {
-               usfp = (void *)(tf->fixreg[1] - rndfsize);
+               usfp = (void *)((tf->fixreg[1] - rndfsize) & ~0xFul);
        }
 
        /*

Modified: head/sys/powerpc/powerpc/sigcode32.S
==============================================================================
--- head/sys/powerpc/powerpc/sigcode32.S        Wed Feb  3 01:49:02 2016        
(r295185)
+++ head/sys/powerpc/powerpc/sigcode32.S        Wed Feb  3 01:50:27 2016        
(r295186)
@@ -45,9 +45,9 @@
  */
        .globl  CNAME(sigcode32),CNAME(szsigcode32)
 CNAME(sigcode32):
-       addi    1,1,-20                 /* reserved space for callee */
+       addi    1,1,-32                 /* reserved space for callee */
        blrl
-       addi    3,1,20+SF_UC            /* restore sp, and get &frame->sf_uc */
+       addi    3,1,32+SF_UC            /* restore sp, and get &frame->sf_uc */
        li      0,SYS_sigreturn
        sc                              /* sigreturn(scp) */
        li      0,SYS_exit
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to