From a6d272127bb6a2eb09dc182cc39c49e77310ade4 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 3 Jun 2013 17:32:42 -0400 Subject: 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. --- crt/i386/crti.s | 2 ++ crt/i386/crtn.s | 2 ++ crt/x86_64/crti.s | 2 ++ crt/x86_64/crtn.s | 2 ++ 4 files changed, 8 insertions(+) (limited to 'crt') 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 -- cgit v1.1