summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-09-21 20:11:10 -0400
committerRich Felker <dalias@aerifal.cx>2011-09-21 20:11:10 -0400
commit0b6eb2dfb2e84a8a51906e7634f3d5edc230b058 (patch)
tree9a1c1c54a2c1807c742c55c9d8deb1a839c3f9d8 /arch
parentd30c331d1f3262223a99408ff2d49641a46ce409 (diff)
downloadmusl-0b6eb2dfb2e84a8a51906e7634f3d5edc230b058.tar.gz
musl-0b6eb2dfb2e84a8a51906e7634f3d5edc230b058.tar.bz2
musl-0b6eb2dfb2e84a8a51906e7634f3d5edc230b058.tar.xz
musl-0b6eb2dfb2e84a8a51906e7634f3d5edc230b058.zip
update syscalls with off_t arguments to handle argument alignment, if needed
the arm syscall abi requires 64-bit arguments to be aligned on an even register boundary. these new macros facilitate meeting the abi requirement without imposing significant ugliness on the code.
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/bits/syscall.h3
-rw-r--r--arch/i386/bits/syscall.h3
-rw-r--r--arch/x86_64/bits/syscall.h3
3 files changed, 6 insertions, 3 deletions
diff --git a/arch/arm/bits/syscall.h b/arch/arm/bits/syscall.h
index 380ac3ca..b0379e02 100644
--- a/arch/arm/bits/syscall.h
+++ b/arch/arm/bits/syscall.h
@@ -1,6 +1,7 @@
-#define __SYSCALL_LL(x) \
+#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))
long (__syscall)(long, ...);
diff --git a/arch/i386/bits/syscall.h b/arch/i386/bits/syscall.h
index 88cd0d7d..8d673186 100644
--- a/arch/i386/bits/syscall.h
+++ b/arch/i386/bits/syscall.h
@@ -1,6 +1,7 @@
-#define __SYSCALL_LL(x) \
+#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) __SYSCALL_LL_E((x))
static inline long __syscall0(long __n)
{
diff --git a/arch/x86_64/bits/syscall.h b/arch/x86_64/bits/syscall.h
index 2339d2e5..5eeb8a69 100644
--- a/arch/x86_64/bits/syscall.h
+++ b/arch/x86_64/bits/syscall.h
@@ -1,4 +1,5 @@
-#define __SYSCALL_LL(x) (x)
+#define __SYSCALL_LL_E(x) (x)
+#define __SYSCALL_LL_O(x) (x)
static inline long __syscall0(long __n)
{