am 557a5e08
: am e4ab1b67
: am f8dfb6f2
: Merge "Remove dependencies on obsolete __ARCH_WANT_SYSCALL_DEPRECATED system calls."
* commit '557a5e08c6d176ed142362243b62e1fc9619f7f3': Remove dependencies on obsolete __ARCH_WANT_SYSCALL_DEPRECATED system calls.
This commit is contained in:
commit
fe489d6ad6
@ -108,7 +108,6 @@ libc_common_src_files := \
|
|||||||
bionic/pathconf.c \
|
bionic/pathconf.c \
|
||||||
bionic/perror.c \
|
bionic/perror.c \
|
||||||
bionic/pread.c \
|
bionic/pread.c \
|
||||||
bionic/pselect.c \
|
|
||||||
bionic/ptsname.c \
|
bionic/ptsname.c \
|
||||||
bionic/ptsname_r.c \
|
bionic/ptsname_r.c \
|
||||||
bionic/pututline.c \
|
bionic/pututline.c \
|
||||||
@ -212,12 +211,15 @@ libc_bionic_src_files := \
|
|||||||
bionic/abort.cpp \
|
bionic/abort.cpp \
|
||||||
bionic/access.cpp \
|
bionic/access.cpp \
|
||||||
bionic/assert.cpp \
|
bionic/assert.cpp \
|
||||||
|
bionic/bionic_time_conversions.cpp \
|
||||||
bionic/brk.cpp \
|
bionic/brk.cpp \
|
||||||
bionic/chmod.cpp \
|
bionic/chmod.cpp \
|
||||||
bionic/chown.cpp \
|
bionic/chown.cpp \
|
||||||
bionic/dirent.cpp \
|
bionic/dirent.cpp \
|
||||||
bionic/dup2.cpp \
|
bionic/dup2.cpp \
|
||||||
bionic/epoll_create.cpp \
|
bionic/epoll_create.cpp \
|
||||||
|
bionic/epoll_wait.cpp \
|
||||||
|
bionic/epoll_pwait.cpp \
|
||||||
bionic/__errno.cpp \
|
bionic/__errno.cpp \
|
||||||
bionic/eventfd_read.cpp \
|
bionic/eventfd_read.cpp \
|
||||||
bionic/eventfd_write.cpp \
|
bionic/eventfd_write.cpp \
|
||||||
@ -236,7 +238,9 @@ libc_bionic_src_files := \
|
|||||||
bionic/mkfifo.cpp \
|
bionic/mkfifo.cpp \
|
||||||
bionic/mknod.cpp \
|
bionic/mknod.cpp \
|
||||||
bionic/open.cpp \
|
bionic/open.cpp \
|
||||||
|
bionic/pause.cpp \
|
||||||
bionic/pipe.cpp \
|
bionic/pipe.cpp \
|
||||||
|
bionic/poll.cpp \
|
||||||
bionic/pthread_attr.cpp \
|
bionic/pthread_attr.cpp \
|
||||||
bionic/pthread_detach.cpp \
|
bionic/pthread_detach.cpp \
|
||||||
bionic/pthread_equal.cpp \
|
bionic/pthread_equal.cpp \
|
||||||
|
@ -27,14 +27,9 @@
|
|||||||
# process management
|
# process management
|
||||||
void _exit:exit_group(int) all
|
void _exit:exit_group(int) all
|
||||||
void _exit_thread:exit(int) all
|
void _exit_thread:exit(int) all
|
||||||
pid_t __fork:fork(void) all
|
|
||||||
pid_t wait4(pid_t pid, int* status, int options, struct rusage* rusage) all
|
|
||||||
|
|
||||||
# NOTE: these stubs are unused.
|
pid_t wait4(pid_t, int*, int, struct rusage*) all
|
||||||
pid_t __sys_clone:clone(int, void*, int*, void*, int*) all
|
int __waitid:waitid(int, pid_t, struct siginfo_t*, int, void*) all
|
||||||
pid_t _waitpid:waitpid(pid_t, int*, int, struct rusage*) mips,x86
|
|
||||||
int __waitid:waitid(int, pid_t, struct siginfo_t*, int, void*) all
|
|
||||||
int __open:open(const char*, int, mode_t) arm,mips,x86
|
|
||||||
|
|
||||||
int execve(const char*, char* const*, char* const*) all
|
int execve(const char*, char* const*, char* const*) all
|
||||||
|
|
||||||
@ -126,8 +121,6 @@ int fchmod(int, mode_t) all
|
|||||||
int dup(int) all
|
int dup(int) all
|
||||||
int pipe2(int*, int) all
|
int pipe2(int*, int) all
|
||||||
int dup3(int, int, int) all
|
int dup3(int, 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 getdents:getdents64(unsigned int, struct dirent*, unsigned int) all
|
int getdents:getdents64(unsigned int, struct dirent*, unsigned int) all
|
||||||
int fsync(int) all
|
int fsync(int) all
|
||||||
int fdatasync(int) all
|
int fdatasync(int) all
|
||||||
@ -197,7 +190,6 @@ int swapon(const char*, int) all
|
|||||||
int swapoff(const char*) all
|
int swapoff(const char*) all
|
||||||
|
|
||||||
# time
|
# time
|
||||||
int pause() all
|
|
||||||
int gettimeofday(struct timeval*, struct timezone*) all
|
int gettimeofday(struct timeval*, struct timezone*) all
|
||||||
int settimeofday(const struct timeval*, const struct timezone*) all
|
int settimeofday(const struct timeval*, const struct timezone*) all
|
||||||
clock_t times(struct tms*) all
|
clock_t times(struct tms*) all
|
||||||
@ -289,9 +281,11 @@ int sysinfo(struct sysinfo*) all
|
|||||||
int personality(unsigned long) all
|
int personality(unsigned long) all
|
||||||
long perf_event_open(struct perf_event_attr* attr_uptr, pid_t pid, int cpu, int group_fd, unsigned long flags) all
|
long perf_event_open(struct perf_event_attr* attr_uptr, pid_t pid, int cpu, int group_fd, unsigned long flags) all
|
||||||
|
|
||||||
|
pid_t __clone:clone(int, void*, int*, void*, int*) all
|
||||||
|
|
||||||
int epoll_create1(int) all
|
int epoll_create1(int) all
|
||||||
int epoll_ctl(int, int op, int, struct epoll_event*) all
|
int epoll_ctl(int, int op, int, struct epoll_event*) all
|
||||||
int epoll_wait(int, struct epoll_event*, int, int) all
|
int __epoll_pwait:epoll_pwait(int, struct epoll_event*, int, int, const sigset_t*, size_t) all
|
||||||
|
|
||||||
int eventfd:eventfd2(unsigned int, int) all
|
int eventfd:eventfd2(unsigned int, int) all
|
||||||
|
|
||||||
@ -301,7 +295,8 @@ int inotify_init1(int) all
|
|||||||
int inotify_add_watch(int, const char*, unsigned int) all
|
int inotify_add_watch(int, const char*, unsigned int) all
|
||||||
int inotify_rm_watch(int, unsigned int) all
|
int inotify_rm_watch(int, unsigned int) all
|
||||||
|
|
||||||
int poll(struct pollfd*, unsigned int, long) all
|
int __pselect6:pselect6(int, fd_set*, fd_set*, fd_set*, timespec*, void*) all
|
||||||
|
int __ppoll:ppoll(pollfd*, unsigned int, timespec*, const sigset_t*, size_t) all
|
||||||
|
|
||||||
# ARM-specific
|
# ARM-specific
|
||||||
int __set_tls:__ARM_NR_set_tls(void*) arm
|
int __set_tls:__ARM_NR_set_tls(void*) arm
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
# Generated by gensyscalls.py. Do not edit.
|
# Generated by gensyscalls.py. Do not edit.
|
||||||
syscall_src :=
|
syscall_src :=
|
||||||
syscall_src += arch-arm/syscalls/__brk.S
|
syscall_src += arch-arm/syscalls/__brk.S
|
||||||
|
syscall_src += arch-arm/syscalls/__clone.S
|
||||||
|
syscall_src += arch-arm/syscalls/__epoll_pwait.S
|
||||||
syscall_src += arch-arm/syscalls/__fcntl.S
|
syscall_src += arch-arm/syscalls/__fcntl.S
|
||||||
syscall_src += arch-arm/syscalls/__fcntl64.S
|
syscall_src += arch-arm/syscalls/__fcntl64.S
|
||||||
syscall_src += arch-arm/syscalls/__fork.S
|
|
||||||
syscall_src += arch-arm/syscalls/__fstatfs64.S
|
syscall_src += arch-arm/syscalls/__fstatfs64.S
|
||||||
syscall_src += arch-arm/syscalls/__getcpu.S
|
syscall_src += arch-arm/syscalls/__getcpu.S
|
||||||
syscall_src += arch-arm/syscalls/__getcwd.S
|
syscall_src += arch-arm/syscalls/__getcwd.S
|
||||||
@ -11,8 +12,9 @@ syscall_src += arch-arm/syscalls/__getpriority.S
|
|||||||
syscall_src += arch-arm/syscalls/__ioctl.S
|
syscall_src += arch-arm/syscalls/__ioctl.S
|
||||||
syscall_src += arch-arm/syscalls/__llseek.S
|
syscall_src += arch-arm/syscalls/__llseek.S
|
||||||
syscall_src += arch-arm/syscalls/__mmap2.S
|
syscall_src += arch-arm/syscalls/__mmap2.S
|
||||||
syscall_src += arch-arm/syscalls/__open.S
|
|
||||||
syscall_src += arch-arm/syscalls/__openat.S
|
syscall_src += arch-arm/syscalls/__openat.S
|
||||||
|
syscall_src += arch-arm/syscalls/__ppoll.S
|
||||||
|
syscall_src += arch-arm/syscalls/__pselect6.S
|
||||||
syscall_src += arch-arm/syscalls/__ptrace.S
|
syscall_src += arch-arm/syscalls/__ptrace.S
|
||||||
syscall_src += arch-arm/syscalls/__reboot.S
|
syscall_src += arch-arm/syscalls/__reboot.S
|
||||||
syscall_src += arch-arm/syscalls/__rt_sigaction.S
|
syscall_src += arch-arm/syscalls/__rt_sigaction.S
|
||||||
@ -24,7 +26,6 @@ syscall_src += arch-arm/syscalls/__sched_getaffinity.S
|
|||||||
syscall_src += arch-arm/syscalls/__set_tls.S
|
syscall_src += arch-arm/syscalls/__set_tls.S
|
||||||
syscall_src += arch-arm/syscalls/__sigaction.S
|
syscall_src += arch-arm/syscalls/__sigaction.S
|
||||||
syscall_src += arch-arm/syscalls/__statfs64.S
|
syscall_src += arch-arm/syscalls/__statfs64.S
|
||||||
syscall_src += arch-arm/syscalls/__sys_clone.S
|
|
||||||
syscall_src += arch-arm/syscalls/__syslog.S
|
syscall_src += arch-arm/syscalls/__syslog.S
|
||||||
syscall_src += arch-arm/syscalls/__timer_create.S
|
syscall_src += arch-arm/syscalls/__timer_create.S
|
||||||
syscall_src += arch-arm/syscalls/__timer_delete.S
|
syscall_src += arch-arm/syscalls/__timer_delete.S
|
||||||
@ -53,7 +54,6 @@ syscall_src += arch-arm/syscalls/dup.S
|
|||||||
syscall_src += arch-arm/syscalls/dup3.S
|
syscall_src += arch-arm/syscalls/dup3.S
|
||||||
syscall_src += arch-arm/syscalls/epoll_create1.S
|
syscall_src += arch-arm/syscalls/epoll_create1.S
|
||||||
syscall_src += arch-arm/syscalls/epoll_ctl.S
|
syscall_src += arch-arm/syscalls/epoll_ctl.S
|
||||||
syscall_src += arch-arm/syscalls/epoll_wait.S
|
|
||||||
syscall_src += arch-arm/syscalls/eventfd.S
|
syscall_src += arch-arm/syscalls/eventfd.S
|
||||||
syscall_src += arch-arm/syscalls/execve.S
|
syscall_src += arch-arm/syscalls/execve.S
|
||||||
syscall_src += arch-arm/syscalls/faccessat.S
|
syscall_src += arch-arm/syscalls/faccessat.S
|
||||||
@ -124,11 +124,9 @@ syscall_src += arch-arm/syscalls/munlock.S
|
|||||||
syscall_src += arch-arm/syscalls/munlockall.S
|
syscall_src += arch-arm/syscalls/munlockall.S
|
||||||
syscall_src += arch-arm/syscalls/munmap.S
|
syscall_src += arch-arm/syscalls/munmap.S
|
||||||
syscall_src += arch-arm/syscalls/nanosleep.S
|
syscall_src += arch-arm/syscalls/nanosleep.S
|
||||||
syscall_src += arch-arm/syscalls/pause.S
|
|
||||||
syscall_src += arch-arm/syscalls/perf_event_open.S
|
syscall_src += arch-arm/syscalls/perf_event_open.S
|
||||||
syscall_src += arch-arm/syscalls/personality.S
|
syscall_src += arch-arm/syscalls/personality.S
|
||||||
syscall_src += arch-arm/syscalls/pipe2.S
|
syscall_src += arch-arm/syscalls/pipe2.S
|
||||||
syscall_src += arch-arm/syscalls/poll.S
|
|
||||||
syscall_src += arch-arm/syscalls/prctl.S
|
syscall_src += arch-arm/syscalls/prctl.S
|
||||||
syscall_src += arch-arm/syscalls/pread64.S
|
syscall_src += arch-arm/syscalls/pread64.S
|
||||||
syscall_src += arch-arm/syscalls/pwrite64.S
|
syscall_src += arch-arm/syscalls/pwrite64.S
|
||||||
@ -149,7 +147,6 @@ syscall_src += arch-arm/syscalls/sched_setaffinity.S
|
|||||||
syscall_src += arch-arm/syscalls/sched_setparam.S
|
syscall_src += arch-arm/syscalls/sched_setparam.S
|
||||||
syscall_src += arch-arm/syscalls/sched_setscheduler.S
|
syscall_src += arch-arm/syscalls/sched_setscheduler.S
|
||||||
syscall_src += arch-arm/syscalls/sched_yield.S
|
syscall_src += arch-arm/syscalls/sched_yield.S
|
||||||
syscall_src += arch-arm/syscalls/select.S
|
|
||||||
syscall_src += arch-arm/syscalls/sendfile.S
|
syscall_src += arch-arm/syscalls/sendfile.S
|
||||||
syscall_src += arch-arm/syscalls/sendfile64.S
|
syscall_src += arch-arm/syscalls/sendfile64.S
|
||||||
syscall_src += arch-arm/syscalls/sendmsg.S
|
syscall_src += arch-arm/syscalls/sendmsg.S
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(__sys_clone)
|
ENTRY(__clone)
|
||||||
mov ip, sp
|
mov ip, sp
|
||||||
.save {r4, r5, r6, r7}
|
.save {r4, r5, r6, r7}
|
||||||
stmfd sp!, {r4, r5, r6, r7}
|
stmfd sp!, {r4, r5, r6, r7}
|
||||||
@ -16,4 +16,4 @@ ENTRY(__sys_clone)
|
|||||||
bxls lr
|
bxls lr
|
||||||
neg r0, r0
|
neg r0, r0
|
||||||
b __set_errno
|
b __set_errno
|
||||||
END(__sys_clone)
|
END(__clone)
|
@ -4,13 +4,16 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(epoll_wait)
|
ENTRY(__epoll_pwait)
|
||||||
mov ip, r7
|
mov ip, sp
|
||||||
ldr r7, =__NR_epoll_wait
|
.save {r4, r5, r6, r7}
|
||||||
|
stmfd sp!, {r4, r5, r6, r7}
|
||||||
|
ldmfd ip, {r4, r5, r6}
|
||||||
|
ldr r7, =__NR_epoll_pwait
|
||||||
swi #0
|
swi #0
|
||||||
mov r7, ip
|
ldmfd sp!, {r4, r5, r6, r7}
|
||||||
cmn r0, #(MAX_ERRNO + 1)
|
cmn r0, #(MAX_ERRNO + 1)
|
||||||
bxls lr
|
bxls lr
|
||||||
neg r0, r0
|
neg r0, r0
|
||||||
b __set_errno
|
b __set_errno
|
||||||
END(epoll_wait)
|
END(__epoll_pwait)
|
@ -1,16 +0,0 @@
|
|||||||
/* Generated by gensyscalls.py. Do not edit. */
|
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
#include <linux/err.h>
|
|
||||||
#include <machine/asm.h>
|
|
||||||
|
|
||||||
ENTRY(__fork)
|
|
||||||
mov ip, r7
|
|
||||||
ldr r7, =__NR_fork
|
|
||||||
swi #0
|
|
||||||
mov r7, ip
|
|
||||||
cmn r0, #(MAX_ERRNO + 1)
|
|
||||||
bxls lr
|
|
||||||
neg r0, r0
|
|
||||||
b __set_errno
|
|
||||||
END(__fork)
|
|
@ -4,16 +4,16 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(select)
|
ENTRY(__ppoll)
|
||||||
mov ip, sp
|
mov ip, sp
|
||||||
.save {r4, r5, r6, r7}
|
.save {r4, r5, r6, r7}
|
||||||
stmfd sp!, {r4, r5, r6, r7}
|
stmfd sp!, {r4, r5, r6, r7}
|
||||||
ldmfd ip, {r4, r5, r6}
|
ldmfd ip, {r4, r5, r6}
|
||||||
ldr r7, =__NR__newselect
|
ldr r7, =__NR_ppoll
|
||||||
swi #0
|
swi #0
|
||||||
ldmfd sp!, {r4, r5, r6, r7}
|
ldmfd sp!, {r4, r5, r6, r7}
|
||||||
cmn r0, #(MAX_ERRNO + 1)
|
cmn r0, #(MAX_ERRNO + 1)
|
||||||
bxls lr
|
bxls lr
|
||||||
neg r0, r0
|
neg r0, r0
|
||||||
b __set_errno
|
b __set_errno
|
||||||
END(select)
|
END(__ppoll)
|
@ -4,13 +4,16 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(__open)
|
ENTRY(__pselect6)
|
||||||
mov ip, r7
|
mov ip, sp
|
||||||
ldr r7, =__NR_open
|
.save {r4, r5, r6, r7}
|
||||||
|
stmfd sp!, {r4, r5, r6, r7}
|
||||||
|
ldmfd ip, {r4, r5, r6}
|
||||||
|
ldr r7, =__NR_pselect6
|
||||||
swi #0
|
swi #0
|
||||||
mov r7, ip
|
ldmfd sp!, {r4, r5, r6, r7}
|
||||||
cmn r0, #(MAX_ERRNO + 1)
|
cmn r0, #(MAX_ERRNO + 1)
|
||||||
bxls lr
|
bxls lr
|
||||||
neg r0, r0
|
neg r0, r0
|
||||||
b __set_errno
|
b __set_errno
|
||||||
END(__open)
|
END(__pselect6)
|
@ -1,16 +0,0 @@
|
|||||||
/* Generated by gensyscalls.py. Do not edit. */
|
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
#include <linux/err.h>
|
|
||||||
#include <machine/asm.h>
|
|
||||||
|
|
||||||
ENTRY(pause)
|
|
||||||
mov ip, r7
|
|
||||||
ldr r7, =__NR_pause
|
|
||||||
swi #0
|
|
||||||
mov r7, ip
|
|
||||||
cmn r0, #(MAX_ERRNO + 1)
|
|
||||||
bxls lr
|
|
||||||
neg r0, r0
|
|
||||||
b __set_errno
|
|
||||||
END(pause)
|
|
@ -1,16 +0,0 @@
|
|||||||
/* Generated by gensyscalls.py. Do not edit. */
|
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
#include <linux/err.h>
|
|
||||||
#include <machine/asm.h>
|
|
||||||
|
|
||||||
ENTRY(poll)
|
|
||||||
mov ip, r7
|
|
||||||
ldr r7, =__NR_poll
|
|
||||||
swi #0
|
|
||||||
mov r7, ip
|
|
||||||
cmn r0, #(MAX_ERRNO + 1)
|
|
||||||
bxls lr
|
|
||||||
neg r0, r0
|
|
||||||
b __set_errno
|
|
||||||
END(poll)
|
|
@ -1,9 +1,10 @@
|
|||||||
# Generated by gensyscalls.py. Do not edit.
|
# Generated by gensyscalls.py. Do not edit.
|
||||||
syscall_src :=
|
syscall_src :=
|
||||||
syscall_src += arch-mips/syscalls/__brk.S
|
syscall_src += arch-mips/syscalls/__brk.S
|
||||||
|
syscall_src += arch-mips/syscalls/__clone.S
|
||||||
|
syscall_src += arch-mips/syscalls/__epoll_pwait.S
|
||||||
syscall_src += arch-mips/syscalls/__fcntl.S
|
syscall_src += arch-mips/syscalls/__fcntl.S
|
||||||
syscall_src += arch-mips/syscalls/__fcntl64.S
|
syscall_src += arch-mips/syscalls/__fcntl64.S
|
||||||
syscall_src += arch-mips/syscalls/__fork.S
|
|
||||||
syscall_src += arch-mips/syscalls/__fstatfs64.S
|
syscall_src += arch-mips/syscalls/__fstatfs64.S
|
||||||
syscall_src += arch-mips/syscalls/__getcpu.S
|
syscall_src += arch-mips/syscalls/__getcpu.S
|
||||||
syscall_src += arch-mips/syscalls/__getcwd.S
|
syscall_src += arch-mips/syscalls/__getcwd.S
|
||||||
@ -11,8 +12,9 @@ syscall_src += arch-mips/syscalls/__getpriority.S
|
|||||||
syscall_src += arch-mips/syscalls/__ioctl.S
|
syscall_src += arch-mips/syscalls/__ioctl.S
|
||||||
syscall_src += arch-mips/syscalls/__llseek.S
|
syscall_src += arch-mips/syscalls/__llseek.S
|
||||||
syscall_src += arch-mips/syscalls/__mmap2.S
|
syscall_src += arch-mips/syscalls/__mmap2.S
|
||||||
syscall_src += arch-mips/syscalls/__open.S
|
|
||||||
syscall_src += arch-mips/syscalls/__openat.S
|
syscall_src += arch-mips/syscalls/__openat.S
|
||||||
|
syscall_src += arch-mips/syscalls/__ppoll.S
|
||||||
|
syscall_src += arch-mips/syscalls/__pselect6.S
|
||||||
syscall_src += arch-mips/syscalls/__ptrace.S
|
syscall_src += arch-mips/syscalls/__ptrace.S
|
||||||
syscall_src += arch-mips/syscalls/__reboot.S
|
syscall_src += arch-mips/syscalls/__reboot.S
|
||||||
syscall_src += arch-mips/syscalls/__rt_sigaction.S
|
syscall_src += arch-mips/syscalls/__rt_sigaction.S
|
||||||
@ -24,7 +26,6 @@ syscall_src += arch-mips/syscalls/__sched_getaffinity.S
|
|||||||
syscall_src += arch-mips/syscalls/__set_thread_area.S
|
syscall_src += arch-mips/syscalls/__set_thread_area.S
|
||||||
syscall_src += arch-mips/syscalls/__sigaction.S
|
syscall_src += arch-mips/syscalls/__sigaction.S
|
||||||
syscall_src += arch-mips/syscalls/__statfs64.S
|
syscall_src += arch-mips/syscalls/__statfs64.S
|
||||||
syscall_src += arch-mips/syscalls/__sys_clone.S
|
|
||||||
syscall_src += arch-mips/syscalls/__syslog.S
|
syscall_src += arch-mips/syscalls/__syslog.S
|
||||||
syscall_src += arch-mips/syscalls/__timer_create.S
|
syscall_src += arch-mips/syscalls/__timer_create.S
|
||||||
syscall_src += arch-mips/syscalls/__timer_delete.S
|
syscall_src += arch-mips/syscalls/__timer_delete.S
|
||||||
@ -35,7 +36,6 @@ syscall_src += arch-mips/syscalls/__waitid.S
|
|||||||
syscall_src += arch-mips/syscalls/_exit.S
|
syscall_src += arch-mips/syscalls/_exit.S
|
||||||
syscall_src += arch-mips/syscalls/_exit_thread.S
|
syscall_src += arch-mips/syscalls/_exit_thread.S
|
||||||
syscall_src += arch-mips/syscalls/_flush_cache.S
|
syscall_src += arch-mips/syscalls/_flush_cache.S
|
||||||
syscall_src += arch-mips/syscalls/_waitpid.S
|
|
||||||
syscall_src += arch-mips/syscalls/accept.S
|
syscall_src += arch-mips/syscalls/accept.S
|
||||||
syscall_src += arch-mips/syscalls/acct.S
|
syscall_src += arch-mips/syscalls/acct.S
|
||||||
syscall_src += arch-mips/syscalls/bind.S
|
syscall_src += arch-mips/syscalls/bind.S
|
||||||
@ -54,7 +54,6 @@ syscall_src += arch-mips/syscalls/dup.S
|
|||||||
syscall_src += arch-mips/syscalls/dup3.S
|
syscall_src += arch-mips/syscalls/dup3.S
|
||||||
syscall_src += arch-mips/syscalls/epoll_create1.S
|
syscall_src += arch-mips/syscalls/epoll_create1.S
|
||||||
syscall_src += arch-mips/syscalls/epoll_ctl.S
|
syscall_src += arch-mips/syscalls/epoll_ctl.S
|
||||||
syscall_src += arch-mips/syscalls/epoll_wait.S
|
|
||||||
syscall_src += arch-mips/syscalls/eventfd.S
|
syscall_src += arch-mips/syscalls/eventfd.S
|
||||||
syscall_src += arch-mips/syscalls/execve.S
|
syscall_src += arch-mips/syscalls/execve.S
|
||||||
syscall_src += arch-mips/syscalls/faccessat.S
|
syscall_src += arch-mips/syscalls/faccessat.S
|
||||||
@ -126,11 +125,9 @@ syscall_src += arch-mips/syscalls/munlock.S
|
|||||||
syscall_src += arch-mips/syscalls/munlockall.S
|
syscall_src += arch-mips/syscalls/munlockall.S
|
||||||
syscall_src += arch-mips/syscalls/munmap.S
|
syscall_src += arch-mips/syscalls/munmap.S
|
||||||
syscall_src += arch-mips/syscalls/nanosleep.S
|
syscall_src += arch-mips/syscalls/nanosleep.S
|
||||||
syscall_src += arch-mips/syscalls/pause.S
|
|
||||||
syscall_src += arch-mips/syscalls/perf_event_open.S
|
syscall_src += arch-mips/syscalls/perf_event_open.S
|
||||||
syscall_src += arch-mips/syscalls/personality.S
|
syscall_src += arch-mips/syscalls/personality.S
|
||||||
syscall_src += arch-mips/syscalls/pipe2.S
|
syscall_src += arch-mips/syscalls/pipe2.S
|
||||||
syscall_src += arch-mips/syscalls/poll.S
|
|
||||||
syscall_src += arch-mips/syscalls/prctl.S
|
syscall_src += arch-mips/syscalls/prctl.S
|
||||||
syscall_src += arch-mips/syscalls/pread64.S
|
syscall_src += arch-mips/syscalls/pread64.S
|
||||||
syscall_src += arch-mips/syscalls/pwrite64.S
|
syscall_src += arch-mips/syscalls/pwrite64.S
|
||||||
@ -151,7 +148,6 @@ syscall_src += arch-mips/syscalls/sched_setaffinity.S
|
|||||||
syscall_src += arch-mips/syscalls/sched_setparam.S
|
syscall_src += arch-mips/syscalls/sched_setparam.S
|
||||||
syscall_src += arch-mips/syscalls/sched_setscheduler.S
|
syscall_src += arch-mips/syscalls/sched_setscheduler.S
|
||||||
syscall_src += arch-mips/syscalls/sched_yield.S
|
syscall_src += arch-mips/syscalls/sched_yield.S
|
||||||
syscall_src += arch-mips/syscalls/select.S
|
|
||||||
syscall_src += arch-mips/syscalls/sendfile.S
|
syscall_src += arch-mips/syscalls/sendfile.S
|
||||||
syscall_src += arch-mips/syscalls/sendfile64.S
|
syscall_src += arch-mips/syscalls/sendfile64.S
|
||||||
syscall_src += arch-mips/syscalls/sendmsg.S
|
syscall_src += arch-mips/syscalls/sendmsg.S
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
.text
|
.text
|
||||||
.globl __sys_clone
|
.globl __clone
|
||||||
.align 4
|
.align 4
|
||||||
.ent __sys_clone
|
.ent __clone
|
||||||
|
|
||||||
__sys_clone:
|
__clone:
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.cpload $t9
|
.cpload $t9
|
||||||
li $v0, __NR_clone
|
li $v0, __NR_clone
|
||||||
@ -20,4 +20,4 @@ __sys_clone:
|
|||||||
j $t9
|
j $t9
|
||||||
nop
|
nop
|
||||||
.set reorder
|
.set reorder
|
||||||
.end __sys_clone
|
.end __clone
|
@ -2,14 +2,14 @@
|
|||||||
|
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
.text
|
.text
|
||||||
.globl _waitpid
|
.globl __epoll_pwait
|
||||||
.align 4
|
.align 4
|
||||||
.ent _waitpid
|
.ent __epoll_pwait
|
||||||
|
|
||||||
_waitpid:
|
__epoll_pwait:
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.cpload $t9
|
.cpload $t9
|
||||||
li $v0, __NR_waitpid
|
li $v0, __NR_epoll_pwait
|
||||||
syscall
|
syscall
|
||||||
bnez $a3, 1f
|
bnez $a3, 1f
|
||||||
move $a0, $v0
|
move $a0, $v0
|
||||||
@ -20,4 +20,4 @@ _waitpid:
|
|||||||
j $t9
|
j $t9
|
||||||
nop
|
nop
|
||||||
.set reorder
|
.set reorder
|
||||||
.end _waitpid
|
.end __epoll_pwait
|
@ -2,14 +2,14 @@
|
|||||||
|
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
.text
|
.text
|
||||||
.globl __fork
|
.globl __ppoll
|
||||||
.align 4
|
.align 4
|
||||||
.ent __fork
|
.ent __ppoll
|
||||||
|
|
||||||
__fork:
|
__ppoll:
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.cpload $t9
|
.cpload $t9
|
||||||
li $v0, __NR_fork
|
li $v0, __NR_ppoll
|
||||||
syscall
|
syscall
|
||||||
bnez $a3, 1f
|
bnez $a3, 1f
|
||||||
move $a0, $v0
|
move $a0, $v0
|
||||||
@ -20,4 +20,4 @@ __fork:
|
|||||||
j $t9
|
j $t9
|
||||||
nop
|
nop
|
||||||
.set reorder
|
.set reorder
|
||||||
.end __fork
|
.end __ppoll
|
@ -2,14 +2,14 @@
|
|||||||
|
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
.text
|
.text
|
||||||
.globl __open
|
.globl __pselect6
|
||||||
.align 4
|
.align 4
|
||||||
.ent __open
|
.ent __pselect6
|
||||||
|
|
||||||
__open:
|
__pselect6:
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.cpload $t9
|
.cpload $t9
|
||||||
li $v0, __NR_open
|
li $v0, __NR_pselect6
|
||||||
syscall
|
syscall
|
||||||
bnez $a3, 1f
|
bnez $a3, 1f
|
||||||
move $a0, $v0
|
move $a0, $v0
|
||||||
@ -20,4 +20,4 @@ __open:
|
|||||||
j $t9
|
j $t9
|
||||||
nop
|
nop
|
||||||
.set reorder
|
.set reorder
|
||||||
.end __open
|
.end __pselect6
|
@ -1,23 +0,0 @@
|
|||||||
/* Generated by gensyscalls.py. Do not edit. */
|
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
.text
|
|
||||||
.globl epoll_wait
|
|
||||||
.align 4
|
|
||||||
.ent epoll_wait
|
|
||||||
|
|
||||||
epoll_wait:
|
|
||||||
.set noreorder
|
|
||||||
.cpload $t9
|
|
||||||
li $v0, __NR_epoll_wait
|
|
||||||
syscall
|
|
||||||
bnez $a3, 1f
|
|
||||||
move $a0, $v0
|
|
||||||
j $ra
|
|
||||||
nop
|
|
||||||
1:
|
|
||||||
la $t9,__set_errno
|
|
||||||
j $t9
|
|
||||||
nop
|
|
||||||
.set reorder
|
|
||||||
.end epoll_wait
|
|
@ -1,23 +0,0 @@
|
|||||||
/* Generated by gensyscalls.py. Do not edit. */
|
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
.text
|
|
||||||
.globl pause
|
|
||||||
.align 4
|
|
||||||
.ent pause
|
|
||||||
|
|
||||||
pause:
|
|
||||||
.set noreorder
|
|
||||||
.cpload $t9
|
|
||||||
li $v0, __NR_pause
|
|
||||||
syscall
|
|
||||||
bnez $a3, 1f
|
|
||||||
move $a0, $v0
|
|
||||||
j $ra
|
|
||||||
nop
|
|
||||||
1:
|
|
||||||
la $t9,__set_errno
|
|
||||||
j $t9
|
|
||||||
nop
|
|
||||||
.set reorder
|
|
||||||
.end pause
|
|
@ -1,23 +0,0 @@
|
|||||||
/* Generated by gensyscalls.py. Do not edit. */
|
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
.text
|
|
||||||
.globl poll
|
|
||||||
.align 4
|
|
||||||
.ent poll
|
|
||||||
|
|
||||||
poll:
|
|
||||||
.set noreorder
|
|
||||||
.cpload $t9
|
|
||||||
li $v0, __NR_poll
|
|
||||||
syscall
|
|
||||||
bnez $a3, 1f
|
|
||||||
move $a0, $v0
|
|
||||||
j $ra
|
|
||||||
nop
|
|
||||||
1:
|
|
||||||
la $t9,__set_errno
|
|
||||||
j $t9
|
|
||||||
nop
|
|
||||||
.set reorder
|
|
||||||
.end poll
|
|
@ -1,23 +0,0 @@
|
|||||||
/* Generated by gensyscalls.py. Do not edit. */
|
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
.text
|
|
||||||
.globl select
|
|
||||||
.align 4
|
|
||||||
.ent select
|
|
||||||
|
|
||||||
select:
|
|
||||||
.set noreorder
|
|
||||||
.cpload $t9
|
|
||||||
li $v0, __NR__newselect
|
|
||||||
syscall
|
|
||||||
bnez $a3, 1f
|
|
||||||
move $a0, $v0
|
|
||||||
j $ra
|
|
||||||
nop
|
|
||||||
1:
|
|
||||||
la $t9,__set_errno
|
|
||||||
j $t9
|
|
||||||
nop
|
|
||||||
.set reorder
|
|
||||||
.end select
|
|
@ -1,9 +1,10 @@
|
|||||||
# Generated by gensyscalls.py. Do not edit.
|
# Generated by gensyscalls.py. Do not edit.
|
||||||
syscall_src :=
|
syscall_src :=
|
||||||
syscall_src += arch-x86/syscalls/__brk.S
|
syscall_src += arch-x86/syscalls/__brk.S
|
||||||
|
syscall_src += arch-x86/syscalls/__clone.S
|
||||||
|
syscall_src += arch-x86/syscalls/__epoll_pwait.S
|
||||||
syscall_src += arch-x86/syscalls/__fcntl.S
|
syscall_src += arch-x86/syscalls/__fcntl.S
|
||||||
syscall_src += arch-x86/syscalls/__fcntl64.S
|
syscall_src += arch-x86/syscalls/__fcntl64.S
|
||||||
syscall_src += arch-x86/syscalls/__fork.S
|
|
||||||
syscall_src += arch-x86/syscalls/__fstatfs64.S
|
syscall_src += arch-x86/syscalls/__fstatfs64.S
|
||||||
syscall_src += arch-x86/syscalls/__getcpu.S
|
syscall_src += arch-x86/syscalls/__getcpu.S
|
||||||
syscall_src += arch-x86/syscalls/__getcwd.S
|
syscall_src += arch-x86/syscalls/__getcwd.S
|
||||||
@ -11,8 +12,9 @@ syscall_src += arch-x86/syscalls/__getpriority.S
|
|||||||
syscall_src += arch-x86/syscalls/__ioctl.S
|
syscall_src += arch-x86/syscalls/__ioctl.S
|
||||||
syscall_src += arch-x86/syscalls/__llseek.S
|
syscall_src += arch-x86/syscalls/__llseek.S
|
||||||
syscall_src += arch-x86/syscalls/__mmap2.S
|
syscall_src += arch-x86/syscalls/__mmap2.S
|
||||||
syscall_src += arch-x86/syscalls/__open.S
|
|
||||||
syscall_src += arch-x86/syscalls/__openat.S
|
syscall_src += arch-x86/syscalls/__openat.S
|
||||||
|
syscall_src += arch-x86/syscalls/__ppoll.S
|
||||||
|
syscall_src += arch-x86/syscalls/__pselect6.S
|
||||||
syscall_src += arch-x86/syscalls/__ptrace.S
|
syscall_src += arch-x86/syscalls/__ptrace.S
|
||||||
syscall_src += arch-x86/syscalls/__reboot.S
|
syscall_src += arch-x86/syscalls/__reboot.S
|
||||||
syscall_src += arch-x86/syscalls/__rt_sigaction.S
|
syscall_src += arch-x86/syscalls/__rt_sigaction.S
|
||||||
@ -24,7 +26,6 @@ syscall_src += arch-x86/syscalls/__sched_getaffinity.S
|
|||||||
syscall_src += arch-x86/syscalls/__set_thread_area.S
|
syscall_src += arch-x86/syscalls/__set_thread_area.S
|
||||||
syscall_src += arch-x86/syscalls/__sigaction.S
|
syscall_src += arch-x86/syscalls/__sigaction.S
|
||||||
syscall_src += arch-x86/syscalls/__statfs64.S
|
syscall_src += arch-x86/syscalls/__statfs64.S
|
||||||
syscall_src += arch-x86/syscalls/__sys_clone.S
|
|
||||||
syscall_src += arch-x86/syscalls/__syslog.S
|
syscall_src += arch-x86/syscalls/__syslog.S
|
||||||
syscall_src += arch-x86/syscalls/__timer_create.S
|
syscall_src += arch-x86/syscalls/__timer_create.S
|
||||||
syscall_src += arch-x86/syscalls/__timer_delete.S
|
syscall_src += arch-x86/syscalls/__timer_delete.S
|
||||||
@ -34,7 +35,6 @@ syscall_src += arch-x86/syscalls/__timer_settime.S
|
|||||||
syscall_src += arch-x86/syscalls/__waitid.S
|
syscall_src += arch-x86/syscalls/__waitid.S
|
||||||
syscall_src += arch-x86/syscalls/_exit.S
|
syscall_src += arch-x86/syscalls/_exit.S
|
||||||
syscall_src += arch-x86/syscalls/_exit_thread.S
|
syscall_src += arch-x86/syscalls/_exit_thread.S
|
||||||
syscall_src += arch-x86/syscalls/_waitpid.S
|
|
||||||
syscall_src += arch-x86/syscalls/accept.S
|
syscall_src += arch-x86/syscalls/accept.S
|
||||||
syscall_src += arch-x86/syscalls/acct.S
|
syscall_src += arch-x86/syscalls/acct.S
|
||||||
syscall_src += arch-x86/syscalls/bind.S
|
syscall_src += arch-x86/syscalls/bind.S
|
||||||
@ -53,7 +53,6 @@ syscall_src += arch-x86/syscalls/dup.S
|
|||||||
syscall_src += arch-x86/syscalls/dup3.S
|
syscall_src += arch-x86/syscalls/dup3.S
|
||||||
syscall_src += arch-x86/syscalls/epoll_create1.S
|
syscall_src += arch-x86/syscalls/epoll_create1.S
|
||||||
syscall_src += arch-x86/syscalls/epoll_ctl.S
|
syscall_src += arch-x86/syscalls/epoll_ctl.S
|
||||||
syscall_src += arch-x86/syscalls/epoll_wait.S
|
|
||||||
syscall_src += arch-x86/syscalls/eventfd.S
|
syscall_src += arch-x86/syscalls/eventfd.S
|
||||||
syscall_src += arch-x86/syscalls/execve.S
|
syscall_src += arch-x86/syscalls/execve.S
|
||||||
syscall_src += arch-x86/syscalls/faccessat.S
|
syscall_src += arch-x86/syscalls/faccessat.S
|
||||||
@ -125,11 +124,9 @@ syscall_src += arch-x86/syscalls/munlock.S
|
|||||||
syscall_src += arch-x86/syscalls/munlockall.S
|
syscall_src += arch-x86/syscalls/munlockall.S
|
||||||
syscall_src += arch-x86/syscalls/munmap.S
|
syscall_src += arch-x86/syscalls/munmap.S
|
||||||
syscall_src += arch-x86/syscalls/nanosleep.S
|
syscall_src += arch-x86/syscalls/nanosleep.S
|
||||||
syscall_src += arch-x86/syscalls/pause.S
|
|
||||||
syscall_src += arch-x86/syscalls/perf_event_open.S
|
syscall_src += arch-x86/syscalls/perf_event_open.S
|
||||||
syscall_src += arch-x86/syscalls/personality.S
|
syscall_src += arch-x86/syscalls/personality.S
|
||||||
syscall_src += arch-x86/syscalls/pipe2.S
|
syscall_src += arch-x86/syscalls/pipe2.S
|
||||||
syscall_src += arch-x86/syscalls/poll.S
|
|
||||||
syscall_src += arch-x86/syscalls/prctl.S
|
syscall_src += arch-x86/syscalls/prctl.S
|
||||||
syscall_src += arch-x86/syscalls/pread64.S
|
syscall_src += arch-x86/syscalls/pread64.S
|
||||||
syscall_src += arch-x86/syscalls/pwrite64.S
|
syscall_src += arch-x86/syscalls/pwrite64.S
|
||||||
@ -150,7 +147,6 @@ syscall_src += arch-x86/syscalls/sched_setaffinity.S
|
|||||||
syscall_src += arch-x86/syscalls/sched_setparam.S
|
syscall_src += arch-x86/syscalls/sched_setparam.S
|
||||||
syscall_src += arch-x86/syscalls/sched_setscheduler.S
|
syscall_src += arch-x86/syscalls/sched_setscheduler.S
|
||||||
syscall_src += arch-x86/syscalls/sched_yield.S
|
syscall_src += arch-x86/syscalls/sched_yield.S
|
||||||
syscall_src += arch-x86/syscalls/select.S
|
|
||||||
syscall_src += arch-x86/syscalls/sendfile.S
|
syscall_src += arch-x86/syscalls/sendfile.S
|
||||||
syscall_src += arch-x86/syscalls/sendfile64.S
|
syscall_src += arch-x86/syscalls/sendfile64.S
|
||||||
syscall_src += arch-x86/syscalls/sendmsg.S
|
syscall_src += arch-x86/syscalls/sendmsg.S
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(__sys_clone)
|
ENTRY(__clone)
|
||||||
pushl %ebx
|
pushl %ebx
|
||||||
pushl %ecx
|
pushl %ecx
|
||||||
pushl %edx
|
pushl %edx
|
||||||
@ -31,4 +31,4 @@ ENTRY(__sys_clone)
|
|||||||
popl %ecx
|
popl %ecx
|
||||||
popl %ebx
|
popl %ebx
|
||||||
ret
|
ret
|
||||||
END(__sys_clone)
|
END(__clone)
|
@ -4,16 +4,20 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(_waitpid)
|
ENTRY(__epoll_pwait)
|
||||||
pushl %ebx
|
pushl %ebx
|
||||||
pushl %ecx
|
pushl %ecx
|
||||||
pushl %edx
|
pushl %edx
|
||||||
pushl %esi
|
pushl %esi
|
||||||
mov 20(%esp), %ebx
|
pushl %edi
|
||||||
mov 24(%esp), %ecx
|
pushl %ebp
|
||||||
mov 28(%esp), %edx
|
mov 28(%esp), %ebx
|
||||||
mov 32(%esp), %esi
|
mov 32(%esp), %ecx
|
||||||
movl $__NR_waitpid, %eax
|
mov 36(%esp), %edx
|
||||||
|
mov 40(%esp), %esi
|
||||||
|
mov 44(%esp), %edi
|
||||||
|
mov 48(%esp), %ebp
|
||||||
|
movl $__NR_epoll_pwait, %eax
|
||||||
int $0x80
|
int $0x80
|
||||||
cmpl $-MAX_ERRNO, %eax
|
cmpl $-MAX_ERRNO, %eax
|
||||||
jb 1f
|
jb 1f
|
||||||
@ -23,9 +27,11 @@ ENTRY(_waitpid)
|
|||||||
addl $4, %esp
|
addl $4, %esp
|
||||||
orl $-1, %eax
|
orl $-1, %eax
|
||||||
1:
|
1:
|
||||||
|
popl %ebp
|
||||||
|
popl %edi
|
||||||
popl %esi
|
popl %esi
|
||||||
popl %edx
|
popl %edx
|
||||||
popl %ecx
|
popl %ecx
|
||||||
popl %ebx
|
popl %ebx
|
||||||
ret
|
ret
|
||||||
END(_waitpid)
|
END(__epoll_pwait)
|
@ -1,22 +0,0 @@
|
|||||||
/* Generated by gensyscalls.py. Do not edit. */
|
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
#include <linux/err.h>
|
|
||||||
#include <machine/asm.h>
|
|
||||||
|
|
||||||
ENTRY(__fork)
|
|
||||||
pushl %ebx
|
|
||||||
mov 8(%esp), %ebx
|
|
||||||
movl $__NR_fork, %eax
|
|
||||||
int $0x80
|
|
||||||
cmpl $-MAX_ERRNO, %eax
|
|
||||||
jb 1f
|
|
||||||
negl %eax
|
|
||||||
pushl %eax
|
|
||||||
call __set_errno
|
|
||||||
addl $4, %esp
|
|
||||||
orl $-1, %eax
|
|
||||||
1:
|
|
||||||
popl %ebx
|
|
||||||
ret
|
|
||||||
END(__fork)
|
|
@ -1,28 +0,0 @@
|
|||||||
/* Generated by gensyscalls.py. Do not edit. */
|
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
#include <linux/err.h>
|
|
||||||
#include <machine/asm.h>
|
|
||||||
|
|
||||||
ENTRY(__open)
|
|
||||||
pushl %ebx
|
|
||||||
pushl %ecx
|
|
||||||
pushl %edx
|
|
||||||
mov 16(%esp), %ebx
|
|
||||||
mov 20(%esp), %ecx
|
|
||||||
mov 24(%esp), %edx
|
|
||||||
movl $__NR_open, %eax
|
|
||||||
int $0x80
|
|
||||||
cmpl $-MAX_ERRNO, %eax
|
|
||||||
jb 1f
|
|
||||||
negl %eax
|
|
||||||
pushl %eax
|
|
||||||
call __set_errno
|
|
||||||
addl $4, %esp
|
|
||||||
orl $-1, %eax
|
|
||||||
1:
|
|
||||||
popl %edx
|
|
||||||
popl %ecx
|
|
||||||
popl %ebx
|
|
||||||
ret
|
|
||||||
END(__open)
|
|
@ -4,7 +4,7 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(select)
|
ENTRY(__ppoll)
|
||||||
pushl %ebx
|
pushl %ebx
|
||||||
pushl %ecx
|
pushl %ecx
|
||||||
pushl %edx
|
pushl %edx
|
||||||
@ -15,7 +15,7 @@ ENTRY(select)
|
|||||||
mov 32(%esp), %edx
|
mov 32(%esp), %edx
|
||||||
mov 36(%esp), %esi
|
mov 36(%esp), %esi
|
||||||
mov 40(%esp), %edi
|
mov 40(%esp), %edi
|
||||||
movl $__NR__newselect, %eax
|
movl $__NR_ppoll, %eax
|
||||||
int $0x80
|
int $0x80
|
||||||
cmpl $-MAX_ERRNO, %eax
|
cmpl $-MAX_ERRNO, %eax
|
||||||
jb 1f
|
jb 1f
|
||||||
@ -31,4 +31,4 @@ ENTRY(select)
|
|||||||
popl %ecx
|
popl %ecx
|
||||||
popl %ebx
|
popl %ebx
|
||||||
ret
|
ret
|
||||||
END(select)
|
END(__ppoll)
|
@ -4,16 +4,20 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(epoll_wait)
|
ENTRY(__pselect6)
|
||||||
pushl %ebx
|
pushl %ebx
|
||||||
pushl %ecx
|
pushl %ecx
|
||||||
pushl %edx
|
pushl %edx
|
||||||
pushl %esi
|
pushl %esi
|
||||||
mov 20(%esp), %ebx
|
pushl %edi
|
||||||
mov 24(%esp), %ecx
|
pushl %ebp
|
||||||
mov 28(%esp), %edx
|
mov 28(%esp), %ebx
|
||||||
mov 32(%esp), %esi
|
mov 32(%esp), %ecx
|
||||||
movl $__NR_epoll_wait, %eax
|
mov 36(%esp), %edx
|
||||||
|
mov 40(%esp), %esi
|
||||||
|
mov 44(%esp), %edi
|
||||||
|
mov 48(%esp), %ebp
|
||||||
|
movl $__NR_pselect6, %eax
|
||||||
int $0x80
|
int $0x80
|
||||||
cmpl $-MAX_ERRNO, %eax
|
cmpl $-MAX_ERRNO, %eax
|
||||||
jb 1f
|
jb 1f
|
||||||
@ -23,9 +27,11 @@ ENTRY(epoll_wait)
|
|||||||
addl $4, %esp
|
addl $4, %esp
|
||||||
orl $-1, %eax
|
orl $-1, %eax
|
||||||
1:
|
1:
|
||||||
|
popl %ebp
|
||||||
|
popl %edi
|
||||||
popl %esi
|
popl %esi
|
||||||
popl %edx
|
popl %edx
|
||||||
popl %ecx
|
popl %ecx
|
||||||
popl %ebx
|
popl %ebx
|
||||||
ret
|
ret
|
||||||
END(epoll_wait)
|
END(__pselect6)
|
@ -1,19 +0,0 @@
|
|||||||
/* Generated by gensyscalls.py. Do not edit. */
|
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
#include <linux/err.h>
|
|
||||||
#include <machine/asm.h>
|
|
||||||
|
|
||||||
ENTRY(pause)
|
|
||||||
movl $__NR_pause, %eax
|
|
||||||
int $0x80
|
|
||||||
cmpl $-MAX_ERRNO, %eax
|
|
||||||
jb 1f
|
|
||||||
negl %eax
|
|
||||||
pushl %eax
|
|
||||||
call __set_errno
|
|
||||||
addl $4, %esp
|
|
||||||
orl $-1, %eax
|
|
||||||
1:
|
|
||||||
ret
|
|
||||||
END(pause)
|
|
@ -1,28 +0,0 @@
|
|||||||
/* Generated by gensyscalls.py. Do not edit. */
|
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
#include <linux/err.h>
|
|
||||||
#include <machine/asm.h>
|
|
||||||
|
|
||||||
ENTRY(poll)
|
|
||||||
pushl %ebx
|
|
||||||
pushl %ecx
|
|
||||||
pushl %edx
|
|
||||||
mov 16(%esp), %ebx
|
|
||||||
mov 20(%esp), %ecx
|
|
||||||
mov 24(%esp), %edx
|
|
||||||
movl $__NR_poll, %eax
|
|
||||||
int $0x80
|
|
||||||
cmpl $-MAX_ERRNO, %eax
|
|
||||||
jb 1f
|
|
||||||
negl %eax
|
|
||||||
pushl %eax
|
|
||||||
call __set_errno
|
|
||||||
addl $4, %esp
|
|
||||||
orl $-1, %eax
|
|
||||||
1:
|
|
||||||
popl %edx
|
|
||||||
popl %ecx
|
|
||||||
popl %ebx
|
|
||||||
ret
|
|
||||||
END(poll)
|
|
@ -2,12 +2,15 @@
|
|||||||
syscall_src :=
|
syscall_src :=
|
||||||
syscall_src += arch-x86_64/syscalls/__arch_prctl.S
|
syscall_src += arch-x86_64/syscalls/__arch_prctl.S
|
||||||
syscall_src += arch-x86_64/syscalls/__brk.S
|
syscall_src += arch-x86_64/syscalls/__brk.S
|
||||||
syscall_src += arch-x86_64/syscalls/__fork.S
|
syscall_src += arch-x86_64/syscalls/__clone.S
|
||||||
|
syscall_src += arch-x86_64/syscalls/__epoll_pwait.S
|
||||||
syscall_src += arch-x86_64/syscalls/__getcpu.S
|
syscall_src += arch-x86_64/syscalls/__getcpu.S
|
||||||
syscall_src += arch-x86_64/syscalls/__getcwd.S
|
syscall_src += arch-x86_64/syscalls/__getcwd.S
|
||||||
syscall_src += arch-x86_64/syscalls/__getpriority.S
|
syscall_src += arch-x86_64/syscalls/__getpriority.S
|
||||||
syscall_src += arch-x86_64/syscalls/__ioctl.S
|
syscall_src += arch-x86_64/syscalls/__ioctl.S
|
||||||
syscall_src += arch-x86_64/syscalls/__openat.S
|
syscall_src += arch-x86_64/syscalls/__openat.S
|
||||||
|
syscall_src += arch-x86_64/syscalls/__ppoll.S
|
||||||
|
syscall_src += arch-x86_64/syscalls/__pselect6.S
|
||||||
syscall_src += arch-x86_64/syscalls/__ptrace.S
|
syscall_src += arch-x86_64/syscalls/__ptrace.S
|
||||||
syscall_src += arch-x86_64/syscalls/__reboot.S
|
syscall_src += arch-x86_64/syscalls/__reboot.S
|
||||||
syscall_src += arch-x86_64/syscalls/__rt_sigaction.S
|
syscall_src += arch-x86_64/syscalls/__rt_sigaction.S
|
||||||
@ -16,7 +19,6 @@ syscall_src += arch-x86_64/syscalls/__rt_sigprocmask.S
|
|||||||
syscall_src += arch-x86_64/syscalls/__rt_sigsuspend.S
|
syscall_src += arch-x86_64/syscalls/__rt_sigsuspend.S
|
||||||
syscall_src += arch-x86_64/syscalls/__rt_sigtimedwait.S
|
syscall_src += arch-x86_64/syscalls/__rt_sigtimedwait.S
|
||||||
syscall_src += arch-x86_64/syscalls/__sched_getaffinity.S
|
syscall_src += arch-x86_64/syscalls/__sched_getaffinity.S
|
||||||
syscall_src += arch-x86_64/syscalls/__sys_clone.S
|
|
||||||
syscall_src += arch-x86_64/syscalls/__syslog.S
|
syscall_src += arch-x86_64/syscalls/__syslog.S
|
||||||
syscall_src += arch-x86_64/syscalls/__timer_create.S
|
syscall_src += arch-x86_64/syscalls/__timer_create.S
|
||||||
syscall_src += arch-x86_64/syscalls/__timer_delete.S
|
syscall_src += arch-x86_64/syscalls/__timer_delete.S
|
||||||
@ -44,7 +46,6 @@ syscall_src += arch-x86_64/syscalls/dup.S
|
|||||||
syscall_src += arch-x86_64/syscalls/dup3.S
|
syscall_src += arch-x86_64/syscalls/dup3.S
|
||||||
syscall_src += arch-x86_64/syscalls/epoll_create1.S
|
syscall_src += arch-x86_64/syscalls/epoll_create1.S
|
||||||
syscall_src += arch-x86_64/syscalls/epoll_ctl.S
|
syscall_src += arch-x86_64/syscalls/epoll_ctl.S
|
||||||
syscall_src += arch-x86_64/syscalls/epoll_wait.S
|
|
||||||
syscall_src += arch-x86_64/syscalls/eventfd.S
|
syscall_src += arch-x86_64/syscalls/eventfd.S
|
||||||
syscall_src += arch-x86_64/syscalls/execve.S
|
syscall_src += arch-x86_64/syscalls/execve.S
|
||||||
syscall_src += arch-x86_64/syscalls/faccessat.S
|
syscall_src += arch-x86_64/syscalls/faccessat.S
|
||||||
@ -118,11 +119,9 @@ syscall_src += arch-x86_64/syscalls/munlock.S
|
|||||||
syscall_src += arch-x86_64/syscalls/munlockall.S
|
syscall_src += arch-x86_64/syscalls/munlockall.S
|
||||||
syscall_src += arch-x86_64/syscalls/munmap.S
|
syscall_src += arch-x86_64/syscalls/munmap.S
|
||||||
syscall_src += arch-x86_64/syscalls/nanosleep.S
|
syscall_src += arch-x86_64/syscalls/nanosleep.S
|
||||||
syscall_src += arch-x86_64/syscalls/pause.S
|
|
||||||
syscall_src += arch-x86_64/syscalls/perf_event_open.S
|
syscall_src += arch-x86_64/syscalls/perf_event_open.S
|
||||||
syscall_src += arch-x86_64/syscalls/personality.S
|
syscall_src += arch-x86_64/syscalls/personality.S
|
||||||
syscall_src += arch-x86_64/syscalls/pipe2.S
|
syscall_src += arch-x86_64/syscalls/pipe2.S
|
||||||
syscall_src += arch-x86_64/syscalls/poll.S
|
|
||||||
syscall_src += arch-x86_64/syscalls/prctl.S
|
syscall_src += arch-x86_64/syscalls/prctl.S
|
||||||
syscall_src += arch-x86_64/syscalls/pread64.S
|
syscall_src += arch-x86_64/syscalls/pread64.S
|
||||||
syscall_src += arch-x86_64/syscalls/pwrite64.S
|
syscall_src += arch-x86_64/syscalls/pwrite64.S
|
||||||
@ -143,7 +142,6 @@ syscall_src += arch-x86_64/syscalls/sched_setaffinity.S
|
|||||||
syscall_src += arch-x86_64/syscalls/sched_setparam.S
|
syscall_src += arch-x86_64/syscalls/sched_setparam.S
|
||||||
syscall_src += arch-x86_64/syscalls/sched_setscheduler.S
|
syscall_src += arch-x86_64/syscalls/sched_setscheduler.S
|
||||||
syscall_src += arch-x86_64/syscalls/sched_yield.S
|
syscall_src += arch-x86_64/syscalls/sched_yield.S
|
||||||
syscall_src += arch-x86_64/syscalls/select.S
|
|
||||||
syscall_src += arch-x86_64/syscalls/sendfile.S
|
syscall_src += arch-x86_64/syscalls/sendfile.S
|
||||||
syscall_src += arch-x86_64/syscalls/sendmsg.S
|
syscall_src += arch-x86_64/syscalls/sendmsg.S
|
||||||
syscall_src += arch-x86_64/syscalls/sendto.S
|
syscall_src += arch-x86_64/syscalls/sendto.S
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(__sys_clone)
|
ENTRY(__clone)
|
||||||
movq %rcx, %r10
|
movq %rcx, %r10
|
||||||
movl $__NR_clone, %eax
|
movl $__NR_clone, %eax
|
||||||
syscall
|
syscall
|
||||||
@ -16,4 +16,4 @@ ENTRY(__sys_clone)
|
|||||||
orq $-1, %rax
|
orq $-1, %rax
|
||||||
1:
|
1:
|
||||||
ret
|
ret
|
||||||
END(__sys_clone)
|
END(__clone)
|
@ -4,8 +4,9 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(pause)
|
ENTRY(__epoll_pwait)
|
||||||
movl $__NR_pause, %eax
|
movq %rcx, %r10
|
||||||
|
movl $__NR_epoll_pwait, %eax
|
||||||
syscall
|
syscall
|
||||||
cmpq $-MAX_ERRNO, %rax
|
cmpq $-MAX_ERRNO, %rax
|
||||||
jb 1f
|
jb 1f
|
||||||
@ -15,4 +16,4 @@ ENTRY(pause)
|
|||||||
orq $-1, %rax
|
orq $-1, %rax
|
||||||
1:
|
1:
|
||||||
ret
|
ret
|
||||||
END(pause)
|
END(__epoll_pwait)
|
@ -1,18 +0,0 @@
|
|||||||
/* Generated by gensyscalls.py. Do not edit. */
|
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
#include <linux/err.h>
|
|
||||||
#include <machine/asm.h>
|
|
||||||
|
|
||||||
ENTRY(__fork)
|
|
||||||
movl $__NR_fork, %eax
|
|
||||||
syscall
|
|
||||||
cmpq $-MAX_ERRNO, %rax
|
|
||||||
jb 1f
|
|
||||||
negl %eax
|
|
||||||
movl %eax, %edi
|
|
||||||
call __set_errno
|
|
||||||
orq $-1, %rax
|
|
||||||
1:
|
|
||||||
ret
|
|
||||||
END(__fork)
|
|
@ -4,9 +4,9 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(select)
|
ENTRY(__ppoll)
|
||||||
movq %rcx, %r10
|
movq %rcx, %r10
|
||||||
movl $__NR_select, %eax
|
movl $__NR_ppoll, %eax
|
||||||
syscall
|
syscall
|
||||||
cmpq $-MAX_ERRNO, %rax
|
cmpq $-MAX_ERRNO, %rax
|
||||||
jb 1f
|
jb 1f
|
||||||
@ -16,4 +16,4 @@ ENTRY(select)
|
|||||||
orq $-1, %rax
|
orq $-1, %rax
|
||||||
1:
|
1:
|
||||||
ret
|
ret
|
||||||
END(select)
|
END(__ppoll)
|
@ -4,9 +4,9 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
ENTRY(epoll_wait)
|
ENTRY(__pselect6)
|
||||||
movq %rcx, %r10
|
movq %rcx, %r10
|
||||||
movl $__NR_epoll_wait, %eax
|
movl $__NR_pselect6, %eax
|
||||||
syscall
|
syscall
|
||||||
cmpq $-MAX_ERRNO, %rax
|
cmpq $-MAX_ERRNO, %rax
|
||||||
jb 1f
|
jb 1f
|
||||||
@ -16,4 +16,4 @@ ENTRY(epoll_wait)
|
|||||||
orq $-1, %rax
|
orq $-1, %rax
|
||||||
1:
|
1:
|
||||||
ret
|
ret
|
||||||
END(epoll_wait)
|
END(__pselect6)
|
@ -1,18 +0,0 @@
|
|||||||
/* Generated by gensyscalls.py. Do not edit. */
|
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
#include <linux/err.h>
|
|
||||||
#include <machine/asm.h>
|
|
||||||
|
|
||||||
ENTRY(poll)
|
|
||||||
movl $__NR_poll, %eax
|
|
||||||
syscall
|
|
||||||
cmpq $-MAX_ERRNO, %rax
|
|
||||||
jb 1f
|
|
||||||
negl %eax
|
|
||||||
movl %eax, %edi
|
|
||||||
call __set_errno
|
|
||||||
orq $-1, %rax
|
|
||||||
1:
|
|
||||||
ret
|
|
||||||
END(poll)
|
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2008 The Android Open Source Project
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -25,35 +25,27 @@
|
|||||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
#include <sys/select.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <pthread.h>
|
|
||||||
|
|
||||||
int
|
#include "private/bionic_time_conversions.h"
|
||||||
pselect(int n, fd_set* readfds, fd_set* writefds, fd_set* errfds,
|
|
||||||
const struct timespec* timeout, const sigset_t* sigmask)
|
|
||||||
{
|
|
||||||
sigset_t oldmask;
|
|
||||||
int result;
|
|
||||||
struct timeval tv, *tv_timeout = NULL;
|
|
||||||
|
|
||||||
if (sigmask != NULL)
|
bool timespec_from_timeval(timespec& ts, const timeval& tv) {
|
||||||
pthread_sigmask( SIG_SETMASK, sigmask, &oldmask );
|
// Whole seconds can just be copied.
|
||||||
|
ts.tv_sec = tv.tv_sec;
|
||||||
|
|
||||||
if (timeout != NULL) {
|
// But we might overflow when converting microseconds to nanoseconds.
|
||||||
tv_timeout = &tv;
|
if (tv.tv_usec >= 1000000 || tv.tv_usec < 0) {
|
||||||
tv.tv_sec = timeout->tv_sec;
|
return false;
|
||||||
tv.tv_usec = (timeout->tv_nsec + 999)/1000; // round up
|
}
|
||||||
if (tv.tv_usec >= 1000000) {
|
ts.tv_nsec = tv.tv_usec * 1000;
|
||||||
tv.tv_sec += 1;
|
return true;
|
||||||
tv.tv_usec -= 1000000;
|
}
|
||||||
}
|
|
||||||
}
|
void timespec_from_ms(timespec& ts, const int ms) {
|
||||||
|
ts.tv_sec = ms / 1000;
|
||||||
result = select( n, readfds, writefds, errfds, tv_timeout );
|
ts.tv_nsec = (ms % 1000) * 1000000;
|
||||||
|
}
|
||||||
if (sigmask != NULL)
|
|
||||||
pthread_sigmask( SIG_SETMASK, &oldmask, NULL );
|
void timeval_from_timespec(timeval& tv, const timespec& ts) {
|
||||||
|
tv.tv_sec = ts.tv_sec;
|
||||||
return result;
|
tv.tv_usec = ts.tv_nsec / 1000;
|
||||||
}
|
}
|
43
libc/bionic/epoll_pwait.cpp
Normal file
43
libc/bionic/epoll_pwait.cpp
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/epoll.h>
|
||||||
|
|
||||||
|
#include "private/kernel_sigset_t.h"
|
||||||
|
|
||||||
|
extern "C" int __epoll_pwait(int, epoll_event*, int, int, const kernel_sigset_t*, size_t);
|
||||||
|
|
||||||
|
int epoll_pwait(int fd, epoll_event* events, int max_events, int timeout, const sigset_t* ss) {
|
||||||
|
kernel_sigset_t kernel_ss;
|
||||||
|
kernel_sigset_t* kernel_ss_ptr = NULL;
|
||||||
|
if (ss != NULL) {
|
||||||
|
kernel_ss.set(ss);
|
||||||
|
kernel_ss_ptr = &kernel_ss;
|
||||||
|
}
|
||||||
|
return __epoll_pwait(fd, events, max_events, timeout, kernel_ss_ptr, sizeof(kernel_ss));
|
||||||
|
}
|
33
libc/bionic/epoll_wait.cpp
Normal file
33
libc/bionic/epoll_wait.cpp
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/epoll.h>
|
||||||
|
|
||||||
|
int epoll_wait(int fd, struct epoll_event* events, int max_events, int timeout) {
|
||||||
|
return epoll_pwait(fd, events, max_events, timeout, NULL);
|
||||||
|
}
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
#include "private/bionic_pthread.h"
|
#include "private/bionic_pthread.h"
|
||||||
|
|
||||||
extern "C" int __fork();
|
extern "C" int __clone(int, void*, int*, void*, int*);
|
||||||
|
|
||||||
int fork() {
|
int fork() {
|
||||||
// POSIX mandates that the timers of a fork child process be
|
// POSIX mandates that the timers of a fork child process be
|
||||||
@ -41,7 +41,7 @@ int fork() {
|
|||||||
__timer_table_start_stop(1);
|
__timer_table_start_stop(1);
|
||||||
__bionic_atfork_run_prepare();
|
__bionic_atfork_run_prepare();
|
||||||
|
|
||||||
int result = __fork();
|
int result = __clone(SIGCHLD, NULL, NULL, NULL, NULL);
|
||||||
if (result != 0) { // Not a child process.
|
if (result != 0) { // Not a child process.
|
||||||
__timer_table_start_stop(0);
|
__timer_table_start_stop(0);
|
||||||
__bionic_atfork_run_parent();
|
__bionic_atfork_run_parent();
|
||||||
|
42
libc/bionic/pause.cpp
Normal file
42
libc/bionic/pause.cpp
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "private/kernel_sigset_t.h"
|
||||||
|
|
||||||
|
extern "C" int __rt_sigprocmask(int, const kernel_sigset_t*, kernel_sigset_t*, size_t);
|
||||||
|
extern "C" int __rt_sigsuspend(const kernel_sigset_t*, size_t);
|
||||||
|
|
||||||
|
int pause() {
|
||||||
|
kernel_sigset_t mask;
|
||||||
|
if (__rt_sigprocmask(SIG_SETMASK, NULL, &mask, sizeof(mask)) == -1) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return __rt_sigsuspend(&mask, sizeof(mask));
|
||||||
|
}
|
110
libc/bionic/poll.cpp
Normal file
110
libc/bionic/poll.cpp
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/poll.h>
|
||||||
|
#include <sys/select.h>
|
||||||
|
|
||||||
|
#include "private/bionic_time_conversions.h"
|
||||||
|
#include "private/kernel_sigset_t.h"
|
||||||
|
|
||||||
|
extern "C" int __ppoll(pollfd*, unsigned int, timespec*, const kernel_sigset_t*, size_t);
|
||||||
|
extern "C" int __pselect6(int, fd_set*, fd_set*, fd_set*, timespec*, void*);
|
||||||
|
|
||||||
|
int poll(pollfd* fds, nfds_t fd_count, int ms) {
|
||||||
|
timespec ts;
|
||||||
|
timespec* ts_ptr = NULL;
|
||||||
|
if (ms >= 0) {
|
||||||
|
timespec_from_ms(ts, ms);
|
||||||
|
ts_ptr = &ts;
|
||||||
|
}
|
||||||
|
return __ppoll(fds, fd_count, ts_ptr, NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ppoll(pollfd* fds, nfds_t fd_count, const timespec* ts, const sigset_t* ss) {
|
||||||
|
timespec mutable_ts;
|
||||||
|
timespec* mutable_ts_ptr = NULL;
|
||||||
|
if (ts != NULL) {
|
||||||
|
mutable_ts = *ts;
|
||||||
|
mutable_ts_ptr = &mutable_ts;
|
||||||
|
}
|
||||||
|
|
||||||
|
kernel_sigset_t kernel_ss;
|
||||||
|
kernel_sigset_t* kernel_ss_ptr = NULL;
|
||||||
|
if (ss != NULL) {
|
||||||
|
kernel_ss.set(ss);
|
||||||
|
kernel_ss_ptr = &kernel_ss;
|
||||||
|
}
|
||||||
|
|
||||||
|
return __ppoll(fds, fd_count, mutable_ts_ptr, kernel_ss_ptr, sizeof(kernel_ss));
|
||||||
|
}
|
||||||
|
|
||||||
|
int select(int fd_count, fd_set* read_fds, fd_set* write_fds, fd_set* error_fds, timeval* tv) {
|
||||||
|
timespec ts;
|
||||||
|
timespec* ts_ptr = NULL;
|
||||||
|
if (tv != NULL) {
|
||||||
|
if (!timespec_from_timeval(ts, *tv)) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
ts_ptr = &ts;
|
||||||
|
}
|
||||||
|
int result = __pselect6(fd_count, read_fds, write_fds, error_fds, ts_ptr, NULL);
|
||||||
|
if (tv != NULL) {
|
||||||
|
timeval_from_timespec(*tv, ts);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int pselect(int fd_count, fd_set* read_fds, fd_set* write_fds, fd_set* error_fds,
|
||||||
|
const timespec* ts, const sigset_t* ss) {
|
||||||
|
timespec mutable_ts;
|
||||||
|
timespec* mutable_ts_ptr = NULL;
|
||||||
|
if (ts != NULL) {
|
||||||
|
mutable_ts = *ts;
|
||||||
|
mutable_ts_ptr = &mutable_ts;
|
||||||
|
}
|
||||||
|
|
||||||
|
kernel_sigset_t kernel_ss;
|
||||||
|
kernel_sigset_t* kernel_ss_ptr = NULL;
|
||||||
|
if (ss != NULL) {
|
||||||
|
kernel_ss.set(ss);
|
||||||
|
kernel_ss_ptr = &kernel_ss;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The Linux kernel only handles 6 arguments and this system call really needs 7,
|
||||||
|
// so the last argument is a void* pointing to:
|
||||||
|
struct pselect6_extra_data_t {
|
||||||
|
uintptr_t ss_addr;
|
||||||
|
size_t ss_len;
|
||||||
|
};
|
||||||
|
pselect6_extra_data_t extra_data;
|
||||||
|
extra_data.ss_addr = reinterpret_cast<uintptr_t>(kernel_ss_ptr);
|
||||||
|
extra_data.ss_len = sizeof(kernel_ss);
|
||||||
|
|
||||||
|
return __pselect6(fd_count, read_fds, write_fds, error_fds, mutable_ts_ptr, &extra_data);
|
||||||
|
}
|
@ -1176,13 +1176,10 @@ int pthread_cond_timedwait_relative_np(pthread_cond_t *cond,
|
|||||||
|
|
||||||
int pthread_cond_timeout_np(pthread_cond_t *cond,
|
int pthread_cond_timeout_np(pthread_cond_t *cond,
|
||||||
pthread_mutex_t * mutex,
|
pthread_mutex_t * mutex,
|
||||||
unsigned msecs)
|
unsigned ms)
|
||||||
{
|
{
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
|
timespec_from_ms(ts, ms);
|
||||||
ts.tv_sec = msecs / 1000;
|
|
||||||
ts.tv_nsec = (msecs % 1000) * 1000000;
|
|
||||||
|
|
||||||
return __pthread_cond_timedwait_relative(cond, mutex, &ts);
|
return __pthread_cond_timedwait_relative(cond, mutex, &ts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,21 +30,13 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
#include "private/bionic_time_conversions.h"
|
||||||
|
|
||||||
int utimes(const char* path, const timeval tv[2]) {
|
int utimes(const char* path, const timeval tv[2]) {
|
||||||
timespec ts[2];
|
timespec ts[2];
|
||||||
|
if (!timespec_from_timeval(ts[0], tv[0]) || !timespec_from_timeval(ts[1], tv[1])) {
|
||||||
// Whole seconds can just be copied.
|
|
||||||
ts[0].tv_sec = tv[0].tv_sec;
|
|
||||||
ts[1].tv_sec = tv[1].tv_sec;
|
|
||||||
|
|
||||||
// But we might overflow when converting microseconds to nanoseconds.
|
|
||||||
if (tv[0].tv_usec >= 1000000 || tv[0].tv_usec < 0 ||
|
|
||||||
tv[1].tv_usec >= 1000000 || tv[1].tv_usec < 0) {
|
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
ts[0].tv_nsec = tv[0].tv_usec * 1000;
|
|
||||||
ts[1].tv_nsec = tv[1].tv_usec * 1000;
|
|
||||||
|
|
||||||
return utimensat(AT_FDCWD, path, ts, 0);
|
return utimensat(AT_FDCWD, path, ts, 0);
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ pid_t waitpid(pid_t pid, int* status, int options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int waitid(idtype_t which, id_t id, siginfo_t* info, int options) {
|
int waitid(idtype_t which, id_t id, siginfo_t* info, int options) {
|
||||||
/* the system call takes an option struct rusage that we don't need */
|
// The system call takes an optional struct rusage that we don't need.
|
||||||
return __waitid(which, id, info, options, NULL);
|
return __waitid(which, id, info, options, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,18 +25,21 @@
|
|||||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _POLL_H_
|
#ifndef _POLL_H_
|
||||||
#define _POLL_H_
|
#define _POLL_H_
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
#include <linux/poll.h>
|
#include <linux/poll.h>
|
||||||
|
#include <signal.h> /* For sigset_t. */
|
||||||
|
#include <time.h> /* For timespec. */
|
||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
typedef unsigned int nfds_t;
|
typedef unsigned int nfds_t;
|
||||||
|
|
||||||
/* POSIX specifies "int" for the timeout, Linux seems to use long... */
|
extern int poll(struct pollfd*, nfds_t, int);
|
||||||
extern int poll(struct pollfd *, nfds_t, long);
|
extern int ppoll(struct pollfd*, nfds_t, const struct timespec*, const sigset_t*);
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@ -31,7 +31,8 @@
|
|||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <asm/fcntl.h> /* For O_CLOEXEC. */
|
#include <fcntl.h> /* For O_CLOEXEC. */
|
||||||
|
#include <signal.h> /* For sigset_t. */
|
||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
@ -56,24 +57,23 @@ __BEGIN_DECLS
|
|||||||
|
|
||||||
#define EPOLL_CLOEXEC O_CLOEXEC
|
#define EPOLL_CLOEXEC O_CLOEXEC
|
||||||
|
|
||||||
typedef union epoll_data
|
typedef union epoll_data {
|
||||||
{
|
void* ptr;
|
||||||
void *ptr;
|
int fd;
|
||||||
int fd;
|
uint32_t u32;
|
||||||
unsigned int u32;
|
uint64_t u64;
|
||||||
unsigned long long u64;
|
|
||||||
} epoll_data_t;
|
} epoll_data_t;
|
||||||
|
|
||||||
struct epoll_event
|
struct epoll_event {
|
||||||
{
|
uint32_t events;
|
||||||
unsigned int events;
|
epoll_data_t data;
|
||||||
epoll_data_t data;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int epoll_create(int size);
|
int epoll_create(int);
|
||||||
int epoll_create1(int flags);
|
int epoll_create1(int);
|
||||||
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
|
int epoll_ctl(int, int, int, struct epoll_event*);
|
||||||
int epoll_wait(int epfd, struct epoll_event *events, int max, int timeout);
|
int epoll_wait(int, struct epoll_event*, int, int);
|
||||||
|
int epoll_pwait(int, struct epoll_event*, int, int, const sigset_t*);
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
44
libc/private/bionic_time_conversions.h
Normal file
44
libc/private/bionic_time_conversions.h
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _BIONIC_TIME_CONVERSIONS_H
|
||||||
|
#define _BIONIC_TIME_CONVERSIONS_H
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
__LIBC_HIDDEN__ bool timespec_from_timeval(timespec& ts, const timeval& tv);
|
||||||
|
__LIBC_HIDDEN__ void timespec_from_ms(timespec& ts, const int ms);
|
||||||
|
|
||||||
|
__LIBC_HIDDEN__ void timeval_from_timespec(timeval& tv, const timespec& ts);
|
||||||
|
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
#endif
|
@ -32,7 +32,7 @@ union kernel_sigset_t {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void clear() {
|
void clear() {
|
||||||
memset(this, 0, sizeof(*this));
|
__builtin_memset(this, 0, sizeof(*this));
|
||||||
}
|
}
|
||||||
|
|
||||||
void set(const sigset_t* value) {
|
void set(const sigset_t* value) {
|
||||||
|
@ -81,6 +81,7 @@ test_src_files = \
|
|||||||
string_test.cpp \
|
string_test.cpp \
|
||||||
strings_test.cpp \
|
strings_test.cpp \
|
||||||
stubs_test.cpp \
|
stubs_test.cpp \
|
||||||
|
sys_epoll_test.cpp \
|
||||||
sys_select_test.cpp \
|
sys_select_test.cpp \
|
||||||
sys_sendfile_test.cpp \
|
sys_sendfile_test.cpp \
|
||||||
sys_stat_test.cpp \
|
sys_stat_test.cpp \
|
||||||
|
@ -170,8 +170,6 @@ static void SigSuspendTestHelper(int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(signal, sigsuspend_sigpending) {
|
TEST(signal, sigsuspend_sigpending) {
|
||||||
ScopedSignalHandler ssh(SIGALRM, SigSuspendTestHelper);
|
|
||||||
|
|
||||||
// Block SIGALRM.
|
// Block SIGALRM.
|
||||||
sigset_t just_SIGALRM;
|
sigset_t just_SIGALRM;
|
||||||
sigemptyset(&just_SIGALRM);
|
sigemptyset(&just_SIGALRM);
|
||||||
@ -179,6 +177,8 @@ TEST(signal, sigsuspend_sigpending) {
|
|||||||
sigset_t original_set;
|
sigset_t original_set;
|
||||||
ASSERT_EQ(0, sigprocmask(SIG_BLOCK, &just_SIGALRM, &original_set));
|
ASSERT_EQ(0, sigprocmask(SIG_BLOCK, &just_SIGALRM, &original_set));
|
||||||
|
|
||||||
|
ScopedSignalHandler ssh(SIGALRM, SigSuspendTestHelper);
|
||||||
|
|
||||||
// There should be no pending signals.
|
// There should be no pending signals.
|
||||||
sigset_t pending;
|
sigset_t pending;
|
||||||
sigemptyset(&pending);
|
sigemptyset(&pending);
|
||||||
@ -208,7 +208,7 @@ TEST(signal, sigsuspend_sigpending) {
|
|||||||
ASSERT_EQ(1, gSigSuspendTestHelperCallCount);
|
ASSERT_EQ(1, gSigSuspendTestHelperCallCount);
|
||||||
|
|
||||||
// Restore the original set.
|
// Restore the original set.
|
||||||
assert(0 == sigprocmask(SIG_SETMASK, &original_set, NULL));
|
ASSERT_EQ(0, sigprocmask(SIG_SETMASK, &original_set, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void EmptySignalHandler(int) {}
|
static void EmptySignalHandler(int) {}
|
||||||
@ -216,14 +216,15 @@ static void EmptySignalAction(int, siginfo_t*, void*) {}
|
|||||||
|
|
||||||
TEST(signal, sigaction) {
|
TEST(signal, sigaction) {
|
||||||
// See what's currently set for SIGALRM.
|
// See what's currently set for SIGALRM.
|
||||||
struct sigaction sa;
|
struct sigaction original_sa;
|
||||||
memset(&sa, 0, sizeof(sa));
|
memset(&original_sa, 0, sizeof(original_sa));
|
||||||
ASSERT_EQ(0, sigaction(SIGALRM, NULL, &sa));
|
ASSERT_EQ(0, sigaction(SIGALRM, NULL, &original_sa));
|
||||||
ASSERT_TRUE(sa.sa_handler == NULL);
|
ASSERT_TRUE(original_sa.sa_handler == NULL);
|
||||||
ASSERT_TRUE(sa.sa_sigaction == NULL);
|
ASSERT_TRUE(original_sa.sa_sigaction == NULL);
|
||||||
ASSERT_TRUE(sa.sa_flags == 0);
|
ASSERT_TRUE(original_sa.sa_flags == 0);
|
||||||
|
|
||||||
// Set a traditional sa_handler signal handler.
|
// Set a traditional sa_handler signal handler.
|
||||||
|
struct sigaction sa;
|
||||||
memset(&sa, 0, sizeof(sa));
|
memset(&sa, 0, sizeof(sa));
|
||||||
sigaddset(&sa.sa_mask, SIGALRM);
|
sigaddset(&sa.sa_mask, SIGALRM);
|
||||||
sa.sa_flags = SA_ONSTACK;
|
sa.sa_flags = SA_ONSTACK;
|
||||||
@ -250,4 +251,7 @@ TEST(signal, sigaction) {
|
|||||||
ASSERT_TRUE(sa.sa_sigaction == EmptySignalAction);
|
ASSERT_TRUE(sa.sa_sigaction == EmptySignalAction);
|
||||||
ASSERT_TRUE((void*) sa.sa_sigaction == (void*) sa.sa_handler);
|
ASSERT_TRUE((void*) sa.sa_sigaction == (void*) sa.sa_handler);
|
||||||
ASSERT_TRUE(sa.sa_flags == (SA_ONSTACK | SA_SIGINFO));
|
ASSERT_TRUE(sa.sa_flags == (SA_ONSTACK | SA_SIGINFO));
|
||||||
|
|
||||||
|
// Put everything back how it was.
|
||||||
|
ASSERT_EQ(0, sigaction(SIGALRM, &original_sa, NULL));
|
||||||
}
|
}
|
||||||
|
38
tests/sys_epoll_test.cpp
Normal file
38
tests/sys_epoll_test.cpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/epoll.h>
|
||||||
|
|
||||||
|
TEST(sys_epoll, smoke) {
|
||||||
|
int epoll_fd = epoll_create(1);
|
||||||
|
ASSERT_NE(-1, epoll_fd) << strerror(errno);
|
||||||
|
epoll_event events[1];
|
||||||
|
|
||||||
|
// Regular epoll_wait.
|
||||||
|
ASSERT_EQ(0, epoll_wait(epoll_fd, events, 1, 1));
|
||||||
|
|
||||||
|
// epoll_pwait without a sigset (which is equivalent to epoll_wait).
|
||||||
|
ASSERT_EQ(0, epoll_pwait(epoll_fd, events, 1, 1, NULL));
|
||||||
|
|
||||||
|
// epoll_pwait with a sigset.
|
||||||
|
sigset_t ss;
|
||||||
|
sigemptyset(&ss);
|
||||||
|
sigaddset(&ss, SIGPIPE);
|
||||||
|
ASSERT_EQ(0, epoll_pwait(epoll_fd, events, 1, 1, &ss));
|
||||||
|
}
|
@ -41,3 +41,73 @@ TEST(sys_select, fd_set_smoke) {
|
|||||||
EXPECT_FALSE(FD_ISSET(0, &fds));
|
EXPECT_FALSE(FD_ISSET(0, &fds));
|
||||||
EXPECT_FALSE(FD_ISSET(1, &fds));
|
EXPECT_FALSE(FD_ISSET(1, &fds));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(sys_select, select_smoke) {
|
||||||
|
fd_set r;
|
||||||
|
FD_ZERO(&r);
|
||||||
|
fd_set w;
|
||||||
|
FD_ZERO(&w);
|
||||||
|
fd_set e;
|
||||||
|
FD_ZERO(&e);
|
||||||
|
|
||||||
|
FD_SET(STDIN_FILENO, &r);
|
||||||
|
FD_SET(STDOUT_FILENO, &w);
|
||||||
|
FD_SET(STDERR_FILENO, &w);
|
||||||
|
|
||||||
|
int max = STDERR_FILENO + 1;
|
||||||
|
|
||||||
|
// Invalid max fd.
|
||||||
|
ASSERT_EQ(-1, select(-1, &r, &w, &e, NULL));
|
||||||
|
ASSERT_EQ(EINVAL, errno);
|
||||||
|
|
||||||
|
ASSERT_EQ(2, select(max, &r, &w, &e, NULL));
|
||||||
|
|
||||||
|
// Invalid timeout.
|
||||||
|
timeval tv;
|
||||||
|
tv.tv_sec = -1;
|
||||||
|
tv.tv_usec = 0;
|
||||||
|
ASSERT_EQ(-1, select(max, &r, &w, &e, &tv));
|
||||||
|
ASSERT_EQ(EINVAL, errno);
|
||||||
|
|
||||||
|
// Valid timeout...
|
||||||
|
tv.tv_sec = 1;
|
||||||
|
ASSERT_EQ(2, select(max, &r, &w, &e, &tv));
|
||||||
|
ASSERT_NE(0, tv.tv_usec); // ...which got updated.
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(sys_select, pselect_smoke) {
|
||||||
|
sigset_t ss;
|
||||||
|
sigemptyset(&ss);
|
||||||
|
sigaddset(&ss, SIGPIPE);
|
||||||
|
|
||||||
|
fd_set r;
|
||||||
|
FD_ZERO(&r);
|
||||||
|
fd_set w;
|
||||||
|
FD_ZERO(&w);
|
||||||
|
fd_set e;
|
||||||
|
FD_ZERO(&e);
|
||||||
|
|
||||||
|
FD_SET(STDIN_FILENO, &r);
|
||||||
|
FD_SET(STDOUT_FILENO, &w);
|
||||||
|
FD_SET(STDERR_FILENO, &w);
|
||||||
|
|
||||||
|
int max = STDERR_FILENO + 1;
|
||||||
|
|
||||||
|
// Invalid max fd.
|
||||||
|
ASSERT_EQ(-1, pselect(-1, &r, &w, &e, NULL, &ss));
|
||||||
|
ASSERT_EQ(EINVAL, errno);
|
||||||
|
|
||||||
|
ASSERT_EQ(2, pselect(max, &r, &w, &e, NULL, &ss));
|
||||||
|
|
||||||
|
// Invalid timeout.
|
||||||
|
timespec tv;
|
||||||
|
tv.tv_sec = -1;
|
||||||
|
tv.tv_nsec = 0;
|
||||||
|
ASSERT_EQ(-1, pselect(max, &r, &w, &e, &tv, &ss));
|
||||||
|
ASSERT_EQ(EINVAL, errno);
|
||||||
|
|
||||||
|
// Valid timeout...
|
||||||
|
tv.tv_sec = 1;
|
||||||
|
ASSERT_EQ(2, pselect(max, &r, &w, &e, &tv, &ss));
|
||||||
|
ASSERT_EQ(0, tv.tv_nsec); // ...which did _not_ get updated.
|
||||||
|
}
|
||||||
|
@ -73,3 +73,16 @@ TEST(unistd, ftruncate64) {
|
|||||||
ASSERT_EQ(0, stat(tf.filename, &sb));
|
ASSERT_EQ(0, stat(tf.filename, &sb));
|
||||||
ASSERT_EQ(123, sb.st_size);
|
ASSERT_EQ(123, sb.st_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool gPauseTestFlag = false;
|
||||||
|
static void PauseTestSignalHandler(int) {
|
||||||
|
gPauseTestFlag = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(unistd, pause) {
|
||||||
|
signal(SIGALRM, PauseTestSignalHandler);
|
||||||
|
alarm(1);
|
||||||
|
ASSERT_FALSE(gPauseTestFlag);
|
||||||
|
ASSERT_EQ(-1, pause());
|
||||||
|
ASSERT_TRUE(gPauseTestFlag);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user