From 1d56e43428eac64d28425b1213b4bb3182857237 Mon Sep 17 00:00:00 2001 From: Oguz Bastemur Date: Wed, 28 Dec 2016 15:19:41 +0100 Subject: [PATCH] xplat-arm: implement missing arm_Thunks after xplat Debugger support --- lib/Runtime/Language/CMakeLists.txt | 1 + lib/Runtime/Language/arm/arm_Thunks.S | 45 +++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 lib/Runtime/Language/arm/arm_Thunks.S diff --git a/lib/Runtime/Language/CMakeLists.txt b/lib/Runtime/Language/CMakeLists.txt index 21a820812ea..21582773805 100644 --- a/lib/Runtime/Language/CMakeLists.txt +++ b/lib/Runtime/Language/CMakeLists.txt @@ -80,6 +80,7 @@ elseif(CC_TARGETS_X86) elseif(CC_TARGETS_ARM) set (CRL_SOURCE_FILES ${CRL_SOURCE_FILES} arm/StackFrame.cpp + arm/arm_Thunks.S ) endif() diff --git a/lib/Runtime/Language/arm/arm_Thunks.S b/lib/Runtime/Language/arm/arm_Thunks.S new file mode 100644 index 00000000000..ce20a43af5c --- /dev/null +++ b/lib/Runtime/Language/arm/arm_Thunks.S @@ -0,0 +1,45 @@ +// ------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +// ------------------------------------------------------------------------------------------------------- + +#include "unixasmmacros.inc" + +.syntax unified +.thumb + +.global C_FUNC(_ZN2Js13ScriptContext31ProfileModeDeferredParsingThunkEPNS_16RecyclableObjectENS_8CallInfoEz) +.global C_FUNC(_ZN2Js13ScriptContext35ProfileModeDeferredDeserializeThunkEPNS_16RecyclableObjectENS_8CallInfoEz) + +NESTED_ENTRY _ZN2Js13ScriptContext31ProfileModeDeferredParsingThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT, NoHandler + + PROLOG_PUSH {r0-r3} + PROLOG_PUSH {r11} + PROLOG_PUSH {lr} // save volatile registers + + mov r0, sp // Pass the address of the function at the saved r0 in case it need to be boxed + bl C_FUNC(_ZN2Js13ScriptContext24ProfileModeDeferredParseEPPNS_14ScriptFunctionE) + mov r12, r0 // back up entry point + + EPILOG_POP {lr} + EPILOG_POP {r11} + EPILOG_POP {r0-r3} // restore arguments and return address + + bx r12 // jump (tail call) to new entryPoint +NESTED_END _ZN2Js13ScriptContext31ProfileModeDeferredParsingThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT + + +NESTED_ENTRY _ZN2Js13ScriptContext35ProfileModeDeferredDeserializeThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT, NoHandler + PROLOG_PUSH {r0-r3} + PROLOG_PUSH {r11} + PROLOG_PUSH {lr} // save volatile registers + + bl C_FUNC(_ZN2Js13ScriptContext30ProfileModeDeferredDeserializeEPNS_14ScriptFunctionE) + mov r12, r0 // backup entry point + + EPILOG_POP {lr} + EPILOG_POP {r11} + EPILOG_POP {r0-r3} // restore arguments and return address + + bx r12 // jump (tail call) to new entryPoint +NESTED_END _ZN2Js13ScriptContext35ProfileModeDeferredDeserializeThunkEPNS_16RecyclableObjectENS_8CallInfoEz, _TEXT