Parcourir la source

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.
Rich Felker il y a 12 ans
Parent
commit
a6d272127b
4 fichiers modifiés avec 8 ajouts et 0 suppressions
  1. 2 0
      crt/i386/crti.s
  2. 2 0
      crt/i386/crtn.s
  3. 2 0
      crt/x86_64/crti.s
  4. 2 0
      crt/x86_64/crtn.s

+ 2 - 0
crt/i386/crti.s

@@ -1,7 +1,9 @@
 .section .init
 .global _init
 _init:
+	sub $12,%esp
 
 .section .fini
 .global _fini
 _fini:
+	sub $12,%esp

+ 2 - 0
crt/i386/crtn.s

@@ -1,5 +1,7 @@
 .section .init
+	add $12,%esp
 	ret
 
 .section .fini
+	add $12,%esp
 	ret

+ 2 - 0
crt/x86_64/crti.s

@@ -1,7 +1,9 @@
 .section .init
 .global _init
 _init:
+	push %rax
 
 .section .fini
 .global _fini
 _fini:
+	push %rax

+ 2 - 0
crt/x86_64/crtn.s

@@ -1,5 +1,7 @@
 .section .init
+	pop %rax
 	ret
 
 .section .fini
+	pop %rax
 	ret