libc: Add ftruncate64 and improve 64-bit parameter syscall handling.
This patch improves the handling of 64-bit parameters in syscalls on ARM. The ARM EABI mandates that 64-bit quantities be passed in even/odd register pairs, which requires special treatment. This allows us to simplify our implementations of pread() and pwrite() and remove the C stubs for pread64() and pwrite64(). Also add ftruncate64() to <unistd.h> Change-Id: I407e2fd223ba0093dd2d0b04c6152fadfc9ce3ef Bug 3107933
This commit is contained in:
@@ -41,8 +41,8 @@ syscall_src += arch-arm/syscalls/sigaltstack.S
|
||||
syscall_src += arch-arm/syscalls/acct.S
|
||||
syscall_src += arch-arm/syscalls/read.S
|
||||
syscall_src += arch-arm/syscalls/write.S
|
||||
syscall_src += arch-arm/syscalls/__pread64.S
|
||||
syscall_src += arch-arm/syscalls/__pwrite64.S
|
||||
syscall_src += arch-arm/syscalls/pread64.S
|
||||
syscall_src += arch-arm/syscalls/pwrite64.S
|
||||
syscall_src += arch-arm/syscalls/__open.S
|
||||
syscall_src += arch-arm/syscalls/__openat.S
|
||||
syscall_src += arch-arm/syscalls/close.S
|
||||
@@ -70,6 +70,7 @@ syscall_src += arch-arm/syscalls/pipe2.S
|
||||
syscall_src += arch-arm/syscalls/dup2.S
|
||||
syscall_src += arch-arm/syscalls/select.S
|
||||
syscall_src += arch-arm/syscalls/ftruncate.S
|
||||
syscall_src += arch-arm/syscalls/ftruncate64.S
|
||||
syscall_src += arch-arm/syscalls/getdents.S
|
||||
syscall_src += arch-arm/syscalls/fsync.S
|
||||
syscall_src += arch-arm/syscalls/fdatasync.S
|
||||
|
||||
19
libc/arch-arm/syscalls/ftruncate64.S
Normal file
19
libc/arch-arm/syscalls/ftruncate64.S
Normal file
@@ -0,0 +1,19 @@
|
||||
/* autogenerated by gensyscalls.py */
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type ftruncate64, #function
|
||||
.globl ftruncate64
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
ftruncate64:
|
||||
.save {r4, r7}
|
||||
stmfd sp!, {r4, r7}
|
||||
ldr r7, =__NR_ftruncate64
|
||||
swi #0
|
||||
ldmfd sp!, {r4, r7}
|
||||
movs r0, r0
|
||||
bxpl lr
|
||||
b __set_syscall_errno
|
||||
.fnend
|
||||
@@ -2,12 +2,12 @@
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __pread64, #function
|
||||
.globl __pread64
|
||||
.type pread64, #function
|
||||
.globl pread64
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__pread64:
|
||||
pread64:
|
||||
mov ip, sp
|
||||
.save {r4, r5, r6, r7}
|
||||
stmfd sp!, {r4, r5, r6, r7}
|
||||
@@ -2,12 +2,12 @@
|
||||
#include <sys/linux-syscalls.h>
|
||||
|
||||
.text
|
||||
.type __pwrite64, #function
|
||||
.globl __pwrite64
|
||||
.type pwrite64, #function
|
||||
.globl pwrite64
|
||||
.align 4
|
||||
.fnstart
|
||||
|
||||
__pwrite64:
|
||||
pwrite64:
|
||||
mov ip, sp
|
||||
.save {r4, r5, r6, r7}
|
||||
stmfd sp!, {r4, r5, r6, r7}
|
||||
Reference in New Issue
Block a user