diff options
author | Peter S. Mazinger <ps.m@gmx.net> | 2011-03-25 00:49:42 +0100 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2012-06-15 14:00:33 +0200 |
commit | f418f52701de02954c90341e5c9ccdd3f07ccd33 (patch) | |
tree | 1a8c1e1d5f9ac406f2f76d39edd4b2f47977c905 /libc/misc | |
parent | 4341f1d5233858bf421ff5863ac92d4448a0e0a6 (diff) |
errno, h_errno: correct them for non-TLS
Move h_errno related stuff to separate file.
Do not hide errno and h_errno for non-TLS, else it keeps being 0.
Make __[h_]errno_location weak for non-TLS.
Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'libc/misc')
-rw-r--r-- | libc/misc/internals/Makefile.in | 2 | ||||
-rw-r--r-- | libc/misc/internals/__errno_location.c | 10 | ||||
-rw-r--r-- | libc/misc/internals/__h_errno_location.c | 10 | ||||
-rw-r--r-- | libc/misc/internals/errno.c | 19 | ||||
-rw-r--r-- | libc/misc/internals/h_errno.c | 14 | ||||
-rw-r--r-- | libc/misc/internals/internal_errno.h | 21 |
6 files changed, 37 insertions, 39 deletions
diff --git a/libc/misc/internals/Makefile.in b/libc/misc/internals/Makefile.in index 354dfc980..2123bbb76 100644 --- a/libc/misc/internals/Makefile.in +++ b/libc/misc/internals/Makefile.in @@ -7,7 +7,7 @@ subdirs += libc/misc/internals -CSRC := tempname.c errno.c __errno_location.c __h_errno_location.c \ +CSRC := tempname.c errno.c h_errno.c __errno_location.c __h_errno_location.c \ parse_config.c MISC_INTERNALS_DIR := $(top_srcdir)libc/misc/internals diff --git a/libc/misc/internals/__errno_location.c b/libc/misc/internals/__errno_location.c index 340950037..dec913f30 100644 --- a/libc/misc/internals/__errno_location.c +++ b/libc/misc/internals/__errno_location.c @@ -4,10 +4,16 @@ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. */ -#include "internal_errno.h" +#include <features.h> +#include <errno.h> + +#ifndef __UCLIBC_HAS_TLS__ +# undef errno +extern int errno; +#endif int *__errno_location(void) { return &errno; } -libc_hidden_weak(__errno_location) +libc_hidden_def(__errno_location) diff --git a/libc/misc/internals/__h_errno_location.c b/libc/misc/internals/__h_errno_location.c index 113677682..41353d74a 100644 --- a/libc/misc/internals/__h_errno_location.c +++ b/libc/misc/internals/__h_errno_location.c @@ -4,10 +4,16 @@ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. */ -#include "internal_errno.h" +#include <features.h> +#include <netdb.h> + +#ifndef __UCLIBC_HAS_TLS__ +# undef h_errno +extern int h_errno; +#endif int *__h_errno_location(void) { return &h_errno; } -libc_hidden_weak(__h_errno_location) +libc_hidden_def(__h_errno_location) diff --git a/libc/misc/internals/errno.c b/libc/misc/internals/errno.c index 11d19eeef..d9908853d 100644 --- a/libc/misc/internals/errno.c +++ b/libc/misc/internals/errno.c @@ -1,21 +1,14 @@ #include <features.h> +#include <errno.h> +#undef errno #ifdef __UCLIBC_HAS_TLS__ __thread int errno; -__thread int h_errno; - extern __thread int __libc_errno __attribute__ ((alias ("errno"))) attribute_hidden; -extern __thread int __libc_h_errno __attribute__ ((alias ("h_errno"))) attribute_hidden; -#define h_errno __libc_h_errno - #else -#include "internal_errno.h" +extern int errno; int errno = 0; -int h_errno = 0; -#ifdef __UCLIBC_HAS_THREADS__ -libc_hidden_def(errno) -weak_alias(errno, _errno) -libc_hidden_def(h_errno) -weak_alias(h_errno, _h_errno) -#endif +# ifdef __UCLIBC_HAS_THREADS__ +strong_alias(errno,_errno) +# endif #endif diff --git a/libc/misc/internals/h_errno.c b/libc/misc/internals/h_errno.c new file mode 100644 index 000000000..8e457501e --- /dev/null +++ b/libc/misc/internals/h_errno.c @@ -0,0 +1,14 @@ +#include <features.h> +#include <netdb.h> +#undef h_errno + +#ifdef __UCLIBC_HAS_TLS__ +__thread int h_errno; +extern __thread int __libc_h_errno __attribute__ ((alias ("h_errno"))) attribute_hidden; +#else +extern int h_errno; +int h_errno = 0; +# ifdef __UCLIBC_HAS_THREADS__ +strong_alias(h_errno,_h_errno) +# endif +#endif diff --git a/libc/misc/internals/internal_errno.h b/libc/misc/internals/internal_errno.h deleted file mode 100644 index b49198579..000000000 --- a/libc/misc/internals/internal_errno.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * - */ - -#include <features.h> -#include <errno.h> -#include <netdb.h> - -#ifndef __UCLIBC_HAS_TLS__ - -#undef errno -#undef h_errno - -extern int h_errno; -extern int errno; - -#ifdef __UCLIBC_HAS_THREADS__ -libc_hidden_proto(h_errno) -libc_hidden_proto(errno) -#endif -#endif |