Procházet zdrojové kódy

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 před 11 roky
rodič
revize
a6d272127b
4 změnil soubory, kde provedl 8 přidání a 0 odebrání
  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