diff options
author | Zack Weinberg <zackw@panix.com> | 2017-03-21 16:30:53 -0400 |
---|---|---|
committer | Zack Weinberg <zackw@panix.com> | 2017-06-14 08:14:34 -0400 |
commit | fd860eaaa8757b221d9169e460c9ec41ea51f317 (patch) | |
tree | 5e5037486db89c12cd4a7dc89a545767481aff29 /sysdeps/unix | |
parent | 37f802f86400684c8d13403958b2c598721d6360 (diff) | |
download | glibc-fd860eaaa8757b221d9169e460c9ec41ea51f317.tar.gz glibc-fd860eaaa8757b221d9169e460c9ec41ea51f317.tar.xz glibc-fd860eaaa8757b221d9169e460c9ec41ea51f317.zip |
Remove __need macros from errno.h (__need_Emath, __need_error_t).
This is fairly complicated, not because the users of __need_Emath and __need_error_t have complicated requirements, but because the core changes had a lot of fallout. __need_error_t exists for gnulib compatibility in argz.h and argp.h. error_t itself is a Hurdism, an enum containing all the E-constants, so you can do 'p (error_t) errno' in gdb and get a symbolic value. argz.h and argp.h use it for function return values, and they want to fall back to 'int' when that's not available. There is no reason why these nonstandard headers cannot just go ahead and include all of errno.h; so we do that. __need_Emath is defined only by .S files; what they _really_ need is for errno.h to avoid declaring anything other than the E-constants (e.g. 'extern int __errno_location(void);' is a syntax error in assembly language). This is replaced with a check for __ASSEMBLER__ in errno.h, plus a carefully documented requirement for bits/errno.h not to define anything other than macros. That in turn has the consequence that bits/errno.h must not define errno - fortunately, all live ports use the same definition of errno, so I've moved it to errno.h. The Hurd bits/errno.h must also take care not to define error_t when __ASSEMBLER__ is defined, which involves repeating all of the definitions twice, but it's a generated file so that's okay. * 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.
Diffstat (limited to 'sysdeps/unix')
-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 |
5 files changed, 72 insertions, 135 deletions
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. */ |