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.zip musl-a6d272127bb6a2eb09dc182cc39c49e77310ade4.tar.gz musl-a6d272127bb6a2eb09dc182cc39c49e77310ade4.tar.bz2 |
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 2eb23ed..d2682a2 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 055451e..f3b61e0 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 2eb23ed..4788968 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 055451e..29198b7 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 |