From bd01784249bb5b0e4f500b560ea71727f841c9b9 Mon Sep 17 00:00:00 2001 From: Joel Dice Date: Fri, 3 Sep 2010 00:18:19 +0100 Subject: [PATCH] save return address in arm.cpp's MyAssembler::saveFrame This is necessary to allow safe stack unwinding (e.g. for exception handling and garbage collection) from native code. --- src/arm.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/arm.cpp b/src/arm.cpp index 5551042148..7bb209f16e 100644 --- a/src/arm.cpp +++ b/src/arm.cpp @@ -1856,6 +1856,11 @@ class MyAssembler: public Assembler { } virtual void saveFrame(unsigned stackOffset, unsigned) { + Register returnAddress(LinkRegister); + Memory returnAddressDst + (StackRegister, arch_->returnAddressOffset() * BytesPerWord); + moveRM(&c, BytesPerWord, &returnAddress, BytesPerWord, &returnAddressDst); + Register stack(StackRegister); Memory stackDst(ThreadRegister, stackOffset); moveRM(&c, BytesPerWord, &stack, BytesPerWord, &stackDst);