diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/inet/resolv.c | 32 | ||||
| -rw-r--r-- | libc/misc/internals/errno.c | 13 |
2 files changed, 13 insertions, 32 deletions
diff --git a/libc/inet/resolv.c b/libc/inet/resolv.c index 695ee048b..798a3f5d4 100644 --- a/libc/inet/resolv.c +++ b/libc/inet/resolv.c @@ -1096,7 +1096,13 @@ struct hostent *gethostbyname2(const char *name, int family) #ifdef L_res_init +#ifdef __PTHREADS_NATIVE__ +#include <tls.h> +struct __res_state _res_thread; +__thread struct __res_state *__resp = &_res_thread; +#else struct __res_state _res; +#endif int res_init(void) { @@ -1149,34 +1155,8 @@ void res_close( void ) return; } -/* - * NPTL - This code was taken from 'resolve/res_libc.c' and - * may still be incorrect. Our name resolver code is - * so out of date, we made not be able to correctly - * utilize it in multi-threaded programs. - */ -#ifdef IS_IN_libpthread - -/* This needs to be after the use of _res in res_init, above. */ -#undef _res - -/* The resolver state for use by single-threaded programs. - This differs from plain `struct __res_state _res;' in that it doesn't - create a common definition, but a plain symbol that resides in .bss, - which can have an alias. */ -struct __res_state _res __attribute__((section (".bss"))); - -#if USE___THREAD -#undef __resp -__thread struct __res_state *__resp = &_res; -extern __thread struct __res_state *__libc_resp - __attribute__ ((alias ("__resp"))) attribute_hidden; -#endif -#endif - #endif - #ifdef L_res_query #ifndef MIN diff --git a/libc/misc/internals/errno.c b/libc/misc/internals/errno.c index f2424eae0..5197e0aec 100644 --- a/libc/misc/internals/errno.c +++ b/libc/misc/internals/errno.c @@ -1,14 +1,15 @@ #include <features.h> #undef errno +#if __PTHREADS_NATIVE__ +#include <tls.h> extern int errno; -extern int h_errno; - -#if 0 -/* Unfortunately, this doesn't work... */ -int h_errno __attribute__ ((section (".bss"))) = 0; -int errno __attribute__ ((section (".bss"))) = 0; +extern __thread int _h_errno; +int _errno = 0; +__thread int _h_errno; #else +extern int errno; +extern int h_errno; int _errno = 0; int _h_errno = 0; #endif |
