scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

commit 041d2d96655de6afaac6b20437df8897b03f6c92
parent 3316919fa6b703a5514a3817b8f22cde27ccf569
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Tue, 17 May 2022 21:39:23 +0200

libc: Add wait4() syscall in bsd alike systems

BSD systems and linux implement waitpid using a syscall
called wait4() that receives an additional parameter to
account the resource usage.

Diffstat:
Minclude/bits/darwin/sys.h | 2++
Minclude/bits/dragonfly/sys.h | 2++
Minclude/bits/linux/sys.h | 2++
Minclude/bits/netbsd/sys.h | 2++
Minclude/bits/openbsd/sys.h | 2++
Msrc/libc/arch/amd64/linux/.gitignore | 1+
Msrc/libc/arch/amd64/linux/Makefile | 1+
Msrc/libc/arch/amd64/linux/syscall.lst | 1+
Msrc/libc/arch/amd64/netbsd/.gitignore | 1+
Msrc/libc/arch/amd64/netbsd/Makefile | 1+
Msrc/libc/arch/amd64/netbsd/syscall.lst | 1+
Msrc/libc/arch/amd64/openbsd/.gitignore | 1+
Msrc/libc/arch/amd64/openbsd/Makefile | 1+
Msrc/libc/arch/amd64/openbsd/syscall.lst | 1+
Msrc/libc/arch/arm/linux/.gitignore | 1+
Msrc/libc/arch/arm/linux/Makefile | 1+
Msrc/libc/arch/arm/linux/syscall.lst | 1+
Msrc/libc/arch/arm64/linux/.gitignore | 1+
Msrc/libc/arch/arm64/linux/Makefile | 1+
Msrc/libc/arch/arm64/linux/syscall.lst | 1+
Msrc/libc/arch/i386/linux/.gitignore | 1+
Msrc/libc/arch/i386/linux/Makefile | 1+
Msrc/libc/arch/i386/linux/syscall.lst | 1+
Msrc/libc/arch/ppc/linux/.gitignore | 1+
Msrc/libc/arch/ppc/linux/Makefile | 2+-
Msrc/libc/arch/ppc/linux/syscall.lst | 2+-
Msrc/libc/objs/amd64-linux.mk | 1+
Msrc/libc/objs/amd64-netbsd.mk | 1+
Msrc/libc/objs/amd64-openbsd.mk | 1+
29 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/include/bits/darwin/sys.h b/include/bits/darwin/sys.h @@ -19,8 +19,10 @@ typedef int pid_t; struct sigaction; +struct rusage; extern int _fork(void); extern pid_t _getpid(void); extern int _kill(pid_t, int); extern int _sigaction(int, struct sigaction *, struct sigaction *); +extern pid_t _wait4(pid_t, int *, int, struct rusage *); diff --git a/include/bits/dragonfly/sys.h b/include/bits/dragonfly/sys.h @@ -19,8 +19,10 @@ typedef int pid_t; struct sigaction; +struct rusage; extern int _fork(void); extern pid_t _getpid(void); extern int _kill(pid_t, int); extern int _sigaction(int, struct sigaction *, struct sigaction *); +extern pid_t _wait4(pid_t, int *, int, struct rusage *); diff --git a/include/bits/linux/sys.h b/include/bits/linux/sys.h @@ -19,8 +19,10 @@ typedef int pid_t; struct sigaction; +struct rusage; extern int _fork(void); extern pid_t _getpid(void); extern int _kill(pid_t, int); extern int _sigaction(int, struct sigaction *, struct sigaction *); +extern pid_t _wait4(pid_t, int *, int, struct rusage *); diff --git a/include/bits/netbsd/sys.h b/include/bits/netbsd/sys.h @@ -19,8 +19,10 @@ typedef int pid_t; struct sigaction; +struct rusage; extern int _fork(void); extern pid_t _getpid(void); extern int _kill(pid_t, int); extern int _sigaction(int, struct sigaction *, struct sigaction *); +extern pid_t _wait4(pid_t, int *, int, struct rusage *); diff --git a/include/bits/openbsd/sys.h b/include/bits/openbsd/sys.h @@ -19,8 +19,10 @@ typedef int pid_t; struct sigaction; +struct rusage; extern int _fork(void); extern pid_t _getpid(void); extern int _kill(pid_t, int); extern int _sigaction(int, struct sigaction *, struct sigaction *); +extern pid_t _wait4(pid_t, int *, int, struct rusage *); diff --git a/src/libc/arch/amd64/linux/.gitignore b/src/libc/arch/amd64/linux/.gitignore @@ -13,4 +13,5 @@ _sigreturn.s _sys_brk.s _sys_errlist.c _unlink.s +_wait4.s _write.s diff --git a/src/libc/arch/amd64/linux/Makefile b/src/libc/arch/amd64/linux/Makefile @@ -21,6 +21,7 @@ GENOBJS =\ _sys_brk.$O\ _unlink.$O\ _write.$O\ + _wait4.$O\ OBJS =\ $(GENOBJS)\ diff --git a/src/libc/arch/amd64/linux/syscall.lst b/src/libc/arch/amd64/linux/syscall.lst @@ -11,6 +11,7 @@ 39 _getpid 0 57 _fork 0 60 _exit 1 +61 _wait4 4 62 _kill 2 87 _unlink 1 96 _gettimeofday 2 diff --git a/src/libc/arch/amd64/netbsd/.gitignore b/src/libc/arch/amd64/netbsd/.gitignore @@ -11,4 +11,5 @@ _read.s _setcontext.s _sigaction2.s _sys_errlist.c +_wait4.s _write.s diff --git a/src/libc/arch/amd64/netbsd/Makefile b/src/libc/arch/amd64/netbsd/Makefile @@ -18,6 +18,7 @@ GENOBJS =\ _setcontext.$O\ _sigaction2.$O\ _write.$O\ + _wait4.$O\ OBJS =\ $(GENOBJS)\ diff --git a/src/libc/arch/amd64/netbsd/syscall.lst b/src/libc/arch/amd64/netbsd/syscall.lst @@ -13,3 +13,4 @@ 308 _setcontext 1 340 _sigaction2 5 418 _gettimeofday 2 +449 _wait4 4 diff --git a/src/libc/arch/amd64/openbsd/.gitignore b/src/libc/arch/amd64/openbsd/.gitignore @@ -10,4 +10,5 @@ _open.s _read.s _sigaction.s _sys_errlist.c +_wait4.s _write.s diff --git a/src/libc/arch/amd64/openbsd/Makefile b/src/libc/arch/amd64/openbsd/Makefile @@ -17,6 +17,7 @@ GENOBJS =\ _read.$O\ _sigaction.$O\ _write.$O\ + _wait4.$O\ OBJS =\ $(GENOBJS)\ diff --git a/src/libc/arch/amd64/openbsd/syscall.lst b/src/libc/arch/amd64/openbsd/syscall.lst @@ -6,6 +6,7 @@ 4 _write 3 5 _open 3 6 _close 1 +11 _wait4 4 17 _brk 1 20 _getpid 0 46 _sigaction 3 diff --git a/src/libc/arch/arm/linux/.gitignore b/src/libc/arch/arm/linux/.gitignore @@ -8,4 +8,5 @@ _lseek.s _openat.s _read.s _sys_errlist.c +_wait4.s _write.s diff --git a/src/libc/arch/arm/linux/Makefile b/src/libc/arch/arm/linux/Makefile @@ -16,6 +16,7 @@ GENOBJS =\ _sigaction.$O\ _sys_brk.$O\ _write.$O\ + _wait4.$O\ GENSRC = $(GENOBJS:.$O=.s) diff --git a/src/libc/arch/arm/linux/syscall.lst b/src/libc/arch/arm/linux/syscall.lst @@ -9,4 +9,5 @@ 37 _kill 19 _lseek 45 _sys_brk +114 _wait4 134 __sigaction diff --git a/src/libc/arch/arm64/linux/.gitignore b/src/libc/arch/arm64/linux/.gitignore @@ -7,4 +7,5 @@ _lseek.s _openat.s _read.s _sys_errlist.c +_wait4.s _write.s diff --git a/src/libc/arch/arm64/linux/Makefile b/src/libc/arch/arm64/linux/Makefile @@ -16,6 +16,7 @@ GENOBJS =\ _sigaction.$O\ _sys_brk.$O\ _write.$O\ + _wait4.$O\ OBJS =\ $(GENOBJS)\ diff --git a/src/libc/arch/arm64/linux/syscall.lst b/src/libc/arch/arm64/linux/syscall.lst @@ -9,3 +9,4 @@ 134 __sigaction 172 _getpid 214 _sys_brk +260 _wait4 diff --git a/src/libc/arch/i386/linux/.gitignore b/src/libc/arch/i386/linux/.gitignore @@ -8,4 +8,5 @@ _open.s _read.s _sigaction.s _sys_brk.s +_wait4.s _write.s diff --git a/src/libc/arch/i386/linux/Makefile b/src/libc/arch/i386/linux/Makefile @@ -16,6 +16,7 @@ GENOBJS =\ _sigaction.$O\ _sys_brk.$O\ _write.$O\ + _wait4.$O\ GENSRC = $(GENOBJS:.$O=.s) diff --git a/src/libc/arch/i386/linux/syscall.lst b/src/libc/arch/i386/linux/syscall.lst @@ -10,3 +10,4 @@ 37 _kill 2 45 _sys_brk 1 67 __sigaction 4 +114 _wait4 4 diff --git a/src/libc/arch/ppc/linux/.gitignore b/src/libc/arch/ppc/linux/.gitignore @@ -10,5 +10,6 @@ _read.s _sys_brk.s _sys_errlist.c _unlink.s +_wait4.s _waitpid.s _write.s diff --git a/src/libc/arch/ppc/linux/Makefile b/src/libc/arch/ppc/linux/Makefile @@ -18,8 +18,8 @@ GENOBJS =\ _read.$O\ _sys_brk.$O\ _unlink.$O\ - _waitpid.$O\ _write.$O\ + _wait4.$O\ OBJS =\ $(GENOBJS)\ diff --git a/src/libc/arch/ppc/linux/syscall.lst b/src/libc/arch/ppc/linux/syscall.lst @@ -5,10 +5,10 @@ 4 _write 5 _open 6 _close -7 _waitpid 8 _creat 9 _link 10 _unlink 20 _getpid 37 _kill 45 _sys_brk +114 _wait4 diff --git a/src/libc/objs/amd64-linux.mk b/src/libc/objs/amd64-linux.mk @@ -17,6 +17,7 @@ OBJS =\ arch/amd64/linux/_sys_brk.$O\ arch/amd64/linux/_sys_errlist.$O\ arch/amd64/linux/_unlink.$O\ + arch/amd64/linux/_wait4.$O\ arch/amd64/linux/_write.$O\ arch/amd64/linux/crt.$O\ arch/amd64/longjmp.$O\ diff --git a/src/libc/objs/amd64-netbsd.mk b/src/libc/objs/amd64-netbsd.mk @@ -19,6 +19,7 @@ OBJS =\ arch/amd64/netbsd/_setcontext.$O\ arch/amd64/netbsd/_sigaction2.$O\ arch/amd64/netbsd/_sys_errlist.$O\ + arch/amd64/netbsd/_wait4.$O\ arch/amd64/netbsd/_write.$O\ arch/amd64/netbsd/crt.$O\ arch/amd64/setjmp.$O\ diff --git a/src/libc/objs/amd64-openbsd.mk b/src/libc/objs/amd64-openbsd.mk @@ -12,6 +12,7 @@ OBJS =\ arch/amd64/openbsd/_open.$O\ arch/amd64/openbsd/_read.$O\ arch/amd64/openbsd/_sigaction.$O\ + arch/amd64/openbsd/_wait4.$O\ arch/amd64/openbsd/_write.$O\ arch/amd64/openbsd/crt.$O\ arch/amd64/openbsd/_sys_errlist.$O\