libctru/libctru/source/svc.s

689 lines
8.7 KiB
ArmAsm
Raw Normal View History

2014-01-18 23:18:03 +01:00
.arm
.align 4
2015-10-07 23:32:20 +02:00
.macro SVC_BEGIN name
.section .text.\name, "ax", %progbits
.global \name
.type \name, %function
.align 2
.cfi_startproc
2015-10-07 23:32:20 +02:00
\name:
.endm
.macro SVC_END
.cfi_endproc
.endm
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcControlMemory
push {r0, r4}
ldr r0, [sp, #0x8]
ldr r4, [sp, #0x8+0x4]
svc 0x01
ldr r2, [sp], #4
str r1, [r2]
ldr r4, [sp], #4
bx lr
SVC_END
2014-01-18 23:18:03 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcQueryMemory
push {r0, r1, r4-r6}
svc 0x02
ldr r6, [sp]
str r1, [r6]
str r2, [r6, #4]
str r3, [r6, #8]
str r4, [r6, #0xc]
ldr r6, [sp, #4]
str r5, [r6]
add sp, sp, #8
pop {r4-r6}
bx lr
SVC_END
2014-10-27 00:07:07 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcExitProcess
2014-01-19 13:33:28 +01:00
svc 0x03
bx lr
SVC_END
2014-01-19 13:33:28 +01:00
2017-03-12 23:21:29 +01:00
SVC_BEGIN svcGetProcessAffinityMask
svc 0x04
bx lr
SVC_END
2017-03-12 23:21:29 +01:00
SVC_BEGIN svcSetProcessAffinityMask
svc 0x05
bx lr
SVC_END
2017-03-12 23:21:29 +01:00
SVC_BEGIN svcGetProcessIdealProcessor
str r0, [sp, #-0x4]!
svc 0x06
ldr r3, [sp], #4
str r1, [r3]
bx lr
SVC_END
2017-03-12 23:21:29 +01:00
SVC_BEGIN svcSetProcessIdealProcessor
svc 0x07
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcCreateThread
push {r0, r4}
ldr r0, [sp, #0x8]
ldr r4, [sp, #0x8+0x4]
svc 0x08
ldr r2, [sp], #4
str r1, [r2]
ldr r4, [sp], #4
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcExitThread
svc 0x09
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcSleepThread
2014-01-18 23:18:03 +01:00
svc 0x0A
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcGetThreadPriority
2015-05-25 21:11:16 +02:00
str r0, [sp, #-0x4]!
svc 0x0B
ldr r3, [sp], #4
str r1, [r3]
bx lr
SVC_END
2016-12-04 18:21:44 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcSetThreadPriority
svc 0x0C
bx lr
SVC_END
2016-12-04 18:21:44 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcGetThreadAffinityMask
2015-05-25 21:11:16 +02:00
svc 0x0D
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcSetThreadAffinityMask
2015-05-25 21:11:16 +02:00
svc 0x0E
bx lr
SVC_END
2016-12-04 18:21:44 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcGetThreadIdealProcessor
2015-05-25 21:11:16 +02:00
str r0, [sp, #-0x4]!
svc 0x0F
ldr r3, [sp], #4
str r1, [r3]
bx lr
SVC_END
2016-12-04 18:21:44 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcSetThreadIdealProcessor
2015-05-25 21:11:16 +02:00
svc 0x10
bx lr
SVC_END
2014-01-18 23:18:03 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcGetProcessorID
svc 0x11
bx lr
SVC_END
SVC_BEGIN svcRun
push {r4,r5}
ldr r2, [r1, #0x04]
ldr r3, [r1, #0x08]
ldr r4, [r1, #0x0C]
ldr r5, [r1, #0x10]
ldr r1, [r1, #0x00]
svc 0x12
pop {r4,r5}
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcCreateMutex
str r0, [sp, #-4]!
svc 0x13
ldr r3, [sp], #4
str r1, [r3]
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcReleaseMutex
svc 0x14
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcCreateSemaphore
push {r0}
svc 0x15
pop {r3}
str r1, [r3]
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcReleaseSemaphore
push {r0}
svc 0x16
pop {r3}
str r1, [r3]
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcCreateEvent
str r0, [sp, #-4]!
2014-01-18 23:18:03 +01:00
svc 0x17
ldr r2, [sp], #4
str r1, [r2]
bx lr
SVC_END
2014-01-18 23:18:03 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcSignalEvent
svc 0x18
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcClearEvent
svc 0x19
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcCreateTimer
str r0, [sp, #-4]!
2014-10-31 01:17:43 +01:00
svc 0x1A
ldr r2, [sp], #4
str r1, [r2]
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcSetTimer
2015-12-30 03:46:38 +01:00
str r4, [sp, #-4]!
ldr r1, [sp, #4]
ldr r4, [sp, #8]
2014-10-31 01:17:43 +01:00
svc 0x1B
2015-12-30 03:46:38 +01:00
ldr r4, [sp], #4
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcCancelTimer
2014-10-31 01:17:43 +01:00
svc 0x1C
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcClearTimer
2014-10-31 01:17:43 +01:00
svc 0x1D
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcCreateMemoryBlock
2014-01-28 23:50:51 +01:00
str r0, [sp, #-4]!
ldr r0, [sp, #4]
svc 0x1E
ldr r2, [sp], #4
str r1, [r2]
bx lr
SVC_END
2014-01-28 23:50:51 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcMapMemoryBlock
2014-01-18 23:18:03 +01:00
svc 0x1F
bx lr
SVC_END
2014-01-18 23:18:03 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcUnmapMemoryBlock
svc 0x20
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcCreateAddressArbiter
2015-05-06 23:12:32 +02:00
push {r0}
svc 0x21
2015-05-06 23:12:32 +02:00
pop {r2}
str r1, [r2]
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcArbitrateAddress
push {r4, r5}
ldr r4, [sp, #8]
ldr r5, [sp, #12]
svc 0x22
pop {r4, r5}
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcCloseHandle
2014-01-18 23:18:03 +01:00
svc 0x23
bx lr
SVC_END
2014-01-18 23:18:03 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcWaitSynchronization
2014-01-18 23:18:03 +01:00
svc 0x24
bx lr
SVC_END
2014-01-18 23:18:03 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcWaitSynchronizationN
2014-01-29 23:17:02 +01:00
str r5, [sp, #-4]!
str r4, [sp, #-4]!
2014-01-19 21:49:01 +01:00
mov r5, r0
ldr r0, [sp, #0x8]
ldr r4, [sp, #0x8+0x4]
2014-01-19 21:49:01 +01:00
svc 0x25
str r1, [r5]
ldr r4, [sp], #4
2014-01-29 23:17:02 +01:00
ldr r5, [sp], #4
bx lr
SVC_END
2014-01-19 21:49:01 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcDuplicateHandle
str r0, [sp, #-0x4]!
svc 0x27
ldr r3, [sp], #4
str r1, [r3]
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcGetSystemTick
svc 0x28
bx lr
SVC_END
2016-12-19 00:02:43 +01:00
SVC_BEGIN svcGetHandleInfo
str r0, [sp, #-0x4]!
svc 0x29
ldr r3, [sp], #4
str r1, [r3]
str r2, [r3,#4]
bx lr
SVC_END
2016-12-19 00:02:43 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcGetSystemInfo
2015-05-28 21:04:52 +02:00
str r0, [sp, #-0x4]!
svc 0x2A
ldr r3, [sp], #4
str r1, [r3]
str r2, [r3,#4]
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcGetProcessInfo
2015-05-28 21:04:52 +02:00
str r0, [sp, #-0x4]!
svc 0x2B
ldr r3, [sp], #4
str r1, [r3]
str r2, [r3,#4]
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcGetThreadInfo
2015-05-28 21:04:52 +02:00
str r0, [sp, #-0x4]!
svc 0x2C
ldr r3, [sp], #4
str r1, [r3]
str r2, [r3,#4]
bx lr
SVC_END
2015-05-25 21:11:16 +02:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcConnectToPort
str r0, [sp, #-0x4]!
2014-01-18 23:18:03 +01:00
svc 0x2D
ldr r3, [sp], #4
str r1, [r3]
bx lr
SVC_END
2014-01-18 23:18:03 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcSendSyncRequest
2014-01-18 23:18:03 +01:00
svc 0x32
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcOpenProcess
2015-02-28 01:20:41 +01:00
push {r0}
svc 0x33
pop {r2}
str r1, [r2]
bx lr
SVC_END
2015-05-25 21:11:16 +02:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcOpenThread
2015-05-25 21:11:16 +02:00
push {r0}
svc 0x34
pop {r2}
str r1, [r2]
bx lr
SVC_END
2016-12-04 18:21:44 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcGetProcessId
str r0, [sp, #-0x4]!
svc 0x35
ldr r3, [sp], #4
str r1, [r3]
bx lr
SVC_END
2014-11-29 21:40:59 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcGetProcessIdOfThread
2015-05-25 21:11:16 +02:00
str r0, [sp, #-0x4]!
svc 0x36
ldr r3, [sp], #4
str r1, [r3]
bx lr
SVC_END
2016-12-04 18:21:44 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcGetThreadId
2014-12-09 00:15:04 +01:00
str r0, [sp, #-0x4]!
svc 0x37
ldr r3, [sp], #4
str r1, [r3]
bx lr
SVC_END
2015-02-28 01:20:41 +01:00
2016-04-14 10:19:11 +02:00
SVC_BEGIN svcGetResourceLimit
str r0, [sp, #-0x4]!
svc 0x38
ldr r3, [sp], #4
str r1, [r3]
bx lr
SVC_END
2016-04-14 10:19:11 +02:00
SVC_BEGIN svcGetResourceLimitLimitValues
svc 0x39
bx lr
SVC_END
2016-04-14 10:19:11 +02:00
SVC_BEGIN svcGetResourceLimitCurrentValues
svc 0x3A
bx lr
SVC_END
2016-04-14 10:19:11 +02:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcBreak
svc 0x3C
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcOutputDebugString
svc 0x3D
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcCreatePort
2015-02-28 01:20:41 +01:00
push {r0, r1}
svc 0x47
ldr r3, [sp, #0]
str r1, [r3]
ldr r3, [sp, #4]
str r2, [r3]
add sp, sp, #8
bx lr
2017-06-23 09:07:23 +02:00
SVC_END
SVC_BEGIN svcCreateSessionToPort
push {r0}
svc 0x48
pop {r2}
str r1, [r2]
bx lr
SVC_END
2017-06-20 21:59:27 +02:00
SVC_BEGIN svcCreateSession
push {r0, r1}
svc 0x49
ldr r3, [sp, #0]
str r1, [r3]
ldr r3, [sp, #4]
str r2, [r3]
add sp, sp, #8
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcAcceptSession
str r0, [sp, #-4]!
svc 0x4A
ldr r2, [sp]
str r1, [r2]
add sp, sp, #4
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcReplyAndReceive
str r0, [sp, #-4]!
svc 0x4F
ldr r2, [sp]
str r1, [r2]
add sp, sp, #4
bx lr
SVC_END
SVC_BEGIN svcBindInterrupt
svc 0x50
bx lr
SVC_END
SVC_BEGIN svcUnbindInterrupt
svc 0x51
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcInvalidateProcessDataCache
svc 0x52
bx lr
SVC_END
2017-03-12 23:21:29 +01:00
SVC_BEGIN svcStoreProcessDataCache
svc 0x53
bx lr
SVC_END
2017-03-12 23:21:29 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcFlushProcessDataCache
svc 0x54
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcStartInterProcessDma
stmfd sp!, {r0, r4, r5}
ldr r0, [sp, #0xC]
ldr r4, [sp, #0x10]
ldr r5, [sp, #0x14]
svc 0x55
ldmfd sp!, {r2, r4, r5}
str r1, [r2]
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcStopDma
svc 0x56
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcGetDmaState
str r0, [sp, #-4]!
svc 0x57
ldr r3, [sp], #4
str r1, [r3]
bx lr
SVC_END
SVC_BEGIN svcSetGpuProt
svc 0x59
bx lr
SVC_END
SVC_BEGIN svcSetWifiEnabled
svc 0x5A
bx lr
SVC_END
2015-02-28 01:20:41 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcDebugActiveProcess
2015-02-28 01:20:41 +01:00
push {r0}
svc 0x60
pop {r2}
str r1, [r2]
bx lr
SVC_END
2015-02-28 01:20:41 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcBreakDebugProcess
2015-03-09 04:54:03 +01:00
svc 0x61
bx lr
SVC_END
2015-03-09 04:54:03 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcTerminateDebugProcess
2015-03-09 04:54:03 +01:00
svc 0x62
bx lr
SVC_END
2015-03-09 04:54:03 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcGetProcessDebugEvent
2015-03-09 04:54:03 +01:00
svc 0x63
bx lr
SVC_END
2016-12-04 18:21:44 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcContinueDebugEvent
2015-03-09 04:54:03 +01:00
svc 0x64
bx lr
SVC_END
2015-03-09 04:54:03 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcGetProcessList
str r0, [sp, #-0x4]!
2015-02-28 01:20:41 +01:00
svc 0x65
ldr r3, [sp], #4
2015-02-28 01:20:41 +01:00
str r1, [r3]
bx lr
SVC_END
2015-02-28 01:20:41 +01:00
2016-12-23 15:22:31 +01:00
SVC_BEGIN svcGetThreadList
str r0, [sp, #-0x4]!
svc 0x66
ldr r3, [sp], #4
str r1, [r3]
bx lr
SVC_END
2016-12-23 15:22:31 +01:00
SVC_BEGIN svcGetDebugThreadContext
svc 0x67
bx lr
SVC_END
SVC_BEGIN svcSetDebugThreadContext
svc 0x68
bx lr
SVC_END
SVC_BEGIN svcQueryDebugProcessMemory
push {r0, r1, r4-r6}
svc 0x69
ldr r6, [sp]
stm r6, {r1-r4}
ldr r6, [sp, #4]
str r5, [r6]
add sp, sp, #8
pop {r4-r6}
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcReadProcessMemory
2015-02-28 01:20:41 +01:00
svc 0x6A
bx lr
SVC_END
2015-02-28 01:20:41 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcWriteProcessMemory
svc 0x6B
bx lr
SVC_END
SVC_BEGIN svcSetHardwareBreakPoint
svc 0x6C
bx lr
SVC_END
SVC_BEGIN svcGetDebugThreadParam
push {r0, r1, r4, r5}
ldr r0, [sp, #16]
svc 0x6D
pop {r4, r5}
stm r4, {r1, r2}
str r3, [r5]
pop {r4, r5}
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcControlProcessMemory
push {r4-r5}
ldr r4, [sp, #0x8]
ldr r5, [sp, #0xC]
svc 0x70
pop {r4-r5}
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcMapProcessMemory
2015-02-28 01:20:41 +01:00
svc 0x71
bx lr
SVC_END
2015-02-28 01:20:41 +01:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcUnmapProcessMemory
2015-02-28 01:20:41 +01:00
svc 0x72
bx lr
SVC_END
SVC_BEGIN svcCreateCodeSet
str r0, [sp, #-0x4]!
ldr r0, [sp, #4]
svc 0x73
ldr r2, [sp, #0]
str r1, [r2]
add sp, sp, #4
bx lr
SVC_END
SVC_BEGIN svcCreateProcess
str r0, [sp, #-0x4]!
svc 0x75
ldr r2, [sp, #0]
str r1, [r2]
add sp, sp, #4
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcTerminateProcess
svc 0x76
bx lr
SVC_END
2015-02-28 01:20:41 +01:00
SVC_BEGIN svcSetProcessResourceLimits
svc 0x77
bx lr
SVC_END
SVC_BEGIN svcCreateResourceLimits
push {r0}
svc 0x78
pop {r2}
str r1, [r2]
bx lr
SVC_END
SVC_BEGIN svcSetResourceLimitValues
svc 0x79
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcBackdoor
svc 0x7B
bx lr
SVC_END
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcKernelSetState
svc 0x7C
bx lr
SVC_END
2015-04-03 23:37:09 +02:00
2015-10-07 23:32:20 +02:00
SVC_BEGIN svcQueryProcessMemory
2015-02-28 01:20:41 +01:00
push {r0, r1, r4-r6}
svc 0x7D
ldr r6, [sp]
stm r6, {r1-r4}
ldr r6, [sp, #4]
str r5, [r6]
add sp, sp, #8
pop {r4-r6}
bx lr
SVC_END