Merge pull request #350 from TuxSH/patch-cfi

Add call frame information for SVC wrapper, fix build issue in uds.c
This commit is contained in:
Dave Murphy 2017-04-03 11:16:52 +01:00 committed by GitHub
commit 4f98439f86
2 changed files with 95 additions and 4 deletions

View File

@ -501,13 +501,10 @@ Result udsScanBeacons(void *buf, size_t maxsize, udsNetworkScanInfo **networks,
{ {
networks_ptr = malloc(sizeof(udsNetworkScanInfo) * hdr->total_entries); networks_ptr = malloc(sizeof(udsNetworkScanInfo) * hdr->total_entries);
if(networks_ptr == NULL)return -1; if(networks_ptr == NULL)return -1;
if(total_networks)*total_networks = hdr->total_entries;
memset(networks_ptr, 0, sizeof(udsNetworkScanInfo) * hdr->total_entries); memset(networks_ptr, 0, sizeof(udsNetworkScanInfo) * hdr->total_entries);
*networks = networks_ptr; *networks = networks_ptr;
}
if(total_networks)*total_networks = hdr->total_entries;
if(networks)
{
for(entpos=0; entpos<hdr->total_entries; entpos++) for(entpos=0; entpos<hdr->total_entries; entpos++)
{ {
if(curpos >= hdr->size) if(curpos >= hdr->size)

View File

@ -6,9 +6,14 @@
.global \name .global \name
.type \name, %function .type \name, %function
.align 2 .align 2
.cfi_startproc
\name: \name:
.endm .endm
.macro SVC_END
.cfi_endproc
.endm
SVC_BEGIN svcControlMemory SVC_BEGIN svcControlMemory
push {r0, r4} push {r0, r4}
ldr r0, [sp, #0x8] ldr r0, [sp, #0x8]
@ -18,6 +23,7 @@ SVC_BEGIN svcControlMemory
str r1, [r2] str r1, [r2]
ldr r4, [sp], #4 ldr r4, [sp], #4
bx lr bx lr
SVC_END
SVC_BEGIN svcQueryMemory SVC_BEGIN svcQueryMemory
push {r0, r1, r4-r6} push {r0, r1, r4-r6}
@ -32,18 +38,22 @@ SVC_BEGIN svcQueryMemory
add sp, sp, #8 add sp, sp, #8
pop {r4-r6} pop {r4-r6}
bx lr bx lr
SVC_END
SVC_BEGIN svcExitProcess SVC_BEGIN svcExitProcess
svc 0x03 svc 0x03
bx lr bx lr
SVC_END
SVC_BEGIN svcGetProcessAffinityMask SVC_BEGIN svcGetProcessAffinityMask
svc 0x04 svc 0x04
bx lr bx lr
SVC_END
SVC_BEGIN svcSetProcessAffinityMask SVC_BEGIN svcSetProcessAffinityMask
svc 0x05 svc 0x05
bx lr bx lr
SVC_END
SVC_BEGIN svcGetProcessIdealProcessor SVC_BEGIN svcGetProcessIdealProcessor
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -51,10 +61,12 @@ SVC_BEGIN svcGetProcessIdealProcessor
ldr r3, [sp], #4 ldr r3, [sp], #4
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcSetProcessIdealProcessor SVC_BEGIN svcSetProcessIdealProcessor
svc 0x07 svc 0x07
bx lr bx lr
SVC_END
SVC_BEGIN svcCreateThread SVC_BEGIN svcCreateThread
push {r0, r4} push {r0, r4}
@ -65,14 +77,17 @@ SVC_BEGIN svcCreateThread
str r1, [r2] str r1, [r2]
ldr r4, [sp], #4 ldr r4, [sp], #4
bx lr bx lr
SVC_END
SVC_BEGIN svcExitThread SVC_BEGIN svcExitThread
svc 0x09 svc 0x09
bx lr bx lr
SVC_END
SVC_BEGIN svcSleepThread SVC_BEGIN svcSleepThread
svc 0x0A svc 0x0A
bx lr bx lr
SVC_END
SVC_BEGIN svcGetThreadPriority SVC_BEGIN svcGetThreadPriority
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -80,18 +95,22 @@ SVC_BEGIN svcGetThreadPriority
ldr r3, [sp], #4 ldr r3, [sp], #4
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcSetThreadPriority SVC_BEGIN svcSetThreadPriority
svc 0x0C svc 0x0C
bx lr bx lr
SVC_END
SVC_BEGIN svcGetThreadAffinityMask SVC_BEGIN svcGetThreadAffinityMask
svc 0x0D svc 0x0D
bx lr bx lr
SVC_END
SVC_BEGIN svcSetThreadAffinityMask SVC_BEGIN svcSetThreadAffinityMask
svc 0x0E svc 0x0E
bx lr bx lr
SVC_END
SVC_BEGIN svcGetThreadIdealProcessor SVC_BEGIN svcGetThreadIdealProcessor
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -99,14 +118,17 @@ SVC_BEGIN svcGetThreadIdealProcessor
ldr r3, [sp], #4 ldr r3, [sp], #4
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcSetThreadIdealProcessor SVC_BEGIN svcSetThreadIdealProcessor
svc 0x10 svc 0x10
bx lr bx lr
SVC_END
SVC_BEGIN svcGetProcessorID SVC_BEGIN svcGetProcessorID
svc 0x11 svc 0x11
bx lr bx lr
SVC_END
SVC_BEGIN svcRun SVC_BEGIN svcRun
push {r4,r5} push {r4,r5}
@ -118,6 +140,7 @@ SVC_BEGIN svcRun
svc 0x12 svc 0x12
pop {r4,r5} pop {r4,r5}
bx lr bx lr
SVC_END
SVC_BEGIN svcCreateMutex SVC_BEGIN svcCreateMutex
str r0, [sp, #-4]! str r0, [sp, #-4]!
@ -125,10 +148,12 @@ SVC_BEGIN svcCreateMutex
ldr r3, [sp], #4 ldr r3, [sp], #4
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcReleaseMutex SVC_BEGIN svcReleaseMutex
svc 0x14 svc 0x14
bx lr bx lr
SVC_END
SVC_BEGIN svcCreateSemaphore SVC_BEGIN svcCreateSemaphore
push {r0} push {r0}
@ -136,6 +161,7 @@ SVC_BEGIN svcCreateSemaphore
pop {r3} pop {r3}
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcReleaseSemaphore SVC_BEGIN svcReleaseSemaphore
push {r0} push {r0}
@ -143,6 +169,7 @@ SVC_BEGIN svcReleaseSemaphore
pop {r3} pop {r3}
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcCreateEvent SVC_BEGIN svcCreateEvent
str r0, [sp, #-4]! str r0, [sp, #-4]!
@ -150,14 +177,17 @@ SVC_BEGIN svcCreateEvent
ldr r2, [sp], #4 ldr r2, [sp], #4
str r1, [r2] str r1, [r2]
bx lr bx lr
SVC_END
SVC_BEGIN svcSignalEvent SVC_BEGIN svcSignalEvent
svc 0x18 svc 0x18
bx lr bx lr
SVC_END
SVC_BEGIN svcClearEvent SVC_BEGIN svcClearEvent
svc 0x19 svc 0x19
bx lr bx lr
SVC_END
SVC_BEGIN svcCreateTimer SVC_BEGIN svcCreateTimer
str r0, [sp, #-4]! str r0, [sp, #-4]!
@ -165,6 +195,7 @@ SVC_BEGIN svcCreateTimer
ldr r2, [sp], #4 ldr r2, [sp], #4
str r1, [r2] str r1, [r2]
bx lr bx lr
SVC_END
SVC_BEGIN svcSetTimer SVC_BEGIN svcSetTimer
str r4, [sp, #-4]! str r4, [sp, #-4]!
@ -173,14 +204,17 @@ SVC_BEGIN svcSetTimer
svc 0x1B svc 0x1B
ldr r4, [sp], #4 ldr r4, [sp], #4
bx lr bx lr
SVC_END
SVC_BEGIN svcCancelTimer SVC_BEGIN svcCancelTimer
svc 0x1C svc 0x1C
bx lr bx lr
SVC_END
SVC_BEGIN svcClearTimer SVC_BEGIN svcClearTimer
svc 0x1D svc 0x1D
bx lr bx lr
SVC_END
SVC_BEGIN svcCreateMemoryBlock SVC_BEGIN svcCreateMemoryBlock
str r0, [sp, #-4]! str r0, [sp, #-4]!
@ -189,14 +223,17 @@ SVC_BEGIN svcCreateMemoryBlock
ldr r2, [sp], #4 ldr r2, [sp], #4
str r1, [r2] str r1, [r2]
bx lr bx lr
SVC_END
SVC_BEGIN svcMapMemoryBlock SVC_BEGIN svcMapMemoryBlock
svc 0x1F svc 0x1F
bx lr bx lr
SVC_END
SVC_BEGIN svcUnmapMemoryBlock SVC_BEGIN svcUnmapMemoryBlock
svc 0x20 svc 0x20
bx lr bx lr
SVC_END
SVC_BEGIN svcCreateAddressArbiter SVC_BEGIN svcCreateAddressArbiter
push {r0} push {r0}
@ -204,6 +241,7 @@ SVC_BEGIN svcCreateAddressArbiter
pop {r2} pop {r2}
str r1, [r2] str r1, [r2]
bx lr bx lr
SVC_END
SVC_BEGIN svcArbitrateAddress SVC_BEGIN svcArbitrateAddress
push {r4, r5} push {r4, r5}
@ -212,14 +250,17 @@ SVC_BEGIN svcArbitrateAddress
svc 0x22 svc 0x22
pop {r4, r5} pop {r4, r5}
bx lr bx lr
SVC_END
SVC_BEGIN svcCloseHandle SVC_BEGIN svcCloseHandle
svc 0x23 svc 0x23
bx lr bx lr
SVC_END
SVC_BEGIN svcWaitSynchronization SVC_BEGIN svcWaitSynchronization
svc 0x24 svc 0x24
bx lr bx lr
SVC_END
SVC_BEGIN svcWaitSynchronizationN SVC_BEGIN svcWaitSynchronizationN
str r5, [sp, #-4]! str r5, [sp, #-4]!
@ -232,6 +273,7 @@ SVC_BEGIN svcWaitSynchronizationN
ldr r4, [sp], #4 ldr r4, [sp], #4
ldr r5, [sp], #4 ldr r5, [sp], #4
bx lr bx lr
SVC_END
SVC_BEGIN svcDuplicateHandle SVC_BEGIN svcDuplicateHandle
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -239,10 +281,12 @@ SVC_BEGIN svcDuplicateHandle
ldr r3, [sp], #4 ldr r3, [sp], #4
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcGetSystemTick SVC_BEGIN svcGetSystemTick
svc 0x28 svc 0x28
bx lr bx lr
SVC_END
SVC_BEGIN svcGetHandleInfo SVC_BEGIN svcGetHandleInfo
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -251,6 +295,7 @@ SVC_BEGIN svcGetHandleInfo
str r1, [r3] str r1, [r3]
str r2, [r3,#4] str r2, [r3,#4]
bx lr bx lr
SVC_END
SVC_BEGIN svcGetSystemInfo SVC_BEGIN svcGetSystemInfo
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -259,6 +304,7 @@ SVC_BEGIN svcGetSystemInfo
str r1, [r3] str r1, [r3]
str r2, [r3,#4] str r2, [r3,#4]
bx lr bx lr
SVC_END
SVC_BEGIN svcGetProcessInfo SVC_BEGIN svcGetProcessInfo
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -267,6 +313,7 @@ SVC_BEGIN svcGetProcessInfo
str r1, [r3] str r1, [r3]
str r2, [r3,#4] str r2, [r3,#4]
bx lr bx lr
SVC_END
SVC_BEGIN svcGetThreadInfo SVC_BEGIN svcGetThreadInfo
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -275,6 +322,7 @@ SVC_BEGIN svcGetThreadInfo
str r1, [r3] str r1, [r3]
str r2, [r3,#4] str r2, [r3,#4]
bx lr bx lr
SVC_END
SVC_BEGIN svcConnectToPort SVC_BEGIN svcConnectToPort
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -282,10 +330,12 @@ SVC_BEGIN svcConnectToPort
ldr r3, [sp], #4 ldr r3, [sp], #4
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcSendSyncRequest SVC_BEGIN svcSendSyncRequest
svc 0x32 svc 0x32
bx lr bx lr
SVC_END
SVC_BEGIN svcOpenProcess SVC_BEGIN svcOpenProcess
push {r0} push {r0}
@ -293,6 +343,7 @@ SVC_BEGIN svcOpenProcess
pop {r2} pop {r2}
str r1, [r2] str r1, [r2]
bx lr bx lr
SVC_END
SVC_BEGIN svcOpenThread SVC_BEGIN svcOpenThread
push {r0} push {r0}
@ -300,6 +351,7 @@ SVC_BEGIN svcOpenThread
pop {r2} pop {r2}
str r1, [r2] str r1, [r2]
bx lr bx lr
SVC_END
SVC_BEGIN svcGetProcessId SVC_BEGIN svcGetProcessId
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -307,6 +359,7 @@ SVC_BEGIN svcGetProcessId
ldr r3, [sp], #4 ldr r3, [sp], #4
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcGetProcessIdOfThread SVC_BEGIN svcGetProcessIdOfThread
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -314,6 +367,7 @@ SVC_BEGIN svcGetProcessIdOfThread
ldr r3, [sp], #4 ldr r3, [sp], #4
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcGetThreadId SVC_BEGIN svcGetThreadId
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -321,6 +375,7 @@ SVC_BEGIN svcGetThreadId
ldr r3, [sp], #4 ldr r3, [sp], #4
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcGetResourceLimit SVC_BEGIN svcGetResourceLimit
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -328,22 +383,27 @@ SVC_BEGIN svcGetResourceLimit
ldr r3, [sp], #4 ldr r3, [sp], #4
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcGetResourceLimitLimitValues SVC_BEGIN svcGetResourceLimitLimitValues
svc 0x39 svc 0x39
bx lr bx lr
SVC_END
SVC_BEGIN svcGetResourceLimitCurrentValues SVC_BEGIN svcGetResourceLimitCurrentValues
svc 0x3A svc 0x3A
bx lr bx lr
SVC_END
SVC_BEGIN svcBreak SVC_BEGIN svcBreak
svc 0x3C svc 0x3C
bx lr bx lr
SVC_END
SVC_BEGIN svcOutputDebugString SVC_BEGIN svcOutputDebugString
svc 0x3D svc 0x3D
bx lr bx lr
SVC_END
SVC_BEGIN svcCreatePort SVC_BEGIN svcCreatePort
push {r0, r1} push {r0, r1}
@ -354,6 +414,7 @@ SVC_BEGIN svcCreatePort
str r2, [r3] str r2, [r3]
add sp, sp, #8 add sp, sp, #8
bx lr bx lr
SVC_END
SVC_BEGIN svcAcceptSession SVC_BEGIN svcAcceptSession
str r0, [sp, #-4]! str r0, [sp, #-4]!
@ -362,6 +423,7 @@ SVC_BEGIN svcAcceptSession
str r1, [r2] str r1, [r2]
add sp, sp, #4 add sp, sp, #4
bx lr bx lr
SVC_END
SVC_BEGIN svcReplyAndReceive SVC_BEGIN svcReplyAndReceive
str r0, [sp, #-4]! str r0, [sp, #-4]!
@ -370,26 +432,32 @@ SVC_BEGIN svcReplyAndReceive
str r1, [r2] str r1, [r2]
add sp, sp, #4 add sp, sp, #4
bx lr bx lr
SVC_END
SVC_BEGIN svcBindInterrupt SVC_BEGIN svcBindInterrupt
svc 0x50 svc 0x50
bx lr bx lr
SVC_END
SVC_BEGIN svcUnbindInterrupt SVC_BEGIN svcUnbindInterrupt
svc 0x51 svc 0x51
bx lr bx lr
SVC_END
SVC_BEGIN svcInvalidateProcessDataCache SVC_BEGIN svcInvalidateProcessDataCache
svc 0x52 svc 0x52
bx lr bx lr
SVC_END
SVC_BEGIN svcStoreProcessDataCache SVC_BEGIN svcStoreProcessDataCache
svc 0x53 svc 0x53
bx lr bx lr
SVC_END
SVC_BEGIN svcFlushProcessDataCache SVC_BEGIN svcFlushProcessDataCache
svc 0x54 svc 0x54
bx lr bx lr
SVC_END
SVC_BEGIN svcStartInterProcessDma SVC_BEGIN svcStartInterProcessDma
stmfd sp!, {r0, r4, r5} stmfd sp!, {r0, r4, r5}
@ -400,10 +468,12 @@ SVC_BEGIN svcStartInterProcessDma
ldmfd sp!, {r2, r4, r5} ldmfd sp!, {r2, r4, r5}
str r1, [r2] str r1, [r2]
bx lr bx lr
SVC_END
SVC_BEGIN svcStopDma SVC_BEGIN svcStopDma
svc 0x56 svc 0x56
bx lr bx lr
SVC_END
SVC_BEGIN svcGetDmaState SVC_BEGIN svcGetDmaState
str r0, [sp, #-4]! str r0, [sp, #-4]!
@ -411,6 +481,7 @@ SVC_BEGIN svcGetDmaState
ldr r3, [sp], #4 ldr r3, [sp], #4
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcDebugActiveProcess SVC_BEGIN svcDebugActiveProcess
push {r0} push {r0}
@ -418,22 +489,27 @@ SVC_BEGIN svcDebugActiveProcess
pop {r2} pop {r2}
str r1, [r2] str r1, [r2]
bx lr bx lr
SVC_END
SVC_BEGIN svcBreakDebugProcess SVC_BEGIN svcBreakDebugProcess
svc 0x61 svc 0x61
bx lr bx lr
SVC_END
SVC_BEGIN svcTerminateDebugProcess SVC_BEGIN svcTerminateDebugProcess
svc 0x62 svc 0x62
bx lr bx lr
SVC_END
SVC_BEGIN svcGetProcessDebugEvent SVC_BEGIN svcGetProcessDebugEvent
svc 0x63 svc 0x63
bx lr bx lr
SVC_END
SVC_BEGIN svcContinueDebugEvent SVC_BEGIN svcContinueDebugEvent
svc 0x64 svc 0x64
bx lr bx lr
SVC_END
SVC_BEGIN svcGetProcessList SVC_BEGIN svcGetProcessList
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -441,6 +517,7 @@ SVC_BEGIN svcGetProcessList
ldr r3, [sp], #4 ldr r3, [sp], #4
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcGetThreadList SVC_BEGIN svcGetThreadList
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -448,14 +525,17 @@ SVC_BEGIN svcGetThreadList
ldr r3, [sp], #4 ldr r3, [sp], #4
str r1, [r3] str r1, [r3]
bx lr bx lr
SVC_END
SVC_BEGIN svcGetDebugThreadContext SVC_BEGIN svcGetDebugThreadContext
svc 0x67 svc 0x67
bx lr bx lr
SVC_END
SVC_BEGIN svcSetDebugThreadContext SVC_BEGIN svcSetDebugThreadContext
svc 0x68 svc 0x68
bx lr bx lr
SVC_END
SVC_BEGIN svcQueryDebugProcessMemory SVC_BEGIN svcQueryDebugProcessMemory
push {r0, r1, r4-r6} push {r0, r1, r4-r6}
@ -467,18 +547,22 @@ SVC_BEGIN svcQueryDebugProcessMemory
add sp, sp, #8 add sp, sp, #8
pop {r4-r6} pop {r4-r6}
bx lr bx lr
SVC_END
SVC_BEGIN svcReadProcessMemory SVC_BEGIN svcReadProcessMemory
svc 0x6A svc 0x6A
bx lr bx lr
SVC_END
SVC_BEGIN svcWriteProcessMemory SVC_BEGIN svcWriteProcessMemory
svc 0x6B svc 0x6B
bx lr bx lr
SVC_END
SVC_BEGIN svcSetHardwareBreakPoint SVC_BEGIN svcSetHardwareBreakPoint
svc 0x6C svc 0x6C
bx lr bx lr
SVC_END
SVC_BEGIN svcGetDebugThreadParam SVC_BEGIN svcGetDebugThreadParam
push {r0, r1, r4, r5} push {r0, r1, r4, r5}
@ -489,6 +573,7 @@ SVC_BEGIN svcGetDebugThreadParam
str r3, [r5] str r3, [r5]
pop {r4, r5} pop {r4, r5}
bx lr bx lr
SVC_END
SVC_BEGIN svcControlProcessMemory SVC_BEGIN svcControlProcessMemory
push {r4-r5} push {r4-r5}
@ -497,14 +582,17 @@ SVC_BEGIN svcControlProcessMemory
svc 0x70 svc 0x70
pop {r4-r5} pop {r4-r5}
bx lr bx lr
SVC_END
SVC_BEGIN svcMapProcessMemory SVC_BEGIN svcMapProcessMemory
svc 0x71 svc 0x71
bx lr bx lr
SVC_END
SVC_BEGIN svcUnmapProcessMemory SVC_BEGIN svcUnmapProcessMemory
svc 0x72 svc 0x72
bx lr bx lr
SVC_END
SVC_BEGIN svcCreateCodeSet SVC_BEGIN svcCreateCodeSet
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -514,6 +602,7 @@ SVC_BEGIN svcCreateCodeSet
str r1, [r2] str r1, [r2]
add sp, sp, #4 add sp, sp, #4
bx lr bx lr
SVC_END
SVC_BEGIN svcCreateProcess SVC_BEGIN svcCreateProcess
str r0, [sp, #-0x4]! str r0, [sp, #-0x4]!
@ -522,18 +611,22 @@ SVC_BEGIN svcCreateProcess
str r1, [r2] str r1, [r2]
add sp, sp, #4 add sp, sp, #4
bx lr bx lr
SVC_END
SVC_BEGIN svcTerminateProcess SVC_BEGIN svcTerminateProcess
svc 0x76 svc 0x76
bx lr bx lr
SVC_END
SVC_BEGIN svcBackdoor SVC_BEGIN svcBackdoor
svc 0x7B svc 0x7B
bx lr bx lr
SVC_END
SVC_BEGIN svcKernelSetState SVC_BEGIN svcKernelSetState
svc 0x7C svc 0x7C
bx lr bx lr
SVC_END
SVC_BEGIN svcQueryProcessMemory SVC_BEGIN svcQueryProcessMemory
push {r0, r1, r4-r6} push {r0, r1, r4-r6}
@ -545,3 +638,4 @@ SVC_BEGIN svcQueryProcessMemory
add sp, sp, #8 add sp, sp, #8
pop {r4-r6} pop {r4-r6}
bx lr bx lr
SVC_END