diff options
author | Bruce Beare <bruce.j.beare@intel.com> | 2011-07-13 10:23:50 -0700 |
---|---|---|
committer | Bruce Beare <bruce.j.beare@intel.com> | 2012-01-03 15:18:04 -0800 |
commit | e30e909363c5c706f394050d9cd00ce222caadbf (patch) | |
tree | 33dcf8fcbca380db7910ff3519cfc4cf362ab917 /libc | |
parent | a37f3729730e4e7345977915d67adc3eea93dfe4 (diff) | |
download | android_bionic-e30e909363c5c706f394050d9cd00ce222caadbf.tar.gz android_bionic-e30e909363c5c706f394050d9cd00ce222caadbf.tar.bz2 android_bionic-e30e909363c5c706f394050d9cd00ce222caadbf.zip |
sreadahead: adding readahead system call into bionic libc
Add bionic libc to support readahead system call.
This is needed to enable sreadahead to work.
Change-Id: I3856e1a3833db82e6cf42fd34af7631bd40cc723
Author: Winson Yung <winson.w.yung@intel.com>
Signed-off-by: Bruce Beare <bruce.j.beare@intel.com>
Diffstat (limited to 'libc')
-rw-r--r-- | libc/SYSCALLS.TXT | 1 | ||||
-rw-r--r-- | libc/arch-arm/syscalls.mk | 1 | ||||
-rw-r--r-- | libc/arch-arm/syscalls/readahead.S | 16 | ||||
-rw-r--r-- | libc/arch-sh/syscalls.mk | 1 | ||||
-rw-r--r-- | libc/arch-sh/syscalls/readahead.S | 32 | ||||
-rw-r--r-- | libc/arch-x86/syscalls.mk | 1 | ||||
-rw-r--r-- | libc/arch-x86/syscalls/readahead.S | 32 | ||||
-rw-r--r-- | libc/include/sys/linux-syscalls.h | 1 | ||||
-rw-r--r-- | libc/include/sys/linux-unistd.h | 1 |
9 files changed, 86 insertions, 0 deletions
diff --git a/libc/SYSCALLS.TXT b/libc/SYSCALLS.TXT index 46e7b1f72..5c1e36ed0 100644 --- a/libc/SYSCALLS.TXT +++ b/libc/SYSCALLS.TXT @@ -50,6 +50,7 @@ gid_t getegid:getegid32 () 202 uid_t getresuid:getresuid32 () 209 gid_t getresgid:getresgid32 () 211 pid_t gettid() 224 +ssize_t readahead(int, off64_t, size_t) 225 int getgroups:getgroups32(int, gid_t *) 205 pid_t getpgid(pid_t) 132 pid_t getppid() 64 diff --git a/libc/arch-arm/syscalls.mk b/libc/arch-arm/syscalls.mk index e6c84f60f..1f2a1cd5e 100644 --- a/libc/arch-arm/syscalls.mk +++ b/libc/arch-arm/syscalls.mk @@ -14,6 +14,7 @@ syscall_src += arch-arm/syscalls/getegid.S syscall_src += arch-arm/syscalls/getresuid.S syscall_src += arch-arm/syscalls/getresgid.S syscall_src += arch-arm/syscalls/gettid.S +syscall_src += arch-arm/syscalls/readahead.S syscall_src += arch-arm/syscalls/getgroups.S syscall_src += arch-arm/syscalls/getpgid.S syscall_src += arch-arm/syscalls/getppid.S diff --git a/libc/arch-arm/syscalls/readahead.S b/libc/arch-arm/syscalls/readahead.S new file mode 100644 index 000000000..6aa8265ae --- /dev/null +++ b/libc/arch-arm/syscalls/readahead.S @@ -0,0 +1,16 @@ +/* autogenerated by gensyscalls.py */ +#include <machine/asm.h> +#include <sys/linux-syscalls.h> + +ENTRY(readahead) + mov ip, sp + .save {r4, r5, r6, r7} + stmfd sp!, {r4, r5, r6, r7} + ldmfd ip, {r4, r5, r6} + ldr r7, =__NR_readahead + swi #0 + ldmfd sp!, {r4, r5, r6, r7} + movs r0, r0 + bxpl lr + b __set_syscall_errno +END(readahead) diff --git a/libc/arch-sh/syscalls.mk b/libc/arch-sh/syscalls.mk index 1d8760087..9970fcf22 100644 --- a/libc/arch-sh/syscalls.mk +++ b/libc/arch-sh/syscalls.mk @@ -15,6 +15,7 @@ syscall_src += arch-sh/syscalls/getegid.S syscall_src += arch-sh/syscalls/getresuid.S syscall_src += arch-sh/syscalls/getresgid.S syscall_src += arch-sh/syscalls/gettid.S +syscall_src += arch-sh/syscalls/readahead.S syscall_src += arch-sh/syscalls/getgroups.S syscall_src += arch-sh/syscalls/getpgid.S syscall_src += arch-sh/syscalls/getppid.S diff --git a/libc/arch-sh/syscalls/readahead.S b/libc/arch-sh/syscalls/readahead.S new file mode 100644 index 000000000..df64b5f15 --- /dev/null +++ b/libc/arch-sh/syscalls/readahead.S @@ -0,0 +1,32 @@ +/* autogenerated by gensyscalls.py */ +#include <sys/linux-syscalls.h> + + .text + .type readahead, @function + .globl readahead + .align 4 + +readahead: + + /* invoke trap */ + mov.l 0f, r3 /* trap num */ + trapa #(4 + 0x10) + + /* check return value */ + cmp/pz r0 + bt __NR_readahead_end + + /* keep error number */ + sts.l pr, @-r15 + mov.l 1f, r1 + jsr @r1 + mov r0, r4 + lds.l @r15+, pr + +__NR_readahead_end: + rts + nop + + .align 2 +0: .long __NR_readahead +1: .long __set_syscall_errno diff --git a/libc/arch-x86/syscalls.mk b/libc/arch-x86/syscalls.mk index 3b85025dd..48d17315c 100644 --- a/libc/arch-x86/syscalls.mk +++ b/libc/arch-x86/syscalls.mk @@ -15,6 +15,7 @@ syscall_src += arch-x86/syscalls/getegid.S syscall_src += arch-x86/syscalls/getresuid.S syscall_src += arch-x86/syscalls/getresgid.S syscall_src += arch-x86/syscalls/gettid.S +syscall_src += arch-x86/syscalls/readahead.S syscall_src += arch-x86/syscalls/getgroups.S syscall_src += arch-x86/syscalls/getpgid.S syscall_src += arch-x86/syscalls/getppid.S diff --git a/libc/arch-x86/syscalls/readahead.S b/libc/arch-x86/syscalls/readahead.S new file mode 100644 index 000000000..b89314fc2 --- /dev/null +++ b/libc/arch-x86/syscalls/readahead.S @@ -0,0 +1,32 @@ +/* autogenerated by gensyscalls.py */ +#include <sys/linux-syscalls.h> + + .text + .type readahead, @function + .globl readahead + .align 4 + +readahead: + pushl %ebx + pushl %ecx + pushl %edx + pushl %esi + mov 20(%esp), %ebx + mov 24(%esp), %ecx + mov 28(%esp), %edx + mov 32(%esp), %esi + movl $__NR_readahead, %eax + int $0x80 + cmpl $-129, %eax + jb 1f + negl %eax + pushl %eax + call __set_errno + addl $4, %esp + orl $-1, %eax +1: + popl %esi + popl %edx + popl %ecx + popl %ebx + ret diff --git a/libc/include/sys/linux-syscalls.h b/libc/include/sys/linux-syscalls.h index 7b74a4b82..2fa5d3a4d 100644 --- a/libc/include/sys/linux-syscalls.h +++ b/libc/include/sys/linux-syscalls.h @@ -20,6 +20,7 @@ #define __NR_getresuid32 (__NR_SYSCALL_BASE + 209) #define __NR_getresgid32 (__NR_SYSCALL_BASE + 211) #define __NR_gettid (__NR_SYSCALL_BASE + 224) +#define __NR_readahead (__NR_SYSCALL_BASE + 225) #define __NR_getgroups32 (__NR_SYSCALL_BASE + 205) #define __NR_getpgid (__NR_SYSCALL_BASE + 132) #define __NR_getppid (__NR_SYSCALL_BASE + 64) diff --git a/libc/include/sys/linux-unistd.h b/libc/include/sys/linux-unistd.h index ae9077ffb..f06037404 100644 --- a/libc/include/sys/linux-unistd.h +++ b/libc/include/sys/linux-unistd.h @@ -20,6 +20,7 @@ gid_t getegid (void); uid_t getresuid (void); gid_t getresgid (void); pid_t gettid (void); +ssize_t readahead (int, off64_t, size_t); int getgroups (int, gid_t *); pid_t getpgid (pid_t); pid_t getppid (void); |