mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 20:42:44 +02:00
Implement svcSetThreadPriority. Implement svcGetCurrentProcessorNumber. Implement svcSignalEvent. Implement svcSendSyncRequestWithUserBuffer. Implement svcSendAsyncRequestWithUserBuffer. Implement svcGetThreadId. Implement svcReplyAndReceiveWithUserBuffer. Implement svcCreateEvent. Implement svcReadWriteRegister. Implement svcCreateInterruptEvent. Implement svcMapDeviceAddressSpaceByForce. Implement svcTerminateProcess. Fix svcMapDeviceAddressSpaceAligned. Fix svcUnmapDeviceAddressSpace.
521 lines
6.4 KiB
ArmAsm
521 lines
6.4 KiB
ArmAsm
.macro SVC_BEGIN name
|
|
.section .text.\name, "ax", %progbits
|
|
.global \name
|
|
.type \name, %function
|
|
.align 2
|
|
.cfi_startproc
|
|
\name:
|
|
.endm
|
|
|
|
.macro SVC_END
|
|
.cfi_endproc
|
|
.endm
|
|
|
|
SVC_BEGIN svcSetHeapSize
|
|
str x0, [sp, #-16]!
|
|
svc 0x1
|
|
ldr x2, [sp], #16
|
|
str x1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcSetMemoryPermission
|
|
svc 0x2
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcSetMemoryAttribute
|
|
svc 0x3
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcMapMemory
|
|
svc 0x4
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcUnmapMemory
|
|
svc 0x5
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcQueryMemory
|
|
str x1, [sp, #-16]!
|
|
svc 0x6
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcExitProcess
|
|
svc 0x7
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcCreateThread
|
|
str x0, [sp, #-16]!
|
|
svc 0x8
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcStartThread
|
|
svc 0x9
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcExitThread
|
|
svc 0xA
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcSleepThread
|
|
svc 0xB
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcGetThreadPriority
|
|
str x0, [sp, #-16]!
|
|
svc 0xC
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcSetThreadPriority
|
|
svc 0xD
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcGetCurrentProcessorNumber
|
|
svc 0x10
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcSignalEvent
|
|
svc 0x11
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcClearEvent
|
|
svc 0x12
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcMapSharedMemory
|
|
svc 0x13
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcUnmapSharedMemory
|
|
svc 0x14
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcCreateTransferMemory
|
|
str x0, [sp, #-16]!
|
|
svc 0x15
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcCloseHandle
|
|
svc 0x16
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcResetSignal
|
|
svc 0x17
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcWaitSynchronization
|
|
str x0, [sp, #-16]!
|
|
svc 0x18
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcCancelSynchronization
|
|
svc 0x19
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcArbitrateLock
|
|
svc 0x1A
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcArbitrateUnlock
|
|
svc 0x1B
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcWaitProcessWideKeyAtomic
|
|
svc 0x1C
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcSignalProcessWideKey
|
|
svc 0x1D
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcGetSystemTick
|
|
svc 0x1E
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcConnectToNamedPort
|
|
str x0, [sp, #-16]!
|
|
svc 0x1F
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcSendSyncRequest
|
|
svc 0x21
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcSendSyncRequestWithUserBuffer
|
|
svc 0x22
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcSendAsyncRequestWithUserBuffer
|
|
str x0, [sp, #-16]!
|
|
svc 0x23
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcGetProcessId
|
|
str x0, [sp, #-16]!
|
|
svc 0x24
|
|
ldr x2, [sp], #16
|
|
str x1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcGetThreadId
|
|
str x0, [sp, #-16]!
|
|
svc 0x25
|
|
ldr x2, [sp], #16
|
|
str x1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcBreak
|
|
svc 0x26
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcOutputDebugString
|
|
svc 0x27
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcGetInfo
|
|
str x0, [sp, #-16]!
|
|
svc 0x29
|
|
ldr x2, [sp], #16
|
|
str x1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcSetThreadActivity
|
|
svc 0x32
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcCreateSession
|
|
stp x0, x1, [sp, #-16]!
|
|
svc 0x40
|
|
ldp x3, x4, [sp], #16
|
|
str w1, [x3]
|
|
str w2, [x4]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcAcceptSession
|
|
str x0, [sp, #-16]!
|
|
svc 0x41
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcReplyAndReceive
|
|
str x0, [sp, #-16]!
|
|
svc 0x43
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcReplyAndReceiveWithUserBuffer
|
|
str x0, [sp, #-16]!
|
|
svc 0x44
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcCreateEvent
|
|
stp x0, x1, [sp, #-16]!
|
|
svc 0x45
|
|
ldp x3, x4, [sp], #16
|
|
str w1, [x3]
|
|
str w2, [x4]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcCreateJitMemory
|
|
str x0, [sp, #-16]!
|
|
svc 0x4B
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcMapJitMemory
|
|
svc 0x4C
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcReadWriteRegister
|
|
str x0, [sp, #-16]!
|
|
svc 0x4E
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcCreateSharedMemory
|
|
str x0, [sp, #-16]!
|
|
svc 0x50
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcMapTransferMemory
|
|
svc 0x51
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcUnmapTransferMemory
|
|
svc 0x52
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcCreateInterruptEvent
|
|
str x0, [sp, #-16]!
|
|
svc 0x53
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcQueryPhysicalAddress
|
|
str x0, [sp, #-16]!
|
|
svc 0x54
|
|
ldr x4, [sp], #16
|
|
stp x1, x2, [x4]
|
|
str x3, [x4, #16]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcQueryIoMapping
|
|
str x0, [sp, #-16]!
|
|
svc 0x55
|
|
ldr x2, [sp], #16
|
|
str x1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcCreateDeviceAddressSpace
|
|
str x0, [sp, #-16]!
|
|
svc 0x56
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcAttachDeviceAddressSpace
|
|
svc 0x57
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcDetachDeviceAddressSpace
|
|
svc 0x58
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcMapDeviceAddressSpaceByForce
|
|
svc 0x59
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcMapDeviceAddressSpaceAligned
|
|
svc 0x5A
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcUnmapDeviceAddressSpace
|
|
svc 0x5C
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcDebugActiveProcess
|
|
str x0, [sp, #-16]!
|
|
svc 0x60
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcBreakDebugProcess
|
|
svc 0x61
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcGetDebugEvent
|
|
svc 0x63
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcContinueDebugEvent
|
|
svc 0x64
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcGetProcessList
|
|
str x0, [sp, #-16]!
|
|
svc 0x65
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcGetDebugThreadContext
|
|
svc 0x67
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcQueryDebugProcessMemory
|
|
str x1, [sp, #-16]!
|
|
svc 0x69
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcReadDebugProcessMemory
|
|
svc 0x6A
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcWriteDebugProcessMemory
|
|
svc 0x6B
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcGetSystemInfo
|
|
str x0, [sp, #-16]!
|
|
svc 0x6F
|
|
ldr x2, [sp], #16
|
|
str x1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcCreatePort
|
|
stp x0, x1, [sp, #-16]!
|
|
svc 0x70
|
|
ldp x3, x4, [sp], #16
|
|
str w1, [x3]
|
|
str w2, [x4]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcManageNamedPort
|
|
str x0, [sp, #-16]!
|
|
svc 0x71
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcConnectToPort
|
|
str x0, [sp, #-16]!
|
|
svc 0x72
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcSetProcessMemoryPermission
|
|
svc 0x73
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcMapProcessMemory
|
|
svc 0x74
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcUnmapProcessMemory
|
|
svc 0x75
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcMapProcessCodeMemory
|
|
svc 0x77
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcUnmapProcessCodeMemory
|
|
svc 0x78
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcCreateProcess
|
|
str x0, [sp, #-16]!
|
|
svc 0x79
|
|
ldr x2, [sp], #16
|
|
str w1, [x2]
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcStartProcess
|
|
svc 0x7A
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcTerminateProcess
|
|
svc 0x7B
|
|
ret
|
|
SVC_END
|
|
|
|
SVC_BEGIN svcCallSecureMonitor
|
|
str x0, [sp, #-16]!
|
|
mov x8, x0
|
|
ldp x0, x1, [x8]
|
|
ldp x2, x3, [x8, #0x10]
|
|
ldp x4, x5, [x8, #0x20]
|
|
ldp x6, x7, [x8, #0x30]
|
|
svc 0x7F
|
|
ldr x8, [sp], #16
|
|
stp x0, x1, [x8]
|
|
stp x2, x3, [x8, #0x10]
|
|
stp x4, x5, [x8, #0x20]
|
|
stp x6, x7, [x8, #0x30]
|
|
ret
|
|
SVC_END
|