Hi,
The attached patch fixes a bug in ./src/aarch64/sysv.S:ffi_closure_SYSV
where stack unwinding information was not generated correctly. The
change has been reviewed, approved and merged into the stand-alone
libffi release tree**.
OK for the trunk?
Thanks,
Yufeng
** http://github.com/atgreen/libffi
2014-02-28 Yufeng Zhang <[email protected]>
* src/aarch64/sysv.S (ffi_closure_SYSV): Use x29 as the
main CFA reg; update cfi_rel_offset.diff --git a/libffi/src/aarch64/sysv.S b/libffi/src/aarch64/sysv.S
index b8cd421..ffb16f8 100644
--- a/libffi/src/aarch64/sysv.S
+++ b/libffi/src/aarch64/sysv.S
@@ -231,13 +231,13 @@ ffi_closure_SYSV:
cfi_rel_offset (x30, 8)
mov x29, sp
+ cfi_def_cfa_register (x29)
sub sp, sp, #ffi_closure_SYSV_FS
- cfi_adjust_cfa_offset (ffi_closure_SYSV_FS)
stp x21, x22, [x29, #-16]
- cfi_rel_offset (x21, 0)
- cfi_rel_offset (x22, 8)
+ cfi_rel_offset (x21, -16)
+ cfi_rel_offset (x22, -8)
/* Load x21 with &call_context. */
mov x21, sp
@@ -295,7 +295,7 @@ ffi_closure_SYSV:
cfi_restore (x22)
mov sp, x29
- cfi_adjust_cfa_offset (-ffi_closure_SYSV_FS)
+ cfi_def_cfa_register (sp)
ldp x29, x30, [sp], #16
cfi_adjust_cfa_offset (-16)