diff options
Diffstat (limited to 'lib/darwin/manual-syscall.h')
-rw-r--r-- | lib/darwin/manual-syscall.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/darwin/manual-syscall.h b/lib/darwin/manual-syscall.h index f16ec54..9966981 100644 --- a/lib/darwin/manual-syscall.h +++ b/lib/darwin/manual-syscall.h @@ -35,11 +35,16 @@ #ifdef __thumb__ #undef GEN_SYSCALL_PRE #define GEN_SYSCALL_PRE(name) \ - ".thumb_func _manual_" #name "\n" + ".thumb_func _manual_" #name "\n" \ + ".align 2\n" #endif #define GEN_SYSCALL_INNER() \ + "mov r12, sp\n" \ + "push {r4-r6}\n" \ + "ldm r12, {r4-r6}\n" \ "mov r12, #num\n" \ "svc #0x80\n" \ + "pop {r4-r6}\n" \ "bx lr\n" #elif defined(__arm64__) #define GEN_SYSCALL_INNER() \ |