Author: kib
Date: Fri Dec 30 18:22:34 2011
New Revision: 229010
URL: http://svn.freebsd.org/changeset/base/229010

Log:
  MFC r227023:
  Make sure that stack is 16-byte aligned before calling a function,
  as it is required by amd64 ABI. Add a comment for the places were
  the stack is accidentally properly aligned already.
  
  PR:   amd64/162214

Modified:
  stable/8/lib/libc/amd64/gen/setjmp.S
  stable/8/lib/libc/amd64/gen/sigsetjmp.S
Directory Properties:
  stable/8/lib/libc/   (props changed)

Modified: stable/8/lib/libc/amd64/gen/setjmp.S
==============================================================================
--- stable/8/lib/libc/amd64/gen/setjmp.S        Fri Dec 30 18:20:44 2011        
(r229009)
+++ stable/8/lib/libc/amd64/gen/setjmp.S        Fri Dec 30 18:22:34 2011        
(r229010)
@@ -54,6 +54,7 @@ ENTRY(setjmp)
        movq    $1,%rdi                 /* SIG_BLOCK       */
        movq    $0,%rsi                 /* (sigset_t*)set  */
        leaq    72(%rcx),%rdx           /* 9,10; (sigset_t*)oset */
+       /* stack is 16-byte aligned */
        call    PIC_PLT(CNAME(_sigprocmask))
        popq    %rdi
        movq    %rdi,%rcx
@@ -81,7 +82,9 @@ ENTRY(__longjmp)
        movq    $3,%rdi                 /* SIG_SETMASK     */
        leaq    72(%rdx),%rsi           /* (sigset_t*)set  */
        movq    $0,%rdx                 /* (sigset_t*)oset */
+       subq    $0x8,%rsp               /* make the stack 16-byte aligned */
        call    PIC_PLT(CNAME(_sigprocmask))
+       addq    $0x8,%rsp
        popq    %rsi
        popq    %rdi                    /* jmpbuf */
        movq    %rdi,%rdx

Modified: stable/8/lib/libc/amd64/gen/sigsetjmp.S
==============================================================================
--- stable/8/lib/libc/amd64/gen/sigsetjmp.S     Fri Dec 30 18:20:44 2011        
(r229009)
+++ stable/8/lib/libc/amd64/gen/sigsetjmp.S     Fri Dec 30 18:22:34 2011        
(r229010)
@@ -62,6 +62,7 @@ ENTRY(sigsetjmp)
        movq    $1,%rdi                 /* SIG_BLOCK       */
        movq    $0,%rsi                 /* (sigset_t*)set  */
        leaq    72(%rcx),%rdx           /* 9,10 (sigset_t*)oset */
+       /* stack is 16-byte aligned */
        call    PIC_PLT(CNAME(_sigprocmask))
        popq    %rdi
 2:     movq    %rdi,%rcx
@@ -90,7 +91,9 @@ ENTRY(__siglongjmp)
        movq    $3,%rdi                 /* SIG_SETMASK     */
        leaq    72(%rdx),%rsi           /* (sigset_t*)set  */
        movq    $0,%rdx                 /* (sigset_t*)oset */
+       subq    $0x8,%rsp               /* make the stack 16-byte aligned */
        call    PIC_PLT(CNAME(_sigprocmask))
+       addq    $0x8,%rsp
        popq    %rsi
        popq    %rdi                    /* jmpbuf */
 2:     movq    %rdi,%rdx
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to