summaryrefslogtreecommitdiffstats
path: root/libc
diff options
context:
space:
mode:
Diffstat (limited to 'libc')
-rw-r--r--libc/inet/resolv.c32
-rw-r--r--libc/misc/internals/errno.c13
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