diff options
author | Fadi Hanna <fadim@microsoft.com> | 2016-11-15 22:27:43 +0300 |
---|---|---|
committer | Fadi Hanna <fadim@microsoft.com> | 2016-11-15 22:27:43 +0300 |
commit | 4e29f019e860dfcf8ddfee9b47376f76e51af2ae (patch) | |
tree | 72df3fbd434fe317f65f4f33c23b6c048a226d65 /src/Native/Runtime/arm | |
parent | 691756f86e4def5c8ca13acd3e0c17011d436857 (diff) |
Thunk pool implementation for CoreRT. In CoreRT, the thunk mappings are allocated dynamically in memory using VirtualAlloc. The thunk stubs pages are marked with RX permissions and the thunks data pages are marked with RW permissions.
Refactored some code in ThunkPool.cs to remove from it any knowledge about the thunk sections layout. Thunks layout and allocation become a black box to ThunkPool.cs. All the section layout information is moved to the native component, and section navigation is done by calls to some APIs.
The dynamically allocated thunks pages are enabled by a FEATURE_RX_THUNKS, and only in CoreRT's Full build for now. The portable build doesn't yet support thunks.
[tfs-changeset: 1638131]
Diffstat (limited to 'src/Native/Runtime/arm')
-rw-r--r-- | src/Native/Runtime/arm/ThunkPoolThunks.asm | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/Native/Runtime/arm/ThunkPoolThunks.asm b/src/Native/Runtime/arm/ThunkPoolThunks.asm index 2d17e8d43..b3f7c9668 100644 --- a/src/Native/Runtime/arm/ThunkPoolThunks.asm +++ b/src/Native/Runtime/arm/ThunkPoolThunks.asm @@ -243,4 +243,32 @@ RW$name % 4 bx lr LEAF_END RhpGetNumThunkBlocksPerMapping + ;; + ;; IntPtr RhpGetNextThunkStubsBlockAddress(IntPtr currentThunkStubsBlockAddress) + ;; + LEAF_ENTRY RhpGetNextThunkStubsBlockAddress + add r0, PAGE_SIZE * 2 + bx lr + LEAF_END RhpGetNextThunkStubsBlockAddress + + ;; + ;; IntPtr RhpGetThunkDataBlockAddress(IntPtr thunkStubAddress) + ;; + LEAF_ENTRY RhpGetThunkDataBlockAddress + mov r12, PAGE_SIZE - 1 + bic r0, r0, r12 + add r0, PAGE_SIZE + bx lr + LEAF_END RhpGetThunkDataBlockAddress + + ;; + ;; IntPtr RhpGetThunkStubsBlockAddress(IntPtr thunkDataAddress) + ;; + LEAF_ENTRY RhpGetThunkStubsBlockAddress + mov r12, PAGE_SIZE - 1 + bic r0, r0, r12 + sub r0, PAGE_SIZE + bx lr + LEAF_END RhpGetThunkStubsBlockAddress + END |