From 3a1bbee36b773862e88c6f1895b607c0cd81b499 Mon Sep 17 00:00:00 2001 From: Keith Deacon Date: Tue, 31 Aug 2010 16:16:01 -0500 Subject: Add eventfd system call support --- libc/SYSCALLS.TXT | 2 ++ libc/arch-arm/syscalls.mk | 1 + libc/arch-arm/syscalls/eventfd.S | 19 +++++++++++++++++++ libc/include/sys/eventfd.h | 14 ++++++++++++++ libc/include/sys/linux-syscalls.h | 3 +++ libc/include/sys/linux-unistd.h | 1 + 6 files changed, 40 insertions(+) create mode 100644 libc/arch-arm/syscalls/eventfd.S create mode 100644 libc/include/sys/eventfd.h diff --git a/libc/SYSCALLS.TXT b/libc/SYSCALLS.TXT index 11407b9..b5a3bbe 100644 --- a/libc/SYSCALLS.TXT +++ b/libc/SYSCALLS.TXT @@ -262,3 +262,5 @@ int poll(struct pollfd *, unsigned int, long) 168 # ARM-specific ARM_NR_BASE == 0x0f0000 == 983040 int __set_tls:ARM_set_tls(void*) 983045,-1 int cacheflush:ARM_cacheflush(long start, long end, long flags) 983042,-1 + +int eventfd(int count, int flags) 351,323 diff --git a/libc/arch-arm/syscalls.mk b/libc/arch-arm/syscalls.mk index 9cdd28a..9bfe70a 100644 --- a/libc/arch-arm/syscalls.mk +++ b/libc/arch-arm/syscalls.mk @@ -171,3 +171,4 @@ syscall_src += arch-arm/syscalls/inotify_rm_watch.S syscall_src += arch-arm/syscalls/poll.S syscall_src += arch-arm/syscalls/__set_tls.S syscall_src += arch-arm/syscalls/cacheflush.S +syscall_src += arch-arm/syscalls/eventfd.S diff --git a/libc/arch-arm/syscalls/eventfd.S b/libc/arch-arm/syscalls/eventfd.S new file mode 100644 index 0000000..fb0912f --- /dev/null +++ b/libc/arch-arm/syscalls/eventfd.S @@ -0,0 +1,19 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type eventfd, #function + .globl eventfd + .align 4 + .fnstart + +eventfd: + .save {r4, r7} + stmfd sp!, {r4, r7} + ldr r7, =__NR_eventfd + swi #0 + ldmfd sp!, {r4, r7} + movs r0, r0 + bxpl lr + b __set_syscall_errno + .fnend diff --git a/libc/include/sys/eventfd.h b/libc/include/sys/eventfd.h new file mode 100644 index 0000000..0e142fd --- /dev/null +++ b/libc/include/sys/eventfd.h @@ -0,0 +1,14 @@ +#ifndef _SYS_EVENTFD_H_ +#define _SYS_EVENTFD_H_ + +#include +#include +#include + +__BEGIN_DECLS + +extern int eventfd(int count, int flags); + +__END_DECLS + +#endif /* _SYS_EVENTFD_H_ */ diff --git a/libc/include/sys/linux-syscalls.h b/libc/include/sys/linux-syscalls.h index 6e373e0..9fefd86 100644 --- a/libc/include/sys/linux-syscalls.h +++ b/libc/include/sys/linux-syscalls.h @@ -181,6 +181,7 @@ #define __NR_inotify_rm_watch (__NR_SYSCALL_BASE + 318) #define __NR_ARM_set_tls (__NR_SYSCALL_BASE + 983045) #define __NR_ARM_cacheflush (__NR_SYSCALL_BASE + 983042) +#define __NR_eventfd (__NR_SYSCALL_BASE + 351) #endif #ifdef __i386__ @@ -222,6 +223,7 @@ #define __NR_inotify_init (__NR_SYSCALL_BASE + 291) #define __NR_inotify_add_watch (__NR_SYSCALL_BASE + 292) #define __NR_inotify_rm_watch (__NR_SYSCALL_BASE + 293) +#define __NR_eventfd (__NR_SYSCALL_BASE + 323) #endif #if defined(__SH3__) || defined(__SH4__) @@ -279,6 +281,7 @@ #define __NR_inotify_init (__NR_SYSCALL_BASE + 290) #define __NR_inotify_add_watch (__NR_SYSCALL_BASE + 291) #define __NR_inotify_rm_watch (__NR_SYSCALL_BASE + 292) +#define __NR_eventfd (__NR_SYSCALL_BASE + 323) #endif #endif diff --git a/libc/include/sys/linux-unistd.h b/libc/include/sys/linux-unistd.h index b0e7822..de5c2bb 100644 --- a/libc/include/sys/linux-unistd.h +++ b/libc/include/sys/linux-unistd.h @@ -202,6 +202,7 @@ int inotify_rm_watch (int, unsigned int); int poll (struct pollfd *, unsigned int, long); int __set_tls (void*); int cacheflush (long start, long end, long flags); +int eventfd (int count, int flags); #ifdef __cplusplus } #endif -- cgit v1.1