about summary refs log tree commit diff
path: root/sysdeps/mach/hurd/bits
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/mach/hurd/bits')
-rw-r--r--sysdeps/mach/hurd/bits/errno.h316
-rw-r--r--sysdeps/mach/hurd/bits/fcntl.h175
-rw-r--r--sysdeps/mach/hurd/bits/ioctls.h353
-rw-r--r--sysdeps/mach/hurd/bits/local_lim.h39
-rw-r--r--sysdeps/mach/hurd/bits/posix_opt.h21
-rw-r--r--sysdeps/mach/hurd/bits/stat.h136
6 files changed, 1040 insertions, 0 deletions
diff --git a/sysdeps/mach/hurd/bits/errno.h b/sysdeps/mach/hurd/bits/errno.h
new file mode 100644
index 0000000000..beb35ecd9a
--- /dev/null
+++ b/sysdeps/mach/hurd/bits/errno.h
@@ -0,0 +1,316 @@
+/* This file generated by errnos.awk.  */
+
+/* The Hurd uses Mach error system 0x10, currently only subsystem 0. */
+#ifndef _HURD_ERRNO
+#define _HURD_ERRNO(n)	((0x10 << 26) | ((n) & 0x3fff))
+#endif
+
+#ifdef _ERRNO_H
+
+enum __error_t_codes
+{
+#undef EDOM
+#undef ERANGE
+	EPERM           = _HURD_ERRNO (1),
+#define	EPERM           _HURD_ERRNO (1) /* Operation not permitted */
+	ENOENT          = _HURD_ERRNO (2),
+#define	ENOENT          _HURD_ERRNO (2) /* No such file or directory */
+	ESRCH           = _HURD_ERRNO (3),
+#define	ESRCH           _HURD_ERRNO (3) /* No such process */
+	EINTR           = _HURD_ERRNO (4),
+#define	EINTR           _HURD_ERRNO (4) /* Interrupted system call */
+	EIO             = _HURD_ERRNO (5),
+#define	EIO             _HURD_ERRNO (5) /* Input/output error */
+	ENXIO           = _HURD_ERRNO (6),
+#define	ENXIO           _HURD_ERRNO (6) /* Device not configured */
+	E2BIG           = _HURD_ERRNO (7),
+#define	E2BIG           _HURD_ERRNO (7) /* Argument list too long */
+	ENOEXEC         = _HURD_ERRNO (8),
+#define	ENOEXEC         _HURD_ERRNO (8) /* Exec format error */
+	EBADF           = _HURD_ERRNO (9),
+#define	EBADF           _HURD_ERRNO (9) /* Bad file descriptor */
+	ECHILD          = _HURD_ERRNO (10),
+#define	ECHILD          _HURD_ERRNO (10)/* No child processes */
+	EDEADLK         = _HURD_ERRNO (11),
+#define	EDEADLK         _HURD_ERRNO (11)/* Resource deadlock avoided */
+	ENOMEM          = _HURD_ERRNO (12),
+#define	ENOMEM          _HURD_ERRNO (12)/* Cannot allocate memory */
+	EACCES          = _HURD_ERRNO (13),
+#define	EACCES          _HURD_ERRNO (13)/* Permission denied */
+	EFAULT          = _HURD_ERRNO (14),
+#define	EFAULT          _HURD_ERRNO (14)/* Bad address */
+	ENOTBLK         = _HURD_ERRNO (15),
+#define	ENOTBLK         _HURD_ERRNO (15)/* Block device required */
+	EBUSY           = _HURD_ERRNO (16),
+#define	EBUSY           _HURD_ERRNO (16)/* Device or resource busy */
+	EEXIST          = _HURD_ERRNO (17),
+#define	EEXIST          _HURD_ERRNO (17)/* File exists */
+	EXDEV           = _HURD_ERRNO (18),
+#define	EXDEV           _HURD_ERRNO (18)/* Invalid cross-device link */
+	ENODEV          = _HURD_ERRNO (19),
+#define	ENODEV          _HURD_ERRNO (19)/* Operation not supported by device */
+	ENOTDIR         = _HURD_ERRNO (20),
+#define	ENOTDIR         _HURD_ERRNO (20)/* Not a directory */
+	EISDIR          = _HURD_ERRNO (21),
+#define	EISDIR          _HURD_ERRNO (21)/* Is a directory */
+	EINVAL          = _HURD_ERRNO (22),
+#define	EINVAL          _HURD_ERRNO (22)/* Invalid argument */
+	EMFILE          = _HURD_ERRNO (24),
+#define	EMFILE          _HURD_ERRNO (24)/* Too many open files */
+	ENFILE          = _HURD_ERRNO (23),
+#define	ENFILE          _HURD_ERRNO (23)/* Too many open files in system */
+	ENOTTY          = _HURD_ERRNO (25),
+#define	ENOTTY          _HURD_ERRNO (25)/* Inappropriate ioctl for device */
+	ETXTBSY         = _HURD_ERRNO (26),
+#define	ETXTBSY         _HURD_ERRNO (26)/* Text file busy */
+	EFBIG           = _HURD_ERRNO (27),
+#define	EFBIG           _HURD_ERRNO (27)/* File too large */
+	ENOSPC          = _HURD_ERRNO (28),
+#define	ENOSPC          _HURD_ERRNO (28)/* No space left on device */
+	ESPIPE          = _HURD_ERRNO (29),
+#define	ESPIPE          _HURD_ERRNO (29)/* Illegal seek */
+	EROFS           = _HURD_ERRNO (30),
+#define	EROFS           _HURD_ERRNO (30)/* Read-only file system */
+	EMLINK          = _HURD_ERRNO (31),
+#define	EMLINK          _HURD_ERRNO (31)/* Too many links */
+	EPIPE           = _HURD_ERRNO (32),
+#define	EPIPE           _HURD_ERRNO (32)/* Broken pipe */
+	EDOM            = _HURD_ERRNO (33),
+#define	EDOM            _HURD_ERRNO (33)/* Numerical argument out of domain */
+	ERANGE          = _HURD_ERRNO (34),
+#define	ERANGE          _HURD_ERRNO (34)/* Numerical result out of range */
+	EAGAIN          = _HURD_ERRNO (35),
+#define	EAGAIN          _HURD_ERRNO (35)/* Resource temporarily unavailable */
+#define EWOULDBLOCK EAGAIN /* Operation would block */
+	EINPROGRESS     = _HURD_ERRNO (36),
+#define	EINPROGRESS     _HURD_ERRNO (36)/* Operation now in progress */
+	EALREADY        = _HURD_ERRNO (37),
+#define	EALREADY        _HURD_ERRNO (37)/* Operation already in progress */
+	ENOTSOCK        = _HURD_ERRNO (38),
+#define	ENOTSOCK        _HURD_ERRNO (38)/* Socket operation on non-socket */
+	EMSGSIZE        = _HURD_ERRNO (40),
+#define	EMSGSIZE        _HURD_ERRNO (40)/* Message too long */
+	EPROTOTYPE      = _HURD_ERRNO (41),
+#define	EPROTOTYPE      _HURD_ERRNO (41)/* Protocol wrong type for socket */
+	ENOPROTOOPT     = _HURD_ERRNO (42),
+#define	ENOPROTOOPT     _HURD_ERRNO (42)/* Protocol not available */
+	EPROTONOSUPPORT = _HURD_ERRNO (43),
+#define	EPROTONOSUPPORT _HURD_ERRNO (43)/* Protocol not supported */
+	ESOCKTNOSUPPORT = _HURD_ERRNO (44),
+#define	ESOCKTNOSUPPORT _HURD_ERRNO (44)/* Socket type not supported */
+	EOPNOTSUPP      = _HURD_ERRNO (45),
+#define	EOPNOTSUPP      _HURD_ERRNO (45)/* Operation not supported */
+	EPFNOSUPPORT    = _HURD_ERRNO (46),
+#define	EPFNOSUPPORT    _HURD_ERRNO (46)/* Protocol family not supported */
+	EAFNOSUPPORT    = _HURD_ERRNO (47),
+#define	EAFNOSUPPORT    _HURD_ERRNO (47)/* Address family not supported by protocol */
+	EADDRINUSE      = _HURD_ERRNO (48),
+#define	EADDRINUSE      _HURD_ERRNO (48)/* Address already in use */
+	EADDRNOTAVAIL   = _HURD_ERRNO (49),
+#define	EADDRNOTAVAIL   _HURD_ERRNO (49)/* Cannot assign requested address */
+	ENETDOWN        = _HURD_ERRNO (50),
+#define	ENETDOWN        _HURD_ERRNO (50)/* Network is down */
+	ENETUNREACH     = _HURD_ERRNO (51),
+#define	ENETUNREACH     _HURD_ERRNO (51)/* Network is unreachable */
+	ENETRESET       = _HURD_ERRNO (52),
+#define	ENETRESET       _HURD_ERRNO (52)/* Network dropped connection on reset */
+	ECONNABORTED    = _HURD_ERRNO (53),
+#define	ECONNABORTED    _HURD_ERRNO (53)/* Software caused connection abort */
+	ECONNRESET      = _HURD_ERRNO (54),
+#define	ECONNRESET      _HURD_ERRNO (54)/* Connection reset by peer */
+	ENOBUFS         = _HURD_ERRNO (55),
+#define	ENOBUFS         _HURD_ERRNO (55)/* No buffer space available */
+	EISCONN         = _HURD_ERRNO (56),
+#define	EISCONN         _HURD_ERRNO (56)/* Transport endpoint is already connected */
+	ENOTCONN        = _HURD_ERRNO (57),
+#define	ENOTCONN        _HURD_ERRNO (57)/* Transport endpoint is not connected */
+	EDESTADDRREQ    = _HURD_ERRNO (39),
+#define	EDESTADDRREQ    _HURD_ERRNO (39)/* Destination address required */
+	ESHUTDOWN       = _HURD_ERRNO (58),
+#define	ESHUTDOWN       _HURD_ERRNO (58)/* Cannot send after transport endpoint shutdown */
+	ETOOMANYREFS    = _HURD_ERRNO (59),
+#define	ETOOMANYREFS    _HURD_ERRNO (59)/* Too many references: cannot splice */
+	ETIMEDOUT       = _HURD_ERRNO (60),
+#define	ETIMEDOUT       _HURD_ERRNO (60)/* Connection timed out */
+	ECONNREFUSED    = _HURD_ERRNO (61),
+#define	ECONNREFUSED    _HURD_ERRNO (61)/* Connection refused */
+	ELOOP           = _HURD_ERRNO (62),
+#define	ELOOP           _HURD_ERRNO (62)/* Too many levels of symbolic links */
+	ENAMETOOLONG    = _HURD_ERRNO (63),
+#define	ENAMETOOLONG    _HURD_ERRNO (63)/* File name too long */
+	EHOSTDOWN       = _HURD_ERRNO (64),
+#define	EHOSTDOWN       _HURD_ERRNO (64)/* Host is down */
+	EHOSTUNREACH    = _HURD_ERRNO (65),
+#define	EHOSTUNREACH    _HURD_ERRNO (65)/* No route to host */
+	ENOTEMPTY       = _HURD_ERRNO (66),
+#define	ENOTEMPTY       _HURD_ERRNO (66)/* Directory not empty */
+	EPROCLIM        = _HURD_ERRNO (67),
+#define	EPROCLIM        _HURD_ERRNO (67)/* Too many processes */
+	EUSERS          = _HURD_ERRNO (68),
+#define	EUSERS          _HURD_ERRNO (68)/* Too many users */
+	EDQUOT          = _HURD_ERRNO (69),
+#define	EDQUOT          _HURD_ERRNO (69)/* Disc quota exceeded */
+	ESTALE          = _HURD_ERRNO (70),
+#define	ESTALE          _HURD_ERRNO (70)/* Stale NFS file handle */
+	EREMOTE         = _HURD_ERRNO (71),
+#define	EREMOTE         _HURD_ERRNO (71)/* Object is remote */
+	EBADRPC         = _HURD_ERRNO (72),
+#define	EBADRPC         _HURD_ERRNO (72)/* RPC struct is bad */
+	ERPCMISMATCH    = _HURD_ERRNO (73),
+#define	ERPCMISMATCH    _HURD_ERRNO (73)/* RPC version wrong */
+	EPROGUNAVAIL    = _HURD_ERRNO (74),
+#define	EPROGUNAVAIL    _HURD_ERRNO (74)/* RPC program not available */
+	EPROGMISMATCH   = _HURD_ERRNO (75),
+#define	EPROGMISMATCH   _HURD_ERRNO (75)/* RPC program version wrong */
+	EPROCUNAVAIL    = _HURD_ERRNO (76),
+#define	EPROCUNAVAIL    _HURD_ERRNO (76)/* RPC bad procedure for program */
+	ENOLCK          = _HURD_ERRNO (77),
+#define	ENOLCK          _HURD_ERRNO (77)/* No locks available */
+	EFTYPE          = _HURD_ERRNO (79),
+#define	EFTYPE          _HURD_ERRNO (79)/* Inappropriate file type or format */
+	EAUTH           = _HURD_ERRNO (80),
+#define	EAUTH           _HURD_ERRNO (80)/* Authentication error */
+	ENEEDAUTH       = _HURD_ERRNO (81),
+#define	ENEEDAUTH       _HURD_ERRNO (81)/* Need authenticator */
+	ENOSYS          = _HURD_ERRNO (78),
+#define	ENOSYS          _HURD_ERRNO (78)/* Function not implemented */
+	EILSEQ          = _HURD_ERRNO (106),
+#define	EILSEQ          _HURD_ERRNO (106)/* Invalid or incomplete multibyte or wide character */
+	EBACKGROUND     = _HURD_ERRNO (100),
+#define	EBACKGROUND     _HURD_ERRNO (100)/* Inappropriate operation for background process */
+	EDIED           = _HURD_ERRNO (101),
+#define	EDIED           _HURD_ERRNO (101)/* Translator died */
+	ED              = _HURD_ERRNO (102),
+#define	ED              _HURD_ERRNO (102)/* ? */
+	EGREGIOUS       = _HURD_ERRNO (103),
+#define	EGREGIOUS       _HURD_ERRNO (103)/* You really blew it this time */
+	EIEIO           = _HURD_ERRNO (104),
+#define	EIEIO           _HURD_ERRNO (104)/* Computer bought the farm */
+	EGRATUITOUS     = _HURD_ERRNO (105),
+#define	EGRATUITOUS     _HURD_ERRNO (105)/* Gratuitous error */
+	EBADMSG         = _HURD_ERRNO (107),
+#define	EBADMSG         _HURD_ERRNO (107)/* Bad message */
+	EIDRM           = _HURD_ERRNO (108),
+#define	EIDRM           _HURD_ERRNO (108)/* Identifier removed */
+	EMULTIHOP       = _HURD_ERRNO (109),
+#define	EMULTIHOP       _HURD_ERRNO (109)/* Multihop attempted */
+	ENODATA         = _HURD_ERRNO (110),
+#define	ENODATA         _HURD_ERRNO (110)/* No data available */
+	ENOLINK         = _HURD_ERRNO (111),
+#define	ENOLINK         _HURD_ERRNO (111)/* Link has been severed */
+	ENOMSG          = _HURD_ERRNO (112),
+#define	ENOMSG          _HURD_ERRNO (112)/* No message of desired type */
+	ENOSR           = _HURD_ERRNO (113),
+#define	ENOSR           _HURD_ERRNO (113)/* Out of streams resources */
+	ENOSTR          = _HURD_ERRNO (114),
+#define	ENOSTR          _HURD_ERRNO (114)/* Device not a stream */
+	EOVERFLOW       = _HURD_ERRNO (115),
+#define	EOVERFLOW       _HURD_ERRNO (115)/* Value too large for defined data type */
+	EPROTO          = _HURD_ERRNO (116),
+#define	EPROTO          _HURD_ERRNO (116)/* Protocol error */
+	ETIME           = _HURD_ERRNO (117),
+#define	ETIME           _HURD_ERRNO (117)/* Timer expired */
+
+	/* Errors from <mach/message.h>.  */
+	EMACH_SEND_IN_PROGRESS          = 0x10000001,
+	EMACH_SEND_INVALID_DATA         = 0x10000002,
+	EMACH_SEND_INVALID_DEST         = 0x10000003,
+	EMACH_SEND_TIMED_OUT            = 0x10000004,
+	EMACH_SEND_WILL_NOTIFY          = 0x10000005,
+	EMACH_SEND_NOTIFY_IN_PROGRESS   = 0x10000006,
+	EMACH_SEND_INTERRUPTED          = 0x10000007,
+	EMACH_SEND_MSG_TOO_SMALL        = 0x10000008,
+	EMACH_SEND_INVALID_REPLY        = 0x10000009,
+	EMACH_SEND_INVALID_RIGHT        = 0x1000000a,
+	EMACH_SEND_INVALID_NOTIFY       = 0x1000000b,
+	EMACH_SEND_INVALID_MEMORY       = 0x1000000c,
+	EMACH_SEND_NO_BUFFER            = 0x1000000d,
+	EMACH_SEND_NO_NOTIFY            = 0x1000000e,
+	EMACH_SEND_INVALID_TYPE         = 0x1000000f,
+	EMACH_SEND_INVALID_HEADER       = 0x10000010,
+	EMACH_RCV_IN_PROGRESS           = 0x10004001,
+	EMACH_RCV_INVALID_NAME          = 0x10004002,
+	EMACH_RCV_TIMED_OUT             = 0x10004003,
+	EMACH_RCV_TOO_LARGE             = 0x10004004,
+	EMACH_RCV_INTERRUPTED           = 0x10004005,
+	EMACH_RCV_PORT_CHANGED          = 0x10004006,
+	EMACH_RCV_INVALID_NOTIFY        = 0x10004007,
+	EMACH_RCV_INVALID_DATA          = 0x10004008,
+	EMACH_RCV_PORT_DIED             = 0x10004009,
+	EMACH_RCV_IN_SET                = 0x1000400a,
+	EMACH_RCV_HEADER_ERROR          = 0x1000400b,
+	EMACH_RCV_BODY_ERROR            = 0x1000400c,
+
+	/* Errors from <mach/kern_return.h>.  */
+	EKERN_INVALID_ADDRESS           = 1,
+	EKERN_PROTECTION_FAILURE        = 2,
+	EKERN_NO_SPACE                  = 3,
+	EKERN_INVALID_ARGUMENT          = 4,
+	EKERN_FAILURE                   = 5,
+	EKERN_RESOURCE_SHORTAGE         = 6,
+	EKERN_NOT_RECEIVER              = 7,
+	EKERN_NO_ACCESS                 = 8,
+	EKERN_MEMORY_FAILURE            = 9,
+	EKERN_MEMORY_ERROR              = 10,
+	EKERN_NOT_IN_SET                = 12,
+	EKERN_NAME_EXISTS               = 13,
+	EKERN_ABORTED                   = 14,
+	EKERN_INVALID_NAME              = 15,
+	EKERN_INVALID_TASK              = 16,
+	EKERN_INVALID_RIGHT             = 17,
+	EKERN_INVALID_VALUE             = 18,
+	EKERN_UREFS_OVERFLOW            = 19,
+	EKERN_INVALID_CAPABILITY        = 20,
+	EKERN_RIGHT_EXISTS              = 21,
+	EKERN_INVALID_HOST              = 22,
+	EKERN_MEMORY_PRESENT            = 23,
+	EKERN_WRITE_PROTECTION_FAILURE  = 24,
+	EKERN_TERMINATED                = 26,
+
+	/* Errors from <mach/mig_errors.h>.  */
+	EMIG_TYPE_ERROR         = -300, /* client type check failure */
+	EMIG_REPLY_MISMATCH     = -301, /* wrong reply message ID */
+	EMIG_REMOTE_ERROR       = -302, /* server detected error */
+	EMIG_BAD_ID             = -303, /* bad request message ID */
+	EMIG_BAD_ARGUMENTS      = -304, /* server type check failure */
+	EMIG_NO_REPLY           = -305, /* no reply should be sent */
+	EMIG_EXCEPTION          = -306, /* server raised exception */
+	EMIG_ARRAY_TOO_LARGE    = -307, /* array not large enough */
+	EMIG_SERVER_DIED        = -308, /* server died */
+	EMIG_DESTROY_REQUEST    = -309, /* destroy request with no reply */
+
+	/* Errors from <device/device_types.h>.  */
+	ED_IO_ERROR             = 2500, /* hardware IO error */
+	ED_WOULD_BLOCK          = 2501, /* would block, but D_NOWAIT set */
+	ED_NO_SUCH_DEVICE       = 2502, /* no such device */
+	ED_ALREADY_OPEN         = 2503, /* exclusive-use device already open */
+	ED_DEVICE_DOWN          = 2504, /* device has been shut down */
+	ED_INVALID_OPERATION    = 2505, /* bad operation for device */
+	ED_INVALID_RECNUM       = 2506, /* invalid record (block) number */
+	ED_INVALID_SIZE         = 2507, /* invalid IO size */
+	ED_NO_MEMORY            = 2508, /* memory allocation failure */
+	ED_READ_ONLY            = 2509, /* device cannot be written to */
+
+};
+
+#define	_HURD_ERRNOS	118
+
+/* User-visible type of error codes.  It is ok to use `int' or
+   `kern_return_t' for these, but with `error_t' the debugger prints
+   symbolic values.  */
+#ifdef __USE_GNU
+typedef enum __error_t_codes error_t;
+#define __error_t_defined	1
+#endif
+
+/* errno is a per-thread variable.  */
+#include <hurd/threadvar.h>
+#define errno	(*__hurd_errno_location ())
+#define __set_errno(val) errno = (val)
+
+#endif /* <errno.h> included.  */
+
+#if !defined (_ERRNO_H) && defined (__need_Emath)
+#define	EDOM            _HURD_ERRNO (33)/* Numerical argument out of domain */
+#define	ERANGE          _HURD_ERRNO (34)/* Numerical result out of range */
+#endif /* <errno.h> not included and need math error codes.  */
diff --git a/sysdeps/mach/hurd/bits/fcntl.h b/sysdeps/mach/hurd/bits/fcntl.h
new file mode 100644
index 0000000000..4983b338ae
--- /dev/null
+++ b/sysdeps/mach/hurd/bits/fcntl.h
@@ -0,0 +1,175 @@
+/* O_*, F_*, FD_* bit values for GNU.
+   Copyright (C) 1993, 1994, 1996, 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _FCNTL_H
+#error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+#endif
+
+/* File access modes.  These are understood by io servers; they can be
+   passed in `dir_lookup', and are returned by `io_get_openmodes'.
+   Consequently they can be passed to `open', `hurd_file_name_lookup', and
+   `file_name_lookup'; and are returned by `fcntl' with the F_GETFL
+   command.  */
+
+/* In GNU, read and write are bits (unlike BSD).  */
+#ifdef __USE_GNU
+#define	O_READ		O_RDONLY /* Open for reading.  */
+#define O_WRITE		O_WRONLY /* Open for writing.  */
+#define	O_EXEC		0x0004	/* Open for execution.  */
+#define O_NORW		0	/* Open without R/W access.  */
+#endif
+/* POSIX.1 standard names.  */
+#define	O_RDONLY	0x0001	/* Open read-only.  */
+#define	O_WRONLY	0x0002	/* Open write-only.  */
+#define	O_RDWR		(O_RDONLY|O_WRONLY) /* Open for reading and writing. */
+#define	O_ACCMODE	O_RDWR	/* Mask for file access modes.  */
+
+
+
+/* File name translation flags.  These are understood by io servers;
+   they can be passed in `dir_lookup', and consequently to `open',
+   `hurd_file_name_lookup', and `file_name_lookup'.  */
+
+#define	O_CREAT		0x0010	/* Create file if it doesn't exist.  */
+#define	O_EXCL		0x0020	/* Fail if file already exists.  */
+#ifdef __USE_GNU
+#define	O_NOLINK	0x0040	/* No name mappings on final component.  */
+#define	O_NOTRANS	0x0080	/* No translator on final component. */
+#endif
+
+
+/* I/O operating modes.  These are understood by io servers; they can be
+   passed in `dir_lookup' and set or fetched with `io_*_openmodes'.
+   Consequently they can be passed to `open', `hurd_file_name_lookup',
+   `file_name_lookup', and `fcntl' with the F_SETFL command; and are
+   returned by `fcntl' with the F_GETFL command.  */
+
+#define	O_APPEND	0x0100	/* Writes always append to the file.  */
+#ifdef __USE_BSD
+#define	O_ASYNC		0x0200	/* Send SIGIO to owner when data is ready.  */
+#define	O_FSYNC		0x0400	/* Synchronous writes.  */
+#define	O_SYNC		O_FSYNC
+#endif
+#ifdef __USE_GNU
+#define	O_NOATIME	0x0800	/* Don't set access time on read (owner).  */
+#endif
+#ifdef	__USE_MISC
+#define	O_SHLOCK	0x00020000 /* Open with shared file lock.  */
+#define	O_EXLOCK	0x00040000 /* Open with exclusive file lock.  */
+#endif
+
+
+/* The name O_NONBLOCK is unfortunately overloaded; it is both a file name
+   translation flag and an I/O operating mode.  O_NDELAY is the deprecated
+   BSD name for the same flag, overloaded in the same way.
+
+   When used in `dir_lookup' (and consequently `open', `hurd_file_name_lookup',
+   or `file_name_lookup'), O_NONBLOCK says the open should return immediately
+   instead of blocking for any significant length of time (e.g., to wait
+   for carrier detect on a serial line).  It is also saved as an I/O
+   operating mode, and after open has the following meaning.
+
+   When used in `io_*_openmodes' (and consequently `fcntl' with the F_SETFL
+   command), the O_NONBLOCK flag means to do nonblocking i/o: any i/o
+   operation that would block for any significant length of time will instead
+   fail with EAGAIN.  */
+
+#define	O_NONBLOCK	0x0008	/* Non-blocking open or non-blocking I/O.  */
+#ifdef __USE_BSD
+#define	O_NDELAY	O_NONBLOCK /* Deprecated.  */
+#endif
+
+
+#ifdef __USE_GNU
+/* Mask of bits which are understood by io servers.  */
+#define O_HURD		(0xffff | O_EXLOCK | O_SHLOCK)
+#endif
+
+
+/* Open-time action flags.  These are understood by `hurd_file_name_lookup'
+   and consequently by `open' and `file_name_lookup'.  They are not preserved
+   once the file has been opened.  */
+
+#define	O_TRUNC		0x00010000 /* Truncate file to zero length.  */
+
+
+/* Controlling terminal flags.  These are understood only by `open',
+   and are not preserved once the file has been opened.  */
+
+#ifdef __USE_GNU
+#define	O_IGNORE_CTTY	0x00080000 /* Don't do any ctty magic at all.  */
+#endif
+/* `open' never assigns a controlling terminal in GNU.  */
+#define	O_NOCTTY	0	/* Don't assign a controlling terminal.  */
+
+
+#ifdef __USE_BSD
+/* Bits in the file status flags returned by F_GETFL.  */
+#define FREAD		O_RDONLY
+#define	FWRITE		O_WRONLY
+
+/* Traditional BSD names the O_* bits.  */
+#define FASYNC		O_ASYNC
+#define FCREAT		O_CREAT
+#define FEXCL		O_EXCL
+#define FTRUNC		O_TRUNC
+#define FNOCTTY		O_NOCTTY
+#define FFSYNC		O_FSYNC
+#define FSYNC		O_SYNC
+#define FAPPEND		O_APPEND
+#define FNONBLOCK	O_NONBLOCK
+#define FNDELAY		O_NDELAY
+#endif
+
+
+/* Values for the second argument to `fcntl'.  */
+#define	F_DUPFD	  	0	/* Duplicate file descriptor.  */
+#define	F_GETFD		1	/* Get file descriptor flags.  */
+#define	F_SETFD		2	/* Set file descriptor flags.  */
+#define	F_GETFL		3	/* Get file status flags.  */
+#define	F_SETFL		4	/* Set file status flags.  */
+#ifdef __USE_BSD
+#define	F_GETOWN	5	/* Get owner (receiver of SIGIO).  */
+#define	F_SETOWN	6	/* Set owner (receiver of SIGIO).  */
+#endif
+#define	F_GETLK		7	/* Get record locking info.  */
+#define	F_SETLK		8	/* Set record locking info (non-blocking).  */
+#define	F_SETLKW	9	/* Set record locking info (blocking).  */
+
+/* File descriptor flags used with F_GETFD and F_SETFD.  */
+#define	FD_CLOEXEC	1	/* Close on exec.  */
+
+
+#include <gnu/types.h>
+
+/* The structure describing an advisory lock.  This is the type of the third
+   argument to `fcntl' for the F_GETLK, F_SETLK, and F_SETLKW requests.  */
+struct flock
+  {
+    int l_type;		/* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    int l_whence;	/* Where `l_start' is relative to (like `lseek').  */
+    __off_t l_start;	/* Offset where the lock begins.  */
+    __off_t l_len;	/* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;	/* Process holding the lock.  */
+  };
+
+/* Values for the `l_type' field of a `struct flock'.  */
+#define	F_RDLCK	1	/* Read lock.  */
+#define	F_WRLCK	2	/* Write lock.  */
+#define	F_UNLCK	3	/* Remove lock.  */
diff --git a/sysdeps/mach/hurd/bits/ioctls.h b/sysdeps/mach/hurd/bits/ioctls.h
new file mode 100644
index 0000000000..b04438bcca
--- /dev/null
+++ b/sysdeps/mach/hurd/bits/ioctls.h
@@ -0,0 +1,353 @@
+/* Copyright (C) 1992, 1993, 1996, 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/*
+ * Never include this file directly; use <sys/ioctl.h> instead.
+ */
+
+#ifndef	_BITS_IOCTLS_H
+#define	_BITS_IOCTLS_H	1
+
+/* These macros are also defined in <bits/termios.h> (with numerically
+   identical values) but this serves to shut up cpp's complaining. */
+#ifdef MDMBUF
+#undef MDMBUF
+#endif
+#ifdef ECHO
+#undef ECHO
+#endif
+#ifdef TOSTOP
+#undef TOSTOP
+#endif
+#ifdef FLUSHO
+#undef FLUSHO
+#endif
+#ifdef PENDIN
+#undef PENDIN
+#endif
+#ifdef NOFLSH
+#undef NOFLSH
+#endif
+
+/* Hurd ioctl request are made up of several fields:
+
+    10987654321098765432109876543210
+    IOt0t1t2cc0c0cc1c1cc2ggggccccccc
+
+     bits [31,30]: inout direction (enum __ioctl_dir)
+     bits [29,11]: type encoding as follows; zero count indicates omitted datum
+	  [29,28]: datum #0 type (enum __ioctl_datum)
+	  [27,26]: datum #1 type (enum __ioctl_datum)
+	  [24,25]: datum #2 type (enum __ioctl_datum)
+	  [23,19]: datum #0 count	[0,31]
+	  [18,14]: datum #1 count [0,31]
+	  [13,11]: datum #2 count [0,3]
+     bits [07,10]: group (letter - 'f': ['f','v'])
+     bits [00,06]: command	[0,127]
+
+   The following macros construct and dissect these fields.  */
+
+enum __ioctl_dir
+  {
+    IOC_VOID = 0,		/* No parameters.  */
+    IOC_OUT = 1,		/* Data is written into the user's buffer.  */
+    IOC_IN = 2,			/* Data is read from the user's buffer.  */
+    IOC_INOUT = (IOC_IN|IOC_OUT)
+  };
+
+enum __ioctl_datum { IOC_8, IOC_16, IOC_32, IOC_64 };
+
+/* Construct an ioctl from constructed type plus other fields.  */
+#define	_IOC(inout, group, num, type) \
+  ((num) | ((((group) - 'f') | ((type) | (inout) << 19) << 4) << 7))
+
+/* Dissect an ioctl into its component fields.  */
+#define _IOC_INOUT(request)	(((unsigned int) (request) >> 30) & IOC_INOUT)
+#define _IOC_GROUP(request)	('f' + (((unsigned int) (request) >> 7) & 0xf))
+#define _IOC_COMMAND(request)	((unsigned int) (request) & 0x7f)
+#define _IOC_TYPE(request)	(((unsigned int) (request) >> 11) & 0x7ffff)
+#define _IOC_NOTYPE(request)	((unsigned int) (request) & 0x3ff)
+
+/* Construct a type information field from
+   the broken-out type and count fields.  */
+#define	_IOT(t0, c0, t1, c1, t2, c2) \
+  ((c2) | (((c1) | ((c0) | ((t2) | ((t1) | (t0) << 2) << 2) << 5) << 5) << 3))
+
+/* Dissect a type information field into the type and count fields.  */
+#define	_IOT_TYPE0(type)	(((unsigned int) (type) >> 17) & 3)
+#define	_IOT_TYPE1(type)	(((unsigned int) (type) >> 15) & 3)
+#define	_IOT_TYPE2(type)	(((unsigned int) (type) >> 13) & 3)
+#define	_IOT_COUNT0(type)	(((unsigned int) (type) >> 8) & 0x1f)
+#define	_IOT_COUNT1(type)	(((unsigned int) (type) >> 3) & 0x1f)
+#define	_IOT_COUNT2(type)	(((unsigned int) (type) >> 0) & 7)
+
+/* Construct an ioctl from all the broken-out fields.  */
+#define	_IOCT(inout, group, num, t0, c0, t1, c1, t2, c2)		      \
+  _IOC ((inout), (group), (num), _IOT ((t0), (c0), (t1), (c1), (t2), (c2)))
+
+/* Standard flavors of ioctls.
+   _IOT_foobar is defined either in this file,
+   or where struct foobar is defined.  */
+#define	_IO(g, n)	_IOC (IOC_VOID, (g), (n), 0)
+#define	_IOR(g, n, t)	_IOC (IOC_OUT, (g), (n), _IOT_##t)
+#define	_IOW(g, n, t)	_IOC (IOC_IN, (g), (n), _IOT_##t)
+#define	_IOWR(g, n, t)	_IOC (IOC_INOUT, (g), (n), _IOT_##t)
+
+/* Construct an individual type field for TYPE.  */
+#define _IOTS(type)	\
+  (sizeof (type) == 8 ? IOC_64 : (sizeof (type) >> 1))
+
+/* Construct a type information field for
+   a single argument of the scalar TYPE.  */
+#define	_IOT_SIMPLE(type)	_IOT (_IOTS (type), 1, 0, 0, 0, 0)
+
+/* Basic C types.  */
+#define	_IOT_int		_IOT_SIMPLE (int)
+#define	_IOT_char		_IOT_SIMPLE (char)
+#define	_IOT_short		_IOT_SIMPLE (short)
+
+
+/* ioctls verbatim from 4.4 <sys/ioctl.h>, with `struct' keywords removed.  */
+
+#define	TIOCMODG	_IOR('t', 3, int)	/* get modem control state */
+#define	TIOCMODS	_IOW('t', 4, int)	/* set modem control state */
+#define		TIOCM_LE	0001		/* line enable */
+#define		TIOCM_DTR	0002		/* data terminal ready */
+#define		TIOCM_RTS	0004		/* request to send */
+#define		TIOCM_ST	0010		/* secondary transmit */
+#define		TIOCM_SR	0020		/* secondary receive */
+#define		TIOCM_CTS	0040		/* clear to send */
+#define		TIOCM_CAR	0100		/* carrier detect */
+#define		TIOCM_CD	TIOCM_CAR
+#define		TIOCM_RNG	0200		/* ring */
+#define		TIOCM_RI	TIOCM_RNG
+#define		TIOCM_DSR	0400		/* data set ready */
+						/* 8-10 compat */
+#define	TIOCEXCL	_IO('t', 13)		/* set exclusive use of tty */
+#define	TIOCNXCL	_IO('t', 14)		/* reset exclusive use of tty */
+						/* 15 unused */
+#define	TIOCFLUSH	_IOW('t', 16, int)	/* flush buffers */
+						/* 17-18 compat */
+#define	TIOCGETA	_IOR('t', 19, termios) /* get termios struct */
+#define	TIOCSETA	_IOW('t', 20, termios) /* set termios struct */
+#define	TIOCSETAW	_IOW('t', 21, termios) /* drain output, set */
+#define	TIOCSETAF	_IOW('t', 22, termios) /* drn out, fls in, set */
+#define	TIOCGETD	_IOR('t', 26, int)	/* get line discipline */
+#define	TIOCSETD	_IOW('t', 27, int)	/* set line discipline */
+						/* 127-124 compat */
+#define	TIOCSBRK	_IO('t', 123)		/* set break bit */
+#define	TIOCCBRK	_IO('t', 122)		/* clear break bit */
+#define	TIOCSDTR	_IO('t', 121)		/* set data terminal ready */
+#define	TIOCCDTR	_IO('t', 120)		/* clear data terminal ready */
+#define	TIOCGPGRP	_IOR('t', 119, int)	/* get pgrp of tty */
+#define	TIOCSPGRP	_IOW('t', 118, int)	/* set pgrp of tty */
+						/* 117-116 compat */
+#define	TIOCOUTQ	_IOR('t', 115, int)	/* output queue size */
+#define	TIOCSTI		_IOW('t', 114, char)	/* simulate terminal input */
+#define	TIOCNOTTY	_IO('t', 113)		/* void tty association */
+#define	TIOCPKT		_IOW('t', 112, int)	/* pty: set/clear packet mode */
+#define		TIOCPKT_DATA		0x00	/* data packet */
+#define		TIOCPKT_FLUSHREAD	0x01	/* flush packet */
+#define		TIOCPKT_FLUSHWRITE	0x02	/* flush packet */
+#define		TIOCPKT_STOP		0x04	/* stop output */
+#define		TIOCPKT_START		0x08	/* start output */
+#define		TIOCPKT_NOSTOP		0x10	/* no more ^S, ^Q */
+#define		TIOCPKT_DOSTOP		0x20	/* now do ^S ^Q */
+#define		TIOCPKT_IOCTL		0x40	/* state change of pty driver */
+#define	TIOCSTOP	_IO('t', 111)		/* stop output, like ^S */
+#define	TIOCSTART	_IO('t', 110)		/* start output, like ^Q */
+#define	TIOCMSET	_IOW('t', 109, int)	/* set all modem bits */
+#define	TIOCMBIS	_IOW('t', 108, int)	/* bis modem bits */
+#define	TIOCMBIC	_IOW('t', 107, int)	/* bic modem bits */
+#define	TIOCMGET	_IOR('t', 106, int)	/* get all modem bits */
+#define	TIOCREMOTE	_IOW('t', 105, int)	/* remote input editing */
+#define	TIOCGWINSZ	_IOR('t', 104, winsize)	/* get window size */
+#define	TIOCSWINSZ	_IOW('t', 103, winsize)	/* set window size */
+#define	TIOCUCNTL	_IOW('t', 102, int)	/* pty: set/clr usr cntl mode */
+#define		UIOCCMD(n)	_IO('u', n)		/* usr cntl op "n" */
+#define	TIOCCONS	_IOW('t', 98, int)		/* become virtual console */
+#define	TIOCSCTTY	_IO('t', 97)		/* become controlling tty */
+#define	TIOCEXT		_IOW('t', 96, int)	/* pty: external processing */
+#define	TIOCSIG		_IO('t', 95)		/* pty: generate signal */
+#define TIOCDRAIN	_IO('t', 94)		/* wait till output drained */
+
+#define TTYDISC		0		/* termios tty line discipline */
+#define	TABLDISC	3		/* tablet discipline */
+#define	SLIPDISC	4		/* serial IP discipline */
+
+
+#define	FIOCLEX		_IO('f', 1)		/* set close on exec on fd */
+#define	FIONCLEX	_IO('f', 2)		/* remove close on exec */
+#define	FIONREAD	_IOR('f', 127, int)	/* get # bytes to read */
+#define	FIONBIO		_IOW('f', 126, int)	/* set/clear non-blocking i/o */
+#define	FIOASYNC	_IOW('f', 125, int)	/* set/clear async i/o */
+#define	FIOSETOWN	_IOW('f', 124, int)	/* set owner */
+#define	FIOGETOWN	_IOR('f', 123, int)	/* get owner */
+
+/* socket i/o controls */
+#define	SIOCSHIWAT	_IOW('s',  0, int)		/* set high watermark */
+#define	SIOCGHIWAT	_IOR('s',  1, int)		/* get high watermark */
+#define	SIOCSLOWAT	_IOW('s',  2, int)		/* set low watermark */
+#define	SIOCGLOWAT	_IOR('s',  3, int)		/* get low watermark */
+#define	SIOCATMARK	_IOR('s',  7, int)		/* at oob mark? */
+#define	SIOCSPGRP	_IOW('s',  8, int)		/* set process group */
+#define	SIOCGPGRP	_IOR('s',  9, int)		/* get process group */
+
+#define	SIOCADDRT	_IOW('r', 10, ortentry)	/* add route */
+#define	SIOCDELRT	_IOW('r', 11, ortentry)	/* delete route */
+
+#define	SIOCSIFADDR	_IOW('i', 12, ifreq)	/* set ifnet address */
+#define	OSIOCGIFADDR	_IOWR('i',13, ifreq)	/* get ifnet address */
+#define	SIOCGIFADDR	_IOWR('i',33, ifreq)	/* get ifnet address */
+#define	SIOCSIFDSTADDR	_IOW('i', 14, ifreq)	/* set p-p address */
+#define	OSIOCGIFDSTADDR	_IOWR('i',15, ifreq)	/* get p-p address */
+#define	SIOCGIFDSTADDR	_IOWR('i',34, ifreq)	/* get p-p address */
+#define	SIOCSIFFLAGS	_IOW('i', 16, ifreq)	/* set ifnet flags */
+#define	SIOCGIFFLAGS	_IOWR('i',17, ifreq)	/* get ifnet flags */
+#define	OSIOCGIFBRDADDR	_IOWR('i',18, ifreq)	/* get broadcast addr */
+#define	SIOCGIFBRDADDR	_IOWR('i',35, ifreq)	/* get broadcast addr */
+#define	SIOCSIFBRDADDR	_IOW('i',19, ifreq)	/* set broadcast addr */
+#define	OSIOCGIFCONF	_IOWR('i',20, ifconf)	/* get ifnet list */
+#define	SIOCGIFCONF	_IOWR('i',36, ifconf)	/* get ifnet list */
+#define	OSIOCGIFNETMASK	_IOWR('i',21, ifreq)	/* get net addr mask */
+#define	SIOCGIFNETMASK	_IOWR('i',37, ifreq)	/* get net addr mask */
+#define	SIOCSIFNETMASK	_IOW('i',22, ifreq)	/* set net addr mask */
+#define	SIOCGIFMETRIC	_IOWR('i',23, ifreq)	/* get IF metric */
+#define	SIOCSIFMETRIC	_IOW('i',24, ifreq)	/* set IF metric */
+#define	SIOCDIFADDR	_IOW('i',25, ifreq)	/* delete IF addr */
+#define	SIOCAIFADDR	_IOW('i',26, ifaliasreq)	/* add/chg IF alias */
+
+#define	SIOCSARP	_IOW('i', 30, arpreq)	/* set arp entry */
+#define	OSIOCGARP	_IOWR('i',31, arpreq)	/* get arp entry */
+#define	SIOCGARP	_IOWR('i',38, arpreq)	/* get arp entry */
+#define	SIOCDARP	_IOW('i', 32, arpreq)	/* delete arp entry */
+
+
+/* Compatibility with 4.3 BSD terminal driver.
+   From 4.4 <sys/ioctl_compat.h>.  */
+
+#ifdef USE_OLD_TTY
+# undef  TIOCGETD
+# define TIOCGETD	_IOR('t', 0, int)	/* get line discipline */
+# undef  TIOCSETD
+# define TIOCSETD	_IOW('t', 1, int)	/* set line discipline */
+#else
+# define OTIOCGETD	_IOR('t', 0, int)	/* get line discipline */
+# define OTIOCSETD	_IOW('t', 1, int)	/* set line discipline */
+#endif
+#define	TIOCHPCL	_IO('t', 2)		/* hang up on last close */
+#define	TIOCGETP	_IOR('t', 8,sgttyb)/* get parameters -- gtty */
+#define	TIOCSETP	_IOW('t', 9,sgttyb)/* set parameters -- stty */
+#define	TIOCSETN	_IOW('t',10,sgttyb)/* as above, but no flushtty*/
+#define	TIOCSETC	_IOW('t',17,tchars)/* set special characters */
+#define	TIOCGETC	_IOR('t',18,tchars)/* get special characters */
+#define		TANDEM		0x00000001	/* send stopc on out q full */
+#define		CBREAK		0x00000002	/* half-cooked mode */
+#define		LCASE		0x00000004	/* simulate lower case */
+#define		ECHO		0x00000008	/* echo input */
+#define		CRMOD		0x00000010	/* map \r to \r\n on output */
+#define		RAW		0x00000020	/* no i/o processing */
+#define		ODDP		0x00000040	/* get/send odd parity */
+#define		EVENP		0x00000080	/* get/send even parity */
+#define		ANYP		0x000000c0	/* get any parity/send none */
+#define		NLDELAY		0x00000300	/* \n delay */
+#define			NL0	0x00000000
+#define			NL1	0x00000100	/* tty 37 */
+#define			NL2	0x00000200	/* vt05 */
+#define			NL3	0x00000300
+#define		TBDELAY		0x00000c00	/* horizontal tab delay */
+#define			TAB0	0x00000000
+#define			TAB1	0x00000400	/* tty 37 */
+#define			TAB2	0x00000800
+#define		XTABS		0x00000c00	/* expand tabs on output */
+#define		CRDELAY		0x00003000	/* \r delay */
+#define			CR0	0x00000000
+#define			CR1	0x00001000	/* tn 300 */
+#define			CR2	0x00002000	/* tty 37 */
+#define			CR3	0x00003000	/* concept 100 */
+#define		VTDELAY		0x00004000	/* vertical tab delay */
+#define			FF0	0x00000000
+#define			FF1	0x00004000	/* tty 37 */
+#define		BSDELAY		0x00008000	/* \b delay */
+#define			BS0	0x00000000
+#define			BS1	0x00008000
+#define		ALLDELAY	(NLDELAY|TBDELAY|CRDELAY|VTDELAY|BSDELAY)
+#define		CRTBS		0x00010000	/* do backspacing for crt */
+#define		PRTERA		0x00020000	/* \ ... / erase */
+#define		CRTERA		0x00040000	/* " \b " to wipe out char */
+#define		TILDE		0x00080000	/* hazeltine tilde kludge */
+#define		MDMBUF		0x00100000	/*start/stop output on carrier*/
+#define		LITOUT		0x00200000	/* literal output */
+#define		TOSTOP		0x00400000	/*SIGSTOP on background output*/
+#define		FLUSHO		0x00800000	/* flush output to terminal */
+#define		NOHANG		0x01000000	/* (no-op) was no SIGHUP on carrier drop */
+#define		L001000		0x02000000
+#define		CRTKIL		0x04000000	/* kill line with " \b " */
+#define		PASS8		0x08000000
+#define		CTLECH		0x10000000	/* echo control chars as ^X */
+#define		PENDIN		0x20000000	/* tp->t_rawq needs reread */
+#define		DECCTQ		0x40000000	/* only ^Q starts after ^S */
+#define		NOFLSH		0x80000000	/* no output flush on signal */
+#define	TIOCLBIS	_IOW('t', 127, int)	/* bis local mode bits */
+#define	TIOCLBIC	_IOW('t', 126, int)	/* bic local mode bits */
+#define	TIOCLSET	_IOW('t', 125, int)	/* set entire local mode word */
+#define	TIOCLGET	_IOR('t', 124, int)	/* get local modes */
+#define		LCRTBS		(CRTBS>>16)
+#define		LPRTERA		(PRTERA>>16)
+#define		LCRTERA		(CRTERA>>16)
+#define		LTILDE		(TILDE>>16)
+#define		LMDMBUF		(MDMBUF>>16)
+#define		LLITOUT		(LITOUT>>16)
+#define		LTOSTOP		(TOSTOP>>16)
+#define		LFLUSHO		(FLUSHO>>16)
+#define		LNOHANG		(NOHANG>>16)
+#define		LCRTKIL		(CRTKIL>>16)
+#define		LPASS8		(PASS8>>16)
+#define		LCTLECH		(CTLECH>>16)
+#define		LPENDIN		(PENDIN>>16)
+#define		LDECCTQ		(DECCTQ>>16)
+#define		LNOFLSH		(NOFLSH>>16)
+#define	TIOCSLTC	_IOW('t',117,ltchars)/* set local special chars*/
+#define	TIOCGLTC	_IOR('t',116,ltchars)/* get local special chars*/
+#define OTIOCCONS	_IO('t', 98)	/* for hp300 -- sans int arg */
+#define	OTTYDISC	0
+#define	NETLDISC	1
+#define	NTTYDISC	2
+
+/* From 4.4 <sys/ttydev.h>.   */
+#ifdef USE_OLD_TTY
+#define B0	0
+#define B50	1
+#define B75	2
+#define B110	3
+#define B134	4
+#define B150	5
+#define B200	6
+#define B300	7
+#define B600	8
+#define B1200	9
+#define	B1800	10
+#define B2400	11
+#define B4800	12
+#define B9600	13
+#define EXTA	14
+#define EXTB	15
+#endif /* USE_OLD_TTY */
+
+
+#endif /* bits/ioctls.h */
diff --git a/sysdeps/mach/hurd/bits/local_lim.h b/sysdeps/mach/hurd/bits/local_lim.h
new file mode 100644
index 0000000000..e26aa248cb
--- /dev/null
+++ b/sysdeps/mach/hurd/bits/local_lim.h
@@ -0,0 +1,39 @@
+/* Minimum guaranteed maximum values for system limits.  Hurd version.
+   Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* GNU has no arbitrary fixed limits on these things, so we don't
+   define the macros.  Some things are unlimited.  Some are in fact
+   limited but the limit is run-time dependent and fetched with
+   `sysconf' or `pathconf'.
+
+   POSIX.1 requires that we define NGROUPS_MAX (though none of the others
+   is required).  GNU allows any number of supplementary groups,
+   dynamically allocated.  So we pick a number which seems vaguely
+   suitable, and `sysconf' will return a number at least as large.  */
+
+#define NGROUPS_MAX	256
+
+/* The maximum number of symbolic links that are allowed in a single file
+   name resolution.  When a further link is encountered, the call returns
+   ELOOP.  This name is a GNU extension; POSIX.1 has no such limit, and BSD
+   calls it MAXSYMLINKS in <sys/param.h>.  */
+
+#ifdef __USE_GNU		/* 1003.1a defines this */
+#define	SYMLOOP_MAX	8
+#endif
diff --git a/sysdeps/mach/hurd/bits/posix_opt.h b/sysdeps/mach/hurd/bits/posix_opt.h
new file mode 100644
index 0000000000..045b4b6666
--- /dev/null
+++ b/sysdeps/mach/hurd/bits/posix_opt.h
@@ -0,0 +1,21 @@
+/* Posix options supported by the GNU Hurd port of GNU libc. */
+
+#define _POSIX_JOB_CONTROL	1
+#define _POSIX_SAVED_IDS	1
+#define _POSIX_VDISABLE		((unsigned char) -1)
+
+/* Different Hurd filesystems might do these differently. */
+#undef _POSIX_CHOWN_RESTRICTED
+#undef _POSIX_NO_TRUNC
+/* Posix options supported by the GNU Hurd port of GNU libc. */ 
+
+#define _POSIX_JOB_CONTROL	1
+#define _POSIX_SAVED_IDS	1
+#define _POSIX_VDISABLE		((unsigned char) -1)
+
+/* Different Hurd filesystems might do these differently. */
+#undef _POSIX_CHOWN_RESTRICTED
+#undef _POSIX_NO_TRUNC
+
+
+
diff --git a/sysdeps/mach/hurd/bits/stat.h b/sysdeps/mach/hurd/bits/stat.h
new file mode 100644
index 0000000000..2110a73aae
--- /dev/null
+++ b/sysdeps/mach/hurd/bits/stat.h
@@ -0,0 +1,136 @@
+/* Copyright (C) 1992, 1993, 1994, 1996, 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/*
+ * Never include this file directly; use <sys/stat.h> instead.
+ */
+
+#ifndef	_BITS_STAT_H
+#define	_BITS_STAT_H	1
+
+#include <bits/types.h>
+
+/* NOTE: The size of this structure (32 ints) is known in
+   <hurd/hurd_types.defs>, since it is used in the `io_stat' RPC.  MiG
+   does not cope at all well with the passed C structure not being of
+   the expected size.  There are some filler words at the end to allow
+   for future expansion.  To increase the size of the structure used
+   in the RPC and retain binary compatibility, we would need to assign
+   a new message number.  */
+
+struct stat
+  {
+    int st_fstype;		/* File system type.  */
+    __fsid_t st_fsid;		/* File system ID.  */
+#define	st_dev	st_fsid
+
+    __ino_t st_ino;		/* File number.  */
+    unsigned int st_gen;	/* To detect reuse of file numbers.  */
+    __dev_t st_rdev;		/* Device if special file.  */
+    __mode_t st_mode;		/* File mode.  */
+    __nlink_t st_nlink;		/* Number of links.  */
+
+    __uid_t st_uid;		/* Owner.  */
+    __gid_t st_gid;		/* Owning group.  */
+
+    __off_t st_size;		/* Size in bytes.  */
+
+    __time_t st_atime;		/* Access time, seconds */
+    unsigned long int st_atime_usec; /* and microseconds.  */
+    __time_t st_mtime;		/* Modification time, seconds */
+    unsigned long int st_mtime_usec; /* and microseconds.  */
+    __time_t st_ctime;		/* Status change time, seconds */
+    unsigned long int st_ctime_usec; /* and microseconds.  */
+
+    unsigned int st_blksize;	/* Optimal size for I/O.  */
+
+#define	_STATBUF_ST_BLKSIZE	/* Tell code we have this member.  */
+
+    unsigned int st_blocks;	/* Number of 512-byte blocks allocated.
+				   Not related to `st_blksize'.  */
+
+    __uid_t st_author;		/* File author.  */
+
+    unsigned int st_flags;	/* User-defined flags.
+				   High 16 bits can be set only by root.  */
+
+#define _SPARE_SIZE	((sizeof (__fsid_t) == sizeof (int)) ? 12 : 11)
+    int st_spare[_SPARE_SIZE];	/* Room for future expansion.  */
+#undef _SPARE_SIZE
+  };
+
+/* Encoding of the file mode.  */
+
+#define	__S_IFMT	0170000	/* These bits determine file type.  */
+
+/* File types.  */
+#define	__S_IFDIR	0040000	/* Directory.  */
+#define	__S_IFCHR	0020000	/* Character device.  */
+#define	__S_IFBLK	0060000	/* Block device.  */
+#define	__S_IFREG	0100000	/* Regular file.  */
+#define	__S_IFLNK	0120000	/* Symbolic link.  */
+#define	__S_IFSOCK	0140000	/* Socket.  */
+#define	__S_IFIFO	0010000	/* FIFO.  */
+
+/* Protection bits.  */
+
+#define	__S_ISUID	04000	/* Set user ID on execution.  */
+#define	__S_ISGID	02000	/* Set group ID on execution.  */
+#define	__S_ISVTX	01000	/* Save swapped text after use (sticky).  */
+#define	__S_IREAD	00400	/* Read by owner.  */
+#define	__S_IWRITE	00200	/* Write by owner.  */
+#define	__S_IEXEC	00100	/* Execute by owner.  */
+
+
+#ifdef	__USE_GNU
+/* If set, there is no benefit in caching the contents of this file.  */
+#define S_INOCACHE	000000200000
+
+/* If the S_IUSEUNK bit is set, then the S_IUNKNOWN bits (see below)
+   control access for unknown users.  If S_IUSEUNK is clear, then unknown
+   users are treated as "others" for purposes of access control.  */
+#define S_IUSEUNK	000000400000
+/* Mask of protection bits for unknown users (no effective IDs at all).  */
+#define S_IUNKNOWN      000007000000
+/* Shift S_IREAD, S_IWRITE, S_IEXEC left this many bits to produce the
+   protection bits for unknown users.  */
+#define S_IUNKSHIFT	12
+
+/* Read only bits: */
+
+/* There is a passive translator set for this file */
+#define S_IPTRANS	000010000000
+/* There is an active translator running on this file */
+#define S_IATRANS	000020000000
+/* This is the root of a filesystem (or single node translator) */
+#define S_IROOT		000040000000
+/* All the bits relevant to translators */
+#define S_ITRANS	000070000000
+
+/* ALL the unused bits.  */
+#define	S_ISPARE	(~(S_IFMT|S_ITRANS|S_INOCACHE|    \
+			   S_IUSEUNK|S_IUNKNOWN|07777))
+#endif
+
+/* Default file creation mask (umask).  */
+#ifdef	__USE_BSD
+#define	CMASK		0022
+#endif
+
+
+#endif /* bits/stat.h */