ART: Fix CFI annotation in arm64, x86 and x86-64 assembly
To be able to unroll in the exception case, the state needs to be
reset to before the jump.
Bug: 22014525
Change-Id: Ic60400b5bf0efcb713c24df1728623d072f344ab
diff --git a/runtime/arch/arm64/quick_entrypoints_arm64.S b/runtime/arch/arm64/quick_entrypoints_arm64.S
index 78d3116..f3c111f 100644
--- a/runtime/arch/arm64/quick_entrypoints_arm64.S
+++ b/runtime/arch/arm64/quick_entrypoints_arm64.S
@@ -1100,6 +1100,8 @@
.cfi_adjust_cfa_offset -32
ret
+ .cfi_adjust_cfa_offset 32 // Reset unwind info so following code unwinds.
+
.Lthrow_class_cast_exception:
// Restore
ldr xLR, [sp, #24]
diff --git a/runtime/arch/x86/quick_entrypoints_x86.S b/runtime/arch/x86/quick_entrypoints_x86.S
index bee379e..98d0812 100644
--- a/runtime/arch/x86/quick_entrypoints_x86.S
+++ b/runtime/arch/x86/quick_entrypoints_x86.S
@@ -1105,6 +1105,8 @@
addl LITERAL(12), %esp // pop arguments
CFI_ADJUST_CFA_OFFSET(-12)
ret
+
+ CFI_ADJUST_CFA_OFFSET(12) // Reset unwind info so following code unwinds.
1:
POP eax // pop arguments
POP ecx
diff --git a/runtime/arch/x86_64/quick_entrypoints_x86_64.S b/runtime/arch/x86_64/quick_entrypoints_x86_64.S
index 5c741a5..259cf97 100644
--- a/runtime/arch/x86_64/quick_entrypoints_x86_64.S
+++ b/runtime/arch/x86_64/quick_entrypoints_x86_64.S
@@ -1134,6 +1134,8 @@
CFI_ADJUST_CFA_OFFSET(-16)
ret
+
+ CFI_ADJUST_CFA_OFFSET(16 + 4 * 8) // Reset unwind info so following code unwinds.
1:
RESTORE_FP_CALLEE_SAVE_FRAME
POP rsi // Pop arguments