On Wed, Jul 20, 2011 at 12:03:45AM +0200, Mark Kettenis wrote:
> SSE needs a 16-byte aligned stack.  Our kernel on randomizes the stack
> to an ALIGNBYTES boundary, which for amd64 means 8-byte aligned.
> Therefore we explicitly align the stack in crt0, but "constructors" in
> shared libraries get run directly by ld.so, before the crt0 code gets
> run.  The diff below should fix the issues matthieu is seeing with
> pixman.  It explicitly aligns the stack in the ld.so startup code as
> well.
> 
> ok?
> 
> Index: amd64/ldasm.S
> ===================================================================
> RCS file: /cvs/src/libexec/ld.so/amd64/ldasm.S,v
> retrieving revision 1.7
> diff -u -p -r1.7 ldasm.S
> --- amd64/ldasm.S     11 May 2010 16:27:14 -0000      1.7
> +++ amd64/ldasm.S     19 Jul 2011 21:52:38 -0000
> @@ -39,6 +39,11 @@
>       .type   _dl_start,@function
>  _dl_start:
>       movq    %rsp, %r12              # save stack pointer for _rtld
> +
> +     subq    $8, %rsp                # align stack
> +     andq    $~15, %rsp
> +     addq    $8, %rsp
> +     
>       pushq   %rbx                    # save ps_strings
>       subq    $DL_DATA_SIZE, %rsp     # allocate dl_data
> 

It seems like fixing up the address in the kernel would be a good idea,
However having ld.so validate the alignment is good.
ok drahn@

Dale Rahn                               dr...@dalerahn.com

Reply via email to