mirror of
https://git.musl-libc.org/git/musl
synced 2025-02-13 08:44:08 +03:00
fix passing of 64-bit syscall arguments on microblaze
this has been wrong since the beginning of the microblaze port: the syscall ABI for microblaze does not align 64-bit arguments on even register boundaries. commit 788d5e24ca19c6291cebd8d1ad5b5ed6abf42665 exposed the problem by introducing references to a nonexistent __syscall7. the ABI is not documented well anywhere, but I was able to confirm against both strace source and glibc source that microblaze is not using the alignment. per the syscall(2) man page, posix_fadvise, ftruncate, pread, pwrite, readahead, sync_file_range, and truncate were all affected and either did not work at all, or only worked by chance, e.g. when the affected argument slots were all zero.
This commit is contained in:
parent
2df8b1d806
commit
28198ac3af
@ -1,7 +1,7 @@
|
||||
#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_O(x) __SYSCALL_LL_E((x))
|
||||
|
||||
static __inline long __syscall0(long n)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user