summaryrefslogtreecommitdiff
path: root/system/include/libc/sys
diff options
context:
space:
mode:
Diffstat (limited to 'system/include/libc/sys')
-rw-r--r--system/include/libc/sys/_default_fcntl.h223
-rw-r--r--system/include/libc/sys/_types.h93
-rw-r--r--system/include/libc/sys/acct.h75
-rw-r--r--system/include/libc/sys/cachectl.h22
-rw-r--r--system/include/libc/sys/cdefs.h123
-rw-r--r--system/include/libc/sys/config.h255
-rw-r--r--system/include/libc/sys/custom_file.h2
-rw-r--r--system/include/libc/sys/dir.h8
-rw-r--r--system/include/libc/sys/dirent.h58
-rw-r--r--system/include/libc/sys/epoll.h67
-rw-r--r--system/include/libc/sys/errno.h192
-rw-r--r--system/include/libc/sys/eventfd.h26
-rw-r--r--system/include/libc/sys/fcntl.h6
-rw-r--r--system/include/libc/sys/features.h212
-rw-r--r--system/include/libc/sys/file.h21
-rw-r--r--system/include/libc/sys/fsuid.h20
-rw-r--r--system/include/libc/sys/iconvnls.h77
-rw-r--r--system/include/libc/sys/inotify.h57
-rw-r--r--system/include/libc/sys/io.h17
-rw-r--r--system/include/libc/sys/ioctl.h14
-rw-r--r--system/include/libc/sys/ipc.h42
-rw-r--r--system/include/libc/sys/klog.h14
-rw-r--r--system/include/libc/sys/lock.h24
-rw-r--r--system/include/libc/sys/mman.h55
-rw-r--r--system/include/libc/sys/mount.h72
-rw-r--r--system/include/libc/sys/msg.h52
-rw-r--r--system/include/libc/sys/mtio.h188
-rw-r--r--system/include/libc/sys/param.h48
-rw-r--r--system/include/libc/sys/personality.h46
-rw-r--r--system/include/libc/sys/poll.h2
-rw-r--r--system/include/libc/sys/prctl.h101
-rw-r--r--system/include/libc/sys/procfs.h65
-rw-r--r--system/include/libc/sys/ptrace.h96
-rw-r--r--system/include/libc/sys/queue.h471
-rw-r--r--system/include/libc/sys/reboot.h20
-rw-r--r--system/include/libc/sys/reent.h843
-rw-r--r--system/include/libc/sys/reg.h9
-rw-r--r--system/include/libc/sys/resource.h134
-rw-r--r--system/include/libc/sys/sched.h67
-rw-r--r--system/include/libc/sys/select.h42
-rw-r--r--system/include/libc/sys/sem.h82
-rw-r--r--system/include/libc/sys/sendfile.h22
-rw-r--r--system/include/libc/sys/shm.h61
-rw-r--r--system/include/libc/sys/signal.h316
-rw-r--r--system/include/libc/sys/signalfd.h44
-rw-r--r--system/include/libc/sys/socket.h299
-rw-r--r--system/include/libc/sys/stat.h299
-rw-r--r--system/include/libc/sys/statfs.h32
-rw-r--r--system/include/libc/sys/statvfs.h57
-rw-r--r--system/include/libc/sys/stdio.h27
-rw-r--r--system/include/libc/sys/string.h2
-rw-r--r--system/include/libc/sys/stropts.h1
-rw-r--r--system/include/libc/sys/swap.h21
-rw-r--r--system/include/libc/sys/syscall.h6
-rw-r--r--system/include/libc/sys/sysctl.h17
-rw-r--r--system/include/libc/sys/sysinfo.h36
-rw-r--r--system/include/libc/sys/syslimits.h65
-rw-r--r--system/include/libc/sys/syslog.h1
-rw-r--r--system/include/libc/sys/sysmacros.h15
-rw-r--r--system/include/libc/sys/termios.h282
-rw-r--r--system/include/libc/sys/time.h108
-rw-r--r--system/include/libc/sys/timerfd.h24
-rw-r--r--system/include/libc/sys/times.h30
-rw-r--r--system/include/libc/sys/timex.h98
-rw-r--r--system/include/libc/sys/ttydefaults.h126
-rw-r--r--system/include/libc/sys/types.h568
-rw-r--r--system/include/libc/sys/ucontext.h1
-rw-r--r--system/include/libc/sys/uio.h48
-rw-r--r--system/include/libc/sys/un.h32
-rw-r--r--system/include/libc/sys/unistd.h513
-rw-r--r--system/include/libc/sys/user.h16
-rw-r--r--system/include/libc/sys/utime.h26
-rw-r--r--system/include/libc/sys/utsname.h30
-rw-r--r--system/include/libc/sys/vfs.h1
-rw-r--r--system/include/libc/sys/wait.h67
-rw-r--r--system/include/libc/sys/xattr.h30
76 files changed, 2532 insertions, 4830 deletions
diff --git a/system/include/libc/sys/_default_fcntl.h b/system/include/libc/sys/_default_fcntl.h
deleted file mode 100644
index 379147ed..00000000
--- a/system/include/libc/sys/_default_fcntl.h
+++ /dev/null
@@ -1,223 +0,0 @@
-
-#ifndef _SYS__DEFAULT_FCNTL_H_
-#ifdef __cplusplus
-extern "C" {
-#endif
-#define _SYS__DEFAULT_FCNTL_H_
-#include <_ansi.h>
-#define _FOPEN (-1) /* from sys/file.h, kernel use only */
-#define _FREAD 0x0001 /* read enabled */
-#define _FWRITE 0x0002 /* write enabled */
-#define _FAPPEND 0x0008 /* append (writes guaranteed at the end) */
-#define _FMARK 0x0010 /* internal; mark during gc() */
-#define _FDEFER 0x0020 /* internal; defer for next gc pass */
-#define _FASYNC 0x0040 /* signal pgrp when data ready */
-#define _FSHLOCK 0x0080 /* BSD flock() shared lock present */
-#define _FEXLOCK 0x0100 /* BSD flock() exclusive lock present */
-#define _FCREAT 0x0200 /* open with file create */
-#define _FTRUNC 0x0400 /* open with truncation */
-#define _FEXCL 0x0800 /* error on open if file exists */
-#define _FNBIO 0x1000 /* non blocking I/O (sys5 style) */
-#define _FSYNC 0x2000 /* do all writes synchronously */
-#define _FNONBLOCK 0x4000 /* non blocking I/O (POSIX style) */
-#define _FNDELAY _FNONBLOCK /* non blocking I/O (4.2 style) */
-#define _FNOCTTY 0x8000 /* don't assign a ctty on this open */
-
-#define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)
-
-/*
- * Flag values for open(2) and fcntl(2)
- * The kernel adds 1 to the open modes to turn it into some
- * combination of FREAD and FWRITE.
- */
-#define O_RDONLY 0 /* +1 == FREAD */
-#define O_WRONLY 1 /* +1 == FWRITE */
-#define O_RDWR 2 /* +1 == FREAD|FWRITE */
-#define O_APPEND _FAPPEND
-#define O_CREAT _FCREAT
-#define O_TRUNC _FTRUNC
-#define O_EXCL _FEXCL
-#define O_SYNC _FSYNC
-/* O_NDELAY _FNDELAY set in include/fcntl.h */
-/* O_NDELAY _FNBIO set in include/fcntl.h */
-#define O_NONBLOCK _FNONBLOCK
-#define O_NOCTTY _FNOCTTY
-/* For machines which care - */
-#if defined (_WIN32) || defined (__CYGWIN__)
-#define _FBINARY 0x10000
-#define _FTEXT 0x20000
-#define _FNOINHERIT 0x40000
-
-#define O_BINARY _FBINARY
-#define O_TEXT _FTEXT
-#define O_NOINHERIT _FNOINHERIT
-/* O_CLOEXEC is the Linux equivalent to O_NOINHERIT */
-#define O_CLOEXEC _FNOINHERIT
-
-/* The windows header files define versions with a leading underscore. */
-#define _O_RDONLY O_RDONLY
-#define _O_WRONLY O_WRONLY
-#define _O_RDWR O_RDWR
-#define _O_APPEND O_APPEND
-#define _O_CREAT O_CREAT
-#define _O_TRUNC O_TRUNC
-#define _O_EXCL O_EXCL
-#define _O_TEXT O_TEXT
-#define _O_BINARY O_BINARY
-#define _O_RAW O_BINARY
-#define _O_NOINHERIT O_NOINHERIT
-#endif
-
-#ifndef _POSIX_SOURCE
-
-/*
- * Flags that work for fcntl(fd, F_SETFL, FXXXX)
- */
-#define FAPPEND _FAPPEND
-#define FSYNC _FSYNC
-#define FASYNC _FASYNC
-#define FNBIO _FNBIO
-#define FNONBIO _FNONBLOCK /* XXX fix to be NONBLOCK everywhere */
-#define FNDELAY _FNDELAY
-
-/*
- * Flags that are disallowed for fcntl's (FCNTLCANT);
- * used for opens, internal state, or locking.
- */
-#define FREAD _FREAD
-#define FWRITE _FWRITE
-#define FMARK _FMARK
-#define FDEFER _FDEFER
-#define FSHLOCK _FSHLOCK
-#define FEXLOCK _FEXLOCK
-
-/*
- * The rest of the flags, used only for opens
- */
-#define FOPEN _FOPEN
-#define FCREAT _FCREAT
-#define FTRUNC _FTRUNC
-#define FEXCL _FEXCL
-#define FNOCTTY _FNOCTTY
-
-#endif /* !_POSIX_SOURCE */
-
-/* XXX close on exec request; must match UF_EXCLOSE in user.h */
-#define FD_CLOEXEC 1 /* posix */
-
-/* fcntl(2) requests */
-#define F_DUPFD 0 /* Duplicate fildes */
-#define F_GETFD 1 /* Get fildes flags (close on exec) */
-#define F_SETFD 2 /* Set fildes flags (close on exec) */
-#define F_GETFL 3 /* Get file flags */
-#define F_SETFL 4 /* Set file flags */
-#ifndef _POSIX_SOURCE
-#define F_GETOWN 5 /* Get owner - for ASYNC */
-#define F_SETOWN 6 /* Set owner - for ASYNC */
-#endif /* !_POSIX_SOURCE */
-#define F_GETLK 7 /* Get record-locking information */
-#define F_SETLK 8 /* Set or Clear a record-lock (Non-Blocking) */
-#define F_SETLKW 9 /* Set or Clear a record-lock (Blocking) */
-#ifndef _POSIX_SOURCE
-#define F_RGETLK 10 /* Test a remote lock to see if it is blocked */
-#define F_RSETLK 11 /* Set or unlock a remote lock */
-#define F_CNVT 12 /* Convert a fhandle to an open fd */
-#define F_RSETLKW 13 /* Set or Clear remote record-lock(Blocking) */
-#endif /* !_POSIX_SOURCE */
-#ifdef __CYGWIN__
-#define F_DUPFD_CLOEXEC 14 /* As F_DUPFD, but set close-on-exec flag */
-#endif
-
-/* XXX Emscripten: 3 more not really needed ones */
-#define F_GETLK64 20
-#define F_SETLK64 21
-#define F_SETLKW64 22
-
-
-/* fcntl(2) flags (l_type field of flock structure) */
-#define F_RDLCK 1 /* read lock */
-#define F_WRLCK 2 /* write lock */
-#define F_UNLCK 3 /* remove lock(s) */
-#ifndef _POSIX_SOURCE
-#define F_UNLKSYS 4 /* remove remote locks for a given system */
-#endif /* !_POSIX_SOURCE */
-
-#ifdef __CYGWIN__
-/* Special descriptor value to denote the cwd in calls to openat(2) etc. */
-#define AT_FDCWD -2
-
-/* Flag values for faccessat2) et al. */
-#define AT_EACCESS 1
-#define AT_SYMLINK_NOFOLLOW 2
-#define AT_SYMLINK_FOLLOW 4
-#define AT_REMOVEDIR 8
-#endif
-
-/*#include <sys/stdtypes.h>*/
-
-#ifndef __CYGWIN__
-/* file segment locking set data type - information passed to system by user */
-struct flock {
- short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */
- short l_whence; /* flag to choose starting offset */
- long l_start; /* relative offset, in bytes */
- long l_len; /* length, in bytes; 0 means lock to EOF */
- short l_pid; /* returned with F_GETLK */
- short l_xxx; /* reserved for future use */
-};
-#endif /* __CYGWIN__ */
-
-#ifndef _POSIX_SOURCE
-/* extended file segment locking set data type */
-struct eflock {
- short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */
- short l_whence; /* flag to choose starting offset */
- long l_start; /* relative offset, in bytes */
- long l_len; /* length, in bytes; 0 means lock to EOF */
- short l_pid; /* returned with F_GETLK */
- short l_xxx; /* reserved for future use */
- long l_rpid; /* Remote process id wanting this lock */
- long l_rsys; /* Remote system id wanting this lock */
-};
-#endif /* !_POSIX_SOURCE */
-
-
-#include <sys/types.h>
-#include <sys/stat.h> /* sigh. for the mode bits for open/creat */
-
-extern int open _PARAMS ((const char *, int, ...));
-extern int open64 _PARAMS ((const char *, int, ...)); /* XXX Emscripten */
-extern int creat _PARAMS ((const char *, mode_t));
-extern int fcntl _PARAMS ((int, int, ...));
-#ifdef __CYGWIN__
-#include <sys/time.h>
-extern int futimesat _PARAMS ((int, const char *, const struct timeval *));
-extern int openat _PARAMS ((int, const char *, int, ...));
-#endif
-
-/* Provide _<systemcall> prototypes for functions provided by some versions
- of newlib. */
-#ifdef _COMPILING_NEWLIB
-extern int _open _PARAMS ((const char *, int, ...));
-extern int _fcntl _PARAMS ((int, int, ...));
-#ifdef __LARGE64_FILES
-extern int _open64 _PARAMS ((const char *, int, ...));
-#endif
-#endif
-
-/* XXX Emscripten */
-#define POSIX_FADV_DONTNEED 135
-#define POSIX_FADV_SEQUENTIAL 136
-#define POSIX_FADV_RANDOM 137
-int posix_fadvise(int fd, off_t offset, off_t len, int advice);
-int posix_fallocate(int fd, off_t offset, off_t len);
-#define LOCK_SH 1
-#define LOCK_EX 2
-#define LOCK_UN 4
-#define LOCK_NB 8
-int flock(int fd, int operation);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* !_SYS__DEFAULT_FCNTL_H_ */
diff --git a/system/include/libc/sys/_types.h b/system/include/libc/sys/_types.h
deleted file mode 100644
index 0511602c..00000000
--- a/system/include/libc/sys/_types.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* ANSI C namespace clean utility typedefs */
-
-/* This file defines various typedefs needed by the system calls that support
- the C library. Basically, they're just the POSIX versions with an '_'
- prepended. This file lives in the `sys' directory so targets can provide
- their own if desired (or they can put target dependant conditionals here).
-*/
-
-#ifndef _SYS__TYPES_H
-#define _SYS__TYPES_H
-
-#include <machine/_types.h>
-#include <sys/lock.h>
-
-#ifndef __off_t_defined
-typedef long _off_t;
-#endif
-
-#if defined(__rtems__)
-/* device numbers are 32-bit major and and 32-bit minor */
-typedef unsigned long long __dev_t;
-#else
-#ifndef __dev_t_defined
-typedef unsigned __dev_t; /* XXX Emscripten */
-#endif
-#endif
-
-#ifndef __uid_t_defined
-typedef unsigned __uid_t; /* XXX Emscripten */
-#define __uid_t_defined 1
-#endif
-#ifndef __gid_t_defined
-typedef unsigned __gid_t; /* XXX Emscripten */
-#define __gid_t_defined 1
-#endif
-#ifndef __id_t_defined
-typedef unsigned __id_t; /* can hold a gid_t, pid_t, or uid_t XXX EMSCRIPTEN specific*/
-#define __id_t_defined 1
-#endif
-
-#ifndef __off64_t_defined
-__extension__ typedef unsigned _off64_t; /* XXX Emscripten */
-#endif
-
-/*
- * We need fpos_t for the following, but it doesn't have a leading "_",
- * so we use _fpos_t instead.
- */
-#ifndef __fpos_t_defined
-typedef long _fpos_t; /* XXX must match off_t in <sys/types.h> */
- /* (and must be `long' for now) */
-#endif
-
-#ifdef __LARGE64_FILES
-#ifndef __fpos64_t_defined
-typedef _off64_t _fpos64_t;
-#endif
-#endif
-
-#ifndef __ssize_t_defined
-#if defined(__INT_MAX__) && __INT_MAX__ == 2147483647
-typedef int _ssize_t;
-#else
-typedef long _ssize_t;
-#endif
-#endif
-
-#define __need_wint_t
-#include <stddef.h>
-
-#ifndef __mbstate_t_defined
-/* Conversion state information. */
-typedef struct
-{
- int __count;
- union
- {
- wint_t __wch;
- unsigned char __wchb[4];
- } __value; /* Value so far. */
-} _mbstate_t;
-#endif
-
-#ifndef __flock_t_defined
-typedef _LOCK_RECURSIVE_T _flock_t;
-#endif
-
-#ifndef __iconv_t_defined
-/* Iconv descriptor type */
-typedef void *_iconv_t;
-#endif
-
-#endif /* _SYS__TYPES_H */
diff --git a/system/include/libc/sys/acct.h b/system/include/libc/sys/acct.h
new file mode 100644
index 00000000..ee576c4a
--- /dev/null
+++ b/system/include/libc/sys/acct.h
@@ -0,0 +1,75 @@
+#ifndef _SYS_ACCT_H
+#define _SYS_ACCT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+#include <endian.h>
+#include <time.h>
+#include <stdint.h>
+
+#define ACCT_COMM 16
+
+typedef uint16_t comp_t;
+
+struct acct
+{
+ char ac_flag;
+ uint16_t ac_uid;
+ uint16_t ac_gid;
+ uint16_t ac_tty;
+ uint32_t ac_btime;
+ comp_t ac_utime;
+ comp_t ac_stime;
+ comp_t ac_etime;
+ comp_t ac_mem;
+ comp_t ac_io;
+ comp_t ac_rw;
+ comp_t ac_minflt;
+ comp_t ac_majflt;
+ comp_t ac_swaps;
+ uint32_t ac_exitcode;
+ char ac_comm[ACCT_COMM+1];
+ char ac_pad[10];
+};
+
+
+struct acct_v3
+{
+ char ac_flag;
+ char ac_version;
+ uint16_t ac_tty;
+ uint32_t ac_exitcode;
+ uint32_t ac_uid;
+ uint32_t ac_gid;
+ uint32_t ac_pid;
+ uint32_t ac_ppid;
+ uint32_t ac_btime;
+ float ac_etime;
+ comp_t ac_utime;
+ comp_t ac_stime;
+ comp_t ac_mem;
+ comp_t ac_io;
+ comp_t ac_rw;
+ comp_t ac_minflt;
+ comp_t ac_majflt;
+ comp_t ac_swaps;
+ char ac_comm[ACCT_COMM];
+};
+
+#define AFORK 1
+#define ASU 2
+#define ACORE 8
+#define AXSIG 16
+#define ACCT_BYTEORDER (128*(__BYTE_ORDER==__BIG_ENDIAN))
+#define AHZ 100
+
+int acct(const char *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/cachectl.h b/system/include/libc/sys/cachectl.h
new file mode 100644
index 00000000..f3b896a8
--- /dev/null
+++ b/system/include/libc/sys/cachectl.h
@@ -0,0 +1,22 @@
+#ifndef _SYS_CACHECTL_H
+#define _SYS_CACHECTL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ICACHE (1<<0)
+#define DCACHE (1<<1)
+#define BCACHE (ICACHE|DCACHE)
+#define CACHEABLE 0
+#define UNCACHEABLE 1
+
+int cachectl(void *, int, int);
+int cacheflush(void *, int, int);
+int _flush_cache(void *, int, int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/cdefs.h b/system/include/libc/sys/cdefs.h
deleted file mode 100644
index f0b6a27b..00000000
--- a/system/include/libc/sys/cdefs.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* libc/sys/linux/sys/cdefs.h - Helper macros for K&R vs. ANSI C compat. */
-
-/* Written 2000 by Werner Almesberger */
-
-/*
- * Copyright (c) 1991, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Berkeley Software Design, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- * @(#)cdefs.h 8.8 (Berkeley) 1/9/95
- * $FreeBSD: src/sys/sys/cdefs.h,v 1.54 2002/05/11 03:58:24 alfred Exp $
- */
-
-#ifndef _SYS_CDEFS_H
-#define _SYS_CDEFS_H
-
-#define __FBSDID(x) /* nothing */
-/*
- * Note: the goal here is not compatibility to K&R C. Since we know that we
- * have GCC which understands ANSI C perfectly well, we make use of this.
- */
-
-#define __P(args) args
-#define __PMT(args) args
-#define __const const
-#define __signed signed
-#define __volatile volatile
-#define __DOTS , ...
-#define __THROW
-
-#define __ptr_t void *
-#define __long_double_t long double
-
-#define __attribute_malloc__
-#define __attribute_pure__
-#define __attribute_format_strfmon__(a,b)
-#define __flexarr [0]
-
-#ifdef __cplusplus
-# define __BEGIN_DECLS extern "C" {
-# define __END_DECLS }
-#else
-# define __BEGIN_DECLS
-# define __END_DECLS
-#endif
-
-#ifndef __BOUNDED_POINTERS__
-# define __bounded /* nothing */
-# define __unbounded /* nothing */
-# define __ptrvalue /* nothing */
-#endif
-
-#ifdef __GNUC__
-#define __strong_reference(sym,aliassym) \
- extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)));
-#ifdef __ELF__
-#ifdef __STDC__
-#define __weak_reference(sym,alias) \
- __asm__(".weak " #alias); \
- __asm__(".equ " #alias ", " #sym)
-#define __warn_references(sym,msg) \
- __asm__(".section .gnu.warning." #sym); \
- __asm__(".asciz \"" msg "\""); \
- __asm__(".previous")
-#else
-#define __weak_reference(sym,alias) \
- __asm__(".weak alias"); \
- __asm__(".equ alias, sym")
-#define __warn_references(sym,msg) \
- __asm__(".section .gnu.warning.sym"); \
- __asm__(".asciz \"msg\""); \
- __asm__(".previous")
-#endif /* __STDC__ */
-#else /* !__ELF__ */
-#ifdef __STDC__
-#define __weak_reference(sym,alias) \
- __asm__(".stabs \"_" #alias "\",11,0,0,0"); \
- __asm__(".stabs \"_" #sym "\",1,0,0,0")
-#define __warn_references(sym,msg) \
- __asm__(".stabs \"" msg "\",30,0,0,0"); \
- __asm__(".stabs \"_" #sym "\",1,0,0,0")
-#else
-#define __weak_reference(sym,alias) \
- __asm__(".stabs \"_/**/alias\",11,0,0,0"); \
- __asm__(".stabs \"_/**/sym\",1,0,0,0")
-#define __warn_references(sym,msg) \
- __asm__(".stabs msg,30,0,0,0"); \
- __asm__(".stabs \"_/**/sym\",1,0,0,0")
-#endif /* __STDC__ */
-#endif /* __ELF__ */
-#endif /* __GNUC__ */
-
-#endif /* _SYS_CDEFS_H */
diff --git a/system/include/libc/sys/config.h b/system/include/libc/sys/config.h
deleted file mode 100644
index 49c81f91..00000000
--- a/system/include/libc/sys/config.h
+++ /dev/null
@@ -1,255 +0,0 @@
-#ifndef __SYS_CONFIG_H__
-#define __SYS_CONFIG_H__
-
-#include <machine/ieeefp.h> /* floating point macros */
-#include <sys/features.h> /* POSIX defs */
-
-/* exceptions first */
-#if defined(__H8500__) || defined(__W65__)
-#define __SMALL_BITFIELDS
-/* ??? This conditional is true for the h8500 and the w65, defining H8300
- in those cases probably isn't the right thing to do. */
-#define H8300 1
-#endif
-
-/* 16 bit integer machines */
-#if defined(__Z8001__) || defined(__Z8002__) || defined(__H8500__) || defined(__W65__) || defined (__mn10200__) || defined (__AVR__)
-
-#undef INT_MAX
-#undef UINT_MAX
-#define INT_MAX 32767
-#define UINT_MAX 65535
-#endif
-
-#if defined (__H8300__) || defined (__H8300H__) || defined(__H8300S__) || defined (__H8300SX__)
-#define __SMALL_BITFIELDS
-#define H8300 1
-#undef INT_MAX
-#undef UINT_MAX
-#define INT_MAX __INT_MAX__
-#define UINT_MAX (__INT_MAX__ * 2U + 1)
-#endif
-
-#if (defined(__CR16__) || defined(__CR16C__) ||defined(__CR16CP__))
-#ifndef __INT32__
-#define __SMALL_BITFIELDS
-#undef INT_MAX
-#undef UINT_MAX
-#define INT_MAX 32767
-#define UINT_MAX (__INT_MAX__ * 2U + 1)
-#else /* INT32 */
-#undef INT_MAX
-#undef UINT_MAX
-#define INT_MAX 2147483647
-#define UINT_MAX (__INT_MAX__ * 2U + 1)
-#endif /* INT32 */
-
-#endif /* CR16C */
-
-#if defined (__xc16x__) || defined (__xc16xL__) || defined (__xc16xS__)
-#define __SMALL_BITFIELDS
-#endif
-
-#ifdef __W65__
-#define __SMALL_BITFIELDS
-#endif
-
-#if defined(__D10V__)
-#define __SMALL_BITFIELDS
-#undef INT_MAX
-#undef UINT_MAX
-#define INT_MAX __INT_MAX__
-#define UINT_MAX (__INT_MAX__ * 2U + 1)
-#define _POINTER_INT short
-#endif
-
-#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
-#undef INT_MAX
-#undef UINT_MAX
-#define INT_MAX __INT_MAX__
-#define UINT_MAX (__INT_MAX__ * 2U + 1)
-#define _POINTER_INT short
-#endif
-
-#ifdef ___AM29K__
-#define _FLOAT_RET double
-#endif
-
-#ifdef __i386__
-#ifndef __unix__
-/* in other words, go32 */
-#define _FLOAT_RET double
-#endif
-#if defined(__linux__) || defined(__RDOS__)
-/* we want the reentrancy structure to be returned by a function */
-#define __DYNAMIC_REENT__
-#define HAVE_GETDATE
-#define _HAVE_SYSTYPES
-#define _READ_WRITE_RETURN_TYPE _ssize_t
-#define __LARGE64_FILES 1
-/* we use some glibc header files so turn on glibc large file feature */
-#define _LARGEFILE64_SOURCE 1
-#endif
-#endif
-
-#ifdef __mn10200__
-#define __SMALL_BITFIELDS
-#endif
-
-#ifdef __AVR__
-#define __SMALL_BITFIELDS
-#define _POINTER_INT short
-#endif
-
-#ifdef __v850
-#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__sda__))
-#endif
-
-/* For the PowerPC eabi, force the _impure_ptr to be in .sdata */
-#if defined(__PPC__)
-#if defined(_CALL_SYSV)
-#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata")))
-#endif
-#ifdef __SPE__
-#define _LONG_DOUBLE double
-#endif
-#endif
-
-/* Configure small REENT structure for Xilinx MicroBlaze platforms */
-#if defined (__MICROBLAZE__)
-#ifndef _REENT_SMALL
-#define _REENT_SMALL
-#endif
-/* Xilinx XMK uses Unix98 mutex */
-#ifdef __XMK__
-#define _UNIX98_THREAD_MUTEX_ATTRIBUTES
-#endif
-#endif
-
-#if defined(__mips__) && !defined(__rtems__)
-#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata")))
-#endif
-
-#ifdef __xstormy16__
-#define __SMALL_BITFIELDS
-#undef INT_MAX
-#undef UINT_MAX
-#define INT_MAX __INT_MAX__
-#define UINT_MAX (__INT_MAX__ * 2U + 1)
-#define MALLOC_ALIGNMENT 8
-#define _POINTER_INT short
-#define __BUFSIZ__ 16
-#define _REENT_SMALL
-#endif
-#ifdef __m32c__
-#define __SMALL_BITFIELDS
-#undef INT_MAX
-#undef UINT_MAX
-#define INT_MAX __INT_MAX__
-#define UINT_MAX (__INT_MAX__ * 2U + 1)
-#define MALLOC_ALIGNMENT 8
-#if defined(__r8c_cpu__) || defined(__m16c_cpu__)
-#define _POINTER_INT short
-#else
-#define _POINTER_INT long
-#endif
-#define __BUFSIZ__ 16
-#define _REENT_SMALL
-#endif /* __m32c__ */
-
-#ifdef __SPU__
-#define MALLOC_ALIGNMENT 16
-#define __CUSTOM_FILE_IO__
-#endif
-
-/* This block should be kept in sync with GCC's limits.h. The point
- of having these definitions here is to not include limits.h, which
- would pollute the user namespace, while still using types of the
- the correct widths when deciding how to define __int32_t and
- __int64_t. */
-#ifndef __INT_MAX__
-# ifdef INT_MAX
-# define __INT_MAX__ INT_MAX
-# else
-# define __INT_MAX__ 2147483647
-# endif
-#endif
-
-#ifndef __LONG_MAX__
-# ifdef LONG_MAX
-# define __LONG_MAX__ LONG_MAX
-# else
-# if defined (__alpha__) || (defined (__sparc__) && defined(__arch64__)) \
- || defined (__sparcv9)
-# define __LONG_MAX__ 9223372036854775807L
-# else
-# define __LONG_MAX__ 2147483647L
-# endif /* __alpha__ || sparc64 */
-# endif
-#endif
-/* End of block that should be kept in sync with GCC's limits.h. */
-
-#ifndef _POINTER_INT
-#define _POINTER_INT long
-#endif
-
-#ifdef __frv__
-#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata")))
-#endif
-#undef __RAND_MAX
-#if __INT_MAX__ == 32767
-#define __RAND_MAX 32767
-#else
-#define __RAND_MAX 0x7fffffff
-#endif
-
-#if defined(__CYGWIN__)
-#include <cygwin/config.h>
-#if !defined (__STRICT_ANSI__) || (__STDC_VERSION__ >= 199901L)
-#define __USE_XOPEN2K 1
-#endif
-#endif
-
-#if defined(__rtems__)
-#define __FILENAME_MAX__ 255
-#define _READ_WRITE_RETURN_TYPE _ssize_t
-#endif
-
-#ifndef __EXPORT
-#define __EXPORT
-#endif
-
-#ifndef __IMPORT
-#define __IMPORT
-#endif
-
-/* Define return type of read/write routines. In POSIX, the return type
- for read()/write() is "ssize_t" but legacy newlib code has been using
- "int" for some time. If not specified, "int" is defaulted. */
-#ifndef _READ_WRITE_RETURN_TYPE
-#define _READ_WRITE_RETURN_TYPE int
-#endif
-
-#ifndef __WCHAR_MAX__
-#if __INT_MAX__ == 32767 || defined (_WIN32)
-#define __WCHAR_MAX__ 0xffffu
-#endif
-#endif
-
-/* See if small reent asked for at configuration time and
- is not chosen by the platform by default. */
-#ifdef _WANT_REENT_SMALL
-#ifndef _REENT_SMALL
-#define _REENT_SMALL
-#endif
-#endif
-
-/* If _MB_EXTENDED_CHARSETS_ALL is set, we want all of the extended
- charsets. The extended charsets add a few functions and a couple
- of tables of a few K each. */
-#ifdef _MB_EXTENDED_CHARSETS_ALL
-#define _MB_EXTENDED_CHARSETS_ISO 1
-#define _MB_EXTENDED_CHARSETS_WINDOWS 1
-#endif
-
-#endif /* __SYS_CONFIG_H__ */
diff --git a/system/include/libc/sys/custom_file.h b/system/include/libc/sys/custom_file.h
deleted file mode 100644
index 96314fb9..00000000
--- a/system/include/libc/sys/custom_file.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#error System-specific custom_file.h is missing.
-
diff --git a/system/include/libc/sys/dir.h b/system/include/libc/sys/dir.h
index 220150dc..9ba1c79e 100644
--- a/system/include/libc/sys/dir.h
+++ b/system/include/libc/sys/dir.h
@@ -1,10 +1,2 @@
-/* BSD predecessor of POSIX.1 <dirent.h> and struct dirent */
-
-#ifndef _SYS_DIR_H_
-#define _SYS_DIR_H_
-
#include <dirent.h>
-
#define direct dirent
-
-#endif /*_SYS_DIR_H_*/
diff --git a/system/include/libc/sys/dirent.h b/system/include/libc/sys/dirent.h
deleted file mode 100644
index e6ce831e..00000000
--- a/system/include/libc/sys/dirent.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* <dirent.h> includes <sys/dirent.h>, which is this file. On a
- system which supports <dirent.h>, this file is overridden by
- dirent.h in the libc/sys/.../sys directory. On a system which does
- not support <dirent.h>, we will get this file which uses #error to force
- an error. */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* XXX Emscripten */
-#include <sys/types.h>
-struct dirent {
- ino_t d_ino;
- char d_name[MAXNAMLEN];
- int d_off;
- int d_reclen;
- char d_type;
-};
-
-#define DIR struct dirent
-
-DIR *opendir(const char *);
-void seekdir(DIR *, long);
-long telldir(DIR *);
-DIR *readdir(DIR *);
-int readdir_r(DIR *, struct dirent *, struct dirent **);
-int closedir(DIR *dirp);
-void rewinddir(DIR *dirp);
-int scandir(const char *dirp,
- struct dirent ***namelist,
- int (*filter)(const struct dirent *),
- int (*compar)(const struct dirent **, const struct dirent **));
-
-enum {
- DT_UNKNOWN = 0,
-#define DT_UNKNOWN DT_UNKNOWN
- DT_FIFO = 1,
-#define DT_FIFO DT_FIFO
- DT_CHR = 2,
-#define DT_CHR DT_CHR
- DT_DIR = 4,
-#define DT_DIR DT_DIR
- DT_BLK = 6,
-#define DT_BLK DT_BLK
- DT_REG = 8,
-#define DT_REG DT_REG
- DT_LNK = 10,
-#define DT_LNK DT_LNK
- DT_SOCK = 12,
-#define DT_SOCK DT_SOCK
- DT_WHT = 14
-#define DT_WHT DT_WHT
-};
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/system/include/libc/sys/epoll.h b/system/include/libc/sys/epoll.h
new file mode 100644
index 00000000..1f0312e5
--- /dev/null
+++ b/system/include/libc/sys/epoll.h
@@ -0,0 +1,67 @@
+#ifndef _SYS_EPOLL_H
+#define _SYS_EPOLL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <sys/types.h>
+#include <fcntl.h>
+
+#define __NEED_sigset_t
+
+#include <bits/alltypes.h>
+
+#define EPOLL_CLOEXEC O_CLOEXEC
+#define EPOLL_NONBLOCK O_NONBLOCK
+
+enum EPOLL_EVENTS { __EPOLL_DUMMY };
+#define EPOLLIN 0x001
+#define EPOLLPRI 0x002
+#define EPOLLOUT 0x004
+#define EPOLLRDNORM 0x040
+#define EPOLLRDBAND 0x080
+#define EPOLLWRNORM 0x100
+#define EPOLLWRBAND 0x200
+#define EPOLLMSG 0x400
+#define EPOLLERR 0x008
+#define EPOLLHUP 0x010
+#define EPOLLRDHUP 0x2000
+#define EPOLLWAKEUP (1U<<29)
+#define EPOLLONESHOT (1U<<30)
+#define EPOLLET (1U<<31)
+
+#define EPOLL_CTL_ADD 1
+#define EPOLL_CTL_DEL 2
+#define EPOLL_CTL_MOD 3
+
+typedef union epoll_data {
+ void *ptr;
+ int fd;
+ uint32_t u32;
+ uint64_t u64;
+} epoll_data_t;
+
+struct epoll_event {
+ uint32_t events;
+ epoll_data_t data;
+}
+#ifdef __x86_64__
+__attribute__ ((__packed__))
+#endif
+;
+
+
+int epoll_create(int);
+int epoll_create1(int);
+int epoll_ctl(int, int, int, struct epoll_event *);
+int epoll_wait(int, struct epoll_event *, int, int);
+int epoll_pwait(int, struct epoll_event *, int, int, const sigset_t *);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* sys/epoll.h */
diff --git a/system/include/libc/sys/errno.h b/system/include/libc/sys/errno.h
index ac45fbc5..35a3e5a2 100644
--- a/system/include/libc/sys/errno.h
+++ b/system/include/libc/sys/errno.h
@@ -1,190 +1,2 @@
-/* errno is not a global variable, because that would make using it
- non-reentrant. Instead, its address is returned by the function
- __errno. */
-
-#ifndef _SYS_ERRNO_H_
-#ifdef __cplusplus
-extern "C" {
-#endif
-#define _SYS_ERRNO_H_
-
-#include <sys/reent.h>
-
-#ifndef _REENT_ONLY
-#define errno (*__errno())
-extern int *__errno _PARAMS ((void));
-#endif
-
-/* Please don't use these variables directly.
- Use strerror instead. */
-extern __IMPORT _CONST char * _CONST _sys_errlist[];
-extern __IMPORT int _sys_nerr;
-#ifdef __CYGWIN__
-extern __IMPORT const char * const sys_errlist[];
-extern __IMPORT int sys_nerr;
-#endif
-
-#define __errno_r(ptr) ((ptr)->_errno)
-
-#define EPERM 1 /* Not super-user */
-#define ENOENT 2 /* No such file or directory */
-#define ESRCH 3 /* No such process */
-#define EINTR 4 /* Interrupted system call */
-#define EIO 5 /* I/O error */
-#define ENXIO 6 /* No such device or address */
-#define E2BIG 7 /* Arg list too long */
-#define ENOEXEC 8 /* Exec format error */
-#define EBADF 9 /* Bad file number */
-#define ECHILD 10 /* No children */
-#define EAGAIN 11 /* No more processes */
-#define ENOMEM 12 /* Not enough core */
-#define EACCES 13 /* Permission denied */
-#define EFAULT 14 /* Bad address */
-#ifdef __LINUX_ERRNO_EXTENSIONS__
-#define ENOTBLK 15 /* Block device required */
-#endif
-#define EBUSY 16 /* Mount device busy */
-#define EEXIST 17 /* File exists */
-#define EXDEV 18 /* Cross-device link */
-#define ENODEV 19 /* No such device */
-#define ENOTDIR 20 /* Not a directory */
-#define EISDIR 21 /* Is a directory */
-#define EINVAL 22 /* Invalid argument */
-#define ENFILE 23 /* Too many open files in system */
-#define EMFILE 24 /* Too many open files */
-#define ENOTTY 25 /* Not a typewriter */
-#define ETXTBSY 26 /* Text file busy */
-#define EFBIG 27 /* File too large */
-#define ENOSPC 28 /* No space left on device */
-#define ESPIPE 29 /* Illegal seek */
-#define EROFS 30 /* Read only file system */
-#define EMLINK 31 /* Too many links */
-#define EPIPE 32 /* Broken pipe */
-#define EDOM 33 /* Math arg out of domain of func */
-#define ERANGE 34 /* Math result not representable */
-#define ENOMSG 35 /* No message of desired type */
-#define EIDRM 36 /* Identifier removed */
-#ifdef __LINUX_ERRNO_EXTENSIONS__
-#define ECHRNG 37 /* Channel number out of range */
-#define EL2NSYNC 38 /* Level 2 not synchronized */
-#define EL3HLT 39 /* Level 3 halted */
-#define EL3RST 40 /* Level 3 reset */
-#define ELNRNG 41 /* Link number out of range */
-#define EUNATCH 42 /* Protocol driver not attached */
-#define ENOCSI 43 /* No CSI structure available */
-#define EL2HLT 44 /* Level 2 halted */
-#endif
-#define EDEADLK 45 /* Deadlock condition */
-#define ENOLCK 46 /* No record locks available */
-#ifdef __LINUX_ERRNO_EXTENSIONS__
-#define EBADE 50 /* Invalid exchange */
-#define EBADR 51 /* Invalid request descriptor */
-#define EXFULL 52 /* Exchange full */
-#define ENOANO 53 /* No anode */
-#define EBADRQC 54 /* Invalid request code */
-#define EBADSLT 55 /* Invalid slot */
-#define EDEADLOCK 56 /* File locking deadlock error */
-#define EBFONT 57 /* Bad font file fmt */
-#endif
-#define ENOSTR 60 /* Device not a stream */
-#define ENODATA 61 /* No data (for no delay io) */
-#define ETIME 62 /* Timer expired */
-#define ENOSR 63 /* Out of streams resources */
-#ifdef __LINUX_ERRNO_EXTENSIONS__
-#define ENONET 64 /* Machine is not on the network */
-#define ENOPKG 65 /* Package not installed */
-#define EREMOTE 66 /* The object is remote */
-#endif
-#define ENOLINK 67 /* The link has been severed */
-#ifdef __LINUX_ERRNO_EXTENSIONS__
-#define EADV 68 /* Advertise error */
-#define ESRMNT 69 /* Srmount error */
-#define ECOMM 70 /* Communication error on send */
-#endif
-#define EPROTO 71 /* Protocol error */
-#define EMULTIHOP 74 /* Multihop attempted */
-#ifdef __LINUX_ERRNO_EXTENSIONS__
-#define ELBIN 75 /* Inode is remote (not really error) */
-#define EDOTDOT 76 /* Cross mount point (not really error) */
-#endif
-#define EBADMSG 77 /* Trying to read unreadable message */
-#define EFTYPE 79 /* Inappropriate file type or format */
-#ifdef __LINUX_ERRNO_EXTENSIONS__
-#define ENOTUNIQ 80 /* Given log. name not unique */
-#define EBADFD 81 /* f.d. invalid for this operation */
-#define EREMCHG 82 /* Remote address changed */
-#define ELIBACC 83 /* Can't access a needed shared lib */
-#define ELIBBAD 84 /* Accessing a corrupted shared lib */
-#define ELIBSCN 85 /* .lib section in a.out corrupted */
-#define ELIBMAX 86 /* Attempting to link in too many libs */
-#define ELIBEXEC 87 /* Attempting to exec a shared library */
-#endif
-#define ENOSYS 88 /* Function not implemented */
-#ifdef __CYGWIN__
-#define ENMFILE 89 /* No more files */
-#endif
-#define ENOTEMPTY 90 /* Directory not empty */
-#define ENAMETOOLONG 91 /* File or path name too long */
-#define ELOOP 92 /* Too many symbolic links */
-#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
-#define EPFNOSUPPORT 96 /* Protocol family not supported */
-#define ECONNRESET 104 /* Connection reset by peer */
-#define ENOBUFS 105 /* No buffer space available */
-#define EAFNOSUPPORT 106 /* Address family not supported by protocol family */
-#define EPROTOTYPE 107 /* Protocol wrong type for socket */
-#define ENOTSOCK 108 /* Socket operation on non-socket */
-#define ENOPROTOOPT 109 /* Protocol not available */
-#ifdef __LINUX_ERRNO_EXTENSIONS__
-#define ESHUTDOWN 110 /* Can't send after socket shutdown */
-#endif
-#define ECONNREFUSED 111 /* Connection refused */
-#define EADDRINUSE 112 /* Address already in use */
-#define ECONNABORTED 113 /* Connection aborted */
-#define ENETUNREACH 114 /* Network is unreachable */
-#define ENETDOWN 115 /* Network interface is not configured */
-#define ETIMEDOUT 116 /* Connection timed out */
-#define EHOSTDOWN 117 /* Host is down */
-#define EHOSTUNREACH 118 /* Host is unreachable */
-#define EINPROGRESS 119 /* Connection already in progress */
-#define EALREADY 120 /* Socket already connected */
-#define EDESTADDRREQ 121 /* Destination address required */
-#define EMSGSIZE 122 /* Message too long */
-#define EPROTONOSUPPORT 123 /* Unknown protocol */
-#ifdef __LINUX_ERRNO_EXTENSIONS__
-#define ESOCKTNOSUPPORT 124 /* Socket type not supported */
-#endif
-#define EADDRNOTAVAIL 125 /* Address not available */
-#define ENETRESET 126
-#define EISCONN 127 /* Socket is already connected */
-#define ENOTCONN 128 /* Socket is not connected */
-#define ETOOMANYREFS 129
-#ifdef __LINUX_ERRNO_EXTENSIONS__
-#define EPROCLIM 130
-#define EUSERS 131
-#endif
-#define EDQUOT 132
-#define ESTALE 133
-#define ENOTSUP 134 /* Not supported */
-#ifdef __LINUX_ERRNO_EXTENSIONS__
-#define ENOMEDIUM 135 /* No medium (in tape drive) */
-#endif
-#ifdef __CYGWIN__
-#define ENOSHARE 136 /* No such host or network path */
-#define ECASECLASH 137 /* Filename exists with different case */
-#endif
-#define EILSEQ 138
-#define EOVERFLOW 139 /* Value too large for defined data type */
-#define ECANCELED 140 /* Operation canceled */
-#define ENOTRECOVERABLE 141 /* State not recoverable */
-#define EOWNERDEAD 142 /* Previous owner died */
-#ifdef __LINUX_ERRNO_EXTENSIONS__
-#define ESTRPIPE 143 /* Streams pipe error */
-#endif
-#define EWOULDBLOCK EAGAIN /* Operation would block */
-
-#define __ELASTERROR 2000 /* Users can add values starting here */
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* _SYS_ERRNO_H */
+#warning redirecting incorrect #include <sys/errno.h> to <errno.h>
+#include <errno.h>
diff --git a/system/include/libc/sys/eventfd.h b/system/include/libc/sys/eventfd.h
new file mode 100644
index 00000000..dc5c88f0
--- /dev/null
+++ b/system/include/libc/sys/eventfd.h
@@ -0,0 +1,26 @@
+#ifndef _SYS_EVENTFD_H
+#define _SYS_EVENTFD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <fcntl.h>
+
+typedef uint64_t eventfd_t;
+
+#define EFD_SEMAPHORE 1
+#define EFD_CLOEXEC O_CLOEXEC
+#define EFD_NONBLOCK O_NONBLOCK
+
+int eventfd(unsigned int, int);
+int eventfd_read(int, eventfd_t *);
+int eventfd_write(int, eventfd_t);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* sys/eventfd.h */
diff --git a/system/include/libc/sys/fcntl.h b/system/include/libc/sys/fcntl.h
index be85f40c..3dd928ef 100644
--- a/system/include/libc/sys/fcntl.h
+++ b/system/include/libc/sys/fcntl.h
@@ -1,4 +1,2 @@
-#ifndef _SYS_FCNTL_H_
-#define _SYS_FCNTL_H_
-#include <sys/_default_fcntl.h>
-#endif
+#warning redirecting incorrect #include <sys/fcntl.h> to <fcntl.h>
+#include <fcntl.h>
diff --git a/system/include/libc/sys/features.h b/system/include/libc/sys/features.h
deleted file mode 100644
index 8c32bf04..00000000
--- a/system/include/libc/sys/features.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Written by Joel Sherrill <joel@OARcorp.com>.
- *
- * COPYRIGHT (c) 1989-2000.
- *
- * On-Line Applications Research Corporation (OAR).
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software.
- *
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION
- * OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
- * SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- *
- * $Id: features.h,v 1.22 2010/08/09 08:29:22 corinna Exp $
- */
-
-#ifndef _SYS_FEATURES_H
-#define _SYS_FEATURES_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if EMSCRIPTEN
-#define _POSIX_REALTIME_SIGNALS 1
-#define _POSIX_THREADS 200112L
-#define _UNIX98_THREAD_MUTEX_ATTRIBUTES 1
-#define _POSIX_READER_WRITER_LOCKS 200112L
-#endif
-
-/* RTEMS adheres to POSIX -- 1003.1b with some features from annexes. */
-
-#ifdef __rtems__
-#define _POSIX_JOB_CONTROL 1
-#define _POSIX_SAVED_IDS 1
-#define _POSIX_VERSION 199309L
-#define _POSIX_ASYNCHRONOUS_IO 1
-#define _POSIX_FSYNC 1
-#define _POSIX_MAPPED_FILES 1
-#define _POSIX_MEMLOCK 1
-#define _POSIX_MEMLOCK_RANGE 1
-#define _POSIX_MEMORY_PROTECTION 1
-#define _POSIX_MESSAGE_PASSING 1
-#define _POSIX_MONOTONIC_CLOCK 200112L
-#define _POSIX_PRIORITIZED_IO 1
-#define _POSIX_PRIORITY_SCHEDULING 1
-#define _POSIX_REALTIME_SIGNALS 1
-#define _POSIX_SEMAPHORES 1
-/* #define _POSIX_SHARED_MEMORY_OBJECTS 1 */
-#define _POSIX_SYNCHRONIZED_IO 1
-#define _POSIX_TIMERS 1
-#define _POSIX_BARRIERS 200112L
-#define _POSIX_READER_WRITER_LOCKS 200112L
-#define _POSIX_SPIN_LOCKS 200112L
-
-
-/* In P1003.1b but defined by drafts at least as early as P1003.1c/D10 */
-#define _POSIX_THREADS 1
-#define _POSIX_THREAD_ATTR_STACKADDR 1
-#define _POSIX_THREAD_ATTR_STACKSIZE 1
-#define _POSIX_THREAD_PRIORITY_SCHEDULING 1
-#define _POSIX_THREAD_PRIO_INHERIT 1
-#define _POSIX_THREAD_PRIO_PROTECT 1
-#define _POSIX_THREAD_PROCESS_SHARED 1
-#define _POSIX_THREAD_SAFE_FUNCTIONS 1
-
-/* P1003.4b/D8 defines the constants below this comment. */
-#define _POSIX_SPAWN 1
-#define _POSIX_TIMEOUTS 1
-#define _POSIX_CPUTIME 1
-#define _POSIX_THREAD_CPUTIME 1
-#define _POSIX_SPORADIC_SERVER 1
-#define _POSIX_THREAD_SPORADIC_SERVER 1
-#define _POSIX_DEVICE_CONTROL 1
-#define _POSIX_DEVCTL_DIRECTION 1
-#define _POSIX_INTERRUPT_CONTROL 1
-#define _POSIX_ADVISORY_INFO 1
-
-/* UNIX98 added some new pthread mutex attributes */
-#define _UNIX98_THREAD_MUTEX_ATTRIBUTES 1
-
-#endif
-
-/* XMK loosely adheres to POSIX -- 1003.1 */
-#ifdef __XMK__
-#define _POSIX_THREADS 1
-#define _POSIX_THREAD_PRIORITY_SCHEDULING 1
-#endif
-
-
-#ifdef __svr4__
-# define _POSIX_JOB_CONTROL 1
-# define _POSIX_SAVED_IDS 1
-# define _POSIX_VERSION 199009L
-#endif
-
-#ifdef __CYGWIN__
-
-#if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L
-#define _POSIX_VERSION 200112L
-#define _POSIX2_VERSION 200112L
-#define _XOPEN_VERSION 600
-
-#define _POSIX_ADVISORY_INFO 200112L
-/* #define _POSIX_ASYNCHRONOUS_IO -1 */
-/* #define _POSIX_BARRIERS -1 */
-#define _POSIX_CHOWN_RESTRICTED 1
-/* #define _POSIX_CLOCK_SELECTION -1 */
-/* #define _POSIX_CPUTIME -1 */
-#define _POSIX_FSYNC 200112L
-#define _POSIX_IPV6 200112L
-#define _POSIX_JOB_CONTROL 1
-#define _POSIX_MAPPED_FILES 200112L
-/* #define _POSIX_MEMLOCK -1 */
-#define _POSIX_MEMLOCK_RANGE 200112L
-#define _POSIX_MEMORY_PROTECTION 200112L
-#define _POSIX_MESSAGE_PASSING 200112L
-#define _POSIX_MONOTONIC_CLOCK 200112L
-#define _POSIX_NO_TRUNC 1
-/* #define _POSIX_PRIORITIZED_IO -1 */
-#define _POSIX_PRIORITY_SCHEDULING 200112L
-#define _POSIX_RAW_SOCKETS 200112L
-#define _POSIX_READER_WRITER_LOCKS 200112L
-#define _POSIX_REALTIME_SIGNALS 200112L
-#define _POSIX_REGEXP 1
-#define _POSIX_SAVED_IDS 1
-#define _POSIX_SEMAPHORES 200112L
-#define _POSIX_SHARED_MEMORY_OBJECTS 200112L
-#define _POSIX_SHELL 1
-/* #define _POSIX_SPAWN -1 */
-/* #define _POSIX_SPIN_LOCKS -1 */
-/* #define _POSIX_SPORADIC_SERVER -1 */
-#define _POSIX_SYNCHRONIZED_IO 200112L
-/* #define _POSIX_THREAD_ATTR_STACKADDR -1 */
-#define _POSIX_THREAD_ATTR_STACKSIZE 200112L
-/* #define _POSIX_THREAD_CPUTIME -1 */
-/* #define _POSIX_THREAD_PRIO_INHERIT -1 */
-/* #define _POSIX_THREAD_PRIO_PROTECT -1 */
-#define _POSIX_THREAD_PRIORITY_SCHEDULING 200112L
-#define _POSIX_THREAD_PROCESS_SHARED 200112L
-#define _POSIX_THREAD_SAFE_FUNCTIONS 200112L
-/* #define _POSIX_THREAD_SPORADIC_SERVER -1 */
-#define _POSIX_THREADS 200112L
-/* #define _POSIX_TIMEOUTS -1 */
-#define _POSIX_TIMERS 1
-/* #define _POSIX_TRACE -1 */
-/* #define _POSIX_TRACE_EVENT_FILTER -1 */
-/* #define _POSIX_TRACE_INHERIT -1 */
-/* #define _POSIX_TRACE_LOG -1 */
-/* #define _POSIX_TYPED_MEMORY_OBJECTS -1 */
-#define _POSIX_VDISABLE '\0'
-#define _POSIX2_C_BIND 200112L
-#define _POSIX2_C_DEV 200112L
-#define _POSIX2_CHAR_TERM 200112L
-/* #define _POSIX2_FORT_DEV -1 */
-/* #define _POSIX2_FORT_RUN -1 */
-/* #define _POSIX2_LOCALEDEF -1 */
-/* #define _POSIX2_PBS -1 */
-/* #define _POSIX2_PBS_ACCOUNTING -1 */
-/* #define _POSIX2_PBS_CHECKPOINT -1 */
-/* #define _POSIX2_PBS_LOCATE -1 */
-/* #define _POSIX2_PBS_MESSAGE -1 */
-/* #define _POSIX2_PBS_TRACK -1 */
-#define _POSIX2_SW_DEV 200112L
-#define _POSIX2_UPE 200112L
-#define _POSIX_V6_ILP32_OFF32 -1
-#define _XBS5_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
-#define _POSIX_V6_ILP32_OFFBIG 1
-#define _XBS5_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
-#define _POSIX_V6_LP64_OFF64 -1
-#define _XBS5_LP64_OFF64 _POSIX_V6_LP64_OFF64
-#define _POSIX_V6_LPBIG_OFFBIG -1
-#define _XBS5_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
-#define _XOPEN_CRYPT 1
-#define _XOPEN_ENH_I18N 1
-/* #define _XOPEN_LEGACY -1 */
-/* #define _XOPEN_REALTIME -1 */
-/* #define _XOPEN_REALTIME_THREADS -1 */
-#define _XOPEN_SHM 1
-/* #define _XOPEN_STREAMS -1 */
-/* #define _XOPEN_UNIX -1 */
-
-#endif /* !__STRICT_ANSI__ || __cplusplus || __STDC_VERSION__ >= 199901L */
-#endif /* __CYGWIN__ */
-
-/* Per the permission given in POSIX.1-2008 section 2.2.1, define
- * _POSIX_C_SOURCE if _XOPEN_SOURCE is defined and _POSIX_C_SOURCE is not.
- * (_XOPEN_SOURCE indicates that XSI extensions are desired by an application.)
- * This permission is first granted in 2008, but use it for older ones, also.
- * Allow for _XOPEN_SOURCE to be empty (from the earliest form of it, before it
- * was required to have specific values).
- */
-#if !defined(_POSIX_C_SOURCE) && defined(_XOPEN_SOURCE)
- #if (_XOPEN_SOURCE - 0) == 700 /* POSIX.1-2008 */
- #define _POSIX_C_SOURCE 200809L
- #elif (_XOPEN_SOURCE - 0) == 600 /* POSIX.1-2001 or 2004 */
- #define _POSIX_C_SOURCE 200112L
- #elif (_XOPEN_SOURCE - 0) == 500 /* POSIX.1-1995 */
- #define _POSIX_C_SOURCE 199506L
- #elif (_XOPEN_SOURCE - 0) < 500 /* really old */
- #define _POSIX_C_SOURCE 2
- #endif
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* _SYS_FEATURES_H */
diff --git a/system/include/libc/sys/file.h b/system/include/libc/sys/file.h
index 58d4fac3..4fc83b98 100644
--- a/system/include/libc/sys/file.h
+++ b/system/include/libc/sys/file.h
@@ -1,2 +1,21 @@
+#ifndef _SYS_FILE_H
+#define _SYS_FILE_H
+#ifdef __cplusplus
+extern "C" {
+#endif
-#include <sys/fcntl.h>
+#define LOCK_SH 1
+#define LOCK_EX 2
+#define LOCK_NB 4
+#define LOCK_UN 8
+
+#define L_SET 0
+#define L_INCR 1
+#define L_XTND 2
+
+int flock(int, int);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/system/include/libc/sys/fsuid.h b/system/include/libc/sys/fsuid.h
new file mode 100644
index 00000000..c7a9b8fa
--- /dev/null
+++ b/system/include/libc/sys/fsuid.h
@@ -0,0 +1,20 @@
+#ifndef _SYS_FSUID_H
+#define _SYS_FSUID_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define __NEED_uid_t
+#define __NEED_gid_t
+
+#include <bits/alltypes.h>
+
+int setfsuid(uid_t);
+int setfsgid(gid_t);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/iconvnls.h b/system/include/libc/sys/iconvnls.h
deleted file mode 100644
index 09ea1831..00000000
--- a/system/include/libc/sys/iconvnls.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 2003-2004, Artem B. Bityuckiy.
- * Rights transferred to Franklin Electronic Publishers.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. 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 AUTHOR 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 AUTHOR 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.
- */
-
-/*
- * Funtions, macros, etc implimented in iconv library but used by other
- * NLS-related subsystems too.
- */
-#ifndef __SYS_ICONVNLS_H__
-#define __SYS_ICONVNLS_H__
-
-#include <_ansi.h>
-#include <reent.h>
-#include <wchar.h>
-#include <iconv.h>
-
-/* Iconv data path environment variable name */
-#define NLS_ENVVAR_NAME "NLSPATH"
-/* Default NLSPATH value */
-#define ICONV_DEFAULT_NLSPATH "/usr/locale"
-/* Direction markers */
-#define ICONV_NLS_FROM 0
-#define ICONV_NLS_TO 1
-
-_VOID
-_EXFUN(_iconv_nls_get_state, (iconv_t cd, mbstate_t *ps, int direction));
-
-int
-_EXFUN(_iconv_nls_set_state, (iconv_t cd, mbstate_t *ps, int direction));
-
-int
-_EXFUN(_iconv_nls_is_stateful, (iconv_t cd, int direction));
-
-int
-_EXFUN(_iconv_nls_get_mb_cur_max, (iconv_t cd, int direction));
-
-size_t
-_EXFUN(_iconv_nls_conv, (struct _reent *rptr, iconv_t cd,
- _CONST char **inbuf, size_t *inbytesleft,
- char **outbuf, size_t *outbytesleft));
-
-_CONST char *
-_EXFUN(_iconv_nls_construct_filename, (struct _reent *rptr, _CONST char *file,
- _CONST char *dir, _CONST char *ext));
-
-
-int
-_EXFUN(_iconv_nls_open, (struct _reent *rptr, _CONST char *encoding,
- iconv_t *towc, iconv_t *fromwc, int flag));
-
-char *
-_EXFUN(_iconv_resolve_encoding_name, (struct _reent *rptr, _CONST char *ca));
-
-#endif /* __SYS_ICONVNLS_H__ */
-
diff --git a/system/include/libc/sys/inotify.h b/system/include/libc/sys/inotify.h
new file mode 100644
index 00000000..a5bf96a6
--- /dev/null
+++ b/system/include/libc/sys/inotify.h
@@ -0,0 +1,57 @@
+#ifndef _SYS_INOTIFY_H
+#define _SYS_INOTIFY_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <fcntl.h>
+
+struct inotify_event {
+ int wd;
+ uint32_t mask, cookie, len;
+ char name[];
+};
+
+#define IN_CLOEXEC O_CLOEXEC
+#define IN_NONBLOCK O_NONBLOCK
+
+#define IN_ACCESS 0x00000001
+#define IN_MODIFY 0x00000002
+#define IN_ATTRIB 0x00000004
+#define IN_CLOSE_WRITE 0x00000008
+#define IN_CLOSE_NOWRITE 0x00000010
+#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
+#define IN_OPEN 0x00000020
+#define IN_MOVED_FROM 0x00000040
+#define IN_MOVED_TO 0x00000080
+#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO)
+#define IN_CREATE 0x00000100
+#define IN_DELETE 0x00000200
+#define IN_DELETE_SELF 0x00000400
+#define IN_MOVE_SELF 0x00000800
+#define IN_ALL_EVENTS 0x00000fff
+
+#define IN_UNMOUNT 0x00002000
+#define IN_Q_OVERFLOW 0x00004000
+#define IN_IGNORED 0x00008000
+
+#define IN_ONLYDIR 0x01000000
+#define IN_DONT_FOLLOW 0x02000000
+#define IN_EXCL_UNLINK 0x04000000
+#define IN_MASK_ADD 0x20000000
+
+#define IN_ISDIR 0x40000000
+#define IN_ONESHOT 0x80000000
+
+int inotify_init(void);
+int inotify_init1(int);
+int inotify_add_watch(int, const char *, uint32_t);
+int inotify_rm_watch(int, uint32_t);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/io.h b/system/include/libc/sys/io.h
new file mode 100644
index 00000000..16658cec
--- /dev/null
+++ b/system/include/libc/sys/io.h
@@ -0,0 +1,17 @@
+#ifndef _SYS_IO_H
+#define _SYS_IO_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+
+#include <bits/io.h>
+
+int iopl(int);
+int ioperm(unsigned long, unsigned long, int);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/system/include/libc/sys/ioctl.h b/system/include/libc/sys/ioctl.h
new file mode 100644
index 00000000..d0415b3d
--- /dev/null
+++ b/system/include/libc/sys/ioctl.h
@@ -0,0 +1,14 @@
+#ifndef _SYS_IOCTL_H
+#define _SYS_IOCTL_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <bits/ioctl.h>
+
+int ioctl (int, int, ...);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/system/include/libc/sys/ipc.h b/system/include/libc/sys/ipc.h
new file mode 100644
index 00000000..c5a39819
--- /dev/null
+++ b/system/include/libc/sys/ipc.h
@@ -0,0 +1,42 @@
+#ifndef _SYS_IPC_H
+#define _SYS_IPC_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+
+#define __NEED_uid_t
+#define __NEED_gid_t
+#define __NEED_mode_t
+#define __NEED_key_t
+
+#include <bits/alltypes.h>
+
+#define __ipc_perm_key __key
+#define __ipc_perm_seq __seq
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#define __key key
+#define __seq seq
+#endif
+
+#include <bits/ipc.h>
+
+#define IPC_CREAT 01000
+#define IPC_EXCL 02000
+#define IPC_NOWAIT 04000
+
+#define IPC_RMID 0
+#define IPC_SET 1
+#define IPC_STAT 2
+#define IPC_INFO 3
+
+#define IPC_PRIVATE ((key_t) 0)
+
+key_t ftok (const char *, int);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/system/include/libc/sys/klog.h b/system/include/libc/sys/klog.h
new file mode 100644
index 00000000..aa66684e
--- /dev/null
+++ b/system/include/libc/sys/klog.h
@@ -0,0 +1,14 @@
+#ifndef _SYS_KLOG_H
+#define _SYS_KLOG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int klogctl (int, char *, int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/lock.h b/system/include/libc/sys/lock.h
deleted file mode 100644
index 9075e35c..00000000
--- a/system/include/libc/sys/lock.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef __SYS_LOCK_H__
-#define __SYS_LOCK_H__
-
-/* dummy lock routines for single-threaded aps */
-
-typedef int _LOCK_T;
-typedef int _LOCK_RECURSIVE_T;
-
-#include <_ansi.h>
-
-#define __LOCK_INIT(class,lock) static int lock = 0;
-#define __LOCK_INIT_RECURSIVE(class,lock) static int lock = 0;
-#define __lock_init(lock) (_CAST_VOID 0)
-#define __lock_init_recursive(lock) (_CAST_VOID 0)
-#define __lock_close(lock) (_CAST_VOID 0)
-#define __lock_close_recursive(lock) (_CAST_VOID 0)
-#define __lock_acquire(lock) (_CAST_VOID 0)
-#define __lock_acquire_recursive(lock) (_CAST_VOID 0)
-#define __lock_try_acquire(lock) (_CAST_VOID 0)
-#define __lock_try_acquire_recursive(lock) (_CAST_VOID 0)
-#define __lock_release(lock) (_CAST_VOID 0)
-#define __lock_release_recursive(lock) (_CAST_VOID 0)
-
-#endif /* __SYS_LOCK_H__ */
diff --git a/system/include/libc/sys/mman.h b/system/include/libc/sys/mman.h
new file mode 100644
index 00000000..9a1e60ff
--- /dev/null
+++ b/system/include/libc/sys/mman.h
@@ -0,0 +1,55 @@
+#ifndef _SYS_MMAN_H
+#define _SYS_MMAN_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+
+#define __NEED_mode_t
+#define __NEED_size_t
+#define __NEED_off_t
+
+#if defined(_GNU_SOURCE)
+#define __NEED_ssize_t
+#endif
+
+#include <bits/alltypes.h>
+
+#include <bits/mman.h>
+
+void *mmap (void *, size_t, int, int, int, off_t);
+int munmap (void *, size_t);
+
+int mprotect (void *, size_t, int);
+int msync (void *, size_t, int);
+
+int posix_madvise (void *, size_t, int);
+
+int mlock (const void *, size_t);
+int munlock (const void *, size_t);
+int mlockall (int);
+int munlockall (void);
+
+#ifdef _GNU_SOURCE
+void *mremap (void *, size_t, size_t, int, ...);
+int remap_file_pages (void *, size_t, int, ssize_t, int);
+#endif
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+int madvise (void *, size_t, int);
+int mincore (void *, size_t, unsigned char *);
+#endif
+
+int shm_open (const char *, int, mode_t);
+int shm_unlink (const char *);
+
+#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
+#define mmap64 mmap
+#define off64_t off_t
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/system/include/libc/sys/mount.h b/system/include/libc/sys/mount.h
new file mode 100644
index 00000000..1e1907f4
--- /dev/null
+++ b/system/include/libc/sys/mount.h
@@ -0,0 +1,72 @@
+#ifndef _SYS_MOUNT_H
+#define _SYS_MOUNT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/ioctl.h>
+
+#define BLKROSET _IO(0x12, 93)
+#define BLKROGET _IO(0x12, 94)
+#define BLKRRPART _IO(0x12, 95)
+#define BLKGETSIZE _IO(0x12, 96)
+#define BLKFLSBUF _IO(0x12, 97)
+#define BLKRASET _IO(0x12, 98)
+#define BLKRAGET _IO(0x12, 99)
+#define BLKFRASET _IO(0x12,100)
+#define BLKFRAGET _IO(0x12,101)
+#define BLKSECTSET _IO(0x12,102)
+#define BLKSECTGET _IO(0x12,103)
+#define BLKSSZGET _IO(0x12,104)
+#define BLKBSZGET _IOR(0x12,112,size_t)
+#define BLKBSZSET _IOW(0x12,113,size_t)
+#define BLKGETSIZE64 _IOR(0x12,114,size_t)
+
+#define MS_RDONLY 1
+#define MS_NOSUID 2
+#define MS_NODEV 4
+#define MS_NOEXEC 8
+#define MS_SYNCHRONOUS 16
+#define MS_REMOUNT 32
+#define MS_MANDLOCK 64
+#define MS_DIRSYNC 128
+#define MS_NOATIME 1024
+#define MS_NODIRATIME 2048
+#define MS_BIND 4096
+#define MS_MOVE 8192
+#define MS_REC 16384
+#define MS_SILENT 32768
+#define MS_POSIXACL (1<<16)
+#define MS_UNBINDABLE (1<<17)
+#define MS_PRIVATE (1<<18)
+#define MS_SLAVE (1<<19)
+#define MS_SHARED (1<<20)
+#define MS_RELATIME (1<<21)
+#define MS_KERNMOUNT (1<<22)
+#define MS_I_VERSION (1<<23)
+#define MS_STRICTATIME (1<<24)
+#define MS_NOSEC (1<<28)
+#define MS_BORN (1<<29)
+#define MS_ACTIVE (1<<30)
+#define MS_NOUSER (1U<<31)
+
+#define MS_RMT_MASK (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION)
+
+#define MS_MGC_VAL 0xc0ed0000
+#define MS_MGC_MSK 0xffff0000
+
+#define MNT_FORCE 1
+#define MNT_DETACH 2
+#define MNT_EXPIRE 4
+#define UMOUNT_NOFOLLOW 8
+
+int mount(const char *, const char *, const char *, unsigned long, const void *);
+int umount(const char *);
+int umount2(const char *, int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/msg.h b/system/include/libc/sys/msg.h
new file mode 100644
index 00000000..139f22b7
--- /dev/null
+++ b/system/include/libc/sys/msg.h
@@ -0,0 +1,52 @@
+#ifndef _SYS_MSG_H
+#define _SYS_MSG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/ipc.h>
+
+#define __NEED_pid_t
+#define __NEED_key_t
+#define __NEED_time_t
+#define __NEED_size_t
+#define __NEED_ssize_t
+
+#include <bits/alltypes.h>
+
+typedef unsigned long msgqnum_t;
+typedef unsigned long msglen_t;
+
+#include <bits/msg.h>
+
+#define __msg_cbytes msg_cbytes
+
+#define MSG_NOERROR 010000
+#define MSG_EXCEPT 020000
+
+#define MSG_STAT 11
+#define MSG_INFO 12
+
+struct msginfo {
+ int msgpool, msgmap, msgmax, msgmnb, msgmni, msgssz, msgtql;
+ unsigned short msgseg;
+};
+
+int msgctl (int, int, struct msqid_ds *);
+int msgget (key_t, int);
+ssize_t msgrcv (int, void *, size_t, long, int);
+int msgsnd (int, const void *, size_t, int);
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+struct msgbuf {
+ long mtype;
+ char mtext[1];
+};
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/mtio.h b/system/include/libc/sys/mtio.h
new file mode 100644
index 00000000..dc8e5f52
--- /dev/null
+++ b/system/include/libc/sys/mtio.h
@@ -0,0 +1,188 @@
+#ifndef _SYS_MTIO_H
+#define _SYS_MTIO_H
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+struct mtop {
+ short mt_op;
+ int mt_count;
+};
+
+#define _IOT_mtop _IOT (_IOTS (short), 1, _IOTS (int), 1, 0, 0)
+#define _IOT_mtget _IOT (_IOTS (long), 7, 0, 0, 0, 0)
+#define _IOT_mtpos _IOT_SIMPLE (long)
+#define _IOT_mtconfiginfo _IOT (_IOTS (long), 2, _IOTS (short), 3, _IOTS (long), 1)
+
+
+#define MTRESET 0
+#define MTFSF 1
+#define MTBSF 2
+#define MTFSR 3
+#define MTBSR 4
+#define MTWEOF 5
+#define MTREW 6
+#define MTOFFL 7
+#define MTNOP 8
+#define MTRETEN 9
+#define MTBSFM 10
+#define MTFSFM 11
+#define MTEOM 12
+#define MTERASE 13
+#define MTRAS1 14
+#define MTRAS2 15
+#define MTRAS3 16
+#define MTSETBLK 20
+#define MTSETDENSITY 21
+#define MTSEEK 22
+#define MTTELL 23
+#define MTSETDRVBUFFER 24
+#define MTFSS 25
+#define MTBSS 26
+#define MTWSM 27
+#define MTLOCK 28
+#define MTUNLOCK 29
+#define MTLOAD 30
+#define MTUNLOAD 31
+#define MTCOMPRESSION 32
+#define MTSETPART 33
+#define MTMKPART 34
+
+struct mtget {
+ long mt_type;
+ long mt_resid;
+ long mt_dsreg;
+ long mt_gstat;
+ long mt_erreg;
+ int mt_fileno;
+ int mt_blkno;
+};
+
+#define MT_ISUNKNOWN 0x01
+#define MT_ISQIC02 0x02
+#define MT_ISWT5150 0x03
+#define MT_ISARCHIVE_5945L2 0x04
+#define MT_ISCMSJ500 0x05
+#define MT_ISTDC3610 0x06
+#define MT_ISARCHIVE_VP60I 0x07
+#define MT_ISARCHIVE_2150L 0x08
+#define MT_ISARCHIVE_2060L 0x09
+#define MT_ISARCHIVESC499 0x0A
+#define MT_ISQIC02_ALL_FEATURES 0x0F
+#define MT_ISWT5099EEN24 0x11
+#define MT_ISTEAC_MT2ST 0x12
+#define MT_ISEVEREX_FT40A 0x32
+#define MT_ISDDS1 0x51
+#define MT_ISDDS2 0x52
+#define MT_ISSCSI1 0x71
+#define MT_ISSCSI2 0x72
+#define MT_ISFTAPE_UNKNOWN 0x800000
+#define MT_ISFTAPE_FLAG 0x800000
+
+struct mt_tape_info {
+ long t_type;
+ char *t_name;
+};
+
+#define MT_TAPE_INFO \
+{ \
+ {MT_ISUNKNOWN, "Unknown type of tape device"}, \
+ {MT_ISQIC02, "Generic QIC-02 tape streamer"}, \
+ {MT_ISWT5150, "Wangtek 5150, QIC-150"}, \
+ {MT_ISARCHIVE_5945L2, "Archive 5945L-2"}, \
+ {MT_ISCMSJ500, "CMS Jumbo 500"}, \
+ {MT_ISTDC3610, "Tandberg TDC 3610, QIC-24"}, \
+ {MT_ISARCHIVE_VP60I, "Archive VP60i, QIC-02"}, \
+ {MT_ISARCHIVE_2150L, "Archive Viper 2150L"}, \
+ {MT_ISARCHIVE_2060L, "Archive Viper 2060L"}, \
+ {MT_ISARCHIVESC499, "Archive SC-499 QIC-36 controller"}, \
+ {MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"}, \
+ {MT_ISWT5099EEN24, "Wangtek 5099-een24, 60MB"}, \
+ {MT_ISTEAC_MT2ST, "Teac MT-2ST 155mb data cassette drive"}, \
+ {MT_ISEVEREX_FT40A, "Everex FT40A, QIC-40"}, \
+ {MT_ISSCSI1, "Generic SCSI-1 tape"}, \
+ {MT_ISSCSI2, "Generic SCSI-2 tape"}, \
+ {0, NULL} \
+}
+
+struct mtpos {
+ long mt_blkno;
+};
+
+struct mtconfiginfo {
+ long mt_type;
+ long ifc_type;
+ unsigned short irqnr;
+ unsigned short dmanr;
+ unsigned short port;
+ unsigned long debug;
+ unsigned have_dens:1;
+ unsigned have_bsf:1;
+ unsigned have_fsr:1;
+ unsigned have_bsr:1;
+ unsigned have_eod:1;
+ unsigned have_seek:1;
+ unsigned have_tell:1;
+ unsigned have_ras1:1;
+ unsigned have_ras2:1;
+ unsigned have_ras3:1;
+ unsigned have_qfa:1;
+ unsigned pad1:5;
+ char reserved[10];
+};
+
+#define MTIOCTOP _IOW('m', 1, struct mtop)
+#define MTIOCGET _IOR('m', 2, struct mtget)
+#define MTIOCPOS _IOR('m', 3, struct mtpos)
+
+#define MTIOCGETCONFIG _IOR('m', 4, struct mtconfiginfo)
+#define MTIOCSETCONFIG _IOW('m', 5, struct mtconfiginfo)
+
+#define GMT_EOF(x) ((x) & 0x80000000)
+#define GMT_BOT(x) ((x) & 0x40000000)
+#define GMT_EOT(x) ((x) & 0x20000000)
+#define GMT_SM(x) ((x) & 0x10000000)
+#define GMT_EOD(x) ((x) & 0x08000000)
+#define GMT_WR_PROT(x) ((x) & 0x04000000)
+#define GMT_ONLINE(x) ((x) & 0x01000000)
+#define GMT_D_6250(x) ((x) & 0x00800000)
+#define GMT_D_1600(x) ((x) & 0x00400000)
+#define GMT_D_800(x) ((x) & 0x00200000)
+#define GMT_DR_OPEN(x) ((x) & 0x00040000)
+#define GMT_IM_REP_EN(x) ((x) & 0x00010000)
+
+#define MT_ST_BLKSIZE_SHIFT 0
+#define MT_ST_BLKSIZE_MASK 0xffffff
+#define MT_ST_DENSITY_SHIFT 24
+#define MT_ST_DENSITY_MASK 0xff000000
+#define MT_ST_SOFTERR_SHIFT 0
+#define MT_ST_SOFTERR_MASK 0xffff
+#define MT_ST_OPTIONS 0xf0000000
+#define MT_ST_BOOLEANS 0x10000000
+#define MT_ST_SETBOOLEANS 0x30000000
+#define MT_ST_CLEARBOOLEANS 0x40000000
+#define MT_ST_WRITE_THRESHOLD 0x20000000
+#define MT_ST_DEF_BLKSIZE 0x50000000
+#define MT_ST_DEF_OPTIONS 0x60000000
+#define MT_ST_BUFFER_WRITES 0x1
+#define MT_ST_ASYNC_WRITES 0x2
+#define MT_ST_READ_AHEAD 0x4
+#define MT_ST_DEBUGGING 0x8
+#define MT_ST_TWO_FM 0x10
+#define MT_ST_FAST_MTEOM 0x20
+#define MT_ST_AUTO_LOCK 0x40
+#define MT_ST_DEF_WRITES 0x80
+#define MT_ST_CAN_BSR 0x100
+#define MT_ST_NO_BLKLIMS 0x200
+#define MT_ST_CAN_PARTITIONS 0x400
+#define MT_ST_SCSI2LOGICAL 0x800
+#define MT_ST_CLEAR_DEFAULT 0xfffff
+#define MT_ST_DEF_DENSITY (MT_ST_DEF_OPTIONS | 0x100000)
+#define MT_ST_DEF_COMPRESSION (MT_ST_DEF_OPTIONS | 0x200000)
+#define MT_ST_DEF_DRVBUFFER (MT_ST_DEF_OPTIONS | 0x300000)
+#define MT_ST_HPLOADER_OFFSET 10000
+#ifndef DEFTAPE
+# define DEFTAPE "/dev/tape"
+#endif
+
+#endif
diff --git a/system/include/libc/sys/param.h b/system/include/libc/sys/param.h
index 7e8762a6..344c0d23 100644
--- a/system/include/libc/sys/param.h
+++ b/system/include/libc/sys/param.h
@@ -1,25 +1,35 @@
-/* This is a dummy <sys/param.h> file, not customized for any
- particular system. If there is a param.h in libc/sys/SYSDIR/sys,
- it will override this one. */
-
#ifndef _SYS_PARAM_H
-# define _SYS_PARAM_H
+#define _SYS_PARAM_H
-#include <sys/config.h>
-#include <machine/endian.h>
-#include <machine/param.h>
+#define MAXSYMLINKS 20
+#define MAXHOSTNAMELEN 64
+#define MAXNAMLEN 255
+#define MAXPATHLEN 4096
+#define NBBY 8
+#define NGROUPS 32
+#define CANBSIZE 255
+#define NOFILE 256
+#define NCARGS 131072
+#define DEV_BSIZE 512
+#define NOGROUP (-1)
-#ifndef HZ
-# define HZ (60)
-#endif
-#ifndef NOFILE
-# define NOFILE (60)
-#endif
-#ifndef PATHSIZE
-# define PATHSIZE (1024)
-#endif
+#undef MIN
+#undef MAX
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#define MAX(a,b) (((a)>(b))?(a):(b))
+
+#define __bitop(x,i,o) ((x)[(i)/8] o (1<<(i)%8))
+#define setbit(x,i) __bitop(x,i,|=)
+#define clrbit(x,i) __bitop(x,i,&=~)
+#define isset(x,i) __bitop(x,i,&)
+#define isclr(x,i) !isset(x,i)
+
+#define howmany(n,d) (((n)+((d)-1))/(d))
+#define roundup(n,d) (howmany(n,d)*(d))
+#define powerof2(n) !(((n)-1) & (n))
-#define MAX(a,b) ((a) > (b) ? (a) : (b))
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
+#include <sys/resource.h>
+#include <endian.h>
+#include <limits.h>
#endif
diff --git a/system/include/libc/sys/personality.h b/system/include/libc/sys/personality.h
new file mode 100644
index 00000000..31d43dfe
--- /dev/null
+++ b/system/include/libc/sys/personality.h
@@ -0,0 +1,46 @@
+#ifndef _PERSONALITY_H
+#define _PERSONALITY_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ADDR_NO_RANDOMIZE 0x0040000
+#define MMAP_PAGE_ZERO 0x0100000
+#define ADDR_COMPAT_LAYOUT 0x0200000
+#define READ_IMPLIES_EXEC 0x0400000
+#define ADDR_LIMIT_32BIT 0x0800000
+#define SHORT_INODE 0x1000000
+#define WHOLE_SECONDS 0x2000000
+#define STICKY_TIMEOUTS 0x4000000
+#define ADDR_LIMIT_3GB 0x8000000
+
+#define PER_LINUX 0
+#define PER_LINUX_32BIT ADDR_LIMIT_32BIT
+#define PER_SVR4 (1 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO)
+#define PER_SVR3 (2 | STICKY_TIMEOUTS | SHORT_INODE)
+#define PER_SCOSVR3 (3 | STICKY_TIMEOUTS | WHOLE_SECONDS | SHORT_INODE)
+#define PER_OSR5 (3 | STICKY_TIMEOUTS | WHOLE_SECONDS)
+#define PER_WYSEV386 (4 | STICKY_TIMEOUTS | SHORT_INODE)
+#define PER_ISCR4 (5 | STICKY_TIMEOUTS)
+#define PER_BSD 6
+#define PER_SUNOS (6 | STICKY_TIMEOUTS)
+#define PER_XENIX (7 | STICKY_TIMEOUTS | SHORT_INODE)
+#define PER_LINUX32 8
+#define PER_LINUX32_3GB (8 | ADDR_LIMIT_3GB)
+#define PER_IRIX32 (9 | STICKY_TIMEOUTS)
+#define PER_IRIXN32 (0xa | STICKY_TIMEOUTS)
+#define PER_IRIX64 (0x0b | STICKY_TIMEOUTS)
+#define PER_RISCOS 0xc
+#define PER_SOLARIS (0xd | STICKY_TIMEOUTS)
+#define PER_UW7 (0xe | STICKY_TIMEOUTS | MMAP_PAGE_ZERO)
+#define PER_OSF4 0xf
+#define PER_HPUX 0x10
+#define PER_MASK 0xff
+
+int personality(unsigned long);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/system/include/libc/sys/poll.h b/system/include/libc/sys/poll.h
new file mode 100644
index 00000000..99170401
--- /dev/null
+++ b/system/include/libc/sys/poll.h
@@ -0,0 +1,2 @@
+#warning redirecting incorrect #include <sys/poll.h> to <poll.h>
+#include <poll.h>
diff --git a/system/include/libc/sys/prctl.h b/system/include/libc/sys/prctl.h
new file mode 100644
index 00000000..d41ff0f6
--- /dev/null
+++ b/system/include/libc/sys/prctl.h
@@ -0,0 +1,101 @@
+#ifndef _SYS_PRCTL_H
+#define _SYS_PRCTL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define PR_SET_PDEATHSIG 1
+#define PR_GET_PDEATHSIG 2
+#define PR_GET_DUMPABLE 3
+#define PR_SET_DUMPABLE 4
+#define PR_GET_UNALIGN 5
+#define PR_SET_UNALIGN 6
+#define PR_UNALIGN_NOPRINT 1
+#define PR_UNALIGN_SIGBUS 2
+#define PR_GET_KEEPCAPS 7
+#define PR_SET_KEEPCAPS 8
+#define PR_GET_FPEMU 9
+#define PR_SET_FPEMU 10
+#define PR_FPEMU_NOPRINT 1
+#define PR_FPEMU_SIGFPE 2
+#define PR_GET_FPEXC 11
+#define PR_SET_FPEXC 12
+#define PR_FP_EXC_SW_ENABLE 0x80
+#define PR_FP_EXC_DIV 0x010000
+#define PR_FP_EXC_OVF 0x020000
+#define PR_FP_EXC_UND 0x040000
+#define PR_FP_EXC_RES 0x080000
+#define PR_FP_EXC_INV 0x100000
+#define PR_FP_EXC_DISABLED 0
+#define PR_FP_EXC_NONRECOV 1
+#define PR_FP_EXC_ASYNC 2
+#define PR_FP_EXC_PRECISE 3
+#define PR_GET_TIMING 13
+#define PR_SET_TIMING 14
+#define PR_TIMING_STATISTICAL 0
+#define PR_TIMING_TIMESTAMP 1
+#define PR_SET_NAME 15
+#define PR_GET_NAME 16
+#define PR_GET_ENDIAN 19
+#define PR_SET_ENDIAN 20
+#define PR_ENDIAN_BIG 0
+#define PR_ENDIAN_LITTLE 1
+#define PR_ENDIAN_PPC_LITTLE 2
+#define PR_GET_SECCOMP 21
+#define PR_SET_SECCOMP 22
+#define PR_CAPBSET_READ 23
+#define PR_CAPBSET_DROP 24
+#define PR_GET_TSC 25
+#define PR_SET_TSC 26
+#define PR_TSC_ENABLE 1
+#define PR_TSC_SIGSEGV 2
+#define PR_GET_SECUREBITS 27
+#define PR_SET_SECUREBITS 28
+#define PR_SET_TIMERSLACK 29
+#define PR_GET_TIMERSLACK 30
+
+#define PR_TASK_PERF_EVENTS_DISABLE 31
+#define PR_TASK_PERF_EVENTS_ENABLE 32
+
+#define PR_MCE_KILL 33
+#define PR_MCE_KILL_CLEAR 0
+#define PR_MCE_KILL_SET 1
+#define PR_MCE_KILL_LATE 0
+#define PR_MCE_KILL_EARLY 1
+#define PR_MCE_KILL_DEFAULT 2
+#define PR_MCE_KILL_GET 34
+
+#define PR_SET_MM 35
+#define PR_SET_MM_START_CODE 1
+#define PR_SET_MM_END_CODE 2
+#define PR_SET_MM_START_DATA 3
+#define PR_SET_MM_END_DATA 4
+#define PR_SET_MM_START_STACK 5
+#define PR_SET_MM_START_BRK 6
+#define PR_SET_MM_BRK 7
+#define PR_SET_MM_ARG_START 8
+#define PR_SET_MM_ARG_END 9
+#define PR_SET_MM_ENV_START 10
+#define PR_SET_MM_ENV_END 11
+#define PR_SET_MM_AUXV 12
+#define PR_SET_MM_EXE_FILE 13
+
+#define PR_SET_PTRACER 0x59616d61
+#define PR_SET_PTRACER_ANY (-1UL)
+
+#define PR_SET_CHILD_SUBREAPER 36
+#define PR_GET_CHILD_SUBREAPER 37
+
+#define PR_SET_NO_NEW_PRIVS 38
+#define PR_GET_NO_NEW_PRIVS 39
+
+#define PR_GET_TID_ADDRESS 40
+
+int prctl (int, ...);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/procfs.h b/system/include/libc/sys/procfs.h
new file mode 100644
index 00000000..6a346053
--- /dev/null
+++ b/system/include/libc/sys/procfs.h
@@ -0,0 +1,65 @@
+#ifndef _SYS_PROCFS_H
+#define _SYS_PROCFS_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/user.h>
+
+struct elf_siginfo {
+ int si_signo;
+ int si_code;
+ int si_errno;
+};
+
+struct elf_prstatus {
+ struct elf_siginfo pr_info;
+ short int pr_cursig;
+ unsigned long int pr_sigpend;
+ unsigned long int pr_sighold;
+ pid_t pr_pid;
+ pid_t pr_ppid;
+ pid_t pr_pgrp;
+ pid_t pr_sid;
+ struct timeval pr_utime;
+ struct timeval pr_stime;
+ struct timeval pr_cutime;
+ struct timeval pr_cstime;
+ elf_gregset_t pr_reg;
+ int pr_fpvalid;
+};
+
+#define ELF_PRARGSZ 80
+
+struct elf_prpsinfo
+ {
+ char pr_state;
+ char pr_sname;
+ char pr_zomb;
+ char pr_nice;
+ unsigned long int pr_flag;
+#if __WORDSIZE == 32
+ unsigned short int pr_uid;
+ unsigned short int pr_gid;
+#else
+ unsigned int pr_uid;
+ unsigned int pr_gid;
+#endif
+ int pr_pid, pr_ppid, pr_pgrp, pr_sid;
+ char pr_fname[16];
+ char pr_psargs[ELF_PRARGSZ];
+};
+
+typedef void *psaddr_t;
+typedef elf_gregset_t prgregset_t;
+typedef elf_fpregset_t prfpregset_t;
+typedef pid_t lwpid_t;
+typedef struct elf_prstatus prstatus_t;
+typedef struct elf_prpsinfo prpsinfo_t;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/system/include/libc/sys/ptrace.h b/system/include/libc/sys/ptrace.h
new file mode 100644
index 00000000..6cd3afdd
--- /dev/null
+++ b/system/include/libc/sys/ptrace.h
@@ -0,0 +1,96 @@
+#ifndef _SYS_PTRACE_H
+#define _SYS_PTRACE_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+
+#define PTRACE_TRACEME 0
+#define PT_TRACE_ME PTRACE_TRACEME
+
+#define PTRACE_PEEKTEXT 1
+#define PTRACE_PEEKDATA 2
+#define PTRACE_PEEKUSER 3
+#define PTRACE_POKETEXT 4
+#define PTRACE_POKEDATA 5
+#define PTRACE_POKEUSER 6
+#define PTRACE_CONT 7
+#define PTRACE_KILL 8
+#define PTRACE_SINGLESTEP 9
+#define PTRACE_GETREGS 12
+#define PTRACE_SETREGS 13
+#define PTRACE_GETFPREGS 14
+#define PTRACE_SETFPREGS 15
+#define PTRACE_ATTACH 16
+#define PTRACE_DETACH 17
+#define PTRACE_GETFPXREGS 18
+#define PTRACE_SETFPXREGS 19
+#define PTRACE_SYSCALL 24
+#define PTRACE_SETOPTIONS 0x4200
+#define PTRACE_GETEVENTMSG 0x4201
+#define PTRACE_GETSIGINFO 0x4202
+#define PTRACE_SETSIGINFO 0x4203
+#define PTRACE_GETREGSET 0x4204
+#define PTRACE_SETREGSET 0x4205
+#define PTRACE_SEIZE 0x4206
+#define PTRACE_INTERRUPT 0x4207
+#define PTRACE_LISTEN 0x4208
+#define PTRACE_PEEKSIGINFO 0x4209
+
+#define PT_READ_I PTRACE_PEEKTEXT
+#define PT_READ_D PTRACE_PEEKDATA
+#define PT_READ_U PTRACE_PEEKUSER
+#define PT_WRITE_I PTRACE_POKETEXT
+#define PT_WRITE_D PTRACE_POKEDATA
+#define PT_WRITE_U PTRACE_POKEUSER
+#define PT_CONTINUE PTRACE_CONT
+#define PT_KILL PTRACE_KILL
+#define PT_STEP PTRACE_SINGLESTEP
+#define PT_GETREGS PTRACE_GETREGS
+#define PT_SETREGS PTRACE_SETREGS
+#define PT_GETFPREGS PTRACE_GETFPREGS
+#define PT_SETFPREGS PTRACE_SETFPREGS
+#define PT_ATTACH PTRACE_ATTACH
+#define PT_DETACH PTRACE_DETACH
+#define PT_GETFPXREGS PTRACE_GETFPXREGS
+#define PT_SETFPXREGS PTRACE_SETFPXREGS
+#define PT_SYSCALL PTRACE_SYSCALL
+#define PT_SETOPTIONS PTRACE_SETOPTIONS
+#define PT_GETEVENTMSG PTRACE_GETEVENTMSG
+#define PT_GETSIGINFO PTRACE_GETSIGINFO
+#define PT_SETSIGINFO PTRACE_SETSIGINFO
+
+#define PTRACE_O_TRACESYSGOOD 0x00000001
+#define PTRACE_O_TRACEFORK 0x00000002
+#define PTRACE_O_TRACEVFORK 0x00000004
+#define PTRACE_O_TRACECLONE 0x00000008
+#define PTRACE_O_TRACEEXEC 0x00000010
+#define PTRACE_O_TRACEVFORKDONE 0x00000020
+#define PTRACE_O_TRACEEXIT 0x00000040
+#define PTRACE_O_TRACESECCOMP 0x00000080
+#define PTRACE_O_EXITKILL 0x00100000
+#define PTRACE_O_MASK 0x001000ff
+
+#define PTRACE_EVENT_FORK 1
+#define PTRACE_EVENT_VFORK 2
+#define PTRACE_EVENT_CLONE 3
+#define PTRACE_EVENT_EXEC 4
+#define PTRACE_EVENT_VFORK_DONE 5
+#define PTRACE_EVENT_EXIT 6
+#define PTRACE_EVENT_SECCOMP 7
+
+#define PTRACE_PEEKSIGINFO_SHARED 1
+
+struct ptrace_peeksiginfo_args {
+ uint64_t off;
+ uint32_t flags;
+ int32_t nr;
+};
+
+long ptrace(int, ...);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/system/include/libc/sys/queue.h b/system/include/libc/sys/queue.h
deleted file mode 100644
index af637ca0..00000000
--- a/system/include/libc/sys/queue.h
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
- * Copyright (c) 1991, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- * @(#)queue.h 8.5 (Berkeley) 8/20/94
- * $FreeBSD: src/sys/sys/queue.h,v 1.48 2002/04/17 14:00:37 tmm Exp $
- */
-
-#ifndef _SYS_QUEUE_H_
-#define _SYS_QUEUE_H_
-
-#include <machine/ansi.h> /* for __offsetof */
-
-/*
- * This file defines four types of data structures: singly-linked lists,
- * singly-linked tail queues, lists and tail queues.
- *
- * A singly-linked list is headed by a single forward pointer. The elements
- * are singly linked for minimum space and pointer manipulation overhead at
- * the expense of O(n) removal for arbitrary elements. New elements can be
- * added to the list after an existing element or at the head of the list.
- * Elements being removed from the head of the list should use the explicit
- * macro for this purpose for optimum efficiency. A singly-linked list may
- * only be traversed in the forward direction. Singly-linked lists are ideal
- * for applications with large datasets and few or no removals or for
- * implementing a LIFO queue.
- *
- * A singly-linked tail queue is headed by a pair of pointers, one to the
- * head of the list and the other to the tail of the list. The elements are
- * singly linked for minimum space and pointer manipulation overhead at the
- * expense of O(n) removal for arbitrary elements. New elements can be added
- * to the list after an existing element, at the head of the list, or at the
- * end of the list. Elements being removed from the head of the tail queue
- * should use the explicit macro for this purpose for optimum efficiency.
- * A singly-linked tail queue may only be traversed in the forward direction.
- * Singly-linked tail queues are ideal for applications with large datasets
- * and few or no removals or for implementing a FIFO queue.
- *
- * A list is headed by a single forward pointer (or an array of forward
- * pointers for a hash table header). The elements are doubly linked
- * so that an arbitrary element can be removed without a need to
- * traverse the list. New elements can be added to the list before
- * or after an existing element or at the head of the list. A list
- * may only be traversed in the forward direction.
- *
- * A tail queue is headed by a pair of pointers, one to the head of the
- * list and the other to the tail of the list. The elements are doubly
- * linked so that an arbitrary element can be removed without a need to
- * traverse the list. New elements can be added to the list before or
- * after an existing element, at the head of the list, or at the end of
- * the list. A tail queue may be traversed in either direction.
- *
- * For details on the use of these macros, see the queue(3) manual page.
- *
- *
- * SLIST LIST STAILQ TAILQ
- * _HEAD + + + +
- * _HEAD_INITIALIZER + + + +
- * _ENTRY + + + +
- * _INIT + + + +
- * _EMPTY + + + +
- * _FIRST + + + +
- * _NEXT + + + +
- * _PREV - - - +
- * _LAST - - + +
- * _FOREACH + + + +
- * _FOREACH_REVERSE - - - +
- * _INSERT_HEAD + + + +
- * _INSERT_BEFORE - + - +
- * _INSERT_AFTER + + + +
- * _INSERT_TAIL - - + +
- * _CONCAT - - + +
- * _REMOVE_HEAD + - + -
- * _REMOVE + + + +
- *
- */
-
-/*
- * Singly-linked List declarations.
- */
-#define SLIST_HEAD(name, type) \
-struct name { \
- struct type *slh_first; /* first element */ \
-}
-
-#define SLIST_HEAD_INITIALIZER(head) \
- { NULL }
-
-#define SLIST_ENTRY(type) \
-struct { \
- struct type *sle_next; /* next element */ \
-}
-
-/*
- * Singly-linked List functions.
- */
-#define SLIST_EMPTY(head) ((head)->slh_first == NULL)
-
-#define SLIST_FIRST(head) ((head)->slh_first)
-
-#define SLIST_FOREACH(var, head, field) \
- for ((var) = SLIST_FIRST((head)); \
- (var); \
- (var) = SLIST_NEXT((var), field))
-
-#define SLIST_INIT(head) do { \
- SLIST_FIRST((head)) = NULL; \
-} while (0)
-
-#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \
- SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \
- SLIST_NEXT((slistelm), field) = (elm); \
-} while (0)
-
-#define SLIST_INSERT_HEAD(head, elm, field) do { \
- SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \
- SLIST_FIRST((head)) = (elm); \
-} while (0)
-
-#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
-
-#define SLIST_REMOVE(head, elm, type, field) do { \
- if (SLIST_FIRST((head)) == (elm)) { \
- SLIST_REMOVE_HEAD((head), field); \
- } \
- else { \
- struct type *curelm = SLIST_FIRST((head)); \
- while (SLIST_NEXT(curelm, field) != (elm)) \
- curelm = SLIST_NEXT(curelm, field); \
- SLIST_NEXT(curelm, field) = \
- SLIST_NEXT(SLIST_NEXT(curelm, field), field); \
- } \
-} while (0)
-
-#define SLIST_REMOVE_HEAD(head, field) do { \
- SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \
-} while (0)
-
-/*
- * Singly-linked Tail queue declarations.
- */
-#define STAILQ_HEAD(name, type) \
-struct name { \
- struct type *stqh_first;/* first element */ \
- struct type **stqh_last;/* addr of last next element */ \
-}
-
-#define STAILQ_HEAD_INITIALIZER(head) \
- { NULL, &(head).stqh_first }
-
-#define STAILQ_ENTRY(type) \
-struct { \
- struct type *stqe_next; /* next element */ \
-}
-
-/*
- * Singly-linked Tail queue functions.
- */
-#define STAILQ_CONCAT(head1, head2) do { \
- if (!STAILQ_EMPTY((head2))) { \
- *(head1)->stqh_last = (head2)->stqh_first; \
- (head1)->stqh_last = (head2)->stqh_last; \
- STAILQ_INIT((head2)); \
- } \
-} while (0)
-
-#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL)
-
-#define STAILQ_FIRST(head) ((head)->stqh_first)
-
-#define STAILQ_FOREACH(var, head, field) \
- for((var) = STAILQ_FIRST((head)); \
- (var); \
- (var) = STAILQ_NEXT((var), field))
-
-#define STAILQ_INIT(head) do { \
- STAILQ_FIRST((head)) = NULL; \
- (head)->stqh_last = &STAILQ_FIRST((head)); \
-} while (0)
-
-#define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \
- if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\
- (head)->stqh_last = &STAILQ_NEXT((elm), field); \
- STAILQ_NEXT((tqelm), field) = (elm); \
-} while (0)
-
-#define STAILQ_INSERT_HEAD(head, elm, field) do { \
- if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \
- (head)->stqh_last = &STAILQ_NEXT((elm), field); \
- STAILQ_FIRST((head)) = (elm); \
-} while (0)
-
-#define STAILQ_INSERT_TAIL(head, elm, field) do { \
- STAILQ_NEXT((elm), field) = NULL; \
- *(head)->stqh_last = (elm); \
- (head)->stqh_last = &STAILQ_NEXT((elm), field); \
-} while (0)
-
-#define STAILQ_LAST(head, type, field) \
- (STAILQ_EMPTY((head)) ? \
- NULL : \
- ((struct type *) \
- ((char *)((head)->stqh_last) - __offsetof(struct type, field))))
-
-#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
-
-#define STAILQ_REMOVE(head, elm, type, field) do { \
- if (STAILQ_FIRST((head)) == (elm)) { \
- STAILQ_REMOVE_HEAD((head), field); \
- } \
- else { \
- struct type *curelm = STAILQ_FIRST((head)); \
- while (STAILQ_NEXT(curelm, field) != (elm)) \
- curelm = STAILQ_NEXT(curelm, field); \
- if ((STAILQ_NEXT(curelm, field) = \
- STAILQ_NEXT(STAILQ_NEXT(curelm, field), field)) == NULL)\
- (head)->stqh_last = &STAILQ_NEXT((curelm), field);\
- } \
-} while (0)
-
-#define STAILQ_REMOVE_HEAD(head, field) do { \
- if ((STAILQ_FIRST((head)) = \
- STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \
- (head)->stqh_last = &STAILQ_FIRST((head)); \
-} while (0)
-
-#define STAILQ_REMOVE_HEAD_UNTIL(head, elm, field) do { \
- if ((STAILQ_FIRST((head)) = STAILQ_NEXT((elm), field)) == NULL) \
- (head)->stqh_last = &STAILQ_FIRST((head)); \
-} while (0)
-
-/*
- * List declarations.
- */
-#define LIST_HEAD(name, type) \
-struct name { \
- struct type *lh_first; /* first element */ \
-}
-
-#define LIST_HEAD_INITIALIZER(head) \
- { NULL }
-
-#define LIST_ENTRY(type) \
-struct { \
- struct type *le_next; /* next element */ \
- struct type **le_prev; /* address of previous next element */ \
-}
-
-/*
- * List functions.
- */
-
-#define LIST_EMPTY(head) ((head)->lh_first == NULL)
-
-#define LIST_FIRST(head) ((head)->lh_first)
-
-#define LIST_FOREACH(var, head, field) \
- for ((var) = LIST_FIRST((head)); \
- (var); \
- (var) = LIST_NEXT((var), field))
-
-#define LIST_INIT(head) do { \
- LIST_FIRST((head)) = NULL; \
-} while (0)
-
-#define LIST_INSERT_AFTER(listelm, elm, field) do { \
- if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\
- LIST_NEXT((listelm), field)->field.le_prev = \
- &LIST_NEXT((elm), field); \
- LIST_NEXT((listelm), field) = (elm); \
- (elm)->field.le_prev = &LIST_NEXT((listelm), field); \
-} while (0)
-
-#define LIST_INSERT_BEFORE(listelm, elm, field) do { \
- (elm)->field.le_prev = (listelm)->field.le_prev; \
- LIST_NEXT((elm), field) = (listelm); \
- *(listelm)->field.le_prev = (elm); \
- (listelm)->field.le_prev = &LIST_NEXT((elm), field); \
-} while (0)
-
-#define LIST_INSERT_HEAD(head, elm, field) do { \
- if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \
- LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\
- LIST_FIRST((head)) = (elm); \
- (elm)->field.le_prev = &LIST_FIRST((head)); \
-} while (0)
-
-#define LIST_NEXT(elm, field) ((elm)->field.le_next)
-
-#define LIST_REMOVE(elm, field) do { \
- if (LIST_NEXT((elm), field) != NULL) \
- LIST_NEXT((elm), field)->field.le_prev = \
- (elm)->field.le_prev; \
- *(elm)->field.le_prev = LIST_NEXT((elm), field); \
-} while (0)
-
-/*
- * Tail queue declarations.
- */
-#define TAILQ_HEAD(name, type) \
-struct name { \
- struct type *tqh_first; /* first element */ \
- struct type **tqh_last; /* addr of last next element */ \
-}
-
-#define TAILQ_HEAD_INITIALIZER(head) \
- { NULL, &(head).tqh_first }
-
-#define TAILQ_ENTRY(type) \
-struct { \
- struct type *tqe_next; /* next element */ \
- struct type **tqe_prev; /* address of previous next element */ \
-}
-
-/*
- * Tail queue functions.
- */
-#define TAILQ_CONCAT(head1, head2, field) do { \
- if (!TAILQ_EMPTY(head2)) { \
- *(head1)->tqh_last = (head2)->tqh_first; \
- (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
- (head1)->tqh_last = (head2)->tqh_last; \
- TAILQ_INIT((head2)); \
- } \
-} while (0)
-
-#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)
-
-#define TAILQ_FIRST(head) ((head)->tqh_first)
-
-#define TAILQ_FOREACH(var, head, field) \
- for ((var) = TAILQ_FIRST((head)); \
- (var); \
- (var) = TAILQ_NEXT((var), field))
-
-#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
- for ((var) = TAILQ_LAST((head), headname); \
- (var); \
- (var) = TAILQ_PREV((var), headname, field))
-
-#define TAILQ_INIT(head) do { \
- TAILQ_FIRST((head)) = NULL; \
- (head)->tqh_last = &TAILQ_FIRST((head)); \
-} while (0)
-
-#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
- if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\
- TAILQ_NEXT((elm), field)->field.tqe_prev = \
- &TAILQ_NEXT((elm), field); \
- else \
- (head)->tqh_last = &TAILQ_NEXT((elm), field); \
- TAILQ_NEXT((listelm), field) = (elm); \
- (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \
-} while (0)
-
-#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
- (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
- TAILQ_NEXT((elm), field) = (listelm); \
- *(listelm)->field.tqe_prev = (elm); \
- (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \
-} while (0)
-
-#define TAILQ_INSERT_HEAD(head, elm, field) do { \
- if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \
- TAILQ_FIRST((head))->field.tqe_prev = \
- &TAILQ_NEXT((elm), field); \
- else \
- (head)->tqh_last = &TAILQ_NEXT((elm), field); \
- TAILQ_FIRST((head)) = (elm); \
- (elm)->field.tqe_prev = &TAILQ_FIRST((head)); \
-} while (0)
-
-#define TAILQ_INSERT_TAIL(head, elm, field) do { \
- TAILQ_NEXT((elm), field) = NULL; \
- (elm)->field.tqe_prev = (head)->tqh_last; \
- *(head)->tqh_last = (elm); \
- (head)->tqh_last = &TAILQ_NEXT((elm), field); \
-} while (0)
-
-#define TAILQ_LAST(head, headname) \
- (*(((struct headname *)((head)->tqh_last))->tqh_last))
-
-#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
-
-#define TAILQ_PREV(elm, headname, field) \
- (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
-
-#define TAILQ_REMOVE(head, elm, field) do { \
- if ((TAILQ_NEXT((elm), field)) != NULL) \
- TAILQ_NEXT((elm), field)->field.tqe_prev = \
- (elm)->field.tqe_prev; \
- else \
- (head)->tqh_last = (elm)->field.tqe_prev; \
- *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \
-} while (0)
-
-
-#ifdef _KERNEL
-
-/*
- * XXX insque() and remque() are an old way of handling certain queues.
- * They bogusly assumes that all queue heads look alike.
- */
-
-struct quehead {
- struct quehead *qh_link;
- struct quehead *qh_rlink;
-};
-
-#ifdef __GNUC__
-
-static __inline void
-insque(void *a, void *b)
-{
- struct quehead *element = (struct quehead *)a,
- *head = (struct quehead *)b;
-
- element->qh_link = head->qh_link;
- element->qh_rlink = head;
- head->qh_link = element;
- element->qh_link->qh_rlink = element;
-}
-
-static __inline void
-remque(void *a)
-{
- struct quehead *element = (struct quehead *)a;
-
- element->qh_link->qh_rlink = element->qh_rlink;
- element->qh_rlink->qh_link = element->qh_link;
- element->qh_rlink = 0;
-}
-
-#else /* !__GNUC__ */
-
-void insque(void *a, void *b);
-void remque(void *a);
-
-#endif /* __GNUC__ */
-
-#endif /* _KERNEL */
-
-#endif /* !_SYS_QUEUE_H_ */
diff --git a/system/include/libc/sys/reboot.h b/system/include/libc/sys/reboot.h
new file mode 100644
index 00000000..9702eddb
--- /dev/null
+++ b/system/include/libc/sys/reboot.h
@@ -0,0 +1,20 @@
+#ifndef _SYS_REBOOT_H
+#define _SYS_REBOOT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define RB_AUTOBOOT 0x01234567
+#define RB_HALT_SYSTEM 0xcdef0123
+#define RB_ENABLE_CAD 0x89abcdef
+#define RB_DISABLE_CAD 0
+#define RB_POWER_OFF 0x4321fedc
+#define RB_SW_SUSPEND 0xd000fce2
+#define RB_KEXEC 0x45584543
+
+int reboot(int);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/system/include/libc/sys/reent.h b/system/include/libc/sys/reent.h
deleted file mode 100644
index 8518964f..00000000
--- a/system/include/libc/sys/reent.h
+++ /dev/null
@@ -1,843 +0,0 @@
-/* This header file provides the reentrancy. */
-
-/* WARNING: All identifiers here must begin with an underscore. This file is
- included by stdio.h and others and we therefore must only use identifiers
- in the namespace allotted to us. */
-
-#ifndef _SYS_REENT_H_
-#ifdef __cplusplus
-extern "C" {
-#endif
-#define _SYS_REENT_H_
-
-#include <_ansi.h>
-#include <sys/_types.h>
-
-#define _NULL 0
-
-#ifndef __Long
-#if __LONG_MAX__ == 2147483647L
-#define __Long long
-typedef unsigned __Long __ULong;
-#elif __INT_MAX__ == 2147483647
-#define __Long int
-typedef unsigned __Long __ULong;
-#endif
-#endif
-
-#if !defined( __Long)
-#include <sys/types.h>
-#endif
-
-#ifndef __Long
-#define __Long __int32_t
-typedef __uint32_t __ULong;
-#endif
-
-struct _reent;
-
-/*
- * If _REENT_SMALL is defined, we make struct _reent as small as possible,
- * by having nearly everything possible allocated at first use.
- */
-
-struct _Bigint
-{
- struct _Bigint *_next;
- int _k, _maxwds, _sign, _wds;
- __ULong _x[1];
-};
-
-/* needed by reentrant structure */
-struct __tm
-{
- int __tm_sec;
- int __tm_min;
- int __tm_hour;
- int __tm_mday;
- int __tm_mon;
- int __tm_year;
- int __tm_wday;
- int __tm_yday;
- int __tm_isdst;
-};
-
-/*
- * atexit() support.
- */
-
-#define _ATEXIT_SIZE 32 /* must be at least 32 to guarantee ANSI conformance */
-
-struct _on_exit_args {
- void * _fnargs[_ATEXIT_SIZE]; /* user fn args */
- void * _dso_handle[_ATEXIT_SIZE];
- /* Bitmask is set if user function takes arguments. */
- __ULong _fntypes; /* type of exit routine -
- Must have at least _ATEXIT_SIZE bits */
- /* Bitmask is set if function was registered via __cxa_atexit. */
- __ULong _is_cxa;
-};
-
-#ifdef _REENT_SMALL
-struct _atexit {
- struct _atexit *_next; /* next in list */
- int _ind; /* next index in this table */
- void (*_fns[_ATEXIT_SIZE])(void); /* the table itself */
- struct _on_exit_args * _on_exit_args_ptr;
-};
-#else
-struct _atexit {
- struct _atexit *_next; /* next in list */
- int _ind; /* next index in this table */
- /* Some entries may already have been called, and will be NULL. */
- void (*_fns[_ATEXIT_SIZE])(void); /* the table itself */
- struct _on_exit_args _on_exit_args;
-};
-#endif
-
-/*
- * Stdio buffers.
- *
- * This and __FILE are defined here because we need them for struct _reent,
- * but we don't want stdio.h included when stdlib.h is.
- */
-
-struct __sbuf {
- unsigned char *_base;
- int _size;
-};
-
-/*
- * Stdio state variables.
- *
- * The following always hold:
- *
- * if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR),
- * _lbfsize is -_bf._size, else _lbfsize is 0
- * if _flags&__SRD, _w is 0
- * if _flags&__SWR, _r is 0
- *
- * This ensures that the getc and putc macros (or inline functions) never
- * try to write or read from a file that is in `read' or `write' mode.
- * (Moreover, they can, and do, automatically switch from read mode to
- * write mode, and back, on "r+" and "w+" files.)
- *
- * _lbfsize is used only to make the inline line-buffered output stream
- * code as compact as possible.
- *
- * _ub, _up, and _ur are used when ungetc() pushes back more characters
- * than fit in the current _bf, or when ungetc() pushes back a character
- * that does not match the previous one in _bf. When this happens,
- * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff
- * _ub._base!=NULL) and _up and _ur save the current values of _p and _r.
- */
-
-#ifdef _REENT_SMALL
-/*
- * struct __sFILE_fake is the start of a struct __sFILE, with only the
- * minimal fields allocated. In __sinit() we really allocate the 3
- * standard streams, etc., and point away from this fake.
- */
-struct __sFILE_fake {
- unsigned char *_p; /* current position in (some) buffer */
- int _r; /* read space left for getc() */
- int _w; /* write space left for putc() */
- short _flags; /* flags, below; this FILE is free if 0 */
- short _file; /* fileno, if Unix descriptor, else -1 */
- struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */
- int _lbfsize; /* 0 or -_bf._size, for inline putc */
-
- struct _reent *_data;
-};
-
-/* Following is needed both in libc/stdio and libc/stdlib so we put it
- * here instead of libc/stdio/local.h where it was previously. */
-
-extern _VOID _EXFUN(__sinit,(struct _reent *));
-
-# define _REENT_SMALL_CHECK_INIT(ptr) \
- do \
- { \
- if ((ptr) && !(ptr)->__sdidinit) \
- __sinit (ptr); \
- } \
- while (0)
-#else
-# define _REENT_SMALL_CHECK_INIT(ptr) /* nothing */
-#endif
-
-struct __sFILE {
- unsigned char *_p; /* current position in (some) buffer */
- int _r; /* read space left for getc() */
- int _w; /* write space left for putc() */
- short _flags; /* flags, below; this FILE is free if 0 */
- short _file; /* fileno, if Unix descriptor, else -1 */
- struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */
- int _lbfsize; /* 0 or -_bf._size, for inline putc */
-
-#ifdef _REENT_SMALL
- struct _reent *_data;
-#endif
-
- /* operations */
- _PTR _cookie; /* cookie passed to io functions */
-
- _READ_WRITE_RETURN_TYPE _EXFNPTR(_read, (struct _reent *, _PTR,
- char *, int));
- _READ_WRITE_RETURN_TYPE _EXFNPTR(_write, (struct _reent *, _PTR,
- const char *, int));
- _fpos_t _EXFNPTR(_seek, (struct _reent *, _PTR, _fpos_t, int));
- int _EXFNPTR(_close, (struct _reent *, _PTR));
-
- /* separate buffer for long sequences of ungetc() */
- struct __sbuf _ub; /* ungetc buffer */
- unsigned char *_up; /* saved _p when _p is doing ungetc data */
- int _ur; /* saved _r when _r is counting ungetc data */
-
- /* tricks to meet minimum requirements even when malloc() fails */
- unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */
- unsigned char _nbuf[1]; /* guarantee a getc() buffer */
-
- /* separate buffer for fgetline() when line crosses buffer boundary */
- struct __sbuf _lb; /* buffer for fgetline() */
-
- /* Unix stdio files get aligned to block boundaries on fseek() */
- int _blksize; /* stat.st_blksize (may be != _bf._size) */
- int _offset; /* current lseek offset */
-
-#ifndef _REENT_SMALL
- struct _reent *_data; /* Here for binary compatibility? Remove? */
-#endif
-
-#ifndef __SINGLE_THREAD__
- _flock_t _lock; /* for thread-safety locking */
-#endif
- _mbstate_t _mbstate; /* for wide char stdio functions. */
- int _flags2; /* for future use */
-};
-
-#ifdef __CUSTOM_FILE_IO__
-
-/* Get custom _FILE definition. */
-#include <sys/custom_file.h>
-
-#else /* !__CUSTOM_FILE_IO__ */
-#ifdef __LARGE64_FILES
-struct __sFILE64 {
- unsigned char *_p; /* current position in (some) buffer */
- int _r; /* read space left for getc() */
- int _w; /* write space left for putc() */
- short _flags; /* flags, below; this FILE is free if 0 */
- short _file; /* fileno, if Unix descriptor, else -1 */
- struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */
- int _lbfsize; /* 0 or -_bf._size, for inline putc */
-
- struct _reent *_data;
-
- /* operations */
- _PTR _cookie; /* cookie passed to io functions */
-
- _READ_WRITE_RETURN_TYPE _EXFNPTR(_read, (struct _reent *, _PTR,
- char *, int));
- _READ_WRITE_RETURN_TYPE _EXFNPTR(_write, (struct _reent *, _PTR,
- const char *, int));
- _fpos_t _EXFNPTR(_seek, (struct _reent *, _PTR, _fpos_t, int));
- int _EXFNPTR(_close, (struct _reent *, _PTR));
-
- /* separate buffer for long sequences of ungetc() */
- struct __sbuf _ub; /* ungetc buffer */
- unsigned char *_up; /* saved _p when _p is doing ungetc data */
- int _ur; /* saved _r when _r is counting ungetc data */
-
- /* tricks to meet minimum requirements even when malloc() fails */
- unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */
- unsigned char _nbuf[1]; /* guarantee a getc() buffer */
-
- /* separate buffer for fgetline() when line crosses buffer boundary */
- struct __sbuf _lb; /* buffer for fgetline() */
-
- /* Unix stdio files get aligned to block boundaries on fseek() */
- int _blksize; /* stat.st_blksize (may be != _bf._size) */
- int _flags2; /* for future use */
-
- _off64_t _offset; /* current lseek offset */
- _fpos64_t _EXFNPTR(_seek64, (struct _reent *, _PTR, _fpos64_t, int));
-
-#ifndef __SINGLE_THREAD__
- _flock_t _lock; /* for thread-safety locking */
-#endif
- _mbstate_t _mbstate; /* for wide char stdio functions. */
-};
-typedef struct __sFILE64 __FILE;
-#else
-typedef struct __sFILE __FILE;
-#endif /* __LARGE64_FILES */
-#endif /* !__CUSTOM_FILE_IO__ */
-
-struct _glue
-{
- struct _glue *_next;
- int _niobs;
- __FILE *_iobs;
-};
-
-/*
- * rand48 family support
- *
- * Copyright (c) 1993 Martin Birgmeier
- * All rights reserved.
- *
- * You may redistribute unmodified or modified versions of this source
- * code provided that the above copyright notice and this and the
- * following conditions are retained.
- *
- * This software is provided ``as is'', and comes with no warranties
- * of any kind. I shall in no event be liable for anything that happens
- * to anyone/anything when using this software.
- */
-#define _RAND48_SEED_0 (0x330e)
-#define _RAND48_SEED_1 (0xabcd)
-#define _RAND48_SEED_2 (0x1234)
-#define _RAND48_MULT_0 (0xe66d)
-#define _RAND48_MULT_1 (0xdeec)
-#define _RAND48_MULT_2 (0x0005)
-#define _RAND48_ADD (0x000b)
-struct _rand48 {
- unsigned short _seed[3];
- unsigned short _mult[3];
- unsigned short _add;
-#ifdef _REENT_SMALL
- /* Put this in here as well, for good luck. */
- __extension__ unsigned long long _rand_next;
-#endif
-};
-
-/* How big the some arrays are. */
-#define _REENT_EMERGENCY_SIZE 25
-#define _REENT_ASCTIME_SIZE 26
-#define _REENT_SIGNAL_SIZE 24
-
-/*
- * struct _reent
- *
- * This structure contains *all* globals needed by the library.
- * It's raison d'etre is to facilitate threads by making all library routines
- * reentrant. IE: All state information is contained here.
- */
-
-#ifdef _REENT_SMALL
-
-struct _mprec
-{
- /* used by mprec routines */
- struct _Bigint *_result;
- int _result_k;
- struct _Bigint *_p5s;
- struct _Bigint **_freelist;
-};
-
-
-struct _misc_reent
-{
- /* miscellaneous reentrant data */
- char *_strtok_last;
- _mbstate_t _mblen_state;
- _mbstate_t _wctomb_state;
- _mbstate_t _mbtowc_state;
- char _l64a_buf[8];
- int _getdate_err;
- _mbstate_t _mbrlen_state;
- _mbstate_t _mbrtowc_state;
- _mbstate_t _mbsrtowcs_state;
- _mbstate_t _wcrtomb_state;
- _mbstate_t _wcsrtombs_state;
-};
-
-/* This version of _reent is layed our with "int"s in pairs, to help
- * ports with 16-bit int's but 32-bit pointers, align nicely. */
-struct _reent
-{
- /* As an exception to the above put _errno first for binary
- compatibility with non _REENT_SMALL targets. */
- int _errno; /* local copy of errno */
-
- /* FILE is a big struct and may change over time. To try to achieve binary
- compatibility with future versions, put stdin,stdout,stderr here.
- These are pointers into member __sf defined below. */
- __FILE *_stdin, *_stdout, *_stderr; /* XXX */
-
- int _inc; /* used by tmpnam */
-
- char *_emergency;
-
- int __sdidinit; /* 1 means stdio has been init'd */
-
- int _current_category; /* unused */
- _CONST char *_current_locale; /* unused */
-
- struct _mprec *_mp;
-
- void _EXFNPTR(__cleanup, (struct _reent *));
-
- int _gamma_signgam;
-
- /* used by some fp conversion routines */
- int _cvtlen; /* should be size_t */
- char *_cvtbuf;
-
- struct _rand48 *_r48;
- struct __tm *_localtime_buf;
- char *_asctime_buf;
-
- /* signal info */
- void (**(_sig_func))(int);
-
- /* atexit stuff */
- struct _atexit *_atexit;
- struct _atexit _atexit0;
-
- struct _glue __sglue; /* root of glue chain */
- __FILE *__sf; /* file descriptors */
- struct _misc_reent *_misc; /* strtok, multibyte states */
- char *_signal_buf; /* strsignal */
-};
-
-extern const struct __sFILE_fake __sf_fake_stdin;
-extern const struct __sFILE_fake __sf_fake_stdout;
-extern const struct __sFILE_fake __sf_fake_stderr;
-
-# define _REENT_INIT(var) \
- { 0, \
- (__FILE *)&__sf_fake_stdin, \
- (__FILE *)&__sf_fake_stdout, \
- (__FILE *)&__sf_fake_stderr, \
- 0, \
- _NULL, \
- 0, \
- 0, \
- "C", \
- _NULL, \
- _NULL, \
- 0, \
- 0, \
- _NULL, \
- _NULL, \
- _NULL, \
- _NULL, \
- _NULL, \
- _NULL, \
- {_NULL, 0, {_NULL}, _NULL}, \
- {_NULL, 0, _NULL}, \
- _NULL, \
- _NULL, \
- _NULL \
- }
-
-#define _REENT_INIT_PTR(var) \
- { (var)->_stdin = (__FILE *)&__sf_fake_stdin; \
- (var)->_stdout = (__FILE *)&__sf_fake_stdout; \
- (var)->_stderr = (__FILE *)&__sf_fake_stderr; \
- (var)->_errno = 0; \
- (var)->_inc = 0; \
- (var)->_emergency = _NULL; \
- (var)->__sdidinit = 0; \
- (var)->_current_category = 0; \
- (var)->_current_locale = "C"; \
- (var)->_mp = _NULL; \
- (var)->__cleanup = _NULL; \
- (var)->_gamma_signgam = 0; \
- (var)->_cvtlen = 0; \
- (var)->_cvtbuf = _NULL; \
- (var)->_r48 = _NULL; \
- (var)->_localtime_buf = _NULL; \
- (var)->_asctime_buf = _NULL; \
- (var)->_sig_func = _NULL; \
- (var)->_atexit = _NULL; \
- (var)->_atexit0._next = _NULL; \
- (var)->_atexit0._ind = 0; \
- (var)->_atexit0._fns[0] = _NULL; \
- (var)->_atexit0._on_exit_args_ptr = _NULL; \
- (var)->__sglue._next = _NULL; \
- (var)->__sglue._niobs = 0; \
- (var)->__sglue._iobs = _NULL; \
- (var)->__sf = 0; \
- (var)->_misc = _NULL; \
- (var)->_signal_buf = _NULL; \
- }
-
-/* Only built the assert() calls if we are built with debugging. */
-#if DEBUG
-#include <assert.h>
-#define __reent_assert(x) assert(x)
-#else
-#define __reent_assert(x) ((void)0)
-#endif
-
-#ifdef __CUSTOM_FILE_IO__
-#error Custom FILE I/O and _REENT_SMALL not currently supported.
-#endif
-
-/* Generic _REENT check macro. */
-#define _REENT_CHECK(var, what, type, size, init) do { \
- struct _reent *_r = (var); \
- if (_r->what == NULL) { \
- _r->what = (type)malloc(size); \
- __reent_assert(_r->what); \
- init; \
- } \
-} while (0)
-
-#define _REENT_CHECK_TM(var) \
- _REENT_CHECK(var, _localtime_buf, struct __tm *, sizeof *((var)->_localtime_buf), \
- /* nothing */)
-
-#define _REENT_CHECK_ASCTIME_BUF(var) \
- _REENT_CHECK(var, _asctime_buf, char *, _REENT_ASCTIME_SIZE, \
- memset((var)->_asctime_buf, 0, _REENT_ASCTIME_SIZE))
-
-/* Handle the dynamically allocated rand48 structure. */
-#define _REENT_INIT_RAND48(var) do { \
- struct _reent *_r = (var); \
- _r->_r48->_seed[0] = _RAND48_SEED_0; \
- _r->_r48->_seed[1] = _RAND48_SEED_1; \
- _r->_r48->_seed[2] = _RAND48_SEED_2; \
- _r->_r48->_mult[0] = _RAND48_MULT_0; \
- _r->_r48->_mult[1] = _RAND48_MULT_1; \
- _r->_r48->_mult[2] = _RAND48_MULT_2; \
- _r->_r48->_add = _RAND48_ADD; \
- _r->_r48->_rand_next = 1; \
-} while (0)
-#define _REENT_CHECK_RAND48(var) \
- _REENT_CHECK(var, _r48, struct _rand48 *, sizeof *((var)->_r48), _REENT_INIT_RAND48((var)))
-
-#define _REENT_INIT_MP(var) do { \
- struct _reent *_r = (var); \
- _r->_mp->_result_k = 0; \
- _r->_mp->_result = _r->_mp->_p5s = _NULL; \
- _r->_mp->_freelist = _NULL; \
-} while (0)
-#define _REENT_CHECK_MP(var) \
- _REENT_CHECK(var, _mp, struct _mprec *, sizeof *((var)->_mp), _REENT_INIT_MP(var))
-
-#define _REENT_CHECK_EMERGENCY(var) \
- _REENT_CHECK(var, _emergency, char *, _REENT_EMERGENCY_SIZE, /* nothing */)
-
-#define _REENT_INIT_MISC(var) do { \
- struct _reent *_r = (var); \
- _r->_misc->_strtok_last = _NULL; \
- _r->_misc->_mblen_state.__count = 0; \
- _r->_misc->_mblen_state.__value.__wch = 0; \
- _r->_misc->_wctomb_state.__count = 0; \
- _r->_misc->_wctomb_state.__value.__wch = 0; \
- _r->_misc->_mbtowc_state.__count = 0; \
- _r->_misc->_mbtowc_state.__value.__wch = 0; \
- _r->_misc->_mbrlen_state.__count = 0; \
- _r->_misc->_mbrlen_state.__value.__wch = 0; \
- _r->_misc->_mbrtowc_state.__count = 0; \
- _r->_misc->_mbrtowc_state.__value.__wch = 0; \
- _r->_misc->_mbsrtowcs_state.__count = 0; \
- _r->_misc->_mbsrtowcs_state.__value.__wch = 0; \
- _r->_misc->_wcrtomb_state.__count = 0; \
- _r->_misc->_wcrtomb_state.__value.__wch = 0; \
- _r->_misc->_wcsrtombs_state.__count = 0; \
- _r->_misc->_wcsrtombs_state.__value.__wch = 0; \
- _r->_misc->_l64a_buf[0] = '\0'; \
- _r->_misc->_getdate_err = 0; \
-} while (0)
-#define _REENT_CHECK_MISC(var) \
- _REENT_CHECK(var, _misc, struct _misc_reent *, sizeof *((var)->_misc), _REENT_INIT_MISC(var))
-
-#define _REENT_CHECK_SIGNAL_BUF(var) \
- _REENT_CHECK(var, _signal_buf, char *, _REENT_SIGNAL_SIZE, /* nothing */)
-
-#define _REENT_SIGNGAM(ptr) ((ptr)->_gamma_signgam)
-#define _REENT_RAND_NEXT(ptr) ((ptr)->_r48->_rand_next)
-#define _REENT_RAND48_SEED(ptr) ((ptr)->_r48->_seed)
-#define _REENT_RAND48_MULT(ptr) ((ptr)->_r48->_mult)
-#define _REENT_RAND48_ADD(ptr) ((ptr)->_r48->_add)
-#define _REENT_MP_RESULT(ptr) ((ptr)->_mp->_result)
-#define _REENT_MP_RESULT_K(ptr) ((ptr)->_mp->_result_k)
-#define _REENT_MP_P5S(ptr) ((ptr)->_mp->_p5s)
-#define _REENT_MP_FREELIST(ptr) ((ptr)->_mp->_freelist)
-#define _REENT_ASCTIME_BUF(ptr) ((ptr)->_asctime_buf)
-#define _REENT_TM(ptr) ((ptr)->_localtime_buf)
-#define _REENT_EMERGENCY(ptr) ((ptr)->_emergency)
-#define _REENT_STRTOK_LAST(ptr) ((ptr)->_misc->_strtok_last)
-#define _REENT_MBLEN_STATE(ptr) ((ptr)->_misc->_mblen_state)
-#define _REENT_MBTOWC_STATE(ptr)((ptr)->_misc->_mbtowc_state)
-#define _REENT_WCTOMB_STATE(ptr)((ptr)->_misc->_wctomb_state)
-#define _REENT_MBRLEN_STATE(ptr) ((ptr)->_misc->_mbrlen_state)
-#define _REENT_MBRTOWC_STATE(ptr) ((ptr)->_misc->_mbrtowc_state)
-#define _REENT_MBSRTOWCS_STATE(ptr) ((ptr)->_misc->_mbsrtowcs_state)
-#define _REENT_WCRTOMB_STATE(ptr) ((ptr)->_misc->_wcrtomb_state)
-#define _REENT_WCSRTOMBS_STATE(ptr) ((ptr)->_misc->_wcsrtombs_state)
-#define _REENT_L64A_BUF(ptr) ((ptr)->_misc->_l64a_buf)
-#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_misc->_getdate_err))
-#define _REENT_SIGNAL_BUF(ptr) ((ptr)->_signal_buf)
-
-#else /* !_REENT_SMALL */
-
-struct _reent
-{
- int _errno; /* local copy of errno */
-
- /* FILE is a big struct and may change over time. To try to achieve binary
- compatibility with future versions, put stdin,stdout,stderr here.
- These are pointers into member __sf defined below. */
- __FILE *_stdin, *_stdout, *_stderr;
-
- int _inc; /* used by tmpnam */
- char _emergency[_REENT_EMERGENCY_SIZE];
-
- int _current_category; /* used by setlocale */
- _CONST char *_current_locale;
-
- int __sdidinit; /* 1 means stdio has been init'd */
-
- void _EXFNPTR(__cleanup, (struct _reent *));
-
- /* used by mprec routines */
- struct _Bigint *_result;
- int _result_k;
- struct _Bigint *_p5s;
- struct _Bigint **_freelist;
-
- /* used by some fp conversion routines */
- int _cvtlen; /* should be size_t */
- char *_cvtbuf;
-
- union
- {
- struct
- {
- unsigned int _unused_rand;
- char * _strtok_last;
- char _asctime_buf[_REENT_ASCTIME_SIZE];
- struct __tm _localtime_buf;
- int _gamma_signgam;
- __extension__ unsigned long long _rand_next;
- struct _rand48 _r48;
- _mbstate_t _mblen_state;
- _mbstate_t _mbtowc_state;
- _mbstate_t _wctomb_state;
- char _l64a_buf[8];
- char _signal_buf[_REENT_SIGNAL_SIZE];
- int _getdate_err;
- _mbstate_t _mbrlen_state;
- _mbstate_t _mbrtowc_state;
- _mbstate_t _mbsrtowcs_state;
- _mbstate_t _wcrtomb_state;
- _mbstate_t _wcsrtombs_state;
- int _h_errno;
- } _reent;
- /* Two next two fields were once used by malloc. They are no longer
- used. They are used to preserve the space used before so as to
- allow addition of new reent fields and keep binary compatibility. */
- struct
- {
-#define _N_LISTS 30
- unsigned char * _nextf[_N_LISTS];
- unsigned int _nmalloc[_N_LISTS];
- } _unused;
- } _new;
-
- /* atexit stuff */
- struct _atexit *_atexit; /* points to head of LIFO stack */
- struct _atexit _atexit0; /* one guaranteed table, required by ANSI */
-
- /* signal info */
- void (**(_sig_func))(int);
-
- /* These are here last so that __FILE can grow without changing the offsets
- of the above members (on the off chance that future binary compatibility
- would be broken otherwise). */
- struct _glue __sglue; /* root of glue chain */
- __FILE __sf[3]; /* first three file descriptors */
-};
-
-#define _REENT_INIT(var) \
- { 0, \
- &(var).__sf[0], \
- &(var).__sf[1], \
- &(var).__sf[2], \
- 0, \
- "", \
- 0, \
- "C", \
- 0, \
- _NULL, \
- _NULL, \
- 0, \
- _NULL, \
- _NULL, \
- 0, \
- _NULL, \
- { \
- { \
- 0, \
- _NULL, \
- "", \
- {0, 0, 0, 0, 0, 0, 0, 0, 0}, \
- 0, \
- 1, \
- { \
- {_RAND48_SEED_0, _RAND48_SEED_1, _RAND48_SEED_2}, \
- {_RAND48_MULT_0, _RAND48_MULT_1, _RAND48_MULT_2}, \
- _RAND48_ADD \
- }, \
- {0, {0}}, \
- {0, {0}}, \
- {0, {0}}, \
- "", \
- "", \
- 0, \
- {0, {0}}, \
- {0, {0}}, \
- {0, {0}}, \
- {0, {0}}, \
- {0, {0}} \
- } \
- }, \
- _NULL, \
- {_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}}, \
- _NULL, \
- {_NULL, 0, _NULL} \
- }
-
-#define _REENT_INIT_PTR(var) \
- { (var)->_errno = 0; \
- (var)->_stdin = &(var)->__sf[0]; \
- (var)->_stdout = &(var)->__sf[1]; \
- (var)->_stderr = &(var)->__sf[2]; \
- (var)->_inc = 0; \
- memset(&(var)->_emergency, 0, sizeof((var)->_emergency)); \
- (var)->_current_category = 0; \
- (var)->_current_locale = "C"; \
- (var)->__sdidinit = 0; \
- (var)->__cleanup = _NULL; \
- (var)->_result = _NULL; \
- (var)->_result_k = 0; \
- (var)->_p5s = _NULL; \
- (var)->_freelist = _NULL; \
- (var)->_cvtlen = 0; \
- (var)->_cvtbuf = _NULL; \
- (var)->_new._reent._unused_rand = 0; \
- (var)->_new._reent._strtok_last = _NULL; \
- (var)->_new._reent._asctime_buf[0] = 0; \
- memset(&(var)->_new._reent._localtime_buf, 0, sizeof((var)->_new._reent._localtime_buf)); \
- (var)->_new._reent._gamma_signgam = 0; \
- (var)->_new._reent._rand_next = 1; \
- (var)->_new._reent._r48._seed[0] = _RAND48_SEED_0; \
- (var)->_new._reent._r48._seed[1] = _RAND48_SEED_1; \
- (var)->_new._reent._r48._seed[2] = _RAND48_SEED_2; \
- (var)->_new._reent._r48._mult[0] = _RAND48_MULT_0; \
- (var)->_new._reent._r48._mult[1] = _RAND48_MULT_1; \
- (var)->_new._reent._r48._mult[2] = _RAND48_MULT_2; \
- (var)->_new._reent._r48._add = _RAND48_ADD; \
- (var)->_new._reent._mblen_state.__count = 0; \
- (var)->_new._reent._mblen_state.__value.__wch = 0; \
- (var)->_new._reent._mbtowc_state.__count = 0; \
- (var)->_new._reent._mbtowc_state.__value.__wch = 0; \
- (var)->_new._reent._wctomb_state.__count = 0; \
- (var)->_new._reent._wctomb_state.__value.__wch = 0; \
- (var)->_new._reent._mbrlen_state.__count = 0; \
- (var)->_new._reent._mbrlen_state.__value.__wch = 0; \
- (var)->_new._reent._mbrtowc_state.__count = 0; \
- (var)->_new._reent._mbrtowc_state.__value.__wch = 0; \
- (var)->_new._reent._mbsrtowcs_state.__count = 0; \
- (var)->_new._reent._mbsrtowcs_state.__value.__wch = 0; \
- (var)->_new._reent._wcrtomb_state.__count = 0; \
- (var)->_new._reent._wcrtomb_state.__value.__wch = 0; \
- (var)->_new._reent._wcsrtombs_state.__count = 0; \
- (var)->_new._reent._wcsrtombs_state.__value.__wch = 0; \
- (var)->_new._reent._l64a_buf[0] = '\0'; \
- (var)->_new._reent._signal_buf[0] = '\0'; \
- (var)->_new._reent._getdate_err = 0; \
- (var)->_atexit = _NULL; \
- (var)->_atexit0._next = _NULL; \
- (var)->_atexit0._ind = 0; \
- (var)->_atexit0._fns[0] = _NULL; \
- (var)->_atexit0._on_exit_args._fntypes = 0; \
- (var)->_atexit0._on_exit_args._fnargs[0] = _NULL; \
- (var)->_sig_func = _NULL; \
- (var)->__sglue._next = _NULL; \
- (var)->__sglue._niobs = 0; \
- (var)->__sglue._iobs = _NULL; \
- memset(&(var)->__sf, 0, sizeof((var)->__sf)); \
- }
-
-#define _REENT_CHECK_RAND48(ptr) /* nothing */
-#define _REENT_CHECK_MP(ptr) /* nothing */
-#define _REENT_CHECK_TM(ptr) /* nothing */
-#define _REENT_CHECK_ASCTIME_BUF(ptr) /* nothing */
-#define _REENT_CHECK_EMERGENCY(ptr) /* nothing */
-#define _REENT_CHECK_MISC(ptr) /* nothing */
-#define _REENT_CHECK_SIGNAL_BUF(ptr) /* nothing */
-
-#define _REENT_SIGNGAM(ptr) ((ptr)->_new._reent._gamma_signgam)
-#define _REENT_RAND_NEXT(ptr) ((ptr)->_new._reent._rand_next)
-#define _REENT_RAND48_SEED(ptr) ((ptr)->_new._reent._r48._seed)
-#define _REENT_RAND48_MULT(ptr) ((ptr)->_new._reent._r48._mult)
-#define _REENT_RAND48_ADD(ptr) ((ptr)->_new._reent._r48._add)
-#define _REENT_MP_RESULT(ptr) ((ptr)->_result)
-#define _REENT_MP_RESULT_K(ptr) ((ptr)->_result_k)
-#define _REENT_MP_P5S(ptr) ((ptr)->_p5s)
-#define _REENT_MP_FREELIST(ptr) ((ptr)->_freelist)
-#define _REENT_ASCTIME_BUF(ptr) ((ptr)->_new._reent._asctime_buf)
-#define _REENT_TM(ptr) (&(ptr)->_new._reent._localtime_buf)
-#define _REENT_EMERGENCY(ptr) ((ptr)->_emergency)
-#define _REENT_STRTOK_LAST(ptr) ((ptr)->_new._reent._strtok_last)
-#define _REENT_MBLEN_STATE(ptr) ((ptr)->_new._reent._mblen_state)
-#define _REENT_MBTOWC_STATE(ptr)((ptr)->_new._reent._mbtowc_state)
-#define _REENT_WCTOMB_STATE(ptr)((ptr)->_new._reent._wctomb_state)
-#define _REENT_MBRLEN_STATE(ptr)((ptr)->_new._reent._mbrlen_state)
-#define _REENT_MBRTOWC_STATE(ptr)((ptr)->_new._reent._mbrtowc_state)
-#define _REENT_MBSRTOWCS_STATE(ptr)((ptr)->_new._reent._mbsrtowcs_state)
-#define _REENT_WCRTOMB_STATE(ptr)((ptr)->_new._reent._wcrtomb_state)
-#define _REENT_WCSRTOMBS_STATE(ptr)((ptr)->_new._reent._wcsrtombs_state)
-#define _REENT_L64A_BUF(ptr) ((ptr)->_new._reent._l64a_buf)
-#define _REENT_SIGNAL_BUF(ptr) ((ptr)->_new._reent._signal_buf)
-#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_new._reent._getdate_err))
-
-#endif /* !_REENT_SMALL */
-
-/* This value is used in stdlib/misc.c. reent/reent.c has to know it
- as well to make sure the freelist is correctly free'd. Therefore
- we define it here, rather than in stdlib/misc.c, as before. */
-#define _Kmax (sizeof (size_t) << 3)
-
-/*
- * All references to struct _reent are via this pointer.
- * Internally, newlib routines that need to reference it should use _REENT.
- */
-
-#ifndef __ATTRIBUTE_IMPURE_PTR__
-#define __ATTRIBUTE_IMPURE_PTR__
-#endif
-
-extern struct _reent *_impure_ptr __ATTRIBUTE_IMPURE_PTR__;
-extern struct _reent *_CONST _global_impure_ptr __ATTRIBUTE_IMPURE_PTR__;
-
-void _reclaim_reent _PARAMS ((struct _reent *));
-
-/* #define _REENT_ONLY define this to get only reentrant routines */
-
-#ifndef _REENT_ONLY
-
-#if defined(__DYNAMIC_REENT__) && !defined(__SINGLE_THREAD__)
-#ifndef __getreent
- struct _reent * _EXFUN(__getreent, (void));
-#endif
-# define _REENT (__getreent())
-#else /* __SINGLE_THREAD__ || !__DYNAMIC_REENT__ */
-# define _REENT _impure_ptr
-#endif /* __SINGLE_THREAD__ || !__DYNAMIC_REENT__ */
-
-#endif /* !_REENT_ONLY */
-
-#define _GLOBAL_REENT _global_impure_ptr
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* _SYS_REENT_H_ */
diff --git a/system/include/libc/sys/reg.h b/system/include/libc/sys/reg.h
new file mode 100644
index 00000000..b47452d0
--- /dev/null
+++ b/system/include/libc/sys/reg.h
@@ -0,0 +1,9 @@
+#ifndef _SYS_REG_H
+#define _SYS_REG_H
+
+#include <limits.h>
+#include <unistd.h>
+
+#include <bits/reg.h>
+
+#endif
diff --git a/system/include/libc/sys/resource.h b/system/include/libc/sys/resource.h
index 1e451e0d..22ff2f3b 100644
--- a/system/include/libc/sys/resource.h
+++ b/system/include/libc/sys/resource.h
@@ -1,59 +1,103 @@
-#ifndef _SYS_RESOURCE_H_
-#define _SYS_RESOURCE_H_
-
-#include <sys/time.h>
+#ifndef _SYS_RESOURCE_H
+#define _SYS_RESOURCE_H
#ifdef __cplusplus
extern "C" {
#endif
-#define RUSAGE_SELF 0 /* calling process */
-#define RUSAGE_CHILDREN -1 /* terminated child processes */
-
-struct rusage {
- struct timeval ru_utime; /* user time used */
- struct timeval ru_stime; /* system time used */
- /* XXX Emscripten */
- int ru_maxrss;
- int ru_ixrss;
- int ru_idrss;
- int ru_isrss;
- int ru_minflt;
- int ru_majflt;
- int ru_nswap;
- int ru_inblock;
- int ru_oublock;
- int ru_msgsnd;
- int ru_msgrcv;
- int ru_nsignals;
- int ru_nvcsw;
- int ru_nivcsw;
+#include <features.h>
+#include <sys/time.h>
+
+#define __NEED_id_t
+
+#ifdef _GNU_SOURCE
+#define __NEED_pid_t
+#endif
+
+#include <bits/alltypes.h>
+
+typedef unsigned long rlim_t;
+
+struct rlimit
+{
+ rlim_t rlim_cur;
+ rlim_t rlim_max;
};
-/* XXX Emscripten */
-#define PRIO_PROCESS 0
-int getrusage(int who, struct rusage *r_usage);
-
-/* XXX Emscripten */
-#define RLIMIT_CORE 100
-#define RLIMIT_CPU 1
-#define RLIMIT_DATA 2
-#define RLIMIT_FSIZE 3
-#define RLIMIT_NOFILE 4
-#define RLIMIT_STACK 5
-#define RLIMIT_AS 6
-
-typedef unsigned rlim_t;
-struct rlimit {
- rlim_t rlim_cur;
- rlim_t rlim_max;
+struct rusage
+{
+ struct timeval ru_utime;
+ struct timeval ru_stime;
+ /* linux extentions, but useful */
+ long ru_maxrss;
+ long ru_ixrss;
+ long ru_idrss;
+ long ru_isrss;
+ long ru_minflt;
+ long ru_majflt;
+ long ru_nswap;
+ long ru_inblock;
+ long ru_oublock;
+ long ru_msgsnd;
+ long ru_msgrcv;
+ long ru_nsignals;
+ long ru_nvcsw;
+ long ru_nivcsw;
+ /* room for more... */
+ long __reserved[16];
};
-int getrlimit(int resource, struct rlimit *rlim);
-int setrlimit(int resource, const struct rlimit *rlim);
+
+int getrlimit (int, struct rlimit *);
+int setrlimit (int, const struct rlimit *);
+int getrusage (int, struct rusage *);
+
+int getpriority (int, id_t);
+int setpriority (int, id_t, int);
+
+#ifdef _GNU_SOURCE
+int prlimit(pid_t, int, const struct rlimit *, struct rlimit *);
+#define prlimit64 prlimit
+#endif
+
+#define PRIO_PROCESS 0
+#define PRIO_PGRP 1
+#define PRIO_USER 2
+
+#define RUSAGE_SELF 0
+#define RUSAGE_CHILDREN 1
+
+#define RLIM_INFINITY (~0ULL)
+#define RLIM_SAVED_CUR RLIM_INFINITY
+#define RLIM_SAVED_MAX RLIM_INFINITY
+
+#define RLIMIT_CPU 0
+#define RLIMIT_FSIZE 1
+#define RLIMIT_DATA 2
+#define RLIMIT_STACK 3
+#define RLIMIT_CORE 4
+#define RLIMIT_RSS 5
+#define RLIMIT_NOFILE 7
+#define RLIMIT_AS 9
+#define RLIMIT_NPROC 6
+#define RLIMIT_MEMLOCK 8
+#define RLIMIT_LOCKS 10
+#define RLIMIT_SIGPENDING 11
+#define RLIMIT_MSGQUEUE 12
+#define RLIMIT_NICE 13
+#define RLIMIT_RTPRIO 14
+#define RLIMIT_NLIMITS 15
+
+#define RLIM_NLIMITS RLIMIT_NLIMITS
+
+#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
+#define getrlimit64 getrlimit
+#define setrlimit64 setrlimit
+#define rlimit64 rlimit
+#define rlim64_t rlim_t
+#endif
#ifdef __cplusplus
}
#endif
#endif
-
diff --git a/system/include/libc/sys/sched.h b/system/include/libc/sys/sched.h
deleted file mode 100644
index bed14bfc..00000000
--- a/system/include/libc/sys/sched.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Written by Joel Sherrill <joel@OARcorp.com>.
- *
- * COPYRIGHT (c) 1989-2010.
- * On-Line Applications Research Corporation (OAR).
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software.
- *
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION
- * OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
- * SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- *
- * $Id: sched.h,v 1.3 2010/04/01 18:33:37 jjohnstn Exp $
- */
-
-
-#ifndef _SYS_SCHED_H_
-#define _SYS_SCHED_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Scheduling Policies */
-/* Open Group Specifications Issue 6 */
-#if defined(__CYGWIN__)
-#define SCHED_OTHER 3
-#else
-#define SCHED_OTHER 0
-#endif
-
-#define SCHED_FIFO 1
-#define SCHED_RR 2
-
-#if defined(_POSIX_SPORADIC_SERVER)
-#define SCHED_SPORADIC 4
-#endif
-
-/* Scheduling Parameters */
-/* Open Group Specifications Issue 6 */
-
-struct sched_param {
- int sched_priority; /* Process execution scheduling priority */
-
-#if defined(_POSIX_SPORADIC_SERVER) || defined(_POSIX_THREAD_SPORADIC_SERVER)
- int sched_ss_low_priority; /* Low scheduling priority for sporadic */
- /* server */
- struct timespec sched_ss_repl_period;
- /* Replenishment period for sporadic server */
- struct timespec sched_ss_init_budget;
- /* Initial budget for sporadic server */
- int sched_ss_max_repl; /* Maximum pending replenishments for */
- /* sporadic server */
-#endif
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-/* end of include file */
-
diff --git a/system/include/libc/sys/select.h b/system/include/libc/sys/select.h
new file mode 100644
index 00000000..e25257d2
--- /dev/null
+++ b/system/include/libc/sys/select.h
@@ -0,0 +1,42 @@
+#ifndef _SYS_SELECT_H
+#define _SYS_SELECT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+
+#define __NEED_size_t
+#define __NEED_time_t
+#define __NEED_suseconds_t
+#define __NEED_struct_timeval
+#define __NEED_struct_timespec
+#define __NEED_sigset_t
+
+#include <bits/alltypes.h>
+
+#define FD_SETSIZE 1024
+
+typedef unsigned long fd_mask;
+
+typedef struct
+{
+ unsigned long fds_bits[FD_SETSIZE / 8 / sizeof(long)];
+} fd_set;
+
+#define FD_ZERO(s) do { int __i; unsigned long *__b=(s)->fds_bits; for(__i=sizeof (fd_set)/sizeof (long); __i; __i--) *__b++=0; } while(0)
+#define FD_SET(d, s) ((s)->fds_bits[(d)/(8*sizeof(long))] |= (1UL<<((d)%(8*sizeof(long)))))
+#define FD_CLR(d, s) ((s)->fds_bits[(d)/(8*sizeof(long))] &= ~(1UL<<((d)%(8*sizeof(long)))))
+#define FD_ISSET(d, s) !!((s)->fds_bits[(d)/(8*sizeof(long))] & (1UL<<((d)%(8*sizeof(long)))))
+
+int select (int, fd_set *__restrict, fd_set *__restrict, fd_set *__restrict, struct timeval *__restrict);
+int pselect (int, fd_set *__restrict, fd_set *__restrict, fd_set *__restrict, const struct timespec *__restrict, const sigset_t *__restrict);
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#define NFDBITS (8*(int)sizeof(long))
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/system/include/libc/sys/sem.h b/system/include/libc/sys/sem.h
new file mode 100644
index 00000000..e74ea208
--- /dev/null
+++ b/system/include/libc/sys/sem.h
@@ -0,0 +1,82 @@
+#ifndef _SYS_SEM_H
+#define _SYS_SEM_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+
+#define __NEED_size_t
+#define __NEED_pid_t
+#define __NEED_time_t
+#ifdef _GNU_SOURCE
+#define __NEED_struct_timespec
+#endif
+#include <bits/alltypes.h>
+
+#include <sys/ipc.h>
+
+#define SEM_UNDO 0x1000
+#define GETPID 11
+#define GETVAL 12
+#define GETALL 13
+#define GETNCNT 14
+#define GETZCNT 15
+#define SETVAL 16
+#define SETALL 17
+
+#include <endian.h>
+
+struct semid_ds {
+ struct ipc_perm sem_perm;
+ long sem_otime;
+ unsigned long __unused1;
+ long sem_ctime;
+ unsigned long __unused2;
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ unsigned short sem_nsems;
+ char __sem_nsems_pad[sizeof(long)-sizeof(short)];
+#else
+ char __sem_nsems_pad[sizeof(long)-sizeof(short)];
+ unsigned short sem_nsems;
+#endif
+ unsigned long __unused3;
+ unsigned long __unused4;
+};
+
+#define _SEM_SEMUN_UNDEFINED 1
+
+#define SEM_STAT 18
+#define SEM_INFO 19
+
+struct seminfo {
+ int semmap;
+ int semmni;
+ int semmns;
+ int semmnu;
+ int semmsl;
+ int semopm;
+ int semume;
+ int semusz;
+ int semvmx;
+ int semaem;
+};
+
+struct sembuf {
+ unsigned short sem_num;
+ short sem_op;
+ short sem_flg;
+};
+
+int semctl(int, int, int, ...);
+int semget(key_t, int, int);
+int semop(int, struct sembuf *, size_t);
+
+#ifdef _GNU_SOURCE
+int semtimedop(int, struct sembuf *, size_t, const struct timespec *);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/system/include/libc/sys/sendfile.h b/system/include/libc/sys/sendfile.h
new file mode 100644
index 00000000..e7570d8e
--- /dev/null
+++ b/system/include/libc/sys/sendfile.h
@@ -0,0 +1,22 @@
+#ifndef _SYS_SENDFILE_H
+#define _SYS_SENDFILE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+#include <unistd.h>
+
+ssize_t sendfile(int, int, off_t *, size_t);
+
+#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
+#define sendfile64 sendfile
+#define off64_t off_t
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/shm.h b/system/include/libc/sys/shm.h
new file mode 100644
index 00000000..c20f0334
--- /dev/null
+++ b/system/include/libc/sys/shm.h
@@ -0,0 +1,61 @@
+#ifndef _SYS_SHM_H
+#define _SYS_SHM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+
+#define __NEED_time_t
+#define __NEED_size_t
+#define __NEED_pid_t
+
+#include <bits/alltypes.h>
+
+#include <sys/ipc.h>
+#include <bits/shm.h>
+
+#define SHM_R 0400
+#define SHM_W 0200
+
+#define SHM_RDONLY 010000
+#define SHM_RND 020000
+#define SHM_REMAP 040000
+#define SHM_EXEC 0100000
+
+#define SHM_LOCK 11
+#define SHM_UNLOCK 12
+#define SHM_STAT 13
+#define SHM_INFO 14
+#define SHM_DEST 01000
+#define SHM_LOCKED 02000
+#define SHM_HUGETLB 04000
+#define SHM_NORESERVE 010000
+
+struct shminfo {
+ unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4];
+};
+
+struct shm_info {
+ int used_ids;
+ unsigned long shm_tot, shm_rss, shm_swp;
+#ifdef _GNU_SOURCE
+ unsigned long swap_attempts, swap_successes;
+#else
+ unsigned long __reserved[2];
+#endif
+};
+
+typedef unsigned long shmatt_t;
+
+void *shmat(int, const void *, int);
+int shmctl(int, int, struct shmid_ds *);
+int shmdt(const void *);
+int shmget(key_t, size_t, int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/signal.h b/system/include/libc/sys/signal.h
index fc9b67d5..45bdcc64 100644
--- a/system/include/libc/sys/signal.h
+++ b/system/include/libc/sys/signal.h
@@ -1,316 +1,2 @@
-/* sys/signal.h */
-
-#ifndef _SYS_SIGNAL_H
-#define _SYS_SIGNAL_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "_ansi.h"
-#include <sys/features.h>
-#include <sys/types.h>
-
-/* #ifndef __STRICT_ANSI__*/
-
-typedef unsigned long sigset_t;
-
-#if defined(__rtems__) || defined(EMSCRIPTEN)
-
-#if defined(_POSIX_REALTIME_SIGNALS)
-
-/* sigev_notify values
- NOTE: P1003.1c/D10, p. 34 adds SIGEV_THREAD. */
-
-#define SIGEV_NONE 1 /* No asynchronous notification shall be delivered */
- /* when the event of interest occurs. */
-#define SIGEV_SIGNAL 2 /* A queued signal, with an application defined */
- /* value, shall be delivered when the event of */
- /* interest occurs. */
-#define SIGEV_THREAD 3 /* A notification function shall be called to */
- /* perform notification. */
-
-/* Signal Generation and Delivery, P1003.1b-1993, p. 63
- NOTE: P1003.1c/D10, p. 34 adds sigev_notify_function and
- sigev_notify_attributes to the sigevent structure. */
-
-union sigval {
- int sival_int; /* Integer signal value */
- void *sival_ptr; /* Pointer signal value */
-};
-
-struct sigevent {
- int sigev_notify; /* Notification type */
- int sigev_signo; /* Signal number */
- union sigval sigev_value; /* Signal value */
-
-#if defined(_POSIX_THREADS)
- void (*sigev_notify_function)( union sigval );
- /* Notification function */
- pthread_attr_t *sigev_notify_attributes; /* Notification Attributes */
-#endif
-};
-
-/* Signal Actions, P1003.1b-1993, p. 64 */
-/* si_code values, p. 66 */
-
-#define SI_USER 1 /* Sent by a user. kill(), abort(), etc */
-#define SI_QUEUE 2 /* Sent by sigqueue() */
-#define SI_TIMER 3 /* Sent by expiration of a timer_settime() timer */
-#define SI_ASYNCIO 4 /* Indicates completion of asycnhronous IO */
-#define SI_MESGQ 5 /* Indicates arrival of a message at an empty queue */
-
-typedef struct {
- int si_signo; /* Signal number */
- int si_code; /* Cause of the signal */
- union sigval si_value; /* Signal value */
-} siginfo_t;
-#endif
-
-/* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 */
-
-#define SA_NOCLDSTOP 1 /* Do not generate SIGCHLD when children stop */
-#define SA_SIGINFO 2 /* Invoke the signal catching function with */
- /* three arguments instead of one. */
-#define SA_NODEFER 4 /* XXX Emscripten */
-#define SA_RESETHAND 8 /* XXX Emscripten */
-#define SA_RESTART 16 /* XXX Emscripten */
-
-/* struct sigaction notes from POSIX:
- *
- * (1) Routines stored in sa_handler should take a single int as
- * their argument although the POSIX standard does not require this.
- * (2) The fields sa_handler and sa_sigaction may overlap, and a conforming
- * application should not use both simultaneously.
- */
-
-typedef void (*_sig_func_ptr)(int); /* XXX Emscripten */
-
-struct sigaction {
- int sa_flags; /* Special flags to affect behavior of signal */
- sigset_t sa_mask; /* Additional set of signals to be blocked */
- /* during execution of signal-catching */
- /* function. */
- union {
- _sig_func_ptr _handler; /* SIG_DFL, SIG_IGN, or pointer to a function */
-#if defined(_POSIX_REALTIME_SIGNALS)
- void (*_sigaction)( int, siginfo_t *, void * );
-#endif
- } _signal_handlers;
-};
-
-#define sa_handler _signal_handlers._handler
-#if defined(_POSIX_REALTIME_SIGNALS)
-#define sa_sigaction _signal_handlers._sigaction
-#endif
-
-#elif defined(__CYGWIN__)
-#include <cygwin/signal.h>
-#else
-#define SA_NOCLDSTOP 1 /* only value supported now for sa_flags */
-
-typedef void (*_sig_func_ptr)(int);
-
-struct sigaction
-{
- _sig_func_ptr sa_handler;
- sigset_t sa_mask;
- int sa_flags;
- void (*sa_sigaction)(int, siginfo_t *, void *); /* XXX EMSCRIPTEN */
-};
-#endif /* defined(__rtems__) */
-
-#define SIG_SETMASK 0 /* set mask with sigprocmask() */
-#define SIG_BLOCK 1 /* set of signals to block */
-#define SIG_UNBLOCK 2 /* set of signals to, well, unblock */
-
-/* These depend upon the type of sigset_t, which right now
- is always a long.. They're in the POSIX namespace, but
- are not ANSI. */
-#define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0)
-#define sigdelset(what,sig) (*(what) &= ~(1<<(sig)), 0)
-#define sigemptyset(what) (*(what) = 0, 0)
-#define sigfillset(what) (*(what) = ~(0), 0)
-#define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0)
-
-int _EXFUN(sigprocmask, (int how, const sigset_t *set, sigset_t *oset));
-
-#if defined(_POSIX_THREADS)
-int _EXFUN(pthread_sigmask, (int how, const sigset_t *set, sigset_t *oset));
-#endif
-
-/* protos for functions found in winsup sources for CYGWIN */
-#if defined(EMSCRIPTEN) || defined(__CYGWIN__) || defined(__rtems__)
-#undef sigaddset
-#undef sigdelset
-#undef sigemptyset
-#undef sigfillset
-#undef sigismember
-
-int _EXFUN(kill, (pid_t, int));
-int _EXFUN(killpg, (pid_t, int));
-int _EXFUN(sigaction, (int, const struct sigaction *, struct sigaction *));
-int _EXFUN(sigaddset, (sigset_t *, const int));
-int _EXFUN(sigdelset, (sigset_t *, const int));
-int _EXFUN(sigismember, (const sigset_t *, int));
-int _EXFUN(sigfillset, (sigset_t *));
-int _EXFUN(sigemptyset, (sigset_t *));
-int _EXFUN(sigpending, (sigset_t *));
-int _EXFUN(sigsuspend, (const sigset_t *));
-int _EXFUN(sigpause, (int));
-
-#if defined(_POSIX_THREADS)
-#ifdef __CYGWIN__
-# ifndef _CYGWIN_TYPES_H
-# error You need the winsup sources or a cygwin installation to compile the cygwin version of newlib.
-# endif
-#endif
-int _EXFUN(pthread_kill, (pthread_t thread, int sig));
-#endif
-
-#if defined(_POSIX_REALTIME_SIGNALS)
-
-/* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76
- NOTE: P1003.1c/D10, p. 39 adds sigwait(). */
-
-int _EXFUN(sigwaitinfo, (const sigset_t *set, siginfo_t *info));
-int _EXFUN(sigtimedwait,
- (const sigset_t *set, siginfo_t *info, const struct timespec *timeout)
-);
-int _EXFUN(sigwait, (const sigset_t *set, int *sig));
-
-/* 3.3.9 Queue a Signal to a Process, P1003.1b-1993, p. 78 */
-int _EXFUN(sigqueue, (pid_t pid, int signo, const union sigval value));
-
-#endif /* defined(_POSIX_REALTIME_SIGNALS) */
-
-#endif /* defined(__CYGWIN__) || defined(__rtems__) */
-
-/* #endif __STRICT_ANSI__ */
-
-#if defined(___AM29K__)
-/* These all need to be defined for ANSI C, but I don't think they are
- meaningful. */
-#define SIGABRT 1
-#define SIGFPE 1
-#define SIGILL 1
-#define SIGINT 1
-#define SIGSEGV 1
-#define SIGTERM 1
-/* These need to be defined for POSIX, and some others do too. */
-#define SIGHUP 1
-#define SIGQUIT 1
-#define NSIG 2
-#elif defined(__GO32__)
-#define SIGINT 1
-#define SIGKILL 2
-#define SIGPIPE 3
-#define SIGFPE 4
-#define SIGHUP 5
-#define SIGTERM 6
-#define SIGSEGV 7
-#define SIGTSTP 8
-#define SIGQUIT 9
-#define SIGTRAP 10
-#define SIGILL 11
-#define SIGEMT 12
-#define SIGALRM 13
-#define SIGBUS 14
-#define SIGLOST 15
-#define SIGSTOP 16
-#define SIGABRT 17
-#define SIGUSR1 18
-#define SIGUSR2 19
-#define NSIG 20
-#elif !defined(SIGTRAP)
-#define SIGHUP 1 /* hangup */
-#define SIGINT 2 /* interrupt */
-#define SIGQUIT 3 /* quit */
-#define SIGILL 4 /* illegal instruction (not reset when caught) */
-#define SIGTRAP 5 /* trace trap (not reset when caught) */
-#define SIGIOT 6 /* IOT instruction */
-#define SIGABRT 6 /* used by abort, replace SIGIOT in the future */
-#define SIGEMT 7 /* EMT instruction */
-#define SIGFPE 8 /* floating point exception */
-#define SIGKILL 9 /* kill (cannot be caught or ignored) */
-#define SIGBUS 10 /* bus error */
-#define SIGSEGV 11 /* segmentation violation */
-#define SIGSYS 12 /* bad argument to system call */
-#define SIGPIPE 13 /* write on a pipe with no one to read it */
-#define SIGALRM 14 /* alarm clock */
-#define SIGTERM 15 /* software termination signal from kill */
-
-#if defined(__rtems__)
-#define SIGURG 16 /* urgent condition on IO channel */
-#define SIGSTOP 17 /* sendable stop signal not from tty */
-#define SIGTSTP 18 /* stop signal from tty */
-#define SIGCONT 19 /* continue a stopped process */
-#define SIGCHLD 20 /* to parent on child stop or exit */
-#define SIGCLD 20 /* System V name for SIGCHLD */
-#define SIGTTIN 21 /* to readers pgrp upon background tty read */
-#define SIGTTOU 22 /* like TTIN for output if (tp->t_local&LTOSTOP) */
-#define SIGIO 23 /* input/output possible signal */
-#define SIGPOLL SIGIO /* System V name for SIGIO */
-#define SIGWINCH 24 /* window changed */
-#define SIGUSR1 25 /* user defined signal 1 */
-#define SIGUSR2 26 /* user defined signal 2 */
-
-/* Real-Time Signals Range, P1003.1b-1993, p. 61
- NOTE: By P1003.1b-1993, this should be at least RTSIG_MAX
- (which is a minimum of 8) signals.
- */
-#define SIGRTMIN 27
-#define SIGRTMAX 31
-#define __SIGFIRSTNOTRT SIGHUP
-#define __SIGLASTNOTRT SIGUSR2
-
-#define NSIG 32 /* signal 0 implied */
-
-#elif defined(__svr4__)
-/* svr4 specifics. different signals above 15, and sigaction. */
-#define SIGUSR1 16
-#define SIGUSR2 17
-#define SIGCLD 18
-#define SIGPWR 19
-#define SIGWINCH 20
-#define SIGPOLL 22 /* 20 for x.out binaries!!!! */
-#define SIGSTOP 23 /* sendable stop signal not from tty */
-#define SIGTSTP 24 /* stop signal from tty */
-#define SIGCONT 25 /* continue a stopped process */
-#define SIGTTIN 26 /* to readers pgrp upon background tty read */
-#define SIGTTOU 27 /* like TTIN for output if (tp->t_local&LTOSTOP) */
-#define NSIG 28
-#else
-#define SIGURG 16 /* urgent condition on IO channel */
-#define SIGSTOP 17 /* sendable stop signal not from tty */
-#define SIGTSTP 18 /* stop signal from tty */
-#define SIGCONT 19 /* continue a stopped process */
-#define SIGCHLD 20 /* to parent on child stop or exit */
-#define SIGCLD 20 /* System V name for SIGCHLD */
-#define SIGTTIN 21 /* to readers pgrp upon background tty read */
-#define SIGTTOU 22 /* like TTIN for output if (tp->t_local&LTOSTOP) */
-#define SIGIO 23 /* input/output possible signal */
-#define SIGPOLL SIGIO /* System V name for SIGIO */
-#define SIGXCPU 24 /* exceeded CPU time limit */
-#define SIGXFSZ 25 /* exceeded file size limit */
-#define SIGVTALRM 26 /* virtual time alarm */
-#define SIGPROF 27 /* profiling time alarm */
-#define SIGWINCH 28 /* window changed */
-#define SIGLOST 29 /* resource lost (eg, record-lock lost) */
-#define SIGUSR1 30 /* user defined signal 1 */
-#define SIGUSR2 31 /* user defined signal 2 */
-#define NSIG 64 /* signal 0 implied */
-#define SIGRTMIN 32
-#define SIGRTMAX NSIG
-#endif
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifndef _SIGNAL_H_
-/* Some applications take advantage of the fact that <sys/signal.h>
- * and <signal.h> are equivalent in glibc. Allow for that here. */
+#warning redirecting incorrect #include <sys/signal.h> to <signal.h>
#include <signal.h>
-#endif
-#endif /* _SYS_SIGNAL_H */
diff --git a/system/include/libc/sys/signalfd.h b/system/include/libc/sys/signalfd.h
new file mode 100644
index 00000000..4f3d3999
--- /dev/null
+++ b/system/include/libc/sys/signalfd.h
@@ -0,0 +1,44 @@
+#ifndef _SYS_SIGNALFD_H
+#define _SYS_SIGNALFD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <fcntl.h>
+
+#define __NEED_sigset_t
+
+#include <bits/alltypes.h>
+
+#define SFD_CLOEXEC O_CLOEXEC
+#define SFD_NONBLOCK O_NONBLOCK
+
+int signalfd(int, const sigset_t *, int);
+
+struct signalfd_siginfo {
+ uint32_t ssi_signo;
+ int32_t ssi_errno;
+ int32_t ssi_code;
+ uint32_t ssi_pid;
+ uint32_t ssi_uid;
+ int32_t ssi_fd;
+ uint32_t ssi_tid;
+ uint32_t ssi_band;
+ uint32_t ssi_overrun;
+ uint32_t ssi_trapno;
+ int32_t ssi_status;
+ int32_t ssi_int;
+ uintptr_t ssi_ptr;
+ uint64_t ssi_utime;
+ uint64_t ssi_stime;
+ uint64_t ssi_addr;
+ uint8_t pad[128-12*4-sizeof(void *)-3*8];
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/socket.h b/system/include/libc/sys/socket.h
new file mode 100644
index 00000000..08488c8b
--- /dev/null
+++ b/system/include/libc/sys/socket.h
@@ -0,0 +1,299 @@
+#ifndef _SYS_SOCKET_H
+#define _SYS_SOCKET_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+
+#define __NEED_socklen_t
+#define __NEED_sa_family_t
+#define __NEED_size_t
+#define __NEED_ssize_t
+#define __NEED_uid_t
+#define __NEED_pid_t
+#define __NEED_gid_t
+#define __NEED_struct_iovec
+
+#include <bits/alltypes.h>
+
+#include <bits/socket.h>
+
+struct ucred
+{
+ pid_t pid;
+ uid_t uid;
+ gid_t gid;
+};
+
+struct linger
+{
+ int l_onoff;
+ int l_linger;
+};
+
+#define SHUT_RD 0
+#define SHUT_WD 1
+#define SHUT_RDWR 2
+
+#ifndef SOCK_STREAM
+#define SOCK_STREAM 1
+#define SOCK_DGRAM 2
+#endif
+
+#define SOCK_RAW 3
+#define SOCK_RDM 4
+#define SOCK_SEQPACKET 5
+#define SOCK_DCCP 6
+#define SOCK_PACKET 10
+
+#ifndef SOCK_CLOEXEC
+#define SOCK_CLOEXEC 02000000
+#define SOCK_NONBLOCK 04000
+#endif
+
+#define PF_UNSPEC 0
+#define PF_LOCAL 1
+#define PF_UNIX PF_LOCAL
+#define PF_FILE PF_LOCAL
+#define PF_INET 2
+#define PF_AX25 3
+#define PF_IPX 4
+#define PF_APPLETALK 5
+#define PF_NETROM 6
+#define PF_BRIDGE 7
+#define PF_ATMPVC 8
+#define PF_X25 9
+#define PF_INET6 10
+#define PF_ROSE 11
+#define PF_DECnet 12
+#define PF_NETBEUI 13
+#define PF_SECURITY 14
+#define PF_KEY 15
+#define PF_NETLINK 16
+#define PF_ROUTE PF_NETLINK
+#define PF_PACKET 17
+#define PF_ASH 18
+#define PF_ECONET 19
+#define PF_ATMSVC 20
+#define PF_RDS 21
+#define PF_SNA 22
+#define PF_IRDA 23
+#define PF_PPPOX 24
+#define PF_WANPIPE 25
+#define PF_LLC 26
+#define PF_IB 27
+#define PF_CAN 29
+#define PF_TIPC 30
+#define PF_BLUETOOTH 31
+#define PF_IUCV 32
+#define PF_RXRPC 33
+#define PF_ISDN 34
+#define PF_PHONET 35
+#define PF_IEEE802154 36
+#define PF_CAIF 37
+#define PF_ALG 38
+#define PF_NFC 39
+#define PF_VSOCK 40
+#define PF_MAX 41
+
+#define AF_UNSPEC PF_UNSPEC
+#define AF_LOCAL PF_LOCAL
+#define AF_UNIX AF_LOCAL
+#define AF_FILE AF_LOCAL
+#define AF_INET PF_INET
+#define AF_AX25 PF_AX25
+#define AF_IPX PF_IPX
+#define AF_APPLETALK PF_APPLETALK
+#define AF_NETROM PF_NETROM
+#define AF_BRIDGE PF_BRIDGE
+#define AF_ATMPVC PF_ATMPVC
+#define AF_X25 PF_X25
+#define AF_INET6 PF_INET6
+#define AF_ROSE PF_ROSE
+#define AF_DECnet PF_DECnet
+#define AF_NETBEUI PF_NETBEUI
+#define AF_SECURITY PF_SECURITY
+#define AF_KEY PF_KEY
+#define AF_NETLINK PF_NETLINK
+#define AF_ROUTE PF_ROUTE
+#define AF_PACKET PF_PACKET
+#define AF_ASH PF_ASH
+#define AF_ECONET PF_ECONET
+#define AF_ATMSVC PF_ATMSVC
+#define AF_RDS PF_RDS
+#define AF_SNA PF_SNA
+#define AF_IRDA PF_IRDA
+#define AF_PPPOX PF_PPPOX
+#define AF_WANPIPE PF_WANPIPE
+#define AF_LLC PF_LLC
+#define AF_IB PF_IB
+#define AF_CAN PF_CAN
+#define AF_TIPC PF_TIPC
+#define AF_BLUETOOTH PF_BLUETOOTH
+#define AF_IUCV PF_IUCV
+#define AF_RXRPC PF_RXRPC
+#define AF_ISDN PF_ISDN
+#define AF_PHONET PF_PHONET
+#define AF_IEEE802154 PF_IEEE802154
+#define AF_CAIF PF_CAIF
+#define AF_ALG PF_ALG
+#define AF_NFC PF_NFC
+#define AF_VSOCK PF_VSOCK
+#define AF_MAX PF_MAX
+
+#ifndef SO_DEBUG
+#define SO_DEBUG 1
+#define SO_REUSEADDR 2
+#define SO_TYPE 3
+#define SO_ERROR 4
+#define SO_DONTROUTE 5
+#define SO_BROADCAST 6
+#define SO_SNDBUF 7
+#define SO_RCVBUF 8
+#define SO_KEEPALIVE 9
+#define SO_OOBINLINE 10
+#define SO_NO_CHECK 11
+#define SO_PRIORITY 12
+#define SO_LINGER 13
+#define SO_BSDCOMPAT 14
+#define SO_REUSEPORT 15
+#define SO_PASSCRED 16
+#define SO_PEERCRED 17
+#define SO_RCVLOWAT 18
+#define SO_SNDLOWAT 19
+#define SO_RCVTIMEO 20
+#define SO_SNDTIMEO 21
+#define SO_SNDBUFFORCE 32
+#define SO_RCVBUFFORCE 33
+#endif
+
+#define SO_SECURITY_AUTHENTICATION 22
+#define SO_SECURITY_ENCRYPTION_TRANSPORT 23
+#define SO_SECURITY_ENCRYPTION_NETWORK 24
+
+#define SO_BINDTODEVICE 25
+
+#define SO_ATTACH_FILTER 26
+#define SO_DETACH_FILTER 27
+#define SO_GET_FILTER SO_ATTACH_FILTER
+
+#define SO_PEERNAME 28
+#define SO_TIMESTAMP 29
+#define SCM_TIMESTAMP SO_TIMESTAMP
+
+#define SO_ACCEPTCONN 30
+#define SO_PEERSEC 31
+#define SO_PASSSEC 34
+#define SO_TIMESTAMPNS 35
+#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
+#define SO_MARK 36
+#define SO_TIMESTAMPING 37
+#define SCM_TIMESTAMPING SO_TIMESTAMPING
+#define SO_PROTOCOL 38
+#define SO_DOMAIN 39
+#define SO_RXQ_OVFL 40
+#define SO_WIFI_STATUS 41
+#define SCM_WIFI_STATUS SO_WIFI_STATUS
+#define SO_PEEK_OFF 42
+#define SO_NOFCS 43
+#define SO_LOCK_FILTER 44
+#define SO_SELECT_ERR_QUEUE 45
+
+#ifndef SOL_SOCKET
+#define SOL_SOCKET 1
+#endif
+
+#define SOL_RAW 255
+#define SOL_DECNET 261
+#define SOL_X25 262
+#define SOL_PACKET 263
+#define SOL_ATM 264
+#define SOL_AAL 265
+#define SOL_IRDA 266
+
+#define SOMAXCONN 128
+
+#define MSG_OOB 0x0001
+#define MSG_PEEK 0x0002
+#define MSG_DONTROUTE 0x0004
+#define MSG_CTRUNC 0x0008
+#define MSG_PROXY 0x0010
+#define MSG_TRUNC 0x0020
+#define MSG_DONTWAIT 0x0040
+#define MSG_EOR 0x0080
+#define MSG_WAITALL 0x0100
+#define MSG_FIN 0x0200
+#define MSD_SYN 0x0400
+#define MSG_CONFIRM 0x0800
+#define MSG_RST 0x1000
+#define MSG_ERRQUEUE 0x2000
+#define MSG_NOSIGNAL 0x4000
+#define MSG_MORE 0x8000
+#define MSG_WAITFORONE 0x10000
+#define MSG_CMSG_CLOEXEC 0x40000000
+
+#define __CMSG_LEN(cmsg) (((cmsg)->cmsg_len + sizeof(long) - 1) & ~(long)(sizeof(long) - 1))
+#define __CMSG_NEXT(cmsg) ((unsigned char *)(cmsg) + __CMSG_LEN(cmsg))
+#define __MHDR_END(mhdr) ((unsigned char *)(mhdr)->msg_control + (mhdr)->msg_controllen)
+
+#define CMSG_DATA(cmsg) ((unsigned char *) (((struct cmsghdr *)(cmsg)) + 1))
+#define CMSG_NXTHDR(mhdr, cmsg) ((cmsg)->cmsg_len < sizeof (struct cmsghdr) ? (struct cmsghdr *)0 : \
+ (__CMSG_NEXT(cmsg) + sizeof (struct cmsghdr) >= __MHDR_END(mhdr) ? (struct cmsghdr *)0 : \
+ ((struct cmsghdr *)__CMSG_NEXT(cmsg))))
+#define CMSG_FIRSTHDR(mhdr) ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) 0)
+
+#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1))
+#define CMSG_SPACE(len) (CMSG_ALIGN (len) + CMSG_ALIGN (sizeof (struct cmsghdr)))
+#define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
+
+#define SCM_RIGHTS 0x01
+#define SCM_CREDENTIALS 0x02
+
+struct sockaddr
+{
+ sa_family_t sa_family;
+ char sa_data[14];
+};
+
+struct sockaddr_storage
+{
+ sa_family_t ss_family;
+ unsigned long __ss_align;
+ char __ss_padding[128-2*sizeof(unsigned long)];
+};
+
+int socket (int, int, int);
+int socketpair (int, int, int, int [2]);
+
+int shutdown (int, int);
+
+int bind (int, const struct sockaddr *, socklen_t);
+int connect (int, const struct sockaddr *, socklen_t);
+int listen (int, int);
+int accept (int, struct sockaddr *__restrict, socklen_t *__restrict);
+int accept4(int, struct sockaddr *__restrict, socklen_t *__restrict, int);
+
+int getsockname (int, struct sockaddr *__restrict, socklen_t *__restrict);
+int getpeername (int, struct sockaddr *__restrict, socklen_t *__restrict);
+
+ssize_t send (int, const void *, size_t, int);
+ssize_t recv (int, void *, size_t, int);
+ssize_t sendto (int, const void *, size_t, int, const struct sockaddr *, socklen_t);
+ssize_t recvfrom (int, void *__restrict, size_t, int, struct sockaddr *__restrict, socklen_t *__restrict);
+ssize_t sendmsg (int, const struct msghdr *, int);
+ssize_t recvmsg (int, struct msghdr *, int);
+
+int getsockopt (int, int, int, void *__restrict, socklen_t *__restrict);
+int setsockopt (int, int, int, const void *, socklen_t);
+
+int sockatmark (int);
+
+#define SHUT_RD 0
+#define SHUT_WR 1
+#define SHUT_RDWR 2
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/system/include/libc/sys/stat.h b/system/include/libc/sys/stat.h
index 2285b294..c6abab5a 100644
--- a/system/include/libc/sys/stat.h
+++ b/system/include/libc/sys/stat.h
@@ -1,223 +1,114 @@
#ifndef _SYS_STAT_H
#define _SYS_STAT_H
-
#ifdef __cplusplus
extern "C" {
#endif
-#include <_ansi.h>
-#include <time.h>
-#include <sys/types.h>
+#include <features.h>
-/* dj's stat defines _STAT_H_ */
-#ifndef _STAT_H_
+#define __NEED_dev_t
+#define __NEED_ino_t
+#define __NEED_mode_t
+#define __NEED_nlink_t
+#define __NEED_uid_t
+#define __NEED_gid_t
+#define __NEED_off_t
+#define __NEED_time_t
+#define __NEED_blksize_t
+#define __NEED_blkcnt_t
+#define __NEED_struct_timespec
-/* It is intended that the layout of this structure not change when the
- sizes of any of the basic types change (short, int, long) [via a compile
- time option]. */
+#include <bits/alltypes.h>
-#ifdef __CYGWIN__
-#include <cygwin/stat.h>
-#ifdef _COMPILING_NEWLIB
-#define stat64 __stat64
-#endif
-#else
-struct stat
-{
- dev_t st_dev;
- ino_t st_ino;
- mode_t st_mode;
- nlink_t st_nlink;
- uid_t st_uid;
- gid_t st_gid;
- dev_t st_rdev;
- off_t st_size;
-#if defined(__rtems__)
- struct timespec st_atim;
- struct timespec st_mtim;
- struct timespec st_ctim;
- blksize_t st_blksize;
- blkcnt_t st_blocks;
-#else
- /* SysV/sco doesn't have the rest... But Solaris, eabi does. */
-#if defined(__svr4__) && !defined(__PPC__) && !defined(__sun__)
- time_t st_atime;
- time_t st_mtime;
- time_t st_ctime;
-#else
- time_t st_atime;
- long st_spare1;
- time_t st_mtime;
- long st_spare2;
- time_t st_ctime;
- long st_spare3;
- long st_blksize;
- long st_blocks;
- long st_spare4[2];
-#endif
-#endif
-};
-
-struct stat64
-{
- dev_t st_dev;
- ino_t st_ino;
- mode_t st_mode;
- nlink_t st_nlink;
- uid_t st_uid;
- gid_t st_gid;
- dev_t st_rdev;
- off_t st_size;
-#if defined(__rtems__)
- struct timespec st_atim;
- struct timespec st_mtim;
- struct timespec st_ctim;
- blksize_t st_blksize;
- blkcnt_t st_blocks;
-#else
- /* SysV/sco doesn't have the rest... But Solaris, eabi does. */
-#if defined(__svr4__) && !defined(__PPC__) && !defined(__sun__)
- time_t st_atime;
- time_t st_mtime;
- time_t st_ctime;
-#else
- time_t st_atime;
- long st_spare1;
- time_t st_mtime;
- long st_spare2;
- time_t st_ctime;
- long st_spare3;
- long st_blksize;
- long st_blocks;
- long st_spare4[2];
-#endif
-#endif
-};
+#include <bits/stat.h>
-#if defined(__rtems__)
#define st_atime st_atim.tv_sec
-#define st_ctime st_ctim.tv_sec
#define st_mtime st_mtim.tv_sec
-#endif
-
-#endif
-
-#define _IFMT 0170000 /* type of file */
-#define _IFDIR 0040000 /* directory */
-#define _IFCHR 0020000 /* character special */
-#define _IFBLK 0060000 /* block special */
-#define _IFREG 0100000 /* regular */
-#define _IFLNK 0120000 /* symbolic link */
-#define _IFSOCK 0140000 /* socket */
-#define _IFIFO 0010000 /* fifo */
-
-#define S_BLKSIZE 1024 /* size of a block */
-
-#define S_ISUID 0004000 /* set user id on execution */
-#define S_ISGID 0002000 /* set group id on execution */
-#define S_ISVTX 0001000 /* save swapped text even after use */
-#ifndef _POSIX_SOURCE
-#define S_IREAD 0000400 /* read permission, owner */
-#define S_IWRITE 0000200 /* write permission, owner */
-#define S_IEXEC 0000100 /* execute/search permission, owner */
-#define S_ENFMT 0002000 /* enforcement-mode locking */
-#endif /* !_POSIX_SOURCE */
-
-#define S_IFMT _IFMT
-#define S_IFDIR _IFDIR
-#define S_IFCHR _IFCHR
-#define S_IFBLK _IFBLK
-#define S_IFREG _IFREG
-#define S_IFLNK _IFLNK
-#define S_IFSOCK _IFSOCK
-#define S_IFIFO _IFIFO
-
-#ifdef _WIN32
-/* The Windows header files define _S_ forms of these, so we do too
- for easier portability. */
-#define _S_IFMT _IFMT
-#define _S_IFDIR _IFDIR
-#define _S_IFCHR _IFCHR
-#define _S_IFIFO _IFIFO
-#define _S_IFREG _IFREG
-#define _S_IREAD 0000400
-#define _S_IWRITE 0000200
-#define _S_IEXEC 0000100
-#endif
+#define st_ctime st_ctim.tv_sec
-#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
-#define S_IRUSR 0000400 /* read permission, owner */
-#define S_IWUSR 0000200 /* write permission, owner */
-#define S_IXUSR 0000100/* execute/search permission, owner */
-#define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
-#define S_IRGRP 0000040 /* read permission, group */
-#define S_IWGRP 0000020 /* write permission, grougroup */
-#define S_IXGRP 0000010/* execute/search permission, group */
-#define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
-#define S_IROTH 0000004 /* read permission, other */
-#define S_IWOTH 0000002 /* write permission, other */
-#define S_IXOTH 0000001/* execute/search permission, other */
-
-#ifndef _POSIX_SOURCE
-#define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO) /* 0777 */
-#define ALLPERMS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO) /* 07777 */
-#define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) /* 0666 */
+#define S_IFMT 0170000
+
+#define S_IFDIR 0040000
+#define S_IFCHR 0020000
+#define S_IFBLK 0060000
+#define S_IFREG 0100000
+#define S_IFIFO 0010000
+#define S_IFLNK 0120000
+#define S_IFSOCK 0140000
+
+#define S_TYPEISMQ(buf) 0
+#define S_TYPEISSEM(buf) 0
+#define S_TYPEISSHM(buf) 0
+#define S_TYPEISTMO(buf) 0
+
+#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
+#define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
+#define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK)
+#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
+#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
+#define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
+#define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
+
+#ifndef S_IRUSR
+#define S_ISUID 04000
+#define S_ISGID 02000
+#define S_ISVTX 01000
+#define S_IRUSR 0400
+#define S_IWUSR 0200
+#define S_IXUSR 0100
+#define S_IRWXU 0700
+#define S_IRGRP 0040
+#define S_IWGRP 0020
+#define S_IXGRP 0010
+#define S_IRWXG 0070
+#define S_IROTH 0004
+#define S_IWOTH 0002
+#define S_IXOTH 0001
+#define S_IRWXO 0007
+#endif
+
+#define UTIME_NOW 0x3fffffff
+#define UTIME_OMIT 0x3ffffffe
+
+int stat(const char *__restrict, struct stat *__restrict);
+int fstat(int, struct stat *);
+int lstat(const char *__restrict, struct stat *__restrict);
+int fstatat(int, const char *__restrict, struct stat *__restrict, int);
+int chmod(const char *, mode_t);
+int fchmod(int, mode_t);
+int fchmodat(int, const char *, mode_t, int);
+mode_t umask(mode_t);
+int mkdir(const char *, mode_t);
+int mknod(const char *, mode_t, dev_t);
+int mkfifo(const char *, mode_t);
+int mkdirat(int, const char *, mode_t);
+int mknodat(int, const char *, mode_t, dev_t);
+int mkfifoat(int, const char *, mode_t);
+
+int futimens(int, const struct timespec [2]);
+int utimensat(int, const char *, const struct timespec [2], int);
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+int lchmod(const char *, mode_t);
+#define S_IREAD S_IRUSR
+#define S_IWRITE S_IWUSR
+#define S_IEXEC S_IXUSR
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
+#define stat64 stat
+#define fstat64 fstat
+#define lstat64 lstat
+#define fstatat64 fstatat
+#define blksize64_t blksize_t
+#define blkcnt64_t blkcnt_t
+#define ino64_t ino_t
+#define off64_t off_t
#endif
-#define S_ISBLK(m) (((m)&_IFMT) == _IFBLK)
-#define S_ISCHR(m) (((m)&_IFMT) == _IFCHR)
-#define S_ISDIR(m) (((m)&_IFMT) == _IFDIR)
-#define S_ISFIFO(m) (((m)&_IFMT) == _IFIFO)
-#define S_ISREG(m) (((m)&_IFMT) == _IFREG)
-#define S_ISLNK(m) (((m)&_IFMT) == _IFLNK)
-#define S_ISSOCK(m) (((m)&_IFMT) == _IFSOCK)
-
-#if defined(__CYGWIN__)
-/* Special tv_nsec values for futimens(2) and utimensat(2). */
-#define UTIME_NOW -2L
-#define UTIME_OMIT -1L
+#ifdef __cplusplus
+}
#endif
-
-int _EXFUN(chmod,( const char *__path, mode_t __mode ));
-int _EXFUN(lchmod,( const char *__path, mode_t __mode ));
-int _EXFUN(fchmod,(int __fd, mode_t __mode));
-int _EXFUN(fstat,( int __fd, struct stat *__sbuf ));
-int _EXFUN(fstat64,( int __fd, struct stat64 *__sbuf )); /* XXX Emscripten */
-int _EXFUN(mkdir,( const char *_path, mode_t __mode ));
-int _EXFUN(mkfifo,( const char *__path, mode_t __mode ));
-int _EXFUN(stat,( const char *__path, struct stat *__sbuf ));
-int _EXFUN(stat64,( const char *__path, struct stat64 *__sbuf )); /* XXX Emscripten */
-mode_t _EXFUN(umask,( mode_t __mask ));
-
-#if defined(EMSCRIPTEN) || defined (__SPU__) || defined(__rtems__) || defined(__CYGWIN__) && !defined(__INSIDE_CYGWIN__)
-int _EXFUN(lstat,( const char *__path, struct stat *__buf ));
-int _EXFUN(lstat64,( const char *__path, struct stat64 *__buf )); /* XXX Emscripten */
-int _EXFUN(mknod,( const char *__path, mode_t __mode, dev_t __dev ));
#endif
-#if defined (__CYGWIN__) && !defined(__INSIDE_CYGWIN__)
-int _EXFUN(fchmodat, (int, const char *, mode_t, int));
-int _EXFUN(fstatat, (int, const char *, struct stat *, int));
-int _EXFUN(mkdirat, (int, const char *, mode_t));
-int _EXFUN(mkfifoat, (int, const char *, mode_t));
-int _EXFUN(mknodat, (int, const char *, mode_t, dev_t));
-int _EXFUN(utimensat, (int, const char *, const struct timespec *, int));
-int _EXFUN(futimens, (int, const struct timespec *));
-#endif
-/* Provide prototypes for most of the _<systemcall> names that are
- provided in newlib for some compilers. */
-#ifdef _COMPILING_NEWLIB
-int _EXFUN(_fstat,( int __fd, struct stat *__sbuf ));
-int _EXFUN(_stat,( const char *__path, struct stat *__sbuf ));
-#ifdef __LARGE64_FILES
-struct stat64;
-int _EXFUN(_fstat64,( int __fd, struct stat64 *__sbuf ));
-#endif
-#endif
-
-#endif /* !_STAT_H_ */
-#ifdef __cplusplus
-}
-#endif
-#endif /* _SYS_STAT_H */
diff --git a/system/include/libc/sys/statfs.h b/system/include/libc/sys/statfs.h
new file mode 100644
index 00000000..6f4c6230
--- /dev/null
+++ b/system/include/libc/sys/statfs.h
@@ -0,0 +1,32 @@
+#ifndef _SYS_STATFS_H
+#define _SYS_STATFS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+
+#include <sys/statvfs.h>
+
+typedef struct __fsid_t {
+ int __val[2];
+} fsid_t;
+
+#include <bits/statfs.h>
+
+int statfs (const char *, struct statfs *);
+int fstatfs (int, struct statfs *);
+
+#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
+#define statfs64 statfs
+#define fstatfs64 fstatfs
+#define fsblkcnt64_t fsblkcnt_t
+#define fsfilcnt64_t fsfilcnt_t
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/statvfs.h b/system/include/libc/sys/statvfs.h
new file mode 100644
index 00000000..e0839eca
--- /dev/null
+++ b/system/include/libc/sys/statvfs.h
@@ -0,0 +1,57 @@
+#ifndef _SYS_STATVFS_H
+#define _SYS_STATVFS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+
+#define __NEED_fsblkcnt_t
+#define __NEED_fsfilcnt_t
+#include <bits/alltypes.h>
+
+#include <endian.h>
+
+struct statvfs {
+ unsigned long f_bsize, f_frsize;
+ fsblkcnt_t f_blocks, f_bfree, f_bavail;
+ fsfilcnt_t f_files, f_ffree, f_favail;
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ unsigned long f_fsid;
+ unsigned :8*(2*sizeof(int)-sizeof(long));
+#else
+ unsigned :8*(2*sizeof(int)-sizeof(long));
+ unsigned long f_fsid;
+#endif
+ unsigned long f_flag, f_namemax;
+ int __reserved[6];
+};
+
+int statvfs (const char *__restrict, struct statvfs *__restrict);
+int fstatvfs (int, struct statvfs *);
+
+#define ST_RDONLY 1
+#define ST_NOSUID 2
+#define ST_NODEV 4
+#define ST_NOEXEC 8
+#define ST_SYNCHRONOUS 16
+#define ST_MANDLOCK 64
+#define ST_WRITE 128
+#define ST_APPEND 256
+#define ST_IMMUTABLE 512
+#define ST_NOATIME 1024
+#define ST_NODIRATIME 2048
+
+#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
+#define statvfs64 statvfs
+#define fstatvfs64 fstatvfs
+#define fsblkcnt64_t fsblkcnt_t
+#define fsfilcnt64_t fsfilcnt_t
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/stdio.h b/system/include/libc/sys/stdio.h
deleted file mode 100644
index 0918fe15..00000000
--- a/system/include/libc/sys/stdio.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _NEWLIB_STDIO_H
-#define _NEWLIB_STDIO_H
-
-#include <sys/lock.h>
-#include <sys/reent.h>
-
-/* Internal locking macros, used to protect stdio functions. In the
- general case, expand to nothing. Use __SSTR flag in FILE _flags to
- detect if FILE is private to sprintf/sscanf class of functions; if
- set then do nothing as lock is not initialised. */
-#if !defined(_flockfile)
-#ifndef __SINGLE_THREAD__
-# define _flockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __lock_acquire_recursive((fp)->_lock))
-#else
-# define _flockfile(fp) (_CAST_VOID 0)
-#endif
-#endif
-
-#if !defined(_funlockfile)
-#ifndef __SINGLE_THREAD__
-# define _funlockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __lock_release_recursive((fp)->_lock))
-#else
-# define _funlockfile(fp) (_CAST_VOID 0)
-#endif
-#endif
-
-#endif /* _NEWLIB_STDIO_H */
diff --git a/system/include/libc/sys/string.h b/system/include/libc/sys/string.h
deleted file mode 100644
index ceedf4be..00000000
--- a/system/include/libc/sys/string.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* This is a dummy <sys/string.h> used as a placeholder for
- systems that need to have a special header file. */
diff --git a/system/include/libc/sys/stropts.h b/system/include/libc/sys/stropts.h
new file mode 100644
index 00000000..5b5bc02f
--- /dev/null
+++ b/system/include/libc/sys/stropts.h
@@ -0,0 +1 @@
+#include <stropts.h>
diff --git a/system/include/libc/sys/swap.h b/system/include/libc/sys/swap.h
new file mode 100644
index 00000000..11c0f929
--- /dev/null
+++ b/system/include/libc/sys/swap.h
@@ -0,0 +1,21 @@
+#ifndef _SYS_SWAP_H
+#define _SYS_SWAP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define SWAP_FLAG_PREFER 0x8000
+#define SWAP_FLAG_PRIO_MASK 0x7fff
+#define SWAP_FLAG_PRIO_SHIFT 0
+#define SWAP_FLAG_DISCARD 0x10000
+
+int swapon (const char *, int);
+int swapoff (const char *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/syscall.h b/system/include/libc/sys/syscall.h
new file mode 100644
index 00000000..24987ddf
--- /dev/null
+++ b/system/include/libc/sys/syscall.h
@@ -0,0 +1,6 @@
+#ifndef _SYS_SYSCALL_H
+#define _SYS_SYSCALL_H
+
+#include <bits/syscall.h>
+
+#endif
diff --git a/system/include/libc/sys/sysctl.h b/system/include/libc/sys/sysctl.h
new file mode 100644
index 00000000..c358b794
--- /dev/null
+++ b/system/include/libc/sys/sysctl.h
@@ -0,0 +1,17 @@
+#ifndef _SYS_SYSCTL_H
+#define _SYS_SYSCTL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define __NEED_size_t
+#include <bits/alltypes.h>
+
+int sysctl (int *, int, void *, size_t *, void *, size_t);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/sysinfo.h b/system/include/libc/sys/sysinfo.h
new file mode 100644
index 00000000..6a3931e5
--- /dev/null
+++ b/system/include/libc/sys/sysinfo.h
@@ -0,0 +1,36 @@
+#ifndef _SYS_SYSINFO_H
+#define _SYS_SYSINFO_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SI_LOAD_SHIFT 16
+
+struct sysinfo {
+ unsigned long uptime;
+ unsigned long loads[3];
+ unsigned long totalram;
+ unsigned long freeram;
+ unsigned long sharedram;
+ unsigned long bufferram;
+ unsigned long totalswap;
+ unsigned long freeswap;
+ unsigned short procs, pad;
+ unsigned long totalhigh;
+ unsigned long freehigh;
+ unsigned mem_unit;
+ char __reserved[256];
+};
+
+int sysinfo (struct sysinfo *);
+int get_nprocs_conf (void);
+int get_nprocs (void);
+long get_phys_pages (void);
+long get_avphys_pages (void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/syslimits.h b/system/include/libc/sys/syslimits.h
deleted file mode 100644
index ba9dbd66..00000000
--- a/system/include/libc/sys/syslimits.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 1988, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- * @(#)syslimits.h 8.1 (Berkeley) 6/2/93
- * $FreeBSD: src/sys/sys/syslimits.h,v 1.10 2001/06/18 20:24:54 wollman Exp $
- */
-
-#ifndef _SYS_SYSLIMITS_H_
-#define _SYS_SYSLIMITS_H_
-
-#define ARG_MAX 65536 /* max bytes for an exec function */
-#ifndef CHILD_MAX
-#define CHILD_MAX 40 /* max simultaneous processes */
-#endif
-#define LINK_MAX 32767 /* max file link count */
-#define MAX_CANON 255 /* max bytes in term canon input line */
-#define MAX_INPUT 255 /* max bytes in terminal input */
-#define NAME_MAX 255 /* max bytes in a file name */
-#define NGROUPS_MAX 16 /* max supplemental group id's */
-#ifndef OPEN_MAX
-#define OPEN_MAX 64 /* max open files per process */
-#endif
-#define PATH_MAX 1024 /* max bytes in pathname */
-#define PIPE_BUF 512 /* max bytes for atomic pipe writes */
-#define IOV_MAX 1024 /* max elements in i/o vector */
-
-#define BC_BASE_MAX 99 /* max ibase/obase values in bc(1) */
-#define BC_DIM_MAX 2048 /* max array elements in bc(1) */
-#define BC_SCALE_MAX 99 /* max scale value in bc(1) */
-#define BC_STRING_MAX 1000 /* max const string length in bc(1) */
-#define COLL_WEIGHTS_MAX 0 /* max weights for order keyword */
-#define EXPR_NEST_MAX 32 /* max expressions nested in expr(1) */
-#define LINE_MAX 2048 /* max bytes in an input line */
-#define RE_DUP_MAX 255 /* max RE's in interval notation */
-
-#endif
diff --git a/system/include/libc/sys/syslog.h b/system/include/libc/sys/syslog.h
new file mode 100644
index 00000000..7761ecee
--- /dev/null
+++ b/system/include/libc/sys/syslog.h
@@ -0,0 +1 @@
+#include <syslog.h>
diff --git a/system/include/libc/sys/sysmacros.h b/system/include/libc/sys/sysmacros.h
new file mode 100644
index 00000000..07a3ef18
--- /dev/null
+++ b/system/include/libc/sys/sysmacros.h
@@ -0,0 +1,15 @@
+#ifndef _SYS_SYSMACROS_H
+#define _SYS_SYSMACROS_H
+
+#define major(x) \
+ ((unsigned)( (((x)>>31>>1) & 0xfffff000) | (((x)>>8) & 0x00000fff) ))
+#define minor(x) \
+ ((unsigned)( (((x)>>12) & 0xffffff00) | ((x) & 0x000000ff) ))
+
+#define makedev(x,y) ( \
+ (((x)&0xfffff000ULL) << 32) | \
+ (((x)&0x00000fffULL) << 8) | \
+ (((y)&0xffffff00ULL) << 12) | \
+ (((y)&0x000000ffULL)) )
+
+#endif
diff --git a/system/include/libc/sys/termios.h b/system/include/libc/sys/termios.h
index 88e8ad16..f5f751f0 100644
--- a/system/include/libc/sys/termios.h
+++ b/system/include/libc/sys/termios.h
@@ -1,280 +1,2 @@
-/*
- * Copyright (c) 1988, 1989, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- * @(#)termios.h 8.3 (Berkeley) 3/28/94
- * $Id: termios.h,v 1.11 1998/05/05 21:49:37 jb Exp $
- */
-
-#ifndef _SYS_TERMIOS_H_
-#define _SYS_TERMIOS_H_
-
-/*
- * Special Control Characters
- *
- * Index into c_cc[] character array.
- *
- * Name Subscript Enabled by
- */
-#define VEOF 0 /* ICANON */
-#define VEOL 1 /* ICANON */
-#ifndef _POSIX_SOURCE
-#define VEOL2 2 /* ICANON together with IEXTEN */
-#endif
-#define VERASE 3 /* ICANON */
-#ifndef _POSIX_SOURCE
-#define VWERASE 4 /* ICANON together with IEXTEN */
-#endif
-#define VKILL 5 /* ICANON */
-#ifndef _POSIX_SOURCE
-#define VREPRINT 6 /* ICANON together with IEXTEN */
-#endif
-/* 7 spare 1 */
-#define VINTR 8 /* ISIG */
-#define VQUIT 9 /* ISIG */
-#define VSUSP 10 /* ISIG */
-#ifndef _POSIX_SOURCE
-#define VDSUSP 11 /* ISIG together with IEXTEN */
-#endif
-#define VSTART 12 /* IXON, IXOFF */
-#define VSTOP 13 /* IXON, IXOFF */
-#ifndef _POSIX_SOURCE
-#define VLNEXT 14 /* IEXTEN */
-#define VDISCARD 15 /* IEXTEN */
-#endif
-#define VMIN 16 /* !ICANON */
-#define VTIME 17 /* !ICANON */
-#ifndef _POSIX_SOURCE
-#define VSTATUS 18 /* ICANON together with IEXTEN */
-/* 19 spare 2 */
-#endif
-#define NCCS 20
-
-#define _POSIX_VDISABLE 0xff
-
-#ifndef _POSIX_SOURCE
-#define CCEQ(val, c) ((c) == (val) ? (val) != _POSIX_VDISABLE : 0)
-#endif
-
-/*
- * Input flags - software input processing
- */
-#define IGNBRK 0x00000001 /* ignore BREAK condition */
-#define BRKINT 0x00000002 /* map BREAK to SIGINTR */
-#define IGNPAR 0x00000004 /* ignore (discard) parity errors */
-#define PARMRK 0x00000008 /* mark parity and framing errors */
-#define INPCK 0x00000010 /* enable checking of parity errors */
-#define ISTRIP 0x00000020 /* strip 8th bit off chars */
-#define INLCR 0x00000040 /* map NL into CR */
-#define IGNCR 0x00000080 /* ignore CR */
-#define ICRNL 0x00000100 /* map CR to NL (ala CRMOD) */
-#define IXON 0x00000200 /* enable output flow control */
-#define IXOFF 0x00000400 /* enable input flow control */
-#ifndef _POSIX_SOURCE
-#define IXANY 0x00000800 /* any char will restart after stop */
-#define IMAXBEL 0x00002000 /* ring bell on input queue full */
-#endif /*_POSIX_SOURCE */
-
-/*
- * Output flags - software output processing
- */
-#define OPOST 0x00000001 /* enable following output processing */
-#ifndef _POSIX_SOURCE
-#define ONLCR 0x00000002 /* map NL to CR-NL (ala CRMOD) */
-#define OXTABS 0x00000004 /* expand tabs to spaces */
-#define ONOEOT 0x00000008 /* discard EOT's (^D) on output) */
-#endif /*_POSIX_SOURCE */
-
-/*
- * Control flags - hardware control of terminal
- */
-#ifndef _POSIX_SOURCE
-#define CIGNORE 0x00000001 /* ignore control flags */
-#endif
-#define CSIZE 0x00000300 /* character size mask */
-#define CS5 0x00000000 /* 5 bits (pseudo) */
-#define CS6 0x00000100 /* 6 bits */
-#define CS7 0x00000200 /* 7 bits */
-#define CS8 0x00000300 /* 8 bits */
-#define CSTOPB 0x00000400 /* send 2 stop bits */
-#define CREAD 0x00000800 /* enable receiver */
-#define PARENB 0x00001000 /* parity enable */
-#define PARODD 0x00002000 /* odd parity, else even */
-#define HUPCL 0x00004000 /* hang up on last close */
-#define CLOCAL 0x00008000 /* ignore modem status lines */
-#ifndef _POSIX_SOURCE
-#define CCTS_OFLOW 0x00010000 /* CTS flow control of output */
-#define CRTSCTS (CCTS_OFLOW | CRTS_IFLOW)
-#define CRTS_IFLOW 0x00020000 /* RTS flow control of input */
-#define CDTR_IFLOW 0x00040000 /* DTR flow control of input */
-#define CDSR_OFLOW 0x00080000 /* DSR flow control of output */
-#define CCAR_OFLOW 0x00100000 /* DCD flow control of output */
-#define MDMBUF 0x00100000 /* old name for CCAR_OFLOW */
-#endif
-
-
-/*
- * "Local" flags - dumping ground for other state
- *
- * Warning: some flags in this structure begin with
- * the letter "I" and look like they belong in the
- * input flag.
- */
-
-#ifndef _POSIX_SOURCE
-#define ECHOKE 0x00000001 /* visual erase for line kill */
-#endif /*_POSIX_SOURCE */
-#define ECHOE 0x00000002 /* visually erase chars */
-#define ECHOK 0x00000004 /* echo NL after line kill */
-#define ECHO 0x00000008 /* enable echoing */
-#define ECHONL 0x00000010 /* echo NL even if ECHO is off */
-#ifndef _POSIX_SOURCE
-#define ECHOPRT 0x00000020 /* visual erase mode for hardcopy */
-#define ECHOCTL 0x00000040 /* echo control chars as ^(Char) */
-#endif /*_POSIX_SOURCE */
-#define ISIG 0x00000080 /* enable signals INTR, QUIT, [D]SUSP */
-#define ICANON 0x00000100 /* canonicalize input lines */
-#ifndef _POSIX_SOURCE
-#define ALTWERASE 0x00000200 /* use alternate WERASE algorithm */
-#endif /*_POSIX_SOURCE */
-#define IEXTEN 0x00000400 /* enable DISCARD and LNEXT */
-#define EXTPROC 0x00000800 /* external processing */
-#define TOSTOP 0x00400000 /* stop background jobs from output */
-#ifndef _POSIX_SOURCE
-#define FLUSHO 0x00800000 /* output being flushed (state) */
-#define NOKERNINFO 0x02000000 /* no kernel output from VSTATUS */
-#define PENDIN 0x20000000 /* XXX retype pending input (state) */
-#endif /*_POSIX_SOURCE */
-#define NOFLSH 0x80000000 /* don't flush after interrupt */
-
-typedef unsigned int tcflag_t;
-typedef unsigned char cc_t;
-typedef unsigned int speed_t;
-
-struct termios {
- tcflag_t c_iflag; /* input flags */
- tcflag_t c_oflag; /* output flags */
- tcflag_t c_cflag; /* control flags */
- tcflag_t c_lflag; /* local flags */
- cc_t c_cc[NCCS]; /* control chars */
- speed_t c_ispeed; /* input speed */
- speed_t c_ospeed; /* output speed */
-};
-
-/*
- * Commands passed to tcsetattr() for setting the termios structure.
- */
-#define TCSANOW 0 /* make change immediate */
-#define TCSADRAIN 1 /* drain output, then change */
-#define TCSAFLUSH 2 /* drain output, flush input */
-#ifndef _POSIX_SOURCE
-#define TCSASOFT 0x10 /* flag - don't alter h.w. state */
-#endif
-
-/*
- * Standard speeds
- */
-#define B0 0
-#define B50 50
-#define B75 75
-#define B110 110
-#define B134 134
-#define B150 150
-#define B200 200
-#define B300 300
-#define B600 600
-#define B1200 1200
-#define B1800 1800
-#define B2400 2400
-#define B4800 4800
-#define B9600 9600
-#define B19200 19200
-#define B38400 38400
-#ifndef _POSIX_SOURCE
-#define B7200 7200
-#define B14400 14400
-#define B28800 28800
-#define B57600 57600
-#define B76800 76800
-#define B115200 115200
-#define B230400 230400
-#define EXTA 19200
-#define EXTB 38400
-#endif /* !_POSIX_SOURCE */
-
-#ifndef KERNEL
-
-#define TCIFLUSH 1
-#define TCOFLUSH 2
-#define TCIOFLUSH 3
-#define TCOOFF 1
-#define TCOON 2
-#define TCIOFF 3
-#define TCION 4
-
-#include <sys/cdefs.h>
-
-__BEGIN_DECLS
-speed_t cfgetispeed __P((const struct termios *));
-speed_t cfgetospeed __P((const struct termios *));
-int cfsetispeed __P((struct termios *, speed_t));
-int cfsetospeed __P((struct termios *, speed_t));
-int tcgetattr __P((int, struct termios *));
-int tcsetattr __P((int, int, const struct termios *));
-int tcdrain __P((int));
-int tcflow __P((int, int));
-int tcflush __P((int, int));
-int tcsendbreak __P((int, int));
-
-#ifndef _POSIX_SOURCE
-void cfmakeraw __P((struct termios *));
-int cfsetspeed __P((struct termios *, speed_t));
-#endif /* !_POSIX_SOURCE */
-__END_DECLS
-
-#endif /* !KERNEL */
-
-/* XXX Emscripten */
-struct winsize {
- unsigned short ws_row;
- unsigned short ws_col;
- unsigned short ws_xpixel;
- unsigned short ws_ypixel;
-};
-
-/*
- * END OF PROTECTED INCLUDE.
- */
-#endif /* !_SYS_TERMIOS_H_ */
-
-#ifndef _POSIX_SOURCE
-#include <sys/ttydefaults.h>
-#endif
+#warning redirecting incorrect #include <sys/termios.h> to <termios.h>
+#include <termios.h>
diff --git a/system/include/libc/sys/time.h b/system/include/libc/sys/time.h
index 2bd2421e..3ce824e6 100644
--- a/system/include/libc/sys/time.h
+++ b/system/include/libc/sys/time.h
@@ -1,85 +1,57 @@
-/* time.h -- An implementation of the standard Unix <sys/time.h> file.
- Written by Geoffrey Noer <noer@cygnus.com>
- Public domain; no rights reserved. */
-
-#ifndef _SYS_TIME_H_
-#define _SYS_TIME_H_
-
-#include <_ansi.h>
-#include <sys/types.h>
-#include <time.h> /* XXX Emscripten */
-
+#ifndef _SYS_TIME_H
+#define _SYS_TIME_H
#ifdef __cplusplus
extern "C" {
#endif
-#ifndef _WINSOCK_H
-#define _TIMEVAL_DEFINED
-struct timeval {
- time_t tv_sec;
- suseconds_t tv_usec;
-};
+#include <features.h>
-struct timezone {
- int tz_minuteswest;
- int tz_dsttime;
-};
+#include <sys/select.h>
-#ifdef __CYGWIN__
-#include <cygwin/sys_time.h>
-#endif /* __CYGWIN__ */
+int gettimeofday (struct timeval *__restrict, void *__restrict);
-#endif /* _WINSOCK_H */
+#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
+ || defined(_BSD_SOURCE)
-#define ITIMER_REAL 0
-#define ITIMER_VIRTUAL 1
-#define ITIMER_PROF 2
+#define ITIMER_REAL 0
+#define ITIMER_VIRTUAL 1
+#define ITIMER_PROF 2
-struct itimerval {
- struct timeval it_interval;
- struct timeval it_value;
+struct itimerval
+{
+ struct timeval it_interval;
+ struct timeval it_value;
};
-/* BSD time macros used by RTEMS code */
-#if defined (__rtems__) || defined (__CYGWIN__) || defined (EMSCRIPTEN)
+int getitimer (int, struct itimerval *);
+int setitimer (int, const struct itimerval *__restrict, struct itimerval *__restrict);
+int utimes (const char *, const struct timeval [2]);
-/* Convenience macros for operations on timevals.
- NOTE: `timercmp' does not work for >= or <=. */
-#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
-#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
-#define timercmp(a, b, CMP) \
- (((a)->tv_sec == (b)->tv_sec) ? \
- ((a)->tv_usec CMP (b)->tv_usec) : \
- ((a)->tv_sec CMP (b)->tv_sec))
-#define timeradd(a, b, result) \
- do { \
- (result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \
- (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \
- if ((result)->tv_usec >= 1000000) \
- { \
- ++(result)->tv_sec; \
- (result)->tv_usec -= 1000000; \
- } \
- } while (0)
-#define timersub(a, b, result) \
- do { \
- (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
- (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
- if ((result)->tv_usec < 0) { \
- --(result)->tv_sec; \
- (result)->tv_usec += 1000000; \
- } \
- } while (0)
-#endif /* defined (__rtems__) || defined (__CYGWIN__) */
+#endif
-int _EXFUN(gettimeofday, (struct timeval *__p, void *__tz));
-int _EXFUN(settimeofday, (const struct timeval *, const struct timezone *));
-int _EXFUN(utimes, (const char *__path, const struct timeval *__tvp));
-int _EXFUN(getitimer, (int __which, struct itimerval *__value));
-int _EXFUN(setitimer, (int __which, const struct itimerval *__value,
- struct itimerval *__ovalue));
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+struct timezone {
+ int tz_minuteswest;
+ int tz_dsttime;
+};
+int futimes(int, const struct timeval [2]);
+int futimesat(int, const char *, const struct timeval [2]);
+int lutimes(const char *, const struct timeval [2]);
+int settimeofday(const struct timeval *, const struct timezone *);
+int adjtime (const struct timeval *, struct timeval *);
+#define timerisset(t) ((t)->tv_sec || (t)->tv_usec)
+#define timerclear(t) ((t)->tv_sec = (t)->tv_usec = 0)
+#define timercmp(s,t,op) ((s)->tv_sec == (t)->tv_sec ? \
+ (s)->tv_usec op (t)->tv_usec : (s)->tv_sec op (t)->tv_sec)
+#define timeradd(s,t,a) ( (a)->tv_sec = (s)->tv_sec + (t)->tv_sec, \
+ ((a)->tv_usec = (s)->tv_usec + (t)->tv_usec) >= 1000000 && \
+ ((a)->tv_usec -= 1000000, (a)->tv_sec++) )
+#define timersub(s,t,a) ( (a)->tv_sec = (s)->tv_sec - (t)->tv_sec, \
+ ((a)->tv_usec = (s)->tv_usec - (t)->tv_usec) < 0 && \
+ ((a)->tv_usec += 1000000, (a)->tv_sec--) )
+#endif
#ifdef __cplusplus
}
#endif
-#endif /* _SYS_TIME_H_ */
+#endif
diff --git a/system/include/libc/sys/timerfd.h b/system/include/libc/sys/timerfd.h
new file mode 100644
index 00000000..df645fe8
--- /dev/null
+++ b/system/include/libc/sys/timerfd.h
@@ -0,0 +1,24 @@
+#ifndef _SYS_TIMERFD_H
+#define _SYS_TIMERFD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <time.h>
+#include <fcntl.h>
+
+#define TFD_NONBLOCK O_NONBLOCK
+#define TFD_CLOEXEC O_CLOEXEC
+
+#define TFD_TIMER_ABSTIME 1
+
+int timerfd_create(int, int);
+int timerfd_settime(int, int, const struct itimerspec *, struct itimerspec *);
+int timerfd_gettime(int, struct itimerspec *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/times.h b/system/include/libc/sys/times.h
index 9375cb19..cc55e573 100644
--- a/system/include/libc/sys/times.h
+++ b/system/include/libc/sys/times.h
@@ -1,28 +1,26 @@
#ifndef _SYS_TIMES_H
+#define _SYS_TIMES_H
+
#ifdef __cplusplus
extern "C" {
#endif
-#define _SYS_TIMES_H
-
-#include <_ansi.h>
-#include <machine/types.h>
-#ifndef __clock_t_defined
-typedef _CLOCK_T_ clock_t;
-#define __clock_t_defined
-#endif
+#define __NEED_clock_t
+#include <bits/alltypes.h>
-/* Get Process Times, P1003.1b-1993, p. 92 */
-struct tms {
- clock_t tms_utime; /* user time */
- clock_t tms_stime; /* system time */
- clock_t tms_cutime; /* user time, children */
- clock_t tms_cstime; /* system time, children */
+struct tms
+{
+ clock_t tms_utime;
+ clock_t tms_stime;
+ clock_t tms_cutime;
+ clock_t tms_cstime;
};
-clock_t _EXFUN(times,(struct tms *));
+clock_t times (struct tms *);
#ifdef __cplusplus
}
#endif
-#endif /* !_SYS_TIMES_H */
+
+#endif
+
diff --git a/system/include/libc/sys/timex.h b/system/include/libc/sys/timex.h
new file mode 100644
index 00000000..2e688880
--- /dev/null
+++ b/system/include/libc/sys/timex.h
@@ -0,0 +1,98 @@
+#ifndef _SYS_TIMEX_H
+#define _SYS_TIMEX_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define __NEED_clockid_t
+
+#include <bits/alltypes.h>
+
+#include <sys/time.h>
+
+struct ntptimeval {
+ struct timeval time;
+ long maxerror, esterror;
+};
+
+struct timex {
+ unsigned modes;
+ long offset, freq, maxerror, esterror;
+ int status;
+ long constant, precision, tolerance;
+ struct timeval time;
+ long tick, ppsfreq, jitter;
+ int shift;
+ long stabil, jitcnt, calcnt, errcnt, stbcnt;
+ int tai;
+ int __padding[11];
+};
+
+#define ADJ_OFFSET 0x0001
+#define ADJ_FREQUENCY 0x0002
+#define ADJ_MAXERROR 0x0004
+#define ADJ_ESTERROR 0x0008
+#define ADJ_STATUS 0x0010
+#define ADJ_TIMECONST 0x0020
+#define ADJ_TAI 0x0080
+#define ADJ_SETOFFSET 0x0100
+#define ADJ_MICRO 0x1000
+#define ADJ_NANO 0x2000
+#define ADJ_TICK 0x4000
+#define ADJ_OFFSET_SINGLESHOT 0x8001
+#define ADJ_OFFSET_SS_READ 0xa001
+
+#define MOD_OFFSET ADJ_OFFSET
+#define MOD_FREQUENCY ADJ_FREQUENCY
+#define MOD_MAXERROR ADJ_MAXERROR
+#define MOD_ESTERROR ADJ_ESTERROR
+#define MOD_STATUS ADJ_STATUS
+#define MOD_TIMECONST ADJ_TIMECONST
+#define MOD_CLKB ADJ_TICK
+#define MOD_CLKA ADJ_OFFSET_SINGLESHOT
+#define MOD_TAI ADJ_TAI
+#define MOD_MICRO ADJ_MICRO
+#define MOD_NANO ADJ_NANO
+
+#define STA_PLL 0x0001
+#define STA_PPSFREQ 0x0002
+#define STA_PPSTIME 0x0004
+#define STA_FLL 0x0008
+
+#define STA_INS 0x0010
+#define STA_DEL 0x0020
+#define STA_UNSYNC 0x0040
+#define STA_FREQHOLD 0x0080
+
+#define STA_PPSSIGNAL 0x0100
+#define STA_PPSJITTER 0x0200
+#define STA_PPSWANDER 0x0400
+#define STA_PPSERROR 0x0800
+
+#define STA_CLOCKERR 0x1000
+#define STA_NANO 0x2000
+#define STA_MODE 0x4000
+#define STA_CLK 0x8000
+
+#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \
+ STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK)
+
+#define TIME_OK 0
+#define TIME_INS 1
+#define TIME_DEL 2
+#define TIME_OOP 3
+#define TIME_WAIT 4
+#define TIME_ERROR 5
+#define TIME_BAD TIME_ERROR
+
+#define MAXTC 6
+
+int adjtimex(struct timex *);
+int clock_adjtime(clockid_t, struct timex *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/ttydefaults.h b/system/include/libc/sys/ttydefaults.h
index 65b9c6e8..d251b715 100644
--- a/system/include/libc/sys/ttydefaults.h
+++ b/system/include/libc/sys/ttydefaults.h
@@ -1,97 +1,39 @@
-/*-
- * Copyright (c) 1982, 1986, 1993
- * The Regents of the University of California. All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- * @(#)ttydefaults.h 8.4 (Berkeley) 1/21/94
- * $Id: ttydefaults.h,v 1.12 1997/08/15 22:43:22 ache Exp $
- */
+#ifndef _SYS_TTYDEFAULTS_H
+#define _SYS_TTYDEFAULTS_H
-/*
- * System wide defaults for terminal state.
- */
-#ifndef _SYS_TTYDEFAULTS_H_
-#define _SYS_TTYDEFAULTS_H_
+#define TTYDEF_IFLAG (BRKINT | ISTRIP | ICRNL | IMAXBEL | IXON | IXANY)
+#define TTYDEF_OFLAG (OPOST | ONLCR | XTABS)
+#define TTYDEF_LFLAG (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL)
+#define TTYDEF_CFLAG (CREAD | CS7 | PARENB | HUPCL)
+#define TTYDEF_SPEED (B9600)
+#define CTRL(x) (x&037)
+#define CEOF CTRL('d')
-/*
- * Defaults on "first" open.
- */
-#define TTYDEF_IFLAG (BRKINT | ICRNL | IMAXBEL | IXON | IXANY)
-#define TTYDEF_OFLAG (OPOST | ONLCR)
-#define TTYDEF_LFLAG (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL)
-#define TTYDEF_CFLAG (CREAD | CS8 | HUPCL)
-#define TTYDEF_SPEED (B9600)
-
-/*
- * Control Character Defaults
- */
-#define CTRL(x) (x&037)
-#define CEOF CTRL('d')
-#define CEOL 0xff /* XXX avoid _POSIX_VDISABLE */
-#define CERASE 0177
-#define CINTR CTRL('c')
-#define CSTATUS CTRL('t')
-#define CKILL CTRL('u')
-#define CMIN 1
-#define CQUIT 034 /* FS, ^\ */
-#define CSUSP CTRL('z')
-#define CTIME 0
-#define CDSUSP CTRL('y')
-#define CSTART CTRL('q')
-#define CSTOP CTRL('s')
-#define CLNEXT CTRL('v')
-#define CDISCARD CTRL('o')
-#define CWERASE CTRL('w')
-#define CREPRINT CTRL('r')
-#define CEOT CEOF
-/* compat */
-#define CBRK CEOL
-#define CRPRNT CREPRINT
-#define CFLUSH CDISCARD
+#ifdef _POSIX_VDISABLE
+#define CEOL _POSIX_VDISABLE
+#define CSTATUS _POSIX_VDISABLE
+#else
+#define CEOL '\0'
+#define CSTATUS '\0'
+#endif
-/* PROTECTED INCLUSION ENDS HERE */
-#endif /* !_SYS_TTYDEFAULTS_H_ */
+#define CERASE 0177
+#define CINTR CTRL('c')
+#define CKILL CTRL('u')
+#define CMIN 1
+#define CQUIT 034
+#define CSUSP CTRL('z')
+#define CTIME 0
+#define CDSUSP CTRL('y')
+#define CSTART CTRL('q')
+#define CSTOP CTRL('s')
+#define CLNEXT CTRL('v')
+#define CDISCARD CTRL('o')
+#define CWERASE CTRL('w')
+#define CREPRINT CTRL('r')
+#define CEOT CEOF
+#define CBRK CEOL
+#define CRPRNT CREPRINT
+#define CFLUSH CDISCARD
-/*
- * #define TTYDEFCHARS to include an array of default control characters.
- */
-#ifdef TTYDEFCHARS
-static cc_t ttydefchars[NCCS] = {
- CEOF, CEOL, CEOL, CERASE, CWERASE, CKILL, CREPRINT,
- _POSIX_VDISABLE, CINTR, CQUIT, CSUSP, CDSUSP, CSTART, CSTOP, CLNEXT,
- CDISCARD, CMIN, CTIME, CSTATUS, _POSIX_VDISABLE
-};
-#undef TTYDEFCHARS
#endif
diff --git a/system/include/libc/sys/types.h b/system/include/libc/sys/types.h
index fe5d552a..27170f64 100644
--- a/system/include/libc/sys/types.h
+++ b/system/include/libc/sys/types.h
@@ -1,485 +1,91 @@
-/* unified sys/types.h:
- start with sef's sysvi386 version.
- merge go32 version -- a few ifdefs.
- h8300hms, h8300xray, and sysvnecv70 disagree on the following types:
-
- typedef int gid_t;
- typedef int uid_t;
- typedef int dev_t;
- typedef int ino_t;
- typedef int mode_t;
- typedef int caddr_t;
-
- however, these aren't "reasonable" values, the sysvi386 ones make far
- more sense, and should work sufficiently well (in particular, h8300
- doesn't have a stat, and the necv70 doesn't matter.) -- eichin
- */
-
-#ifndef _SYS_TYPES_H
-
-#include <_ansi.h>
-
-#ifndef __INTTYPES_DEFINED__
-#define __INTTYPES_DEFINED__
-
-#include <machine/_types.h>
-
-#if defined(__rtems__) || defined(__XMK__) || defined(EMSCRIPTEN)
-/*
- * The following section is RTEMS specific and is needed to more
- * closely match the types defined in the BSD sys/types.h.
- * This is needed to let the RTEMS/BSD TCP/IP stack compile.
- */
-
-/* deprecated */
-#if ___int8_t_defined
-typedef __uint8_t u_int8_t;
-#endif
-#if ___int16_t_defined
-typedef __uint16_t u_int16_t;
-#endif
-#if ___int32_t_defined
-typedef __uint32_t u_int32_t;
-#endif
-
-#if ___int64_t_defined
-typedef __uint64_t u_int64_t;
-
-/* deprecated */
-typedef __uint64_t u_quad_t;
-typedef __int64_t quad_t;
-typedef quad_t * qaddr_t;
-#endif
-
-#endif
-
-#endif /* ! __INTTYPES_DEFINED */
-
-#ifndef __need_inttypes
-
-#define _SYS_TYPES_H
-#include <sys/_types.h>
-
-#ifdef __i386__
-#if defined (GO32) || defined (__MSDOS__)
-#define __MS_types__
-#endif
-#endif
-
-# include <stddef.h>
-# include <machine/types.h>
-
-/* To ensure the stat struct's layout doesn't change when sizeof(int), etc.
- changes, we assume sizeof short and long never change and have all types
- used to define struct stat use them and not int where possible.
- Where not possible, _ST_INTxx are used. It would be preferable to not have
- such assumptions, but until the extra fluff is necessary, it's avoided.
- No 64 bit targets use stat yet. What to do about them is postponed
- until necessary. */
-#ifdef __GNUC__
-#define _ST_INT32 __attribute__ ((__mode__ (__SI__)))
-#else
-#define _ST_INT32
-#endif
-
-# ifndef _POSIX_SOURCE
-
-# define physadr physadr_t
-# define quad quad_t
-
-#ifndef _BSDTYPES_DEFINED
-/* also defined in mingw/gmon.h and in w32api/winsock[2].h */
-typedef unsigned char u_char;
-typedef unsigned short u_short;
-typedef unsigned int u_int;
-typedef unsigned long u_long;
-#define _BSDTYPES_DEFINED
-#endif
-
-typedef unsigned short ushort; /* System V compatibility */
-typedef unsigned int uint; /* System V compatibility */
-# endif /*!_POSIX_SOURCE */
-
-#ifndef __clock_t_defined
-typedef _CLOCK_T_ clock_t;
-#define __clock_t_defined
-#endif
-
-#ifndef __time_t_defined
-typedef _TIME_T_ time_t;
-#define __time_t_defined
-
-/* Time Value Specification Structures, P1003.1b-1993, p. 261 */
-
-struct timespec {
- time_t tv_sec; /* Seconds */
- long tv_nsec; /* Nanoseconds */
-};
-
-struct itimerspec {
- struct timespec it_interval; /* Timer period */
- struct timespec it_value; /* Timer expiration */
-};
-#endif
-
-typedef long daddr_t;
-typedef char * caddr_t;
-
-#ifndef __CYGWIN__
-#if defined(__MS_types__) || defined(__rtems__) || \
- defined(__sparc__) || defined(__SPU__)
-typedef unsigned long ino_t;
-#else
-typedef unsigned long ino_t; /* XXX Emscripten */
-#endif
-#endif /*__CYGWIN__*/
-
-#if defined(__MS_types__) || defined(EMSCRIPTEN)
-typedef unsigned long vm_offset_t;
-typedef unsigned long vm_size_t;
-
-#define __BIT_TYPES_DEFINED__
-
-// XXX Emscripten: removed types which are already defined, get them from stdint
-#include <stdint.h>
-#endif /* __MS_types__ */
-
-/*
- * All these should be machine specific - right now they are all broken.
- * However, for all of Cygnus' embedded targets, we want them to all be
- * the same. Otherwise things like sizeof (struct stat) might depend on
- * how the file was compiled (e.g. -mint16 vs -mint32, etc.).
- */
-
-#ifndef __CYGWIN__ /* which defines these types in it's own types.h. */
-typedef _off_t off_t;
-typedef __dev_t dev_t;
-typedef __uid_t uid_t;
-typedef __gid_t gid_t;
-typedef __id_t id_t ; /* can hold a uid_t or pid_t */
-#endif
-
-__int32_t major(__uint32_t _x);
-__int32_t minor(__uint32_t _x);
-dev_t makedev(__uint32_t _major, __uint32_t _minor);
-
-#if defined(__XMK__)
-typedef signed char pid_t;
-#else
-typedef int pid_t;
-#endif
-
-#if defined(__rtems__)
-typedef _mode_t mode_t;
-#endif
-
-#ifndef __CYGWIN__
-typedef long key_t;
-#endif
-typedef _ssize_t ssize_t;
-
-#if !defined(__CYGWIN__) && !defined(__rtems__)
-#ifdef __MS_types__
-typedef char * addr_t;
-typedef int mode_t;
-#else
-#if defined (__sparc__) && !defined (__sparc_v9__)
-#ifdef __svr4__
-typedef unsigned long mode_t;
-#else
-typedef unsigned short mode_t;
-#endif
-#else
-typedef unsigned int mode_t _ST_INT32;
+#ifndef _SYS_TYPES_H
+#define _SYS_TYPES_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+
+#define __NEED_ino_t
+#define __NEED_dev_t
+#define __NEED_uid_t
+#define __NEED_gid_t
+#define __NEED_mode_t
+#define __NEED_nlink_t
+#define __NEED_off_t
+#define __NEED_pid_t
+#define __NEED_size_t
+#define __NEED_ssize_t
+#define __NEED_time_t
+#define __NEED_timer_t
+#define __NEED_clockid_t
+
+#define __NEED_int8_t
+#define __NEED_int16_t
+#define __NEED_int32_t
+#define __NEED_int64_t
+
+#define __NEED_blkcnt_t
+#define __NEED_fsblkcnt_t
+#define __NEED_fsfilcnt_t
+
+#define __NEED_id_t
+#define __NEED_key_t
+#define __NEED_clock_t
+#define __NEED_suseconds_t
+#define __NEED_blksize_t
+
+#define __NEED_pthread_t
+#define __NEED_pthread_attr_t
+#define __NEED_pthread_mutexattr_t
+#define __NEED_pthread_condattr_t
+#define __NEED_pthread_rwlockattr_t
+#define __NEED_pthread_barrierattr_t
+#define __NEED_pthread_mutex_t
+#define __NEED_pthread_cond_t
+#define __NEED_pthread_rwlock_t
+#define __NEED_pthread_barrier_t
+#define __NEED_pthread_spinlock_t
+#define __NEED_pthread_key_t
+#define __NEED_pthread_once_t
+#define __NEED_useconds_t
+#define __NEED_u_int64_t
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#define __NEED_register_t
+#endif
+
+#include <bits/alltypes.h>
+
+typedef unsigned char u_int8_t;
+typedef unsigned short u_int16_t;
+typedef unsigned u_int32_t;
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+typedef char *caddr_t;
+typedef unsigned char u_char;
+typedef unsigned short u_short, ushort;
+typedef unsigned u_int, uint;
+typedef unsigned long u_long, ulong;
+typedef long long quad_t;
+typedef unsigned long long u_quad_t;
+#include <endian.h>
+#include <sys/select.h>
+#include <sys/sysmacros.h>
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
+#define blksize64_t blksize_t
+#define blkcnt64_t blkcnt_t
+#define fsblkcnt64_t fsblkcnt_t
+#define fsfilcnt64_t fsfilcnt_t
+#define ino64_t ino_t
+#define off64_t off_t
+#endif
+
+#ifdef __cplusplus
+}
#endif
-#endif /* ! __MS_types__ */
-#endif /*__CYGWIN__*/
-
-typedef unsigned long nlink_t; /* XXX Emscripten */
-
-/* We don't define fd_set and friends if we are compiling POSIX
- source, or if we have included (or may include as indicated
- by __USE_W32_SOCKETS) the W32api winsock[2].h header which
- defines Windows versions of them. Note that a program which
- includes the W32api winsock[2].h header must know what it is doing;
- it must not call the cygwin32 select function.
-*/
-# if !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (__USE_W32_SOCKETS))
-# define _SYS_TYPES_FD_SET
-# define NBBY 8 /* number of bits in a byte */
-/*
- * Select uses bit masks of file descriptors in longs.
- * These macros manipulate such bit fields (the filesystem macros use chars).
- * FD_SETSIZE may be defined by the user, but the default here
- * should be >= NOFILE (param.h).
- */
-# ifndef FD_SETSIZE
-# define FD_SETSIZE 64
-# endif
-
-typedef long fd_mask;
-# define NFDBITS (sizeof (fd_mask) * NBBY) /* bits per mask */
-# ifndef howmany
-# define howmany(x,y) (((x)+((y)-1))/(y))
-# endif
-
-/* We use a macro for fd_set so that including Sockets.h afterwards
- can work. */
-typedef struct _types_fd_set {
- fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)];
-} _types_fd_set;
-
-#define fd_set _types_fd_set
-
-# define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS)))
-# define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS)))
-# define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS)))
-# define FD_ZERO(p) (__extension__ (void)({ \
- size_t __i; \
- char *__tmp = (char *)p; \
- for (__i = 0; __i < sizeof (*(p)); ++__i) \
- *__tmp++ = 0; \
-}))
-
-# endif /* !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (__USE_W32_SOCKETS)) */
-
-#undef __MS_types__
-#undef _ST_INT32
-
-
-#ifndef __clockid_t_defined
-typedef _CLOCKID_T_ clockid_t;
-#define __clockid_t_defined
#endif
-#ifndef __timer_t_defined
-typedef _TIMER_T_ timer_t;
-#define __timer_t_defined
-#endif
-
-typedef unsigned long useconds_t;
-typedef long suseconds_t;
-
-#include <sys/features.h>
-
-
-/* Cygwin will probably never have full posix compliance due to little things
- * like an inability to set the stackaddress. Cygwin is also using void *
- * pointers rather than structs to ensure maximum binary compatability with
- * previous releases.
- * This means that we don't use the types defined here, but rather in
- * <cygwin/types.h>
- */
-#if defined(_POSIX_THREADS) && !defined(__CYGWIN__) || defined(EMSCRIPTEN)
-
-#include <sys/sched.h>
-
-/*
- * 2.5 Primitive System Data Types, P1003.1c/D10, p. 19.
- */
-
-#if defined(__XMK__)
-typedef unsigned int pthread_t; /* identify a thread */
-#else
-typedef __uint32_t pthread_t; /* identify a thread */
-#endif
-
-/* P1003.1c/D10, p. 118-119 */
-#define PTHREAD_SCOPE_PROCESS 0
-#define PTHREAD_SCOPE_SYSTEM 1
-
-/* P1003.1c/D10, p. 111 */
-#define PTHREAD_INHERIT_SCHED 1 /* scheduling policy and associated */
- /* attributes are inherited from */
- /* the calling thread. */
-#define PTHREAD_EXPLICIT_SCHED 2 /* set from provided attribute object */
-
-/* P1003.1c/D10, p. 141 */
-#define PTHREAD_CREATE_DETACHED 0
-#define PTHREAD_CREATE_JOINABLE 1
-
-#if defined(__XMK__) || defined(__rtems__) || defined(EMSCRIPTEN)
-/* The following defines are part of the X/Open System Interface (XSI). */
-
-/* This type of mutex does not detect deadlock. A thread attempting to relock this mutex without first unlocking
- * it shall deadlock. Attempting to unlock a mutex locked by a different thread results in undefined behavior.
- * Attempting to unlock an unlocked mutex results in undefined behavior.
- */
-#define PTHREAD_MUTEX_NORMAL 1
-
-/*
- * This type of mutex provides error checking. A thread attempting to relock this mutex without first unlocking
- * it shall return with an error. A thread attempting to unlock a mutex which another thread has locked shall return
- * with an error. A thread attempting to unlock an unlocked mutex shall return with an error.
- */
-#define PTHREAD_MUTEX_ERRORCHECK 2
-
-/* A thread attempting to relock this mutex without first unlocking it shall succeed in locking the mutex.
- * The relocking deadlock which can occur with mutexes of type PTHREAD_MUTEX_NORMAL cannot occur with this type of mutex.
- * Multiple locks of this mutex shall require the same number of unlocks to release the mutex before another thread can
- * acquire the mutex. A thread attempting to unlock a mutex which another thread has locked shall return with an error.
- * A thread attempting to unlock an unlocked mutex shall return with an error.
- */
-#define PTHREAD_MUTEX_RECURSIVE 3
-
-/* Attempting to recursively lock a mutex of this type results in undefined behavior. Attempting to unlock a
- * mutex of this type which was not locked by the calling thread results in undefined behavior. Attempting to
- * unlock a mutex of this type which is not locked results in undefined behavior. An implementation may map this
- * mutex to one of the other mutex types.
- */
-#define PTHREAD_MUTEX_DEFAULT 4
-
-#endif /* defined(__XMK__) || defined(__rtems__) */
-
-#if defined(__XMK__)
-typedef struct pthread_attr_s {
- int contentionscope;
- struct sched_param schedparam;
- int detachstate;
- void *stackaddr;
- size_t stacksize;
-} pthread_attr_t;
-
-#define PTHREAD_STACK_MIN 200
-
-#else /* !defined(__XMK__) */
-typedef struct {
- int is_initialized;
- void *stackaddr;
- int stacksize;
- int contentionscope;
- int inheritsched;
- int schedpolicy;
- struct sched_param schedparam;
-#if defined(__rtems__)
- size_t guardsize;
-#endif
-
- /* P1003.4b/D8, p. 54 adds cputime_clock_allowed attribute. */
-#if defined(_POSIX_THREAD_CPUTIME)
- int cputime_clock_allowed; /* see time.h */
-#endif
- int detachstate;
-
-} pthread_attr_t;
-
-#endif /* !defined(__XMK__) */
-
-#if defined(_POSIX_THREAD_PROCESS_SHARED) || defined(EMSCRIPTEN)
-/* NOTE: P1003.1c/D10, p. 81 defines following values for process_shared. */
-
-#define PTHREAD_PROCESS_PRIVATE 0 /* visible within only the creating process */
-#define PTHREAD_PROCESS_SHARED 1 /* visible too all processes with access to */
- /* the memory where the resource is */
- /* located */
-#endif
-
-#if defined(_POSIX_THREAD_PRIO_PROTECT)
-/* Mutexes */
-
-/* Values for blocking protocol. */
-
-#define PTHREAD_PRIO_NONE 0
-#define PTHREAD_PRIO_INHERIT 1
-#define PTHREAD_PRIO_PROTECT 2
-#endif
-
-#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES)
-
-/* Values for mutex type */
-
-#define PTHREAD_MUTEX_NORMAL 0
-#define PTHREAD_MUTEX_RECURSIVE 1
-#define PTHREAD_MUTEX_ERRORCHECK 2
-#define PTHREAD_MUTEX_DEFAULT 3
-
-#endif
-
-#if defined(__XMK__)
-typedef unsigned int pthread_mutex_t; /* identify a mutex */
-
-typedef struct {
- int type;
-} pthread_mutexattr_t;
-
-#else /* !defined(__XMK__) */
-typedef __uint32_t pthread_mutex_t; /* identify a mutex */
-
-typedef struct {
- int is_initialized;
-#if defined(_POSIX_THREAD_PROCESS_SHARED)
- int process_shared; /* allow mutex to be shared amongst processes */
-#endif
-#if defined(_POSIX_THREAD_PRIO_PROTECT)
- int prio_ceiling;
- int protocol;
-#endif
-#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES)
- int type;
-#endif
- int recursive;
-} pthread_mutexattr_t;
-#endif /* !defined(__XMK__) */
-
-/* Condition Variables */
-
-typedef __uint32_t pthread_cond_t; /* identify a condition variable */
-
-typedef struct {
- int is_initialized;
-#if defined(_POSIX_THREAD_PROCESS_SHARED)
- int process_shared; /* allow this to be shared amongst processes */
-#endif
-} pthread_condattr_t; /* a condition attribute object */
-
-/* Keys */
-
-typedef __uint32_t pthread_key_t; /* thread-specific data keys */
-
-typedef struct {
- int is_initialized; /* is this structure initialized? */
- int init_executed; /* has the initialization routine been run? */
-} pthread_once_t; /* dynamic package initialization */
-#else
-#if defined (__CYGWIN__)
-#include <cygwin/types.h>
-#endif
-#endif /* defined(_POSIX_THREADS) */
-
-/* POSIX Barrier Types */
-
-#if defined(_POSIX_BARRIERS)
-typedef __uint32_t pthread_barrier_t; /* POSIX Barrier Object */
-typedef struct {
- int is_initialized; /* is this structure initialized? */
-#if defined(_POSIX_THREAD_PROCESS_SHARED)
- int process_shared; /* allow this to be shared amongst processes */
-#endif
-} pthread_barrierattr_t;
-#endif /* defined(_POSIX_BARRIERS) */
-
-/* POSIX Spin Lock Types */
-
-#if defined(_POSIX_SPIN_LOCKS)
-typedef __uint32_t pthread_spinlock_t; /* POSIX Spin Lock Object */
-#endif /* defined(_POSIX_SPIN_LOCKS) */
-
-/* POSIX Reader/Writer Lock Types */
-
-#if !defined (__CYGWIN__)
-#if defined(_POSIX_READER_WRITER_LOCKS)
-typedef __uint32_t pthread_rwlock_t; /* POSIX RWLock Object */
-typedef struct {
- int is_initialized; /* is this structure initialized? */
-#if defined(_POSIX_THREAD_PROCESS_SHARED)
- int process_shared; /* allow this to be shared amongst processes */
-#endif
-} pthread_rwlockattr_t;
-#endif /* defined(_POSIX_READER_WRITER_LOCKS) */
-#endif /* __CYGWIN__ */
-
-#endif /* !__need_inttypes */
-
-#undef __need_inttypes
-#endif /* _SYS_TYPES_H */
diff --git a/system/include/libc/sys/ucontext.h b/system/include/libc/sys/ucontext.h
new file mode 100644
index 00000000..5fdbd63d
--- /dev/null
+++ b/system/include/libc/sys/ucontext.h
@@ -0,0 +1 @@
+#include <ucontext.h>
diff --git a/system/include/libc/sys/uio.h b/system/include/libc/sys/uio.h
new file mode 100644
index 00000000..00f73a2f
--- /dev/null
+++ b/system/include/libc/sys/uio.h
@@ -0,0 +1,48 @@
+#ifndef _SYS_UIO_H
+#define _SYS_UIO_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+
+#define __NEED_size_t
+#define __NEED_ssize_t
+#define __NEED_struct_iovec
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#define __NEED_off_t
+#endif
+
+#ifdef _GNU_SOURCE
+#define __NEED_pid_t
+#endif
+
+#include <bits/alltypes.h>
+
+#define UIO_MAXIOV 1024
+
+ssize_t readv (int, const struct iovec *, int);
+ssize_t writev (int, const struct iovec *, int);
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+ssize_t preadv (int, const struct iovec *, int, off_t);
+ssize_t pwritev (int, const struct iovec *, int, off_t);
+#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
+#define preadv64 preadv
+#define pwritev64 pwritev
+#define off64_t off_t
+#endif
+#endif
+
+#ifdef _GNU_SOURCE
+ssize_t process_vm_writev(pid_t, const struct iovec *, unsigned long, const struct iovec *, unsigned long, unsigned long);
+ssize_t process_vm_readv(pid_t, const struct iovec *, unsigned long, const struct iovec *, unsigned long, unsigned long);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/un.h b/system/include/libc/sys/un.h
new file mode 100644
index 00000000..7494f1a3
--- /dev/null
+++ b/system/include/libc/sys/un.h
@@ -0,0 +1,32 @@
+#ifndef _SYS_UN_H
+#define _SYS_UN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+
+#define __NEED_sa_family_t
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#define __NEED_size_t
+#endif
+
+#include <bits/alltypes.h>
+
+struct sockaddr_un
+{
+ sa_family_t sun_family;
+ char sun_path[108];
+};
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+size_t strlen(const char *);
+#define SUN_LEN(s) (2+strlen((s)->sun_path))
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/unistd.h b/system/include/libc/sys/unistd.h
deleted file mode 100644
index a4219d4d..00000000
--- a/system/include/libc/sys/unistd.h
+++ /dev/null
@@ -1,513 +0,0 @@
-#ifndef _SYS_UNISTD_H
-#define _SYS_UNISTD_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <_ansi.h>
-#include <sys/types.h>
-#include <sys/_types.h>
-#define __need_size_t
-#define __need_ptrdiff_t
-#include <stddef.h>
-
-extern char **environ;
-
-void _EXFUN(_exit, (int __status ) _ATTRIBUTE(noreturn));
-
-int _EXFUN(access,(const char *__path, int __amode ));
-unsigned _EXFUN(alarm, (unsigned __secs ));
-int _EXFUN(chdir, (const char *__path ));
-int _EXFUN(chmod, (const char *__path, mode_t __mode ));
-#if !defined(__INSIDE_CYGWIN__)
-int _EXFUN(chown, (const char *__path, uid_t __owner, gid_t __group ));
-#endif
-#if defined(__CYGWIN__) || defined(__rtems__)
-int _EXFUN(chroot, (const char *__path ));
-#endif
-int _EXFUN(close, (int __fildes ));
-#if 1 /* XXX Emscripten defined(__CYGWIN__) */
-size_t _EXFUN(confstr, (int __name, char *__buf, size_t __len));
-#endif
-char * _EXFUN(ctermid, (char *__s ));
-char * _EXFUN(cuserid, (char *__s ));
-#if defined(__CYGWIN__)
-int _EXFUN(daemon, (int nochdir, int noclose));
-#endif
-int _EXFUN(dup, (int __fildes ));
-int _EXFUN(dup2, (int __fildes, int __fildes2 ));
-#if defined(__CYGWIN__)
-int _EXFUN(dup3, (int __fildes, int __fildes2, int flags));
-int _EXFUN(eaccess, (const char *__path, int __mode));
-void _EXFUN(endusershell, (void));
-int _EXFUN(euidaccess, (const char *__path, int __mode));
-#endif
-int _EXFUN(execl, (const char *__path, const char *, ... ));
-int _EXFUN(execle, (const char *__path, const char *, ... ));
-int _EXFUN(execlp, (const char *__file, const char *, ... ));
-int _EXFUN(execv, (const char *__path, char * const __argv[] ));
-int _EXFUN(execve, (const char *__path, char * const __argv[], char * const __envp[] ));
-int _EXFUN(execvp, (const char *__file, char * const __argv[] ));
-#if defined(__CYGWIN__)
-int _EXFUN(execvpe, (const char *__file, char * const __argv[], char * const __envp[] ));
-int _EXFUN(faccessat, (int __dirfd, const char *__path, int __mode, int __flags));
-#endif
-#if defined(EMSCRIPTEN) || defined(__CYGWIN__) || defined(__rtems__) || defined(__SPU__)
-int _EXFUN(fchdir, (int __fildes));
-#endif
-int _EXFUN(fchmod, (int __fildes, mode_t __mode ));
-#if !defined(__INSIDE_CYGWIN__)
-int _EXFUN(fchown, (int __fildes, uid_t __owner, gid_t __group ));
-#endif
-#if defined(__CYGWIN__)
-int _EXFUN(fchownat, (int __dirfd, const char *__path, uid_t __owner, gid_t __group, int __flags));
-int _EXFUN(fexecve, (int __fd, char * const __argv[], char * const __envp[] ));
-#endif
-pid_t _EXFUN(fork, (void ));
-long _EXFUN(fpathconf, (int __fd, int __name ));
-int _EXFUN(fsync, (int __fd));
-int _EXFUN(fdatasync, (int __fd));
-char * _EXFUN(getcwd, (char *__buf, size_t __size ));
-#if defined(__CYGWIN__)
-int _EXFUN(getdomainname ,(char *__name, size_t __len));
-#endif
-#if !defined(__INSIDE_CYGWIN__)
-gid_t _EXFUN(getegid, (void ));
-uid_t _EXFUN(geteuid, (void ));
-gid_t _EXFUN(getgid, (void ));
-#endif
-int _EXFUN(getgroups, (int __gidsetsize, gid_t __grouplist[] ));
-#if defined(EMSCRIPTEN) || defined(__CYGWIN__)
-long _EXFUN(gethostid, (void));
-#endif
-char * _EXFUN(getlogin, (void ));
-#if defined(EMSCRIPTEN) || defined(_POSIX_THREAD_SAFE_FUNCTIONS)
-int _EXFUN(getlogin_r, (char *name, size_t namesize) );
-#endif
-char * _EXFUN(getpass, (const char *__prompt));
-int _EXFUN(getpagesize, (void));
-#if defined(__CYGWIN__)
-int _EXFUN(getpeereid, (int, uid_t *, gid_t *));
-#endif
-pid_t _EXFUN(getpgid, (pid_t));
-pid_t _EXFUN(getpgrp, (void ));
-pid_t _EXFUN(getpid, (void ));
-pid_t _EXFUN(getppid, (void ));
-#if defined(EMSCRIPTEN) || defined(__CYGWIN__) || defined(__rtems__)
-pid_t _EXFUN(getsid, (pid_t));
-#endif
-#if defined(EMSCRIPTEN) || !defined(__INSIDE_CYGWIN__)
-uid_t _EXFUN(getuid, (void ));
-#endif
-#if defined(EMSCRIPTEN) || defined(__CYGWIN__)
-char * _EXFUN(getusershell, (void));
-int _EXFUN(iruserok, (unsigned long raddr, int superuser, const char *ruser, const char *luser));
-#endif
-int _EXFUN(isatty, (int __fildes ));
-#if !defined(__INSIDE_CYGWIN__)
-int _EXFUN(lchown, (const char *__path, uid_t __owner, gid_t __group ));
-#endif
-int _EXFUN(link, (const char *__path1, const char *__path2 ));
-#if defined(__CYGWIN__)
-int _EXFUN(linkat, (int __dirfd1, const char *__path1, int __dirfd2, const char *__path2, int __flags ));
-#endif
-int _EXFUN(nice, (int __nice_value ));
-#if !defined(__INSIDE_CYGWIN__)
-off_t _EXFUN(lseek, (int __fildes, off_t __offset, int __whence ));
-off_t _EXFUN(lseek64, (int __fildes, off_t __offset, int __whence )); /* XXX Emscripten */
-#endif
-#if defined(EMSCRIPTEN) || defined(__SPU__) || defined(__CYGWIN__)
-#define F_ULOCK 0
-#define F_LOCK 1
-#define F_TLOCK 2
-#define F_TEST 3
-int _EXFUN(lockf, (int __fd, int __cmd, off_t __len));
-#endif
-long _EXFUN(pathconf, (const char *__path, int __name ));
-int _EXFUN(pause, (void ));
-#ifdef __CYGWIN__
-int _EXFUN(pthread_atfork, (void (*)(void), void (*)(void), void (*)(void)));
-#endif
-int _EXFUN(pipe, (int __fildes[2] ));
-#ifdef __CYGWIN__
-int _EXFUN(pipe2, (int __fildes[2], int flags));
-#endif
-ssize_t _EXFUN(pread, (int __fd, void *__buf, size_t __nbytes, off_t __offset));
-ssize_t _EXFUN(pwrite, (int __fd, const void *__buf, size_t __nbytes, off_t __offset));
-_READ_WRITE_RETURN_TYPE _EXFUN(read, (int __fd, void *__buf, size_t __nbyte ));
-#if defined(__CYGWIN__)
-int _EXFUN(rresvport, (int *__alport));
-int _EXFUN(revoke, (char *__path));
-#endif
-int _EXFUN(rmdir, (const char *__path ));
-#if defined(__CYGWIN__)
-int _EXFUN(ruserok, (const char *rhost, int superuser, const char *ruser, const char *luser));
-#endif
-void * _EXFUN(sbrk, (ptrdiff_t __incr));
-#if !defined(__INSIDE_CYGWIN__)
-#if defined(EMSCRIPTEN) || defined(__CYGWIN__) || defined(__rtems__)
-int _EXFUN(setegid, (gid_t __gid ));
-int _EXFUN(seteuid, (uid_t __uid ));
-#endif
-int _EXFUN(setgid, (gid_t __gid ));
-#endif
-#if defined(EMSCRIPTEN) || defined(__CYGWIN__)
-int _EXFUN(setgroups, (int ngroups, const gid_t *gidset));
-#endif
-int _EXFUN(setpgid, (pid_t __pid, pid_t __pgid ));
-int _EXFUN(setpgrp, (void ));
-#if defined(EMSCRIPTEN) || defined(__CYGWIN__) && !defined(__INSIDE_CYGWIN__)
-int _EXFUN(setregid, (gid_t __rgid, gid_t __egid));
-int _EXFUN(setreuid, (uid_t __ruid, uid_t __euid));
-#endif
-pid_t _EXFUN(setsid, (void ));
-#if !defined(__INSIDE_CYGWIN__)
-int _EXFUN(setuid, (uid_t __uid ));
-#endif
-#if defined(__CYGWIN__)
-void _EXFUN(setusershell, (void));
-#endif
-unsigned _EXFUN(sleep, (unsigned int __seconds ));
-void _EXFUN(swab, (const void *, void *, ssize_t));
-long _EXFUN(sysconf, (int __name ));
-pid_t _EXFUN(tcgetpgrp, (int __fildes ));
-int _EXFUN(tcsetpgrp, (int __fildes, pid_t __pgrp_id ));
-char * _EXFUN(ttyname, (int __fildes ));
-#if defined(EMSCRIPTEN) || defined(__CYGWIN__) || defined(__rtems__)
-int _EXFUN(ttyname_r, (int, char *, size_t));
-#endif
-int _EXFUN(unlink, (const char *__path ));
-int _EXFUN(usleep, (useconds_t __useconds));
-int _EXFUN(vhangup, (void ));
-_READ_WRITE_RETURN_TYPE _EXFUN(write, (int __fd, const void *__buf, size_t __nbyte ));
-
-#ifdef __CYGWIN__
-# define __UNISTD_GETOPT__
-# include <getopt.h>
-# undef __UNISTD_GETOPT__
-#else
-extern char *optarg; /* getopt(3) external variables */
-extern int optind, opterr, optopt;
-int getopt(int, char * const [], const char *);
-extern int optreset; /* getopt(3) external variable */
-#endif
-
-#ifndef _POSIX_SOURCE
-pid_t _EXFUN(vfork, (void ));
-#endif /* _POSIX_SOURCE */
-
-#ifdef _COMPILING_NEWLIB
-/* Provide prototypes for most of the _<systemcall> names that are
- provided in newlib for some compilers. */
-int _EXFUN(_close, (int __fildes ));
-pid_t _EXFUN(_fork, (void ));
-pid_t _EXFUN(_getpid, (void ));
-int _EXFUN(_isatty, (int __fildes ));
-int _EXFUN(_link, (const char *__path1, const char *__path2 ));
-_off_t _EXFUN(_lseek, (int __fildes, _off_t __offset, int __whence ));
-#ifdef __LARGE64_FILES
-_off64_t _EXFUN(_lseek64, (int __filedes, _off64_t __offset, int __whence ));
-#endif
-_READ_WRITE_RETURN_TYPE _EXFUN(_read, (int __fd, void *__buf, size_t __nbyte ));
-void * _EXFUN(_sbrk, (ptrdiff_t __incr));
-int _EXFUN(_unlink, (const char *__path ));
-_READ_WRITE_RETURN_TYPE _EXFUN(_write, (int __fd, const void *__buf, size_t __nbyte ));
-int _EXFUN(_execve, (const char *__path, char * const __argv[], char * const __envp[] ));
-#endif
-
-#if defined(__CYGWIN__) || defined(__rtems__) || defined(__sh__) || defined(__SPU__) || defined(EMSCRIPTEN)
-#if !defined(__INSIDE_CYGWIN__)
-int _EXFUN(ftruncate, (int __fd, off_t __length));
-int _EXFUN(truncate, (const char *, off_t __length));
-#endif
-#endif
-
-#if defined(EMSCRIPTEN) || defined(__CYGWIN__) || defined(__rtems__)
-int _EXFUN(getdtablesize, (void));
-int _EXFUN(setdtablesize, (int));
-useconds_t _EXFUN(ualarm, (useconds_t __useconds, useconds_t __interval));
-#if !(defined (_WINSOCK_H) || defined (__USE_W32_SOCKETS))
-/* winsock[2].h defines as __stdcall, and with int as 2nd arg */
- int _EXFUN(gethostname, (char *__name, size_t __len));
-#endif
-char * _EXFUN(mktemp, (char *));
-#endif
-
-#if defined(EMSCRIPTEN) || defined(__CYGWIN__) || defined(__SPU__) || defined(__rtems__)
-void _EXFUN(sync, (void));
-#endif
-
-ssize_t _EXFUN(readlink, (const char *__path, char *__buf, size_t __buflen));
-#if defined(__CYGWIN__)
-ssize_t _EXFUN(readlinkat, (int __dirfd1, const char *__path, char *__buf, size_t __buflen));
-#endif
-int _EXFUN(symlink, (const char *__name1, const char *__name2));
-#if defined(__CYGWIN__)
-int _EXFUN(symlinkat, (const char *, int, const char *));
-int _EXFUN(unlinkat, (int, const char *, int));
-#endif
-
-#define F_OK 0
-#define R_OK 4
-#define W_OK 2
-#define X_OK 1
-
-# define SEEK_SET 0
-# define SEEK_CUR 1
-# define SEEK_END 2
-
-#include <sys/features.h>
-
-/* XXX Emscripten: start these at 1, we can use pointers as equals to file descriptors */
-#define STDIN_FILENO 1 /* standard input file descriptor */
-#define STDOUT_FILENO 2 /* standard output file descriptor */
-#define STDERR_FILENO 3 /* standard error file descriptor */
-
-/*
- * sysconf values per IEEE Std 1003.1, 2008 Edition
- */
-
-#define _SC_ARG_MAX 0
-#define _SC_CHILD_MAX 1
-#define _SC_CLK_TCK 2
-#define _SC_NGROUPS_MAX 3
-#define _SC_OPEN_MAX 4
-#define _SC_JOB_CONTROL 5
-#define _SC_SAVED_IDS 6
-#define _SC_VERSION 7
-#define _SC_PAGESIZE 8
-#define _SC_PAGE_SIZE _SC_PAGESIZE
-/* These are non-POSIX values we accidentally introduced in 2000 without
- guarding them. Keeping them unguarded for backward compatibility. */
-#define _SC_NPROCESSORS_CONF 9
-#define _SC_NPROCESSORS_ONLN 10
-#define _SC_PHYS_PAGES 11
-#define _SC_AVPHYS_PAGES 12
-/* End of non-POSIX values. */
-#define _SC_MQ_OPEN_MAX 13
-#define _SC_MQ_PRIO_MAX 14
-#define _SC_RTSIG_MAX 15
-#define _SC_SEM_NSEMS_MAX 16
-#define _SC_SEM_VALUE_MAX 17
-#define _SC_SIGQUEUE_MAX 18
-#define _SC_TIMER_MAX 19
-#define _SC_TZNAME_MAX 20
-#define _SC_ASYNCHRONOUS_IO 21
-#define _SC_FSYNC 22
-#define _SC_MAPPED_FILES 23
-#define _SC_MEMLOCK 24
-#define _SC_MEMLOCK_RANGE 25
-#define _SC_MEMORY_PROTECTION 26
-#define _SC_MESSAGE_PASSING 27
-#define _SC_PRIORITIZED_IO 28
-#define _SC_REALTIME_SIGNALS 29
-#define _SC_SEMAPHORES 30
-#define _SC_SHARED_MEMORY_OBJECTS 199 /* XXX Emscripten changed 31 to 199 */
-#define _SC_SYNCHRONIZED_IO 32
-#define _SC_TIMERS 33
-#define _SC_AIO_LISTIO_MAX 34
-#define _SC_AIO_MAX 35
-#define _SC_AIO_PRIO_DELTA_MAX 36
-#define _SC_DELAYTIMER_MAX 37
-#define _SC_THREAD_KEYS_MAX 38
-#define _SC_THREAD_STACK_MIN 39
-#define _SC_THREAD_THREADS_MAX 40
-#define _SC_TTY_NAME_MAX 41
-#define _SC_THREADS 42
-#define _SC_THREAD_ATTR_STACKADDR 43
-#define _SC_THREAD_ATTR_STACKSIZE 44
-#define _SC_THREAD_PRIORITY_SCHEDULING 45
-#define _SC_THREAD_PRIO_INHERIT 46
-/* _SC_THREAD_PRIO_PROTECT was _SC_THREAD_PRIO_CEILING in early drafts */
-#define _SC_THREAD_PRIO_PROTECT 47
-#define _SC_THREAD_PRIO_CEILING _SC_THREAD_PRIO_PROTECT
-#define _SC_THREAD_PROCESS_SHARED 48
-#define _SC_THREAD_SAFE_FUNCTIONS 49
-#define _SC_GETGR_R_SIZE_MAX 50
-#define _SC_GETPW_R_SIZE_MAX 51
-#define _SC_LOGIN_NAME_MAX 52
-#define _SC_THREAD_DESTRUCTOR_ITERATIONS 53
-#define _SC_ADVISORY_INFO 54
-#define _SC_ATEXIT_MAX 55
-#define _SC_BARRIERS 56
-#define _SC_BC_BASE_MAX 57
-#define _SC_BC_DIM_MAX 58
-#define _SC_BC_SCALE_MAX 59
-#define _SC_BC_STRING_MAX 60
-#define _SC_CLOCK_SELECTION 61
-#define _SC_COLL_WEIGHTS_MAX 62
-#define _SC_CPUTIME 63
-#define _SC_EXPR_NEST_MAX 64
-#define _SC_HOST_NAME_MAX 65
-#define _SC_IOV_MAX 66
-#define _SC_IPV6 67
-#define _SC_LINE_MAX 68
-#define _SC_MONOTONIC_CLOCK 69
-#define _SC_RAW_SOCKETS 70
-#define _SC_READER_WRITER_LOCKS 71
-#define _SC_REGEXP 72
-#define _SC_RE_DUP_MAX 73
-#define _SC_SHELL 74
-#define _SC_SPAWN 75
-#define _SC_SPIN_LOCKS 76
-#define _SC_SPORADIC_SERVER 77
-#define _SC_SS_REPL_MAX 78
-#define _SC_SYMLOOP_MAX 79
-#define _SC_THREAD_CPUTIME 80
-#define _SC_THREAD_SPORADIC_SERVER 81
-#define _SC_TIMEOUTS 82
-#define _SC_TRACE 83
-#define _SC_TRACE_EVENT_FILTER 84
-#define _SC_TRACE_EVENT_NAME_MAX 85
-#define _SC_TRACE_INHERIT 86
-#define _SC_TRACE_LOG 87
-#define _SC_TRACE_NAME_MAX 88
-#define _SC_TRACE_SYS_MAX 89
-#define _SC_TRACE_USER_EVENT_MAX 90
-#define _SC_TYPED_MEMORY_OBJECTS 91
-#define _SC_V7_ILP32_OFF32 92
-#define _SC_V6_ILP32_OFF32 _SC_V7_ILP32_OFF32
-#define _SC_XBS5_ILP32_OFF32 _SC_V7_ILP32_OFF32
-#define _SC_V7_ILP32_OFFBIG 93
-#define _SC_V6_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
-#define _SC_XBS5_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
-#define _SC_V7_LP64_OFF64 94
-#define _SC_V6_LP64_OFF64 _SC_V7_LP64_OFF64
-#define _SC_XBS5_LP64_OFF64 _SC_V7_LP64_OFF64
-#define _SC_V7_LPBIG_OFFBIG 95
-#define _SC_V6_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
-#define _SC_XBS5_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
-#define _SC_XOPEN_CRYPT 96
-#define _SC_XOPEN_ENH_I18N 97
-#define _SC_XOPEN_LEGACY 98
-#define _SC_XOPEN_REALTIME 99
-#define _SC_STREAM_MAX 100
-#define _SC_PRIORITY_SCHEDULING 101
-#define _SC_XOPEN_REALTIME_THREADS 102
-#define _SC_XOPEN_SHM 103
-#define _SC_XOPEN_STREAMS 104
-#define _SC_XOPEN_UNIX 105
-#define _SC_XOPEN_VERSION 106
-#define _SC_2_CHAR_TERM 107
-#define _SC_2_C_BIND 108
-#define _SC_2_C_DEV 109
-#define _SC_2_FORT_DEV 110
-#define _SC_2_FORT_RUN 111
-#define _SC_2_LOCALEDEF 112
-#define _SC_2_PBS 113
-#define _SC_2_PBS_ACCOUNTING 114
-#define _SC_2_PBS_CHECKPOINT 115
-#define _SC_2_PBS_LOCATE 116
-#define _SC_2_PBS_MESSAGE 117
-#define _SC_2_PBS_TRACK 118
-#define _SC_2_SW_DEV 119
-#define _SC_2_UPE 120
-#define _SC_2_VERSION 121
-#define _SC_THREAD_ROBUST_PRIO_INHERIT 122
-#define _SC_THREAD_ROBUST_PRIO_PROTECT 123
-#define _SC_XOPEN_UUCP 124
-
-/*
- * pathconf values per IEEE Std 1003.1, 2008 Edition
- */
-
-#define _PC_LINK_MAX 0
-#define _PC_MAX_CANON 1
-#define _PC_MAX_INPUT 2
-#define _PC_NAME_MAX 3
-#define _PC_PATH_MAX 4
-#define _PC_PIPE_BUF 5
-#define _PC_CHOWN_RESTRICTED 6
-#define _PC_NO_TRUNC 7
-#define _PC_VDISABLE 8
-#define _PC_ASYNC_IO 9
-#define _PC_PRIO_IO 10
-#define _PC_SYNC_IO 11
-#define _PC_FILESIZEBITS 12
-#define _PC_2_SYMLINKS 13
-#define _PC_SYMLINK_MAX 14
-#define _PC_ALLOC_SIZE_MIN 15
-#define _PC_REC_INCR_XFER_SIZE 16
-#define _PC_REC_MAX_XFER_SIZE 17
-#define _PC_REC_MIN_XFER_SIZE 18
-#define _PC_REC_XFER_ALIGN 19
-#define _PC_TIMESTAMP_RESOLUTION 20
-#ifdef __CYGWIN__
-/* Ask for POSIX permission bits support. */
-#define _PC_POSIX_PERMISSIONS 90
-/* Ask for full POSIX permission support including uid/gid settings. */
-#define _PC_POSIX_SECURITY 91
-#endif
-/* XXX Emscripten */
-#define _PC_SOCK_MAXBUF 100
-
-/*
- * confstr values per IEEE Std 1003.1, 2004 Edition
- */
-
-#if 1 /* XXX Emscripten: Enable these def __CYGWIN__ / * Only defined on Cygwin for now. */
-#define _CS_PATH 0
-#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS 1
-#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
-#define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
-#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS 2
-#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
-#define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
-#define _CS_POSIX_V7_ILP32_OFF32_LIBS 3
-#define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
-#define _CS_XBS5_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
-#define _CS_XBS5_ILP32_OFF32_LINTFLAGS 4
-#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS 5
-#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
-#define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
-#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS 6
-#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
-#define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
-#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS 7
-#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
-#define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
-#define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS 8
-#define _CS_POSIX_V7_LP64_OFF64_CFLAGS 9
-#define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
-#define _CS_XBS5_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
-#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS 10
-#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
-#define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
-#define _CS_POSIX_V7_LP64_OFF64_LIBS 11
-#define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
-#define _CS_XBS5_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
-#define _CS_XBS5_LP64_OFF64_LINTFLAGS 12
-#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS 13
-#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
-#define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
-#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS 14
-#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
-#define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
-#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS 15
-#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
-#define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
-#define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS 16
-#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS 17
-#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
-#define _CS_POSIX_V7_THREADS_CFLAGS 18
-#define _CS_POSIX_V7_THREADS_LDFLAGS 19
-#define _CS_V7_ENV 20
-
-/* XXX Emscripten: remove self-ref, and add two additional ones */
-/* #define _CS_V6_ENV _CS_V6_ENV */
-#define _CS_GNU_LIBC_VERSION 42
-#define _CS_GNU_LIBPTHREAD_VERSION 43
-char *crypt(const char *key, const char *salt);
-void encrypt(char block[64], int edflag);
-
-#endif
-
-#ifndef __CYGWIN__
-# define MAXPATHLEN 1024
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* _SYS_UNISTD_H */
diff --git a/system/include/libc/sys/user.h b/system/include/libc/sys/user.h
new file mode 100644
index 00000000..96a03400
--- /dev/null
+++ b/system/include/libc/sys/user.h
@@ -0,0 +1,16 @@
+#ifndef _SYS_USER_H
+#define _SYS_USER_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <limits.h>
+#include <stdint.h>
+#include <unistd.h>
+
+#include <bits/user.h>
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/system/include/libc/sys/utime.h b/system/include/libc/sys/utime.h
deleted file mode 100644
index 07fa6c2a..00000000
--- a/system/include/libc/sys/utime.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef _SYS_UTIME_H
-#define _SYS_UTIME_H
-
-/* This is a dummy <sys/utime.h> file, not customized for any
- particular system. If there is a utime.h in libc/sys/SYSDIR/sys,
- it will override this one. */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <time.h> /* XXX Emscripten */
-
-struct utimbuf
-{
- time_t actime;
- time_t modtime;
-};
-
-int utime(const char *path, const struct utimbuf *times); /* XXX Emscripten */
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* _SYS_UTIME_H */
diff --git a/system/include/libc/sys/utsname.h b/system/include/libc/sys/utsname.h
new file mode 100644
index 00000000..6b9ea970
--- /dev/null
+++ b/system/include/libc/sys/utsname.h
@@ -0,0 +1,30 @@
+#ifndef _SYS_UTSNAME_H
+#define _SYS_UTSNAME_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <features.h>
+
+struct utsname
+{
+ char sysname[65];
+ char nodename[65];
+ char release[65];
+ char version[65];
+ char machine[65];
+#ifdef _GNU_SOURCE
+ char domainname[65];
+#else
+ char __domainname[65];
+#endif
+};
+
+int uname (struct utsname *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/system/include/libc/sys/vfs.h b/system/include/libc/sys/vfs.h
new file mode 100644
index 00000000..a899db27
--- /dev/null
+++ b/system/include/libc/sys/vfs.h
@@ -0,0 +1 @@
+#include <sys/statfs.h>
diff --git a/system/include/libc/sys/wait.h b/system/include/libc/sys/wait.h
index 0e4a3394..a7ad7cd1 100644
--- a/system/include/libc/sys/wait.h
+++ b/system/include/libc/sys/wait.h
@@ -1,40 +1,55 @@
-#ifndef _SYS_WAIT_H
-#define _SYS_WAIT_H
-
+#ifndef _SYS_WAIT_H
+#define _SYS_WAIT_H
#ifdef __cplusplus
extern "C" {
#endif
-#include <sys/types.h>
+#include <features.h>
-#define WNOHANG 1
-#define WUNTRACED 2
+#include <signal.h>
-/* A status looks like:
- <2 bytes info> <2 bytes code>
+#define __NEED_pid_t
+#define __NEED_id_t
+#include <bits/alltypes.h>
- <code> == 0, child has exited, info is the exit value
- <code> == 1..7e, child has exited, info is the signal number.
- <code> == 7f, child has stopped, info was the signal number.
- <code> == 80, there was a core dump.
-*/
-
-#define WIFEXITED(w) (((w) & 0xff) == 0)
-#define WIFSIGNALED(w) (((w) & 0x7f) > 0 && (((w) & 0x7f) < 0x7f))
-#define WIFSTOPPED(w) (((w) & 0xff) == 0x7f)
-#define WEXITSTATUS(w) (((w) >> 8) & 0xff)
-#define WTERMSIG(w) ((w) & 0x7f)
-#define WSTOPSIG WEXITSTATUS
+typedef enum {
+ P_ALL = 0,
+ P_PID = 1,
+ P_PGID = 2
+} idtype_t;
pid_t wait (int *);
-pid_t waitpid (pid_t, int *, int);
+int waitid (idtype_t, id_t, siginfo_t *, int);
+pid_t waitpid (pid_t, int *, int );
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#include <sys/resource.h>
+pid_t wait3 (int *, int, struct rusage *);
+pid_t wait4 (pid_t, int *, int, struct rusage *);
+#endif
+
+#define WNOHANG 1
+#define WUNTRACED 2
-/* Provide prototypes for most of the _<systemcall> names that are
- provided in newlib for some compilers. */
-pid_t _wait (int *);
+#define WSTOPPED 2
+#define WEXITED 4
+#define WCONTINUED 8
+#define WNOWAIT 0x1000000
+
+#define __WNOTHREAD 0x20000000
+#define __WALL 0x40000000
+#define __WCLONE 0x80000000
+
+#define WEXITSTATUS(s) (((s) & 0xff00) >> 8)
+#define WTERMSIG(s) ((s) & 0x7f)
+#define WSTOPSIG(s) WEXITSTATUS(s)
+#define WCOREDUMP(s) ((s) & 0x80)
+#define WIFEXITED(s) (!WTERMSIG(s))
+#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001)>>8) > 0x7f00)
+#define WIFSIGNALED(s) (((s)&0xffff)-1 < 0xffu)
+#define WIFCONTINUED(s) ((s) == 0xffff)
#ifdef __cplusplus
-};
+}
#endif
-
#endif
diff --git a/system/include/libc/sys/xattr.h b/system/include/libc/sys/xattr.h
new file mode 100644
index 00000000..f926493c
--- /dev/null
+++ b/system/include/libc/sys/xattr.h
@@ -0,0 +1,30 @@
+#ifndef _SYS_XATTR_H
+#define _SYS_XATTR_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define __NEED_ssize_t
+#define __NEED_size_t
+#include <bits/alltypes.h>
+
+#define XATTR_CREATE 1
+#define XATTR_REPLACE 2
+
+ssize_t getxattr(const char *, const char *, void *, size_t);
+ssize_t lgetxattr(const char *, const char *, void *, size_t);
+ssize_t fgetxattr(int filedes, const char *, void *, size_t);
+ssize_t listxattr(const char *, char *, size_t);
+ssize_t llistxattr(const char *, char *, size_t);
+ssize_t flistxattr(int filedes, char *, size_t);
+int setxattr(const char *, const char *, const void *, size_t, int);
+int lsetxattr(const char *, const char *, const void *, size_t, int);
+int fsetxattr(int, const char *, const void *, size_t, int);
+int removexattr(const char *, const char *);
+int lremovexattr(const char *, const char *);
+int fremovexattr(int, const char *);
+
+#ifdef __cplusplus
+}
+#endif
+#endif