From 0e9d624072fd24ee7d113bcf9325e8fb21d2cf60 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 22 Jul 2003 23:10:17 +0000 Subject: Update. 2003-07-22 Jakub Jelinek * 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. --- resolv/Versions | 6 ++++-- resolv/res_libc.c | 23 +++++++++++------------ 2 files changed, 15 insertions(+), 14 deletions(-) (limited to 'resolv') 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 - -#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 + +#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 +#if defined HAVE_ELF && defined SHARED && defined DO_VERSIONING +# include compat_symbol (libc, _res, _res, GLIBC_2_0); -# endif #endif #include -- cgit v1.2.3