#include "SYS.h"
-#if defined(__ppc__) || defined(__ppc64__)
-
-MI_ENTRY_POINT(___ptrace)
- li r7,0
- MI_GET_ADDRESS(r8,_errno)
- stw r7,0(r8)
- SYSCALL_NONAME(ptrace, 4)
- blr
-
-#elif defined(__i386__)
+#if defined(__i386__)
.globl _errno
LEAF(___ptrace, 0)
xorl %eax,%eax
REG_TO_EXTERN(%eax,_errno)
-UNIX_SYSCALL_NONAME(ptrace, 4)
+ UNIX_SYSCALL_NONAME(ptrace, 4, cerror)
ret
#elif defined(__x86_64__)
LEAF(___ptrace, 0)
xorq %rax,%rax
- REG_TO_EXTERN(%rax,_errno)
-UNIX_SYSCALL_NONAME(ptrace, 4)
+ PICIFY(_errno)
+ movl %eax,(%r11)
+ UNIX_SYSCALL_NONAME(ptrace, 4, cerror)
ret
+#elif defined(__arm__)
+
+MI_ENTRY_POINT(___ptrace)
+ MI_GET_ADDRESS(ip,_errno)
+ str r8, [sp, #-4]!
+ mov r8, #0
+ str r8, [ip]
+ ldr r8, [sp], #4
+ SYSCALL_NONAME(ptrace, 4, cerror)
+ bx lr
+
+#elif defined(__arm64__)
+
+MI_ENTRY_POINT(___ptrace)
+ MI_GET_ADDRESS(x9,_errno)
+ str wzr, [x9]
+ SYSCALL_NONAME(ptrace, 4, cerror)
+ ret
+
#else
#error Unsupported architecture
#endif