fix broken lseek on x32 (x86_64/ILP32) with offsets larger than LONG_MAX

this is analogous to commit 918c5fa0fc
which fixed the corresponding issue for mips n32.
This commit is contained in:
Rich Felker 2019-07-16 23:07:49 -04:00
parent 918c5fa0fc
commit 1a28c6eade
1 changed files with 15 additions and 0 deletions

15
src/unistd/x32/lseek.c Normal file
View File

@ -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);