diff options
| author | Rich Felker <dalias@aerifal.cx> | 2013-06-03 17:32:42 -0400 | 
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2013-06-03 17:32:42 -0400 | 
| commit | a6d272127bb6a2eb09dc182cc39c49e77310ade4 (patch) | |
| tree | 519a62cc82bbd8b0edb0e886af2623be1653aa41 /crt | |
| parent | 44b4d09fc0626541ca12cf96f65adc21ab1fc413 (diff) | |
| download | musl-a6d272127bb6a2eb09dc182cc39c49e77310ade4.tar.gz | |
align stack properly for calling global ctors/dtors on x86[_64]
failure to do so was causing crashes on x86_64 when ctors used SSE,
which was first observed when ctors called variadic functions due to
the SSE prologue code inserted into every variadic function.
Diffstat (limited to 'crt')
| -rw-r--r-- | crt/i386/crti.s | 2 | ||||
| -rw-r--r-- | crt/i386/crtn.s | 2 | ||||
| -rw-r--r-- | crt/x86_64/crti.s | 2 | ||||
| -rw-r--r-- | crt/x86_64/crtn.s | 2 | 
4 files changed, 8 insertions, 0 deletions
| diff --git a/crt/i386/crti.s b/crt/i386/crti.s index 2eb23ed5..d2682a20 100644 --- a/crt/i386/crti.s +++ b/crt/i386/crti.s @@ -1,7 +1,9 @@  .section .init  .global _init  _init: +	sub $12,%esp  .section .fini  .global _fini  _fini: +	sub $12,%esp diff --git a/crt/i386/crtn.s b/crt/i386/crtn.s index 055451ed..f3b61e01 100644 --- a/crt/i386/crtn.s +++ b/crt/i386/crtn.s @@ -1,5 +1,7 @@  .section .init +	add $12,%esp  	ret  .section .fini +	add $12,%esp  	ret diff --git a/crt/x86_64/crti.s b/crt/x86_64/crti.s index 2eb23ed5..4788968b 100644 --- a/crt/x86_64/crti.s +++ b/crt/x86_64/crti.s @@ -1,7 +1,9 @@  .section .init  .global _init  _init: +	push %rax  .section .fini  .global _fini  _fini: +	push %rax diff --git a/crt/x86_64/crtn.s b/crt/x86_64/crtn.s index 055451ed..29198b77 100644 --- a/crt/x86_64/crtn.s +++ b/crt/x86_64/crtn.s @@ -1,5 +1,7 @@  .section .init +	pop %rax  	ret  .section .fini +	pop %rax  	ret | 
