diff --git a/libc/SYSCALLS.TXT b/libc/SYSCALLS.TXT index e5e3c4df8..cb9af1c19 100644 --- a/libc/SYSCALLS.TXT +++ b/libc/SYSCALLS.TXT @@ -104,9 +104,6 @@ ssize_t pwrite64(int, void*, size_t, off64_t) all int __open:open(const char*, int, mode_t) all int __openat:openat(int, const char*, int, mode_t) all int close(int) all -off_t lseek(int, off_t, int) arm,x86,mips -off_t lseek|lseek64(int, off_t, int) x86_64 -int __llseek:_llseek(int, unsigned long, unsigned long, off64_t*, int) arm,x86,mips pid_t getpid() all void* mmap(void*, size_t, int, int, int, long) x86_64 void* __mmap2:mmap2(void*, size_t, int, int, int, long) arm,x86,mips @@ -133,8 +130,6 @@ int pipe2(int*, int) all int dup2(int, int) all int select:_newselect(int, struct fd_set*, struct fd_set*, struct fd_set*, struct timeval*) arm,x86,mips int select(int, struct fd_set*, struct fd_set*, struct fd_set*, struct timeval*) x86_64 -int ftruncate(int, off_t) all -int ftruncate64(int, off64_t) arm,x86,mips int getdents:getdents64(unsigned int, struct dirent*, unsigned int) all int fsync(int) all int fdatasync(int) all @@ -144,8 +139,6 @@ void sync(void) all int __fcntl64:fcntl64(int, int, void*) arm,x86,mips int __fstatfs64:fstatfs64(int, size_t, struct statfs*) arm,x86,mips int fstatfs(int, struct statfs*) x86_64 -ssize_t sendfile(int out_fd, int in_fd, off_t* offset, size_t count) all -ssize_t sendfile64(int out_fd, int in_fd, off64_t* offset, size_t count) arm,x86,mips int fstatat:fstatat64(int dirfd, const char* path, struct stat* buf, int flags) arm,x86,mips int mkdirat(int dirfd, const char* pathname, mode_t mode) all int fchownat(int dirfd, const char* path, uid_t owner, gid_t group, int flags) all @@ -156,6 +149,23 @@ ssize_t fgetxattr(int, const char*, void*, size_t) all ssize_t flistxattr(int, char*, size_t) all int fremovexattr(int, const char*) all +# Paired off_t/off64_t system calls. On 64-bit systems, +# sizeof(off_t) == sizeof(off64_t), so there we emit two symbols that are +# aliases. On 32-bit systems, we have two different system calls. +# That means that every system call in this section should take three lines. +off_t lseek(int, off_t, int) arm,mips,x86 +int __llseek:_llseek(int, unsigned long, unsigned long, off64_t*, int) arm,mips,x86 +off_t lseek|lseek64(int, off_t, int) x86_64 +int ftruncate(int, off_t) arm,mips,x86 +int ftruncate64(int, off64_t) arm,mips,x86 +int ftruncate|ftruncate64(int, off_t) x86_64 +ssize_t sendfile(int out_fd, int in_fd, off_t* offset, size_t count) arm,mips,x86 +ssize_t sendfile64(int out_fd, int in_fd, off64_t* offset, size_t count) arm,mips,x86 +ssize_t sendfile|sendfile64(int out_fd, int in_fd, off_t* offset, size_t count) x86_64 +int truncate(const char*, off_t) arm,mips,x86 +int truncate64(const char*, off64_t) arm,mips,x86 +int truncate|truncate64(const char*, off_t) x86_64 + # file system int link(const char*, const char*) all int unlink(const char*) all @@ -184,8 +194,6 @@ int access(const char*, int) all int faccessat(int, const char*, int, int) all int symlink(const char*, const char*) all int fchdir(int) all -int truncate(const char*, off_t) all -int truncate64(const char*, off64_t) arm,x86,mips int setxattr(const char*, const char*, const void*, size_t, int) all int lsetxattr(const char*, const char*, const void*, size_t, int) all ssize_t getxattr(const char*, const char*, void*, size_t) all @@ -311,7 +319,7 @@ int poll(struct pollfd*, unsigned int, long) all int eventfd:eventfd2(unsigned int, int) all -# ARM-specific ARM_NR_BASE == 0x0f0000 == 983040 +# ARM-specific int __set_tls:__ARM_NR_set_tls(void*) arm int cacheflush:__ARM_NR_cacheflush(long start, long end, long flags) arm diff --git a/libc/arch-x86_64/syscalls/ftruncate.S b/libc/arch-x86_64/syscalls/ftruncate.S index 2560aded2..5157fec5a 100644 --- a/libc/arch-x86_64/syscalls/ftruncate.S +++ b/libc/arch-x86_64/syscalls/ftruncate.S @@ -16,3 +16,6 @@ ENTRY(ftruncate) 1: ret END(ftruncate) + + .globl _C_LABEL(ftruncate64) + .equ _C_LABEL(ftruncate64), _C_LABEL(ftruncate) diff --git a/libc/arch-x86_64/syscalls/sendfile.S b/libc/arch-x86_64/syscalls/sendfile.S index 565276ec2..4aa2a31ba 100644 --- a/libc/arch-x86_64/syscalls/sendfile.S +++ b/libc/arch-x86_64/syscalls/sendfile.S @@ -17,3 +17,6 @@ ENTRY(sendfile) 1: ret END(sendfile) + + .globl _C_LABEL(sendfile64) + .equ _C_LABEL(sendfile64), _C_LABEL(sendfile) diff --git a/libc/arch-x86_64/syscalls/truncate.S b/libc/arch-x86_64/syscalls/truncate.S index 2fe7a9d62..6da314078 100644 --- a/libc/arch-x86_64/syscalls/truncate.S +++ b/libc/arch-x86_64/syscalls/truncate.S @@ -16,3 +16,6 @@ ENTRY(truncate) 1: ret END(truncate) + + .globl _C_LABEL(truncate64) + .equ _C_LABEL(truncate64), _C_LABEL(truncate)