diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-07-22 23:10:17 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-07-22 23:10:17 +0000 |
commit | 0e9d624072fd24ee7d113bcf9325e8fb21d2cf60 (patch) | |
tree | c1185e3d74e8db6363798cf48b9b83bd71ef568d /resolv | |
parent | 11bf8ce1d6c28b4758cedeaea9558f6a071fe7d8 (diff) | |
download | glibc-0e9d624072fd24ee7d113bcf9325e8fb21d2cf60.tar glibc-0e9d624072fd24ee7d113bcf9325e8fb21d2cf60.tar.gz glibc-0e9d624072fd24ee7d113bcf9325e8fb21d2cf60.tar.bz2 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/Versions | 6 | ||||
-rw-r--r-- | resolv/res_libc.c | 23 |
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> |