Save/restore local table state on down calls.
Also add unit test.
Change-Id: Ia1dc54eaac20c4bbb1ca3d9ac2933d6ab0241261
diff --git a/src/calling_convention_arm.cc b/src/calling_convention_arm.cc
index ed876f0..ae44b83 100644
--- a/src/calling_convention_arm.cc
+++ b/src/calling_convention_arm.cc
@@ -150,14 +150,17 @@
return result;
}
+ManagedRegister ArmJniCallingConvention::ReturnScratchRegister() const {
+ return ArmManagedRegister::FromCoreRegister(R2);
+}
+
size_t ArmJniCallingConvention::FrameSize() {
- // Method*, LR and callee save area size
- size_t frame_data_size = (2 + CalleeSaveRegisters().size()) * kPointerSize;
+ // Method*, LR and callee save area size, local reference segment state
+ size_t frame_data_size = (3 + CalleeSaveRegisters().size()) * kPointerSize;
// References plus 2 words for SIRT header
size_t sirt_size = (ReferenceCount() + 2) * kPointerSize;
// Plus return value spill area size
- return RoundUp(frame_data_size + sirt_size + SizeOfReturnValue(),
- kStackAlignment);
+ return RoundUp(frame_data_size + sirt_size + SizeOfReturnValue(), kStackAlignment);
}
size_t ArmJniCallingConvention::OutArgSize() {