summaryrefslogtreecommitdiff
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)
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>