am 9973a564: libc: Add missing waitid() implementation.

Merge commit '9973a564222b842eb7497fd6e659fe8c8c49e2b3' into gingerbread-plus-aosp

* commit '9973a564222b842eb7497fd6e659fe8c8c49e2b3':
  libc: Add missing waitid() implementation.
This commit is contained in:
David 'Digit' Turner 2010-09-28 00:22:25 -07:00 committed by Android Git Automerger
commit a511f24561
10 changed files with 30 additions and 14 deletions

View file

@ -33,7 +33,7 @@ void _exit:exit_group (int) 248,252
void _exit_thread:exit (int) 1
pid_t __fork:fork (void) 2
pid_t _waitpid:waitpid (pid_t, int*, int, struct rusage*) -1,7
int waitid(int, pid_t, struct siginfo_t*, int,void*) 280,284
int __waitid:waitid(int, pid_t, struct siginfo_t*, int,void*) 280,284
# NOTE: this system call is never called directly, but we list it there
# to have __NR_clone properly defined.

View file

@ -3,7 +3,7 @@ syscall_src :=
syscall_src += arch-arm/syscalls/_exit.S
syscall_src += arch-arm/syscalls/_exit_thread.S
syscall_src += arch-arm/syscalls/__fork.S
syscall_src += arch-arm/syscalls/waitid.S
syscall_src += arch-arm/syscalls/__waitid.S
syscall_src += arch-arm/syscalls/__sys_clone.S
syscall_src += arch-arm/syscalls/execve.S
syscall_src += arch-arm/syscalls/__setuid.S

View file

@ -2,12 +2,12 @@
#include <sys/linux-syscalls.h>
.text
.type waitid, #function
.globl waitid
.type __waitid, #function
.globl __waitid
.align 4
.fnstart
waitid:
__waitid:
mov ip, sp
.save {r4, r5, r6, r7}
stmfd sp!, {r4, r5, r6, r7}

View file

@ -4,7 +4,7 @@ syscall_src += arch-sh/syscalls/_exit.S
syscall_src += arch-sh/syscalls/_exit_thread.S
syscall_src += arch-sh/syscalls/__fork.S
syscall_src += arch-sh/syscalls/_waitpid.S
syscall_src += arch-sh/syscalls/waitid.S
syscall_src += arch-sh/syscalls/__waitid.S
syscall_src += arch-sh/syscalls/__sys_clone.S
syscall_src += arch-sh/syscalls/execve.S
syscall_src += arch-sh/syscalls/__setuid.S

View file

@ -2,11 +2,11 @@
#include <sys/linux-syscalls.h>
.text
.type waitid, @function
.globl waitid
.type __waitid, @function
.globl __waitid
.align 4
waitid:
__waitid:
/* get ready for additonal arg */
mov.l @r15, r0

View file

@ -4,7 +4,7 @@ syscall_src += arch-x86/syscalls/_exit.S
syscall_src += arch-x86/syscalls/_exit_thread.S
syscall_src += arch-x86/syscalls/__fork.S
syscall_src += arch-x86/syscalls/_waitpid.S
syscall_src += arch-x86/syscalls/waitid.S
syscall_src += arch-x86/syscalls/__waitid.S
syscall_src += arch-x86/syscalls/__sys_clone.S
syscall_src += arch-x86/syscalls/execve.S
syscall_src += arch-x86/syscalls/__setuid.S

View file

@ -2,11 +2,11 @@
#include <sys/linux-syscalls.h>
.text
.type waitid, @function
.globl waitid
.type __waitid, @function
.globl __waitid
.align 4
waitid:
__waitid:
pushl %ebx
pushl %ecx
pushl %edx

View file

@ -9,7 +9,7 @@ void _exit (int);
void _exit_thread (int);
pid_t __fork (void);
pid_t _waitpid (pid_t, int*, int, struct rusage*);
int waitid (int, pid_t, struct siginfo_t*, int,void*);
int __waitid (int, pid_t, struct siginfo_t*, int,void*);
pid_t __sys_clone (int, void*, int*, void*, int*);
int execve (const char*, char* const*, char* const*);
int __setuid (uid_t);

View file

@ -32,6 +32,7 @@
#include <sys/types.h>
#include <sys/resource.h>
#include <linux/wait.h>
#include <signal.h>
__BEGIN_DECLS
@ -49,6 +50,14 @@ extern pid_t waitpid(pid_t, int *, int);
extern pid_t wait3(int *, int, struct rusage *);
extern pid_t wait4(pid_t, int *, int, struct rusage *);
/* Posix states that idtype_t should be an enumeration type, but
* the kernel headers define P_ALL, P_PID and P_PGID as constant macros
* instead.
*/
typedef int idtype_t;
extern int waidit(idtype_t which, id_t id, siginfo_t *info, int options);
__END_DECLS
#endif /* _SYS_WAIT_H_ */

View file

@ -29,6 +29,7 @@
#include <stddef.h>
extern pid_t __wait4 (pid_t pid, int *status, int options, struct rusage *rusage);
extern int __waitid(idtype_t which, id_t id, siginfo_t *info, int options, struct rusage *ru);
pid_t wait( int* status )
{
@ -44,3 +45,9 @@ pid_t waitpid(pid_t pid, int* status, int options)
{
return __wait4( pid, status, options, NULL );
}
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 */
return __waitid(which, id, info, options, NULL);
}