about summary refs log tree commit diff
path: root/resolv
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-07-22 23:10:17 +0000
committerUlrich Drepper <drepper@redhat.com>2003-07-22 23:10:17 +0000
commit0e9d624072fd24ee7d113bcf9325e8fb21d2cf60 (patch)
treec1185e3d74e8db6363798cf48b9b83bd71ef568d /resolv
parent11bf8ce1d6c28b4758cedeaea9558f6a071fe7d8 (diff)
downloadglibc-0e9d624072fd24ee7d113bcf9325e8fb21d2cf60.tar.gz
glibc-0e9d624072fd24ee7d113bcf9325e8fb21d2cf60.tar.xz
glibc-0e9d624072fd24ee7d113bcf9325e8fb21d2cf60.zip
Update.
2003-07-22  Jakub Jelinek  <jakub@redhat.com>

	* include/resolv.h (__resp): Declare.  Define to __libc_resp
	if in libc.so.
	(_res): If USE___THREAD, define to (*__resp).
	* resolv/res_libc.c (_res): Normal .bss variable with compat_symbol
	even if USE___THREAD.
	(__resp): New __thread variable.
	(__libc_resp): New alias.
	* resolv/Versions (libc): Export _res@GLIBC_2.0 even if
	USE_TLS && HAVE___THREAD.  Export __resp@@GLIBC_PRIVATE.
	* sysdeps/generic/res-state.c (__res_state): Return __resp
	if USE___THREAD.
Diffstat (limited to 'resolv')
-rw-r--r--resolv/Versions6
-rw-r--r--resolv/res_libc.c23
2 files changed, 15 insertions, 14 deletions
diff --git a/resolv/Versions b/resolv/Versions
index fcbaba5a47..ec461d34ac 100644
--- a/resolv/Versions
+++ b/resolv/Versions
@@ -4,9 +4,11 @@ libc {
   GLIBC_2.0 {
 %if !(USE_TLS && HAVE___THREAD)
     # global variables
-    _h_errno; _res;
+    _h_errno;
 %endif
 
+    _res;
+
     # helper functions
     __h_errno_location;
 
@@ -34,7 +36,7 @@ libc {
 
 %if USE_TLS && HAVE___THREAD
     # This version is for the TLS symbol, GLIBC_2.0 is the old object symbol.
-    h_errno; _res;
+    h_errno; __resp;
 %endif
   }
 }
diff --git a/resolv/res_libc.c b/resolv/res_libc.c
index 763a88725a..66da110d5f 100644
--- a/resolv/res_libc.c
+++ b/resolv/res_libc.c
@@ -68,27 +68,26 @@ res_init(void) {
 /* This needs to be after the use of _res in res_init, above.  */
 #undef _res
 
-#include <tls.h>
-
-#if USE___THREAD
-/* With __thread support, this per-thread variable is used in all cases.  */
-__thread struct __res_state _res;
-extern __thread struct __res_state __libc_res __attribute__ ((alias ("_res")))
-  attribute_hidden;
-# define _res __libc_res
-#else
 /* 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")));
 
+#include <tls.h>
+
+#if USE___THREAD
+#undef __resp
+__thread struct __res_state *__resp = &_res;
+extern __thread struct __res_state *__libc_resp
+  __attribute__ ((alias ("__resp"))) attribute_hidden;
+#endif
+
 /* We declare this with compat_symbol so that it's not
    visible at link time.  Programs must use the accessor functions.  */
-# if defined HAVE_ELF && defined SHARED && defined DO_VERSIONING
-#  include <shlib-compat.h>
+#if defined HAVE_ELF && defined SHARED && defined DO_VERSIONING
+# include <shlib-compat.h>
 compat_symbol (libc, _res, _res, GLIBC_2_0);
-# endif
 #endif
 
 #include <shlib-compat.h>