diff options
author | Rich Felker <dalias@aerifal.cx> | 2019-07-16 23:07:49 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2019-07-16 23:07:49 -0400 |
commit | 1a28c6eade3046e73da0e80bbb7c377f24f514c7 (patch) | |
tree | e4233acc2b90a7c1c7fa9a8723108a0bbd72948d | |
parent | 918c5fa0fc656e49b1ab9ce47183a23e3a36bc00 (diff) | |
download | musl-1a28c6eade3046e73da0e80bbb7c377f24f514c7.tar.gz musl-1a28c6eade3046e73da0e80bbb7c377f24f514c7.tar.bz2 musl-1a28c6eade3046e73da0e80bbb7c377f24f514c7.tar.xz musl-1a28c6eade3046e73da0e80bbb7c377f24f514c7.zip |
fix broken lseek on x32 (x86_64/ILP32) with offsets larger than LONG_MAX
this is analogous to commit 918c5fa0fc656e49b1ab9ce47183a23e3a36bc00
which fixed the corresponding issue for mips n32.
-rw-r--r-- | src/unistd/x32/lseek.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/unistd/x32/lseek.c b/src/unistd/x32/lseek.c new file mode 100644 index 00000000..32636429 --- /dev/null +++ b/src/unistd/x32/lseek.c @@ -0,0 +1,15 @@ +#include <unistd.h> +#include "syscall.h" + +off_t __lseek(int fd, off_t offset, int whence) +{ + off_t ret; + __asm__ __volatile__ ("syscall" + : "=a"(ret) + : "a"(SYS_lseek), "D"(fd), "S"(offset), "d"(whence) + : "rcx", "r11", "memory"); + return ret < 0 ? __syscall_ret(ret) : ret; +} + +weak_alias(__lseek, lseek); +weak_alias(__lseek, lseek64); |