ソースを参照

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 11 年 前
コミット
a6d272127b
4 ファイル変更8 行追加0 行削除
  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