diff options
-rw-r--r-- | ChangeLog | 35 | ||||
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | argp/argp.h | 10 | ||||
-rw-r--r-- | bits/errno.h | 44 | ||||
-rw-r--r-- | include/errno.h | 11 | ||||
-rw-r--r-- | stdlib/errno.h | 62 | ||||
-rw-r--r-- | string/argz.h | 10 | ||||
-rw-r--r-- | sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S | 3 | ||||
-rw-r--r-- | sysdeps/i386/i686/fpu/multiarch/s_sincosf-sse2.S | 3 | ||||
-rw-r--r-- | sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S | 3 | ||||
-rw-r--r-- | sysdeps/mach/hurd/bits/errno.h | 707 | ||||
-rw-r--r-- | sysdeps/mach/hurd/errnos.awk | 206 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/bits/errno.h | 42 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/bits/errno.h | 43 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/hppa/bits/errno.h | 39 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/mips/bits/errno.h | 41 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/bits/errno.h | 42 | ||||
-rw-r--r-- | sysdeps/x86_64/fpu/s_cosf.S | 3 | ||||
-rw-r--r-- | sysdeps/x86_64/fpu/s_sincosf.S | 3 | ||||
-rw-r--r-- | sysdeps/x86_64/fpu/s_sinf.S | 3 |
20 files changed, 713 insertions, 601 deletions
diff --git a/ChangeLog b/ChangeLog index f7c9635aa3..0d63b39b2e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,40 @@ 2017-06-14 Zack Weinberg <zackw@panix.com> + * stdlib/errno.h: Remove __need_Emath and __need_error_t logic. + Reorganize file. Declare errno here. When __ASSEMBLER__ is + defined, don't declare anything other than the E-constants. + + * include/errno.h: Change conditional for exposing internal + declarations to (not _ISOMAC and not __ASSEMBLER__). + * bits/errno.h: Remove logic for __need_Emath. Document + requirements for a port-specific bits/errno.h. + + * sysdeps/unix/sysv/linux/bits/errno.h + * sysdeps/unix/sysv/linux/alpha/bits/errno.h + * sysdeps/unix/sysv/linux/hppa/bits/errno.h + * sysdeps/unix/sysv/linux/mips/bits/errno.h + * sysdeps/unix/sysv/linux/sparc/bits/errno.h: + Add multiple-include guard and check against improper inclusion. + Remove __need_Emath logic. Don't declare errno here. Ensure all + constants are defined as simple integer literals. Consistent + formatting. + * sysdeps/mach/hurd/errnos.awk: Likewise. Only define error_t and + enum __error_t_codes if __ASSEMBLER__ is not defined. + * sysdeps/mach/hurd/bits/errno.h: Regenerate. + + * argp/argp.h, string/argz.h: Don't define __need_error_t before + including errno.h. + * sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S + * sysdeps/i386/i686/fpu/multiarch/s_sincosf-sse2.S + * sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S + * sysdeps/x86_64/fpu/s_cosf.S + * sysdeps/x86_64/fpu/s_sincosf.S + * sysdeps/x86_64/fpu/s_sinf.S: + Just include errno.h; don't define __need_Emath or include + bits/errno.h directly. + +2017-06-14 Zack Weinberg <zackw@panix.com> + * bits/uio_lim.h, sysdeps/unix/sysv/linux/bits/uio_lim.h * bits/uio-ext.h, sysdeps/unix/sysv/linux/bits/uio-ext.h: New file. * bits/uio.h, sysdeps/unix/sysv/linux/bits/uio.h: Delete file. diff --git a/NEWS b/NEWS index 991ee63f7c..8d35bd6c95 100644 --- a/NEWS +++ b/NEWS @@ -11,6 +11,10 @@ Version 2.26 transliteration tables are all updated to Unicode 9.0.0, using generator scripts contributed by Mike FABIAN (Red Hat). +* errno.h is now safe to use from C-preprocessed assembly language on all + supported operating systems. In this context, it will only define the + Exxxx constants, as preprocessor macros expanding to integer literals. + * The rpcgen, librpcsvc and related headers will only be built and installed when glibc is configured with --enable-obsolete-rpc. This allows alternative RPC implementations, like TIRPC, to be used diff --git a/argp/argp.h b/argp/argp.h index 86b8e5a1e9..08b48e1cf1 100644 --- a/argp/argp.h +++ b/argp/argp.h @@ -24,16 +24,16 @@ #include <ctype.h> #include <getopt.h> #include <limits.h> - -#define __need_error_t #include <errno.h> + +__BEGIN_DECLS +/* error_t may or may not be available from errno.h, depending on the + operating system. */ #ifndef __error_t_defined +# define __error_t_defined 1 typedef int error_t; -# define __error_t_defined #endif - -__BEGIN_DECLS /* A description of a particular option. A pointer to an array of these is passed in the OPTIONS field of an argp structure. Each option diff --git a/bits/errno.h b/bits/errno.h index cd4fcfa428..11180711d7 100644 --- a/bits/errno.h +++ b/bits/errno.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. +/* Error constants. Generic version. + Copyright (C) 1991-2017 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 @@ -15,20 +16,35 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -/* This file defines the `errno' constants. */ +/* This file defines the errno constants. */ -#if !defined __Emath_defined && (defined _ERRNO_H || defined __need_Emath) -#undef __need_Emath -#define __Emath_defined 1 +#ifndef _BITS_ERRNO_H +#define _BITS_ERRNO_H 1 -# define EDOM XXX <--- fill in what is actually needed -# define EILSEQ XXX <--- fill in what is actually needed -# define ERANGE XXX <--- fill in what is actually needed +#if !defined _ERRNO_H +# error "Never include <bits/errno.h> directly; use <errno.h> instead." #endif -#ifdef _ERRNO_H -# error "Define here all the missing error messages for the port. These" -# error "must match the numbers of the kernel." -# define Exxxx XXX -... -#endif +#error "Generic bits/errno.h included -- port is incomplete." + +/* Authors of new ports of the GNU C Library must override this file + with their own bits/errno.h in an appropriate subdirectory of + sysdeps/. Its function is to define all of the error constants + from C2011 and POSIX.1-2008, with values appropriate to the + operating system, and any additional OS-specific error constants. + + C2011 requires all error constants to be object-like macros that + expand to "integer constant expressions with type int, positive + values, and suitable for use in #if directives". Moreover, all of + their names must begin with a capital E, followed immediately by + either another capital letter, or a digit. It is OK to define + macros that are not error constants, but only in the implementation + namespace. + + errno.h is sometimes included from assembly language. Therefore, + when __ASSEMBLER__ is defined, bits/errno.h may only define macros; + it may not make any other kind of C declaration or definition. + Also, the error constants should, if at all possible, expand to + simple decimal or hexadecimal numbers. */ + +#endif /* bits/errno.h. */ diff --git a/include/errno.h b/include/errno.h index f140631b31..3c3d2288c8 100644 --- a/include/errno.h +++ b/include/errno.h @@ -1,8 +1,6 @@ #ifndef _ERRNO_H - #include <stdlib/errno.h> - -#if defined _ERRNO_H && !defined _ISOMAC +#if !defined _ISOMAC && !defined __ASSEMBLER__ # if IS_IN (rtld) # include <dl-sysdep.h> @@ -38,15 +36,12 @@ extern __thread int errno attribute_tls_model_ie; # define __set_errno(val) (errno = (val)) -# ifndef __ASSEMBLER__ extern int *__errno_location (void) __THROW __attribute_const__ # if RTLD_PRIVATE_ERRNO attribute_hidden # endif ; libc_hidden_proto (__errno_location) -# endif - -#endif /* _ERRNO_H */ -#endif /* ! _ERRNO_H */ +#endif /* !_ISOMAC && !__ASSEMBLER__ */ +#endif /* !_ERRNO_H */ diff --git a/stdlib/errno.h b/stdlib/errno.h index c42514b448..fe08365e40 100644 --- a/stdlib/errno.h +++ b/stdlib/errno.h @@ -20,53 +20,41 @@ */ #ifndef _ERRNO_H +#define _ERRNO_H 1 -/* The includer defined __need_Emath if he wants only the definitions - of EDOM and ERANGE, and not everything else. */ -#ifndef __need_Emath -# define _ERRNO_H 1 -# include <features.h> -#endif +#include <features.h> -__BEGIN_DECLS - -/* Get the error number constants from the system-specific file. - This file will test __need_Emath and _ERRNO_H. */ +/* The system-specific definitions of the E* constants, as macros. */ #include <bits/errno.h> -#undef __need_Emath -#ifdef _ERRNO_H +/* When included from assembly language, this header only provides the + E* constants. */ +#ifndef __ASSEMBLER__ -/* Declare the `errno' variable, unless it's defined as a macro by - bits/errno.h. This is the case in GNU, where it is a per-thread - variable. This redeclaration using the macro still works, but it - will be a function declaration without a prototype and may trigger - a -Wstrict-prototypes warning. */ -#ifndef errno -extern int errno; -#endif +__BEGIN_DECLS -#ifdef __USE_GNU +/* The error code set by various library functions. */ +extern int *__errno_location (void) __THROW __attribute_const__; +# define errno (*__errno_location ()) + +# ifdef __USE_GNU /* The full and simple forms of the name with which the program was invoked. These variables are set up automatically at startup based on the value of argv[0]. */ -extern char *program_invocation_name, *program_invocation_short_name; -#endif /* __USE_GNU */ -#endif /* _ERRNO_H */ +extern char *program_invocation_name; +extern char *program_invocation_short_name; -__END_DECLS +/* bits/errno.h may have defined this type. If it didn't, provide a + fallback definition. */ +# ifndef __error_t_defined +# define __error_t_defined 1 +typedef int error_t; +# endif -#endif /* _ERRNO_H */ +# endif /* __USE_GNU */ -/* The Hurd <bits/errno.h> defines `error_t' as an enumerated type so - that printing `error_t' values in the debugger shows the names. We - might need this definition sometimes even if this file was included - before. */ -#if defined __USE_GNU || defined __need_error_t -# ifndef __error_t_defined -typedef int error_t; -# define __error_t_defined 1 -# endif -# undef __need_error_t -#endif +__END_DECLS + +#endif /* !__ASSEMBLER__ */ +#endif /* errno.h */ diff --git a/string/argz.h b/string/argz.h index f9d0ac9950..e07d74208a 100644 --- a/string/argz.h +++ b/string/argz.h @@ -20,18 +20,18 @@ #define _ARGZ_H 1 #include <features.h> - -#define __need_error_t #include <errno.h> #include <string.h> /* Need size_t, and strchr is called below. */ +__BEGIN_DECLS + +/* error_t may or may not be available from errno.h, depending on the + operating system. */ #ifndef __error_t_defined +# define __error_t_defined 1 typedef int error_t; #endif - -__BEGIN_DECLS - /* Make a '\0' separated arg vector from a unix argv vector, returning it in ARGZ, and the total length in LEN. If a memory allocation error occurs, ENOMEM is returned, otherwise 0. The result can be destroyed using free. */ diff --git a/sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S b/sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S index f37850d0b3..a5b76e9fb2 100644 --- a/sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S +++ b/sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S @@ -17,8 +17,7 @@ <http://www.gnu.org/licenses/>. */ #include <sysdep.h> -#define __need_Emath -#include <bits/errno.h> +#include <errno.h> /* Short algorithm description: * diff --git a/sysdeps/i386/i686/fpu/multiarch/s_sincosf-sse2.S b/sysdeps/i386/i686/fpu/multiarch/s_sincosf-sse2.S index f31a925522..1e99ee6416 100644 --- a/sysdeps/i386/i686/fpu/multiarch/s_sincosf-sse2.S +++ b/sysdeps/i386/i686/fpu/multiarch/s_sincosf-sse2.S @@ -17,8 +17,7 @@ <http://www.gnu.org/licenses/>. */ #include <sysdep.h> -#define __need_Emath -#include <bits/errno.h> +#include <errno.h> /* Short algorithm description: * diff --git a/sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S b/sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S index ee96018061..03b925491e 100644 --- a/sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S +++ b/sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S @@ -17,8 +17,7 @@ <http://www.gnu.org/licenses/>. */ #include <sysdep.h> -#define __need_Emath -#include <bits/errno.h> +#include <errno.h> /* Short algorithm description: * diff --git a/sysdeps/mach/hurd/bits/errno.h b/sysdeps/mach/hurd/bits/errno.h index d20ffe654a..f0a11af9ea 100644 --- a/sysdeps/mach/hurd/bits/errno.h +++ b/sysdeps/mach/hurd/bits/errno.h @@ -1,329 +1,418 @@ -/* This file generated by errnos.awk. */ +/* This file generated by errnos.awk from + errno.texi + mach/message.h + mach/kern_return.h + mach/mig_errors.h + device/device_types.h + Do not edit this file; edit errnos.awk and regenerate it. */ -/* The Hurd uses Mach error system 0x10, currently only subsystem 0. */ -#ifndef _HURD_ERRNO -#define _HURD_ERRNO(n) ((0x10 << 26) | ((n) & 0x3fff)) +#ifndef _BITS_ERRNO_H +#define _BITS_ERRNO_H 1 + +#if !defined _ERRNO_H +# error "Never include <bits/errno.h> directly; use <errno.h> instead." #endif -#ifdef _ERRNO_H +#ifndef __ASSEMBLER__ enum __error_t_codes { - /* The value zero always means success and it is perfectly fine for - code to use 0 explicitly (or implicitly, e.g. via Boolean coercion). - Having an enum entry for zero both makes the debugger print the name - for error_t-typed zero values, and prevents the compiler from - issuing warnings about 'case 0:' in a switch on an error_t-typed - value. */ - ESUCCESS = 0, + /* The value zero always means success and it is perfectly fine + for code to use 0 explicitly (or implicitly, e.g. via Boolean + coercion.) Having an enum entry for zero both makes the + debugger print the name for error_t-typed zero values, and + prevents the compiler from issuing warnings about 'case 0:' + in a switch on an error_t-typed value. */ + ESUCCESS = 0, -#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) /* No such device or address */ - 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)/* No such 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)/* Disk quota exceeded */ - ESTALE = _HURD_ERRNO (70), -#define ESTALE _HURD_ERRNO (70)/* Stale 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 */ - ENOTSUP = _HURD_ERRNO (118), -#define ENOTSUP _HURD_ERRNO (118)/* Not supported */ - 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 */ - ECANCELED = _HURD_ERRNO (119), -#define ECANCELED _HURD_ERRNO (119)/* Operation canceled */ + /* The Hurd uses Mach error system 0x10, subsystem 0. */ + EPERM = 0x40000001, /* Operation not permitted */ + ENOENT = 0x40000002, /* No such file or directory */ + ESRCH = 0x40000003, /* No such process */ + EINTR = 0x40000004, /* Interrupted system call */ + EIO = 0x40000005, /* Input/output error */ + ENXIO = 0x40000006, /* No such device or address */ + E2BIG = 0x40000007, /* Argument list too long */ + ENOEXEC = 0x40000008, /* Exec format error */ + EBADF = 0x40000009, /* Bad file descriptor */ + ECHILD = 0x4000000a, /* No child processes */ + EDEADLK = 0x4000000b, /* Resource deadlock avoided */ + ENOMEM = 0x4000000c, /* Cannot allocate memory */ + EACCES = 0x4000000d, /* Permission denied */ + EFAULT = 0x4000000e, /* Bad address */ + ENOTBLK = 0x4000000f, /* Block device required */ + EBUSY = 0x40000010, /* Device or resource busy */ + EEXIST = 0x40000011, /* File exists */ + EXDEV = 0x40000012, /* Invalid cross-device link */ + ENODEV = 0x40000013, /* No such device */ + ENOTDIR = 0x40000014, /* Not a directory */ + EISDIR = 0x40000015, /* Is a directory */ + EINVAL = 0x40000016, /* Invalid argument */ + EMFILE = 0x40000018, /* Too many open files */ + ENFILE = 0x40000017, /* Too many open files in system */ + ENOTTY = 0x40000019, /* Inappropriate ioctl for device */ + ETXTBSY = 0x4000001a, /* Text file busy */ + EFBIG = 0x4000001b, /* File too large */ + ENOSPC = 0x4000001c, /* No space left on device */ + ESPIPE = 0x4000001d, /* Illegal seek */ + EROFS = 0x4000001e, /* Read-only file system */ + EMLINK = 0x4000001f, /* Too many links */ + EPIPE = 0x40000020, /* Broken pipe */ + EDOM = 0x40000021, /* Numerical argument out of domain */ + ERANGE = 0x40000022, /* Numerical result out of range */ + EAGAIN = 0x40000023, /* Resource temporarily unavailable */ + EINPROGRESS = 0x40000024, /* Operation now in progress */ + EALREADY = 0x40000025, /* Operation already in progress */ + ENOTSOCK = 0x40000026, /* Socket operation on non-socket */ + EMSGSIZE = 0x40000028, /* Message too long */ + EPROTOTYPE = 0x40000029, /* Protocol wrong type for socket */ + ENOPROTOOPT = 0x4000002a, /* Protocol not available */ + EPROTONOSUPPORT = 0x4000002b, /* Protocol not supported */ + ESOCKTNOSUPPORT = 0x4000002c, /* Socket type not supported */ + EOPNOTSUPP = 0x4000002d, /* Operation not supported */ + EPFNOSUPPORT = 0x4000002e, /* Protocol family not supported */ + EAFNOSUPPORT = 0x4000002f, /* Address family not supported by protocol */ + EADDRINUSE = 0x40000030, /* Address already in use */ + EADDRNOTAVAIL = 0x40000031, /* Cannot assign requested address */ + ENETDOWN = 0x40000032, /* Network is down */ + ENETUNREACH = 0x40000033, /* Network is unreachable */ + ENETRESET = 0x40000034, /* Network dropped connection on reset */ + ECONNABORTED = 0x40000035, /* Software caused connection abort */ + ECONNRESET = 0x40000036, /* Connection reset by peer */ + ENOBUFS = 0x40000037, /* No buffer space available */ + EISCONN = 0x40000038, /* Transport endpoint is already connected */ + ENOTCONN = 0x40000039, /* Transport endpoint is not connected */ + EDESTADDRREQ = 0x40000027, /* Destination address required */ + ESHUTDOWN = 0x4000003a, /* Cannot send after transport endpoint shutdown */ + ETOOMANYREFS = 0x4000003b, /* Too many references: cannot splice */ + ETIMEDOUT = 0x4000003c, /* Connection timed out */ + ECONNREFUSED = 0x4000003d, /* Connection refused */ + ELOOP = 0x4000003e, /* Too many levels of symbolic links */ + ENAMETOOLONG = 0x4000003f, /* File name too long */ + EHOSTDOWN = 0x40000040, /* Host is down */ + EHOSTUNREACH = 0x40000041, /* No route to host */ + ENOTEMPTY = 0x40000042, /* Directory not empty */ + EPROCLIM = 0x40000043, /* Too many processes */ + EUSERS = 0x40000044, /* Too many users */ + EDQUOT = 0x40000045, /* Disk quota exceeded */ + ESTALE = 0x40000046, /* Stale file handle */ + EREMOTE = 0x40000047, /* Object is remote */ + EBADRPC = 0x40000048, /* RPC struct is bad */ + ERPCMISMATCH = 0x40000049, /* RPC version wrong */ + EPROGUNAVAIL = 0x4000004a, /* RPC program not available */ + EPROGMISMATCH = 0x4000004b, /* RPC program version wrong */ + EPROCUNAVAIL = 0x4000004c, /* RPC bad procedure for program */ + ENOLCK = 0x4000004d, /* No locks available */ + EFTYPE = 0x4000004f, /* Inappropriate file type or format */ + EAUTH = 0x40000050, /* Authentication error */ + ENEEDAUTH = 0x40000051, /* Need authenticator */ + ENOSYS = 0x4000004e, /* Function not implemented */ + ENOTSUP = 0x40000076, /* Not supported */ + EILSEQ = 0x4000006a, /* Invalid or incomplete multibyte or wide character */ + EBACKGROUND = 0x40000064, /* Inappropriate operation for background process */ + EDIED = 0x40000065, /* Translator died */ + ED = 0x40000066, /* ? */ + EGREGIOUS = 0x40000067, /* You really blew it this time */ + EIEIO = 0x40000068, /* Computer bought the farm */ + EGRATUITOUS = 0x40000069, /* Gratuitous error */ + EBADMSG = 0x4000006b, /* Bad message */ + EIDRM = 0x4000006c, /* Identifier removed */ + EMULTIHOP = 0x4000006d, /* Multihop attempted */ + ENODATA = 0x4000006e, /* No data available */ + ENOLINK = 0x4000006f, /* Link has been severed */ + ENOMSG = 0x40000070, /* No message of desired type */ + ENOSR = 0x40000071, /* Out of streams resources */ + ENOSTR = 0x40000072, /* Device not a stream */ + EOVERFLOW = 0x40000073, /* Value too large for defined data type */ + EPROTO = 0x40000074, /* Protocol error */ + ETIME = 0x40000075, /* Timer expired */ + ECANCELED = 0x40000077, /* Operation canceled */ - /* 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/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/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, + EKERN_TIMEDOUT = 27, + EKERN_INTERRUPTED = 28, - /* 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 <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 */ +/* 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 */ + /* Because the C standard requires that errno have type 'int', + this enumeration must be a signed type. */ + __FORCE_ERROR_T_CODES_SIGNED = -1 }; -#define _HURD_ERRNOS 120 - -/* 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 +/* 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 +# if !defined __error_t_defined && defined __USE_GNU +# define __error_t_defined 1 typedef enum __error_t_codes error_t; -#define __error_t_defined 1 -#endif +# endif + +#endif /* not __ASSEMBLER__ */ + +/* The C standard requires that all of the E-constants be + defined as macros. */ + +#define EPERM 0x40000001 +#define ENOENT 0x40000002 +#define ESRCH 0x40000003 +#define EINTR 0x40000004 +#define EIO 0x40000005 +#define ENXIO 0x40000006 +#define E2BIG 0x40000007 +#define ENOEXEC 0x40000008 +#define EBADF 0x40000009 +#define ECHILD 0x4000000a +#define EDEADLK 0x4000000b +#define ENOMEM 0x4000000c +#define EACCES 0x4000000d +#define EFAULT 0x4000000e +#define ENOTBLK 0x4000000f +#define EBUSY 0x40000010 +#define EEXIST 0x40000011 +#define EXDEV 0x40000012 +#define ENODEV 0x40000013 +#define ENOTDIR 0x40000014 +#define EISDIR 0x40000015 +#define EINVAL 0x40000016 +#define EMFILE 0x40000018 +#define ENFILE 0x40000017 +#define ENOTTY 0x40000019 +#define ETXTBSY 0x4000001a +#define EFBIG 0x4000001b +#define ENOSPC 0x4000001c +#define ESPIPE 0x4000001d +#define EROFS 0x4000001e +#define EMLINK 0x4000001f +#define EPIPE 0x40000020 +#define EDOM 0x40000021 +#define ERANGE 0x40000022 +#define EAGAIN 0x40000023 +#define EWOULDBLOCK EAGAIN +#define EINPROGRESS 0x40000024 +#define EALREADY 0x40000025 +#define ENOTSOCK 0x40000026 +#define EMSGSIZE 0x40000028 +#define EPROTOTYPE 0x40000029 +#define ENOPROTOOPT 0x4000002a +#define EPROTONOSUPPORT 0x4000002b +#define ESOCKTNOSUPPORT 0x4000002c +#define EOPNOTSUPP 0x4000002d +#define EPFNOSUPPORT 0x4000002e +#define EAFNOSUPPORT 0x4000002f +#define EADDRINUSE 0x40000030 +#define EADDRNOTAVAIL 0x40000031 +#define ENETDOWN 0x40000032 +#define ENETUNREACH 0x40000033 +#define ENETRESET 0x40000034 +#define ECONNABORTED 0x40000035 +#define ECONNRESET 0x40000036 +#define ENOBUFS 0x40000037 +#define EISCONN 0x40000038 +#define ENOTCONN 0x40000039 +#define EDESTADDRREQ 0x40000027 +#define ESHUTDOWN 0x4000003a +#define ETOOMANYREFS 0x4000003b +#define ETIMEDOUT 0x4000003c +#define ECONNREFUSED 0x4000003d +#define ELOOP 0x4000003e +#define ENAMETOOLONG 0x4000003f +#define EHOSTDOWN 0x40000040 +#define EHOSTUNREACH 0x40000041 +#define ENOTEMPTY 0x40000042 +#define EPROCLIM 0x40000043 +#define EUSERS 0x40000044 +#define EDQUOT 0x40000045 +#define ESTALE 0x40000046 +#define EREMOTE 0x40000047 +#define EBADRPC 0x40000048 +#define ERPCMISMATCH 0x40000049 +#define EPROGUNAVAIL 0x4000004a +#define EPROGMISMATCH 0x4000004b +#define EPROCUNAVAIL 0x4000004c +#define ENOLCK 0x4000004d +#define EFTYPE 0x4000004f +#define EAUTH 0x40000050 +#define ENEEDAUTH 0x40000051 +#define ENOSYS 0x4000004e +#define ENOTSUP 0x40000076 +#define EILSEQ 0x4000006a +#define EBACKGROUND 0x40000064 +#define EDIED 0x40000065 +#define ED 0x40000066 +#define EGREGIOUS 0x40000067 +#define EIEIO 0x40000068 +#define EGRATUITOUS 0x40000069 +#define EBADMSG 0x4000006b +#define EIDRM 0x4000006c +#define EMULTIHOP 0x4000006d +#define ENODATA 0x4000006e +#define ENOLINK 0x4000006f +#define ENOMSG 0x40000070 +#define ENOSR 0x40000071 +#define ENOSTR 0x40000072 +#define EOVERFLOW 0x40000073 +#define EPROTO 0x40000074 +#define ETIME 0x40000075 +#define ECANCELED 0x40000077 + +/* Errors from <mach/message.h>. */ +#define EMACH_SEND_IN_PROGRESS 0x10000001 +#define EMACH_SEND_INVALID_DATA 0x10000002 +#define EMACH_SEND_INVALID_DEST 0x10000003 +#define EMACH_SEND_TIMED_OUT 0x10000004 +#define EMACH_SEND_WILL_NOTIFY 0x10000005 +#define EMACH_SEND_NOTIFY_IN_PROGRESS 0x10000006 +#define EMACH_SEND_INTERRUPTED 0x10000007 +#define EMACH_SEND_MSG_TOO_SMALL 0x10000008 +#define EMACH_SEND_INVALID_REPLY 0x10000009 +#define EMACH_SEND_INVALID_RIGHT 0x1000000a +#define EMACH_SEND_INVALID_NOTIFY 0x1000000b +#define EMACH_SEND_INVALID_MEMORY 0x1000000c +#define EMACH_SEND_NO_BUFFER 0x1000000d +#define EMACH_SEND_NO_NOTIFY 0x1000000e +#define EMACH_SEND_INVALID_TYPE 0x1000000f +#define EMACH_SEND_INVALID_HEADER 0x10000010 +#define EMACH_RCV_IN_PROGRESS 0x10004001 +#define EMACH_RCV_INVALID_NAME 0x10004002 +#define EMACH_RCV_TIMED_OUT 0x10004003 +#define EMACH_RCV_TOO_LARGE 0x10004004 +#define EMACH_RCV_INTERRUPTED 0x10004005 +#define EMACH_RCV_PORT_CHANGED 0x10004006 +#define EMACH_RCV_INVALID_NOTIFY 0x10004007 +#define EMACH_RCV_INVALID_DATA 0x10004008 +#define EMACH_RCV_PORT_DIED 0x10004009 +#define EMACH_RCV_IN_SET 0x1000400a +#define EMACH_RCV_HEADER_ERROR 0x1000400b +#define EMACH_RCV_BODY_ERROR 0x1000400c + +/* Errors from <mach/kern_return.h>. */ +#define EKERN_INVALID_ADDRESS 1 +#define EKERN_PROTECTION_FAILURE 2 +#define EKERN_NO_SPACE 3 +#define EKERN_INVALID_ARGUMENT 4 +#define EKERN_FAILURE 5 +#define EKERN_RESOURCE_SHORTAGE 6 +#define EKERN_NOT_RECEIVER 7 +#define EKERN_NO_ACCESS 8 +#define EKERN_MEMORY_FAILURE 9 +#define EKERN_MEMORY_ERROR 10 +#define EKERN_NOT_IN_SET 12 +#define EKERN_NAME_EXISTS 13 +#define EKERN_ABORTED 14 +#define EKERN_INVALID_NAME 15 +#define EKERN_INVALID_TASK 16 +#define EKERN_INVALID_RIGHT 17 +#define EKERN_INVALID_VALUE 18 +#define EKERN_UREFS_OVERFLOW 19 +#define EKERN_INVALID_CAPABILITY 20 +#define EKERN_RIGHT_EXISTS 21 +#define EKERN_INVALID_HOST 22 +#define EKERN_MEMORY_PRESENT 23 +#define EKERN_WRITE_PROTECTION_FAILURE 24 +#define EKERN_TERMINATED 26 +#define EKERN_TIMEDOUT 27 +#define EKERN_INTERRUPTED 28 -/* Return the current thread's location for `errno'. - The syntax of this function allows redeclarations like `int errno'. */ -extern int *__errno_location (void) __THROW __attribute__ ((__const__)); +/* Errors from <mach/mig_errors.h>. */ +#define EMIG_TYPE_ERROR -300 +#define EMIG_REPLY_MISMATCH -301 +#define EMIG_REMOTE_ERROR -302 +#define EMIG_BAD_ID -303 +#define EMIG_BAD_ARGUMENTS -304 +#define EMIG_NO_REPLY -305 +#define EMIG_EXCEPTION -306 +#define EMIG_ARRAY_TOO_LARGE -307 +#define EMIG_SERVER_DIED -308 +#define EMIG_DESTROY_REQUEST -309 -#define errno (*__errno_location ()) +/* Errors from <device/device_types.h>. */ +#define ED_IO_ERROR 2500 +#define ED_WOULD_BLOCK 2501 +#define ED_NO_SUCH_DEVICE 2502 +#define ED_ALREADY_OPEN 2503 +#define ED_DEVICE_DOWN 2504 +#define ED_INVALID_OPERATION 2505 +#define ED_INVALID_RECNUM 2506 +#define ED_INVALID_SIZE 2507 +#define ED_NO_MEMORY 2508 +#define ED_READ_ONLY 2509 -#endif /* <errno.h> included. */ +#define _HURD_ERRNOS 120 -#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. */ +#endif /* bits/errno.h. */ diff --git a/sysdeps/mach/hurd/errnos.awk b/sysdeps/mach/hurd/errnos.awk index 1cd2a0ac96..1fdca40d38 100644 --- a/sysdeps/mach/hurd/errnos.awk +++ b/sysdeps/mach/hurd/errnos.awk @@ -19,71 +19,74 @@ # @errno{ENOSYS, 123, Function not implemented} BEGIN { - print "/* This file generated by errnos.awk. */"; - print ""; - print "/* The Hurd uses Mach error system 0x10, currently only subsystem 0. */"; - print "#ifndef _HURD_ERRNO"; - print "#define _HURD_ERRNO(n)\t((0x10 << 26) | ((n) & 0x3fff))"; - print "#endif"; + print "/* This file generated by errnos.awk from"; + for (i = 1; i < ARGC; i++) + { + arg = ARGV[i]; + sub(/.*(manual|include)\//, "", arg) + print " " arg; + } + print " Do not edit this file; edit errnos.awk and regenerate it. */"; print ""; - print "#ifdef _ERRNO_H\n"; - print "enum __error_t_codes\n{"; - print "\t/* The value zero always means success and it is perfectly fine for"; - print "\t code to use 0 explicitly (or implicitly, e.g. via Boolean coercion)."; - print "\t Having an enum entry for zero both makes the debugger print the name"; - print "\t for error_t-typed zero values, and prevents the compiler from"; - print "\t issuing warnings about 'case 0:' in a switch on an error_t-typed"; - print "\t value. */"; - print "\tESUCCESS = 0," + print "#ifndef _BITS_ERRNO_H"; + print "#define _BITS_ERRNO_H 1"; print ""; + print "#if !defined _ERRNO_H"; + print "# error \"Never include <bits/errno.h> directly; use <errno.h> instead.\""; + print "#endif"; + maxerrno = 0; + maxerrlen = 0; in_mach_errors = ""; - in_math = 0; - edom = erange = ""; - print "#undef EDOM\n#undef ERANGE"; - lno = 0; + seq = 0; } /^@errno\{/ \ { - etext = ""; - for (i = 3; i <= NF; ++i) - etext = etext " " $i; - etext = substr(etext, 1, length(etext)-1) - e = substr($1, 8, length($1)-8) + if (length(e) > maxerrlen) + maxerrlen = length(e); if (e == "EWOULDBLOCK") { - lines[lno++]="#define EWOULDBLOCK EAGAIN /* Operation would block */"; + econsts[seq] = e; + errnos[seq] = "EAGAIN"; + seq++; next; } - errno = substr($2, 1, length($2)-1) + 0 + errno = substr($2, 1, length($2)-1) + 0; if (errno == 0) next; - if (errno > maxerrno) maxerrno = errno; - x = sprintf ("%-40s/*%s */", sprintf ("%-24s%s", "#define\t" e, - "_HURD_ERRNO (" errno ")"), - etext); - if (e == "EDOM") - edom = x; - else if (e == "ERANGE") - erange = x; - comma[lno] = 1; - lines[lno++] = sprintf("\t%-16s= _HURD_ERRNO (%d)", e, errno); - lines[lno++] = x; + if (errno > 0x3ffff) + { + printf("%s:%d: errno value %d too large for the Hurd\n", + FILENAME, NR, errno) >> "/dev/stderr"; + exit 1; + } + if (errno > maxerrno) + maxerrno = errno; + + etext = ""; + for (i = 3; i <= NF; ++i) + etext = etext " " $i; + etext = substr(etext, 2, length(etext)-2); + + econsts[seq] = e; + errnos[seq] = sprintf("0x%08x", 0x40000000 + errno); + etexts[seq] = etext; + seq++; next; } NF == 3 && $1 == "#define" && $2 == "MACH_SEND_IN_PROGRESS" \ { in_mach_errors = FILENAME; - lines[lno++] = "\n\t/* Errors from <mach/message.h>. */"; + annot[seq++] = "\n/* Errors from <mach/message.h>. */"; } NF == 3 && $1 == "#define" && $2 == "KERN_SUCCESS" \ { in_mach_errors = FILENAME; - lines[lno++] = "\n\t/* Errors from <mach/kern_return.h>. */"; + annot[seq++] = "\n/* Errors from <mach/kern_return.h>. */"; next; } @@ -92,16 +95,24 @@ in_mach_errors != "" && $2 == "MACH_IPC_COMPAT" \ in_mach_errors = ""; } +# FIXME: mach/message.h and mach/kern_return.h do include error +# descriptions which we could slurp, but some of them are very long, +# we would need to word-wrap them. in_mach_errors == FILENAME && NF == 3 && $1 == "#define" \ { - comma[lno] = 1; - lines[lno++] = sprintf("\t%-32s= %s", "E" $2, $3); + e = "E" $2; + if (length(e) > maxerrlen) + maxerrlen = length(e); + econsts[seq] = e; + errnos[seq] = $3; + etexts[seq] = ""; + seq++; } $1 == "#define" && $2 == "_MACH_MIG_ERRORS_H_" \ { in_mig_errors = 1; - lines[lno++] = "\n\t/* Errors from <mach/mig_errors.h>. */"; + annot[seq++] = "\n/* Errors from <mach/mig_errors.h>. */"; next; } in_mig_errors && $1 == "#endif" && $3 == "_MACH_MIG_ERRORS_H_" \ @@ -112,17 +123,23 @@ in_mig_errors && $1 == "#endif" && $3 == "_MACH_MIG_ERRORS_H_" \ (in_mig_errors && $1 == "#define" && $3 <= -300) || \ (in_device_errors && $1 == "#define" && /D_/ && NF > 3) \ { - comment = ""; - for (i = 4; i <= NF; ++i) - comment = comment " " $i; - comma[lno] = 1; - lines[lno++] = sprintf("%-32s", sprintf ("\t%-24s= %s", "E" $2, $3)) comment; + etext = ""; + for (i = 5; i < NF; ++i) + etext = etext " " $i; + + e = "E" $2; + if (length(e) > maxerrlen) + maxerrlen = length(e); + econsts[seq] = e; + errnos[seq] = $3; + etexts[seq] = substr(etext, 2, length(etext)-1); + seq++; } $1 == "#define" && $2 == "D_SUCCESS" \ { in_device_errors = 1; - lines[lno++] = "\n\t/* Errors from <device/device_types.h>. */"; + annot[seq++] = "\n/* Errors from <device/device_types.h>. */"; next; } in_device_errors && $1 == "#endif" \ @@ -130,36 +147,73 @@ in_device_errors && $1 == "#endif" \ in_device_errors = 0; } +function print_errno_enum(maxseq) +{ + print ""; + print "#ifndef __ASSEMBLER__"; + print ""; + print "enum __error_t_codes"; + print "{"; + print " /* The value zero always means success and it is perfectly fine"; + print " for code to use 0 explicitly (or implicitly, e.g. via Boolean"; + print " coercion.) Having an enum entry for zero both makes the"; + print " debugger print the name for error_t-typed zero values, and"; + print " prevents the compiler from issuing warnings about 'case 0:'"; + print " in a switch on an error_t-typed value. */"; + printf(" %-*s = 0,\n", maxerrlen, "ESUCCESS"); + + print ""; + print " /* The Hurd uses Mach error system 0x10, subsystem 0. */"; + for (i = 0; i < maxseq; i++) + { + if (i in annot) + print annot[i]; + else if (i in etexts && etexts[i] != "") + printf(" %-*s = %s,\t/* %s */\n", + maxerrlen, econsts[i], errnos[i], etexts[i]); + else if (errnos[i] != "EAGAIN") + printf(" %-*s = %s,\n", maxerrlen, econsts[i], errnos[i]); + } + + print ""; + print " /* Because the C standard requires that errno have type 'int'," + print " this enumeration must be a signed type. */"; + print " __FORCE_ERROR_T_CODES_SIGNED = -1"; + print "};"; + print ""; + print "/* User-visible type of error codes. It is ok to use 'int' or"; + print " 'kern_return_t' for these, but with 'error_t' the debugger prints"; + print " symbolic values. */"; + print "# if !defined __error_t_defined && defined __USE_GNU"; + print "# define __error_t_defined 1"; + print "typedef enum __error_t_codes error_t;" + print "# endif"; + print ""; + print "#endif /* not __ASSEMBLER__ */"; +} + +function print_errno_defines(maxseq) +{ + print ""; + print "/* The C standard requires that all of the E-constants be" + print " defined as macros. */" + print ""; + for (i = 0; i < maxseq; i++) + { + if (i in annot) + print annot[i]; + else + printf("#define %-*s %s\n", maxerrlen, econsts[i], errnos[i]); + } + print ""; + printf("#define _HURD_ERRNOS %d\n", maxerrno+1); +} END \ { - for (i = 0; i < lno - 1; ++i) - printf "%s%s\n", lines[i], (comma[i] ? "," : ""); - print lines[i]; - print ""; - print "};"; - print ""; - printf "#define\t_HURD_ERRNOS\t%d\n", maxerrno+1; - print ""; - print "\ -/* User-visible type of error codes. It is ok to use `int' or\n\ - `kern_return_t' for these, but with `error_t' the debugger prints\n\ - symbolic values. */"; - print "#ifdef __USE_GNU"; - print "typedef enum __error_t_codes error_t;" - print "#define __error_t_defined\t1" - print "#endif"; - print ""; - print "\ -/* Return the current thread's location for `errno'.\n\ - The syntax of this function allows redeclarations like `int errno'. */\n\ -extern int *__errno_location (void) __THROW __attribute__ ((__const__));\n\ -\n\ -#define errno (*__errno_location ())\n\ -"; - print "#endif /* <errno.h> included. */"; + print_errno_enum(seq); + print_errno_defines(seq); + print ""; - print "#if !defined (_ERRNO_H) && defined (__need_Emath)"; - print edom; print erange; - print "#endif /* <errno.h> not included and need math error codes. */"; + print "#endif /* bits/errno.h. */"; } diff --git a/sysdeps/unix/sysv/linux/alpha/bits/errno.h b/sysdeps/unix/sysv/linux/alpha/bits/errno.h index 3338621710..6a8730165e 100644 --- a/sysdeps/unix/sysv/linux/alpha/bits/errno.h +++ b/sysdeps/unix/sysv/linux/alpha/bits/errno.h @@ -16,23 +16,29 @@ License along with the GNU C Library. If not, see <http://www.gnu.org/licenses/>. */ -#ifdef _ERRNO_H +#ifndef _BITS_ERRNO_H +#define _BITS_ERRNO_H 1 + +#if !defined _ERRNO_H +# error "Never include <bits/errno.h> directly; use <errno.h> instead." +#endif -# undef EDOM -# undef EILSEQ -# undef ERANGE # include <linux/errno.h> -/* Linux has no ENOTSUP error code. */ -# define ENOTSUP EOPNOTSUPP +/* Older Linux headers do not define these constants. */ +# ifndef ENOTSUP +# define ENOTSUP EOPNOTSUPP +# endif # ifndef ECANCELED -# define ECANCELED 131 +# define ECANCELED 131 # endif -/* Support for error codes to support robust mutexes was added later, too. */ # ifndef EOWNERDEAD # define EOWNERDEAD 136 +# endif + +# ifndef ENOTRECOVERABLE # define ENOTRECOVERABLE 137 # endif @@ -44,22 +50,4 @@ # define EHWPOISON 139 # endif -# ifndef __ASSEMBLER__ -/* Function to get address of global `errno' variable. */ -extern int *__errno_location (void) __THROW __attribute__ ((__const__)); - -# if !defined _LIBC || defined _LIBC_REENTRANT -/* When using threads, errno is a per-thread value. */ -# define errno (*__errno_location ()) -# endif -# endif /* !__ASSEMBLER__ */ -#endif /* _ERRNO_H */ - -#if !defined _ERRNO_H && defined __need_Emath -/* This is ugly but the kernel header is not clean enough. We must - define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is - defined. */ -# define EDOM 33 /* Math argument out of domain of function. */ -# define EILSEQ 116 /* Illegal byte sequence. */ -# define ERANGE 34 /* Math result not representable. */ -#endif /* !_ERRNO_H && __need_Emath */ +#endif /* bits/errno.h. */ diff --git a/sysdeps/unix/sysv/linux/bits/errno.h b/sysdeps/unix/sysv/linux/bits/errno.h index c0f4d20fe7..66cfb483c5 100644 --- a/sysdeps/unix/sysv/linux/bits/errno.h +++ b/sysdeps/unix/sysv/linux/bits/errno.h @@ -16,24 +16,29 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#ifdef _ERRNO_H +#ifndef _BITS_ERRNO_H +#define _BITS_ERRNO_H 1 + +#if !defined _ERRNO_H +# error "Never include <bits/errno.h> directly; use <errno.h> instead." +#endif -# undef EDOM -# undef EILSEQ -# undef ERANGE # include <linux/errno.h> -/* Linux has no ENOTSUP error code. */ -# define ENOTSUP EOPNOTSUPP +/* Older Linux headers do not define these constants. */ +# ifndef ENOTSUP +# define ENOTSUP EOPNOTSUPP +# endif -/* Older Linux versions also had no ECANCELED error code. */ # ifndef ECANCELED -# define ECANCELED 125 +# define ECANCELED 125 # endif -/* Support for error codes to support robust mutexes was added later, too. */ # ifndef EOWNERDEAD # define EOWNERDEAD 130 +# endif + +#ifndef ENOTRECOVERABLE # define ENOTRECOVERABLE 131 # endif @@ -45,22 +50,4 @@ # define EHWPOISON 133 # endif -# ifndef __ASSEMBLER__ -/* Function to get address of global `errno' variable. */ -extern int *__errno_location (void) __THROW __attribute__ ((__const__)); - -# if !defined _LIBC || defined _LIBC_REENTRANT -/* When using threads, errno is a per-thread value. */ -# define errno (*__errno_location ()) -# endif -# endif /* !__ASSEMBLER__ */ -#endif /* _ERRNO_H */ - -#if !defined _ERRNO_H && defined __need_Emath -/* This is ugly but the kernel header is not clean enough. We must - define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is - defined. */ -# define EDOM 33 /* Math argument out of domain of function. */ -# define EILSEQ 84 /* Illegal byte sequence. */ -# define ERANGE 34 /* Math result not representable. */ -#endif /* !_ERRNO_H && __need_Emath */ +#endif /* bits/errno.h. */ diff --git a/sysdeps/unix/sysv/linux/hppa/bits/errno.h b/sysdeps/unix/sysv/linux/hppa/bits/errno.h index ce6bebe8b0..2ccc30ac75 100644 --- a/sysdeps/unix/sysv/linux/hppa/bits/errno.h +++ b/sysdeps/unix/sysv/linux/hppa/bits/errno.h @@ -16,17 +16,22 @@ License along with the GNU C Library. If not, see <http://www.gnu.org/licenses/>. */ -#ifdef _ERRNO_H +#ifndef _BITS_ERRNO_H +#define _BITS_ERRNO_H 1 + +#if !defined _ERRNO_H +# error "Never include <bits/errno.h> directly; use <errno.h> instead." +#endif -# undef EDOM -# undef EILSEQ -# undef ERANGE # include <linux/errno.h> -/* Linux also has no ECANCELED error code. Since it is not used here - we define it to an invalid value. */ +/* Older Linux headers do not define these constants. */ +# ifndef ENOTSUP +# define ENOTSUP EOPNOTSUPP +# endif + # ifndef ECANCELED -# define ECANCELED ECANCELLED +# define ECANCELED 253 # endif # ifndef EOWNERDEAD @@ -45,22 +50,4 @@ # define EHWPOISON 257 # endif -# ifndef __ASSEMBLER__ -/* Function to get address of global `errno' variable. */ -extern int *__errno_location (void) __THROW __attribute__ ((__const__)); - -# if !defined _LIBC || defined _LIBC_REENTRANT -/* When using threads, errno is a per-thread value. */ -# define errno (*__errno_location ()) -# endif -# endif /* !__ASSEMBLER__ */ -#endif /* _ERRNO_H */ - -#if !defined _ERRNO_H && defined __need_Emath -/* This is ugly but the kernel header is not clean enough. We must - define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is - defined. */ -# define EDOM 33 /* Math argument out of domain of function. */ -# define EILSEQ 47 /* Illegal byte sequence. */ -# define ERANGE 34 /* Math result not representable. */ -#endif /* !_ERRNO_H && __need_Emath */ +#endif /* bits/errno.h. */ diff --git a/sysdeps/unix/sysv/linux/mips/bits/errno.h b/sysdeps/unix/sysv/linux/mips/bits/errno.h index fa62e1fc83..84dcf0204d 100644 --- a/sysdeps/unix/sysv/linux/mips/bits/errno.h +++ b/sysdeps/unix/sysv/linux/mips/bits/errno.h @@ -16,23 +16,28 @@ License along with the GNU C Library. If not, see <http://www.gnu.org/licenses/>. */ -#ifdef _ERRNO_H +#ifndef _BITS_ERRNO_H + +#if !defined _ERRNO_H +# error "Never include <bits/errno.h> directly; use <errno.h> instead." +#endif -# undef EDOM -# undef EILSEQ -# undef ERANGE # include <linux/errno.h> -/* Linux has no ENOTSUP error code. */ -# define ENOTSUP EOPNOTSUPP +/* Older Linux headers do not define these constants. */ +# ifndef ENOTSUP +# define ENOTSUP EOPNOTSUPP +# endif # ifndef ECANCELED -# define ECANCELED 158 +# define ECANCELED 158 # endif -/* Support for error codes to support robust mutexes was added later, too. */ # ifndef EOWNERDEAD # define EOWNERDEAD 165 +# endif + +# ifndef ENOTRECOVERABLE # define ENOTRECOVERABLE 166 # endif @@ -44,22 +49,4 @@ # define EHWPOISON 168 # endif -# ifndef __ASSEMBLER__ -/* Function to get address of global `errno' variable. */ -extern int *__errno_location (void) __THROW __attribute__ ((__const__)); - -# if !defined _LIBC || defined _LIBC_REENTRANT -/* When using threads, errno is a per-thread value. */ -# define errno (*__errno_location ()) -# endif -# endif /* !__ASSEMBLER__ */ -#endif /* _ERRNO_H */ - -#if !defined _ERRNO_H && defined __need_Emath -/* This is ugly but the kernel header is not clean enough. We must - define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is - defined. */ -# define EDOM 33 /* Math argument out of domain of function. */ -# define EILSEQ 88 /* Illegal byte sequence. */ -# define ERANGE 34 /* Math result not representable. */ -#endif /* !_ERRNO_H && __need_Emath */ +#endif /* bits/errno.h. */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/errno.h b/sysdeps/unix/sysv/linux/sparc/bits/errno.h index 4a8d8a0879..afa22beb15 100644 --- a/sysdeps/unix/sysv/linux/sparc/bits/errno.h +++ b/sysdeps/unix/sysv/linux/sparc/bits/errno.h @@ -16,23 +16,29 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#ifdef _ERRNO_H +#ifndef _BITS_ERRNO_H +#define _BITS_ERRNO_H 1 + +#if !defined _ERRNO_H +# error "Never include <bits/errno.h> directly; use <errno.h> instead." +#endif -# undef EDOM -# undef EILSEQ -# undef ERANGE # include <linux/errno.h> -/* Linux has no ENOTSUP error code. */ -# define ENOTSUP EOPNOTSUPP +/* Older Linux headers do not define these constants. */ +# ifndef ENOTSUP +# define ENOTSUP EOPNOTSUPP +# endif # ifndef ECANCELED -# define ECANCELED 127 +# define ECANCELED 127 # endif -/* Support for error codes to support robust mutexes was added later, too. */ # ifndef EOWNERDEAD # define EOWNERDEAD 132 +# endif + +# ifndef ENOTRECOVERABLE # define ENOTRECOVERABLE 133 # endif @@ -44,22 +50,4 @@ # define EHWPOISON 135 # endif -# ifndef __ASSEMBLER__ -/* Function to get address of global `errno' variable. */ -extern int *__errno_location (void) __THROW __attribute__ ((__const__)); - -# if !defined _LIBC || defined _LIBC_REENTRANT -/* When using threads, errno is a per-thread value. */ -# define errno (*__errno_location ()) -# endif -# endif /* !__ASSEMBLER__ */ -#endif /* _ERRNO_H */ - -#if !defined _ERRNO_H && defined __need_Emath -/* This is ugly but the kernel header is not clean enough. We must - define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is - defined. */ -# define EDOM 33 /* Math argument out of domain of function. */ -# define EILSEQ 122 /* Illegal byte sequence. */ -# define ERANGE 34 /* Math result not representable. */ -#endif /* !_ERRNO_H && __need_Emath */ +#endif /* bits/errno.h. */ diff --git a/sysdeps/x86_64/fpu/s_cosf.S b/sysdeps/x86_64/fpu/s_cosf.S index e9fdc7e56e..7acafcd1be 100644 --- a/sysdeps/x86_64/fpu/s_cosf.S +++ b/sysdeps/x86_64/fpu/s_cosf.S @@ -17,8 +17,7 @@ <http://www.gnu.org/licenses/>. */ #include <sysdep.h> -#define __need_Emath -#include <bits/errno.h> +#include <errno.h> /* Short algorithm description: * diff --git a/sysdeps/x86_64/fpu/s_sincosf.S b/sysdeps/x86_64/fpu/s_sincosf.S index e6ed81ed91..fd35a3153b 100644 --- a/sysdeps/x86_64/fpu/s_sincosf.S +++ b/sysdeps/x86_64/fpu/s_sincosf.S @@ -17,8 +17,7 @@ <http://www.gnu.org/licenses/>. */ #include <sysdep.h> -#define __need_Emath -#include <bits/errno.h> +#include <errno.h> /* Short algorithm description: * diff --git a/sysdeps/x86_64/fpu/s_sinf.S b/sysdeps/x86_64/fpu/s_sinf.S index 0aa5d43d8c..253ba7d6f0 100644 --- a/sysdeps/x86_64/fpu/s_sinf.S +++ b/sysdeps/x86_64/fpu/s_sinf.S @@ -17,8 +17,7 @@ <http://www.gnu.org/licenses/>. */ #include <sysdep.h> -#define __need_Emath -#include <bits/errno.h> +#include <errno.h> /* Short algorithm description: * |