diff --git a/nx/include/switch/kernel/jit.h b/nx/include/switch/kernel/jit.h index ec5575a1..978e3f14 100644 --- a/nx/include/switch/kernel/jit.h +++ b/nx/include/switch/kernel/jit.h @@ -10,7 +10,7 @@ /// JIT implementation type. typedef enum { JitType_CodeMemory, ///< JIT supported using svcSetProcessMemoryPermission - JitType_JitMemory, ///< JIT supported using 4.0.0+ JIT syscalls. + JitType_JitMemory, ///< JIT supported using 4.0.0+ code-memory syscalls (this isn't usable on 5.0.0+ so JitType_CodeMemory is used instead). } JitType; /// JIT buffer object. diff --git a/nx/include/switch/kernel/svc.h b/nx/include/switch/kernel/svc.h index 7f67be0c..0ae591c3 100644 --- a/nx/include/switch/kernel/svc.h +++ b/nx/include/switch/kernel/svc.h @@ -34,8 +34,8 @@ typedef enum { MemType_IpcBuffer1=0x11, ///< IPC buffers with descriptor flags=1. MemType_IpcBuffer3=0x12, ///< IPC buffers with descriptor flags=3. MemType_KernelStack=0x13, ///< Mapped in kernel during \ref svcCreateThread. - MemType_JitReadOnly=0x14, ///< Mapped in kernel during \ref svcMapJitMemory. - MemType_JitWritable=0x15, ///< Mapped in kernel during \ref svcMapJitMemory. + MemType_CodeReadOnly=0x14, ///< Mapped in kernel during \ref svcControlCodeMemory. + MemType_CodeWritable=0x15, ///< Mapped in kernel during \ref svcControlCodeMemory. } MemoryType; /// Memory state bitmasks. @@ -58,7 +58,7 @@ typedef enum { MemState_IsRefCounted=MemState_IsPoolAllocated, ///< Alias for \ref MemState_IsPoolAllocated. MemState_MapProcessAllowed=BIT(23), ///< Map process allowed. MemState_AttrChangeAllowed=BIT(24), ///< Attribute change allowed. - MemState_JitMemAllowed=BIT(25), ///< JIT memory allowed. + MemState_CodeMemAllowed=BIT(25), ///< Code memory allowed. } MemoryState; /// Memory attribute bitmasks. @@ -97,13 +97,13 @@ typedef struct { u64 X[8]; ///< Values of X0 through X7. } PACKED SecmonArgs; -/// JIT mapping operations +/// Code memory mapping operations typedef enum { - JitMapOperation_MapOwner=0, ///< Map owner. - JitMapOperation_MapSlave=1, ///< Map slave. - JitMapOperation_UnmapOwner=2, ///< Unmap owner. - JitMapOperation_UnmapSlave=3, ///< Unmap slave. -} JitMapOperation; + CodeMapOperation_MapOwner=0, ///< Map owner. + CodeMapOperation_MapSlave=1, ///< Map slave. + CodeMapOperation_UnmapOwner=2, ///< Unmap owner. + CodeMapOperation_UnmapSlave=3, ///< Unmap slave. +} CodeMapOperation; /// Limitable Resources. typedef enum { @@ -630,24 +630,24 @@ Result svcSetUnsafeLimit(u64 size); ///@} -///@name Just-in-time (JIT) compilation support +///@name Code memory / Just-in-time (JIT) compilation support ///@{ /** - * @brief Creates JIT memory in the caller's address space [4.0.0+]. + * @brief Creates code memory in the caller's address space [4.0.0+]. * @return Result code. * @note Syscall number 0x4B. * @warning This is a privileged syscall. Use \ref envIsSyscallHinted to check if it is available. */ -Result svcCreateJitMemory(Handle* jit_handle, void* src_addr, u64 size); +Result svcCreateCodeMemory(Handle* code_handle, void* src_addr, u64 size); /** - * @brief Maps JIT memory in the caller's address space [4.0.0+]. + * @brief Maps code memory in the caller's address space [4.0.0+]. * @return Result code. * @note Syscall number 0x4C. * @warning This is a privileged syscall. Use \ref envIsSyscallHinted to check if it is available. */ -Result svcMapJitMemory(Handle jit_handle, JitMapOperation op, void* dst_addr, u64 size, u64 perm); +Result svcControlCodeMemory(Handle code_handle, CodeMapOperation op, void* dst_addr, u64 size, u64 perm); ///@} diff --git a/nx/source/kernel/jit.c b/nx/source/kernel/jit.c index fc73ada9..f9f2cc59 100644 --- a/nx/source/kernel/jit.c +++ b/nx/source/kernel/jit.c @@ -52,16 +52,16 @@ Result jitCreate(Jit* j, size_t size) case JitType_JitMemory: j->rw_addr = virtmemReserve(j->size); - rc = svcCreateJitMemory(&j->handle, j->src_addr, j->size); + rc = svcCreateCodeMemory(&j->handle, j->src_addr, j->size); if (R_SUCCEEDED(rc)) { - rc = svcMapJitMemory(j->handle, JitMapOperation_MapOwner, j->rw_addr, j->size, Perm_Rw); + rc = svcControlCodeMemory(j->handle, CodeMapOperation_MapOwner, j->rw_addr, j->size, Perm_Rw); if (R_SUCCEEDED(rc)) { - rc = svcMapJitMemory(j->handle, JitMapOperation_MapSlave, j->rx_addr, j->size, Perm_Rx); + rc = svcControlCodeMemory(j->handle, CodeMapOperation_MapSlave, j->rx_addr, j->size, Perm_Rx); if (R_FAILED(rc)) { - svcMapJitMemory(j->handle, JitMapOperation_UnmapOwner, j->rw_addr, j->size, 0); + svcControlCodeMemory(j->handle, CodeMapOperation_UnmapOwner, j->rw_addr, j->size, 0); } } @@ -146,12 +146,12 @@ Result jitClose(Jit* j) break; case JitType_JitMemory: - rc = svcMapJitMemory(j->handle, JitMapOperation_UnmapOwner, j->rw_addr, j->size, 0); + rc = svcControlCodeMemory(j->handle, CodeMapOperation_UnmapOwner, j->rw_addr, j->size, 0); if (R_SUCCEEDED(rc)) { virtmemFree(j->rw_addr, j->size); - rc = svcMapJitMemory(j->handle, JitMapOperation_UnmapSlave, j->rx_addr, j->size, 0); + rc = svcControlCodeMemory(j->handle, CodeMapOperation_UnmapSlave, j->rx_addr, j->size, 0); if (R_SUCCEEDED(rc)) { virtmemFree(j->rw_addr, j->size); diff --git a/nx/source/kernel/svc.s b/nx/source/kernel/svc.s index cc89eeb7..f8789bc6 100644 --- a/nx/source/kernel/svc.s +++ b/nx/source/kernel/svc.s @@ -317,7 +317,7 @@ SVC_BEGIN svcSetUnsafeLimit ret SVC_END -SVC_BEGIN svcCreateJitMemory +SVC_BEGIN svcCreateCodeMemory str x0, [sp, #-16]! svc 0x4B ldr x2, [sp], #16 @@ -325,7 +325,7 @@ SVC_BEGIN svcCreateJitMemory ret SVC_END -SVC_BEGIN svcMapJitMemory +SVC_BEGIN svcControlCodeMemory svc 0x4C ret SVC_END