summaryrefslogtreecommitdiff
path: root/asmrun
diff options
context:
space:
mode:
authorFabrice Le Fessant <Fabrice.Le_fessant@inria.fr>2013-06-11 11:20:03 +0000
committerFabrice Le Fessant <Fabrice.Le_fessant@inria.fr>2013-06-11 11:20:03 +0000
commita04798140bc5ac57597d5d71326117736297092e (patch)
treef422ee81161858512ff20a202fdea84b8c2a8e7c /asmrun
parent7e4877a3a27b65ae7327bed6b4ea8546a0564411 (diff)
downloadocaml-a04798140bc5ac57597d5d71326117736297092e.tar.gz
Fix PR#6031 : problem with -with-frame-pointers in caml_allocN
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@13763 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'asmrun')
-rw-r--r--asmrun/amd64.S37
1 files changed, 25 insertions, 12 deletions
diff --git a/asmrun/amd64.S b/asmrun/amd64.S
index 3a37a8e85a..4a5218f269 100644
--- a/asmrun/amd64.S
+++ b/asmrun/amd64.S
@@ -74,16 +74,22 @@
#endif
#ifdef WITH_FRAME_POINTERS
+
#define ENTER_FUNCTION \
pushq %rbp; CFI_ADJUST(8); \
movq %rsp, %rbp
#define LEAVE_FUNCTION \
popq %rbp; CFI_ADJUST(-8);
+
#else
-#define ENTER_FUNCTION ;
-#define LEAVE_FUNCTION ;
-#endif
+#define ENTER_FUNCTION \
+ subq $8, %rsp; CFI_ADJUST (8);
+#define LEAVE_FUNCTION \
+ addq $8, %rsp; CFI_ADJUST (-8);
+
+#endif
+
#if defined(__PIC__) && !defined(SYS_mingw64)
/* Position-independent operations on global variables. */
@@ -361,9 +367,9 @@ LBL(caml_alloc1):
LBL(100):
RECORD_STACK_FRAME(0)
ENTER_FUNCTION
- subq $8, %rsp; CFI_ADJUST (8);
+/* subq $8, %rsp; CFI_ADJUST (8); */
call LBL(caml_call_gc)
- addq $8, %rsp; CFI_ADJUST (-8);
+/* addq $8, %rsp; CFI_ADJUST (-8); */
LEAVE_FUNCTION
jmp LBL(caml_alloc1)
CFI_ENDPROC
@@ -377,10 +383,10 @@ LBL(caml_alloc2):
ret
LBL(101):
RECORD_STACK_FRAME(0)
- ENTER_FUNCTION
- subq $8, %rsp; CFI_ADJUST (8);
+ ENTER_FUNCTION
+/* subq $8, %rsp; CFI_ADJUST (8); */
call LBL(caml_call_gc)
- addq $8, %rsp; CFI_ADJUST (-8);
+/* addq $8, %rsp; CFI_ADJUST (-8); */
LEAVE_FUNCTION
jmp LBL(caml_alloc2)
CFI_ENDPROC
@@ -395,9 +401,9 @@ LBL(caml_alloc3):
LBL(102):
RECORD_STACK_FRAME(0)
ENTER_FUNCTION
- subq $8, %rsp; CFI_ADJUST (8)
+/* subq $8, %rsp; CFI_ADJUST (8) */
call LBL(caml_call_gc)
- addq $8, %rsp; CFI_ADJUST (-8)
+/* addq $8, %rsp; CFI_ADJUST (-8) */
LEAVE_FUNCTION
jmp LBL(caml_alloc3)
CFI_ENDPROC
@@ -413,10 +419,15 @@ LBL(caml_allocN):
ret
LBL(103):
RECORD_STACK_FRAME(8)
+#ifdef WITH_FRAME_POINTERS
+ /* Do we need 16-byte alignment here ? */
ENTER_FUNCTION
+#endif
call LBL(caml_call_gc)
- popq %rax; CFI_ADJUST(-8) /* recover desired size */
+#ifdef WITH_FRAME_POINTERS
LEAVE_FUNCTION
+#endif
+ popq %rax; CFI_ADJUST(-8) /* recover desired size */
jmp LBL(caml_allocN)
CFI_ENDPROC
@@ -521,10 +532,10 @@ CFI_STARTPROC
popq %r14
ret
LBL(110):
- ENTER_FUNCTION
movq %rax, %r12 /* Save exception bucket */
movq %rax, C_ARG_1 /* arg 1: exception bucket */
#ifdef WITH_FRAME_POINTERS
+ ENTER_FUNCTION
movq 8(%rsp), C_ARG_2 /* arg 2: pc of raise */
leaq 16(%rsp), C_ARG_3 /* arg 3: sp at raise */
#else
@@ -554,7 +565,9 @@ CFI_STARTPROC
LOAD_VAR(caml_young_ptr, %r15) /* Reload alloc ptr */
ret
LBL(111):
+#ifdef WITH_FRAME_POINTERS
ENTER_FUNCTION ;
+#endif
movq C_ARG_1, %r12 /* Save exception bucket */
/* arg 1: exception bucket */
LOAD_VAR(caml_last_return_address,C_ARG_2) /* arg 2: pc of raise */