X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/5ba3f43ea354af8ad55bea84372a2bc834d8757c..c6bf4f310a33a9262d455ea4d3f0630b1255e3fe:/libsyscall/wrappers/varargs_wrappers.s diff --git a/libsyscall/wrappers/varargs_wrappers.s b/libsyscall/wrappers/varargs_wrappers.s index 6a22a5395..fae37a483 100644 --- a/libsyscall/wrappers/varargs_wrappers.s +++ b/libsyscall/wrappers/varargs_wrappers.s @@ -36,112 +36,171 @@ * sem_t* __sem_open(const char *name, int oflag, int mode, int value); */ MI_ENTRY_POINT(_sem_open) + ARM64_STACK_PROLOG PUSH_FRAME +#if __LP64__ ldp x2, x3, [fp, #16] +#else + ldp w2, w3, [fp, #16] +#endif MI_CALL_EXTERNAL(___sem_open) +#if !__LP64__ + /* xnu returns a 64-bit '-1' on failure, but pointers must have the high + * 32-bits set to zero. The following instruction is equivalent to + * masking off the top 32-bits. + */ + mov w0, w0 +#endif POP_FRAME - ret + ARM64_STACK_EPILOG /* * int open(const char *name, int oflag, ...); * int __open(const char *name, int oflag, int mode, int value); */ MI_ENTRY_POINT(_open) + ARM64_STACK_PROLOG PUSH_FRAME +#if __LP64__ ldr x2, [fp, #16] +#else + ldr w2, [fp, #16] +#endif MI_CALL_EXTERNAL(___open) POP_FRAME - ret + ARM64_STACK_EPILOG /* * int open_nocancel(const char *name, int oflag, ...); * int __open_nocancel(const char *name, int oflag, int mode); */ MI_ENTRY_POINT(_open$NOCANCEL) + ARM64_STACK_PROLOG PUSH_FRAME +#if __LP64__ ldr x2, [fp, #16] +#else + ldr w2, [fp, #16] +#endif MI_CALL_EXTERNAL(___open_nocancel) POP_FRAME - ret + ARM64_STACK_EPILOG /* * int openat(int fd,const char *name, int oflag, ...); * int __openat(int fd, const char *name, int oflag, int mode, int value); */ MI_ENTRY_POINT(_openat) + ARM64_STACK_PROLOG PUSH_FRAME +#if __LP64__ ldr x3, [fp, #16] +#else + ldr w3, [fp, #16] +#endif MI_CALL_EXTERNAL(___openat) POP_FRAME - ret + ARM64_STACK_EPILOG /* * int openat_nocancel(int fd, const char *name, int oflag, ...); * int __openat_nocancel(int fd, const char *name, int oflag, int mode); */ MI_ENTRY_POINT(_openat$NOCANCEL) + ARM64_STACK_PROLOG PUSH_FRAME +#if __LP64__ ldr x3, [fp, #16] +#else + ldr w3, [fp, #16] +#endif MI_CALL_EXTERNAL(___openat_nocancel) POP_FRAME - ret + ARM64_STACK_EPILOG /* * int shm_open(const char *, int, ...); * int __shm_open(const char*, int oflag, int mode); */ MI_ENTRY_POINT(_shm_open) + ARM64_STACK_PROLOG PUSH_FRAME - ldr x2, [fp, #16] +#if __LP64__ + ldr x2, [fp, #16] +#else + ldr w2, [fp, #16] +#endif MI_CALL_EXTERNAL(___shm_open) POP_FRAME - ret + ARM64_STACK_EPILOG /* * int msgsys(int, ...); * int __msgsys(int which, int a2, int a3, int a4, int a5); */ MI_ENTRY_POINT(_msgsys) + ARM64_STACK_PROLOG PUSH_FRAME - ldp x1, x2, [fp, #16] - ldp x3, x4, [fp, #32] +#if __LP64__ + ldp x1, x2, [fp, #16] + ldp x3, x4, [fp, #32] +#else + ldp w1, w2, [fp, #16] + ldp w3, w4, [fp, #24] +#endif MI_CALL_EXTERNAL(___msgsys) POP_FRAME - ret /* * int semsys(int, ...); * int __semsys(int which, int a2, int a3, int a4, int a5); */ MI_ENTRY_POINT(_semsys) + ARM64_STACK_PROLOG PUSH_FRAME - ldp x1, x2, [fp, #16] - ldp x3, x4, [fp, #32] +#if __LP64__ + ldp x1, x2, [fp, #16] + ldp x3, x4, [fp, #32] +#else + ldp w1, w2, [fp, #16] + ldp w3, w4, [fp, #24] +#endif MI_CALL_EXTERNAL(___semsys) POP_FRAME - ret + ARM64_STACK_EPILOG /* * int semctl(int, int, int, ...); * int __semctl(int semid, int semnum, int cmd, semun_t arg); */ MI_ENTRY_POINT(_semctl) + ARM64_STACK_PROLOG PUSH_FRAME - ldr x3, [fp, #16] +#if __LP64__ + ldr x3, [fp, #16] +#else + ldr w3, [fp, #16] +#endif MI_CALL_EXTERNAL(___semctl) POP_FRAME - ret + ARM64_STACK_EPILOG /* * int shmsys(int, ...); * int __shmsys(int which, int a2, int a3, int a4); */ MI_ENTRY_POINT(_shmsys) + ARM64_STACK_PROLOG PUSH_FRAME - ldp x1, x2, [fp, #16] - ldr x3, [fp, #32] +#if __LP64__ + ldp x1, x2, [fp, #16] + ldr x3, [fp, #32] +#else + ldp w1, w2, [fp, #16] + ldr w3, [fp, #24] +#endif MI_CALL_EXTERNAL(___shmsys) POP_FRAME - ret + ARM64_STACK_EPILOG #endif /* defined(__arm64__) */