aarch64: fix 64-bit syscall argument passing
authorSzabolcs Nagy <nsz@port70.net>
Tue, 11 Aug 2015 20:55:18 +0000 (20:55 +0000)
committerRich Felker <dalias@aerifal.cx>
Tue, 11 Aug 2015 23:11:57 +0000 (23:11 +0000)
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.

arch/aarch64/syscall_arch.h

index a92bff9736a5bb0e282bed78925431002d541220..25f5ce670ff84a7410d5120141b488cdab0c7b6e 100644 (file)
@@ -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" \