summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2015-08-11 20:55:18 +0000
committerRich Felker <dalias@aerifal.cx>2015-08-11 23:11:57 +0000
commite5b086e1d5fe52bf1553357ee790de86eda27bf1 (patch)
tree576741cbba2d1b0542af2f20012ec490f76a32f0 /arch
parent062bb737de06c3906b4b4a07c7fc0fb286287efe (diff)
downloadmusl-e5b086e1d5fe52bf1553357ee790de86eda27bf1.tar.gz
musl-e5b086e1d5fe52bf1553357ee790de86eda27bf1.tar.bz2
musl-e5b086e1d5fe52bf1553357ee790de86eda27bf1.tar.xz
musl-e5b086e1d5fe52bf1553357ee790de86eda27bf1.zip
aarch64: fix 64-bit syscall argument passing
On 32bit systems long long arguments are passed in a special way to some syscalls; this accidentally got copied to the AArch64 port. The following interfaces were broken: fallocate, fanotify, ftruncate, posix_fadvise, posix_fallocate, pread, pwrite, readahead, sync_file_range, truncate.
Diffstat (limited to 'arch')
-rw-r--r--arch/aarch64/syscall_arch.h6
1 files changed, 2 insertions, 4 deletions
diff --git a/arch/aarch64/syscall_arch.h b/arch/aarch64/syscall_arch.h
index a92bff97..25f5ce67 100644
--- a/arch/aarch64/syscall_arch.h
+++ b/arch/aarch64/syscall_arch.h
@@ -1,7 +1,5 @@
-#define __SYSCALL_LL_E(x) \
-((union { long long ll; long l[2]; }){ .ll = x }).l[0], \
-((union { long long ll; long l[2]; }){ .ll = x }).l[1]
-#define __SYSCALL_LL_O(x) 0, __SYSCALL_LL_E((x))
+#define __SYSCALL_LL_E(x) (x)
+#define __SYSCALL_LL_O(x) (x)
#define __asm_syscall(...) do { \
__asm__ __volatile__ ( "svc 0" \