align stack properly for calling global ctors/dtors on x86[_64]
authorRich Felker <dalias@aerifal.cx>
Mon, 3 Jun 2013 21:32:42 +0000 (17:32 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 3 Jun 2013 21:32:42 +0000 (17:32 -0400)
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
crt/i386/crtn.s
crt/x86_64/crti.s
crt/x86_64/crtn.s

index 2eb23ed5884155d0bbe795a2b60a2c2c2bb39950..d2682a20b0652aa919e7eaf372e7be1fa407a834 100644 (file)
@@ -1,7 +1,9 @@
 .section .init
 .global _init
 _init:
+       sub $12,%esp
 
 .section .fini
 .global _fini
 _fini:
+       sub $12,%esp
index 055451ed44581c34d228947382b1c5bd98c0fdfa..f3b61e01bb876743a7dc2c77e34217f73a87795d 100644 (file)
@@ -1,5 +1,7 @@
 .section .init
+       add $12,%esp
        ret
 
 .section .fini
+       add $12,%esp
        ret
index 2eb23ed5884155d0bbe795a2b60a2c2c2bb39950..4788968b2202379034da35d9a259aa86f2997549 100644 (file)
@@ -1,7 +1,9 @@
 .section .init
 .global _init
 _init:
+       push %rax
 
 .section .fini
 .global _fini
 _fini:
+       push %rax
index 055451ed44581c34d228947382b1c5bd98c0fdfa..29198b77514e5a9db31ea0e665a09ad0624f4ac5 100644 (file)
@@ -1,5 +1,7 @@
 .section .init
+       pop %rax
        ret
 
 .section .fini
+       pop %rax
        ret