diff options
author | Roland McGrath <roland@gnu.org> | 2002-11-14 21:23:12 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-11-14 21:23:12 +0000 |
commit | d8b8842b047cf1119609fa24b2ee59ddc69da7fb (patch) | |
tree | e8b8367c6b1d00c850fd44dfa2f9b12e8f6ed4d6 /resolv | |
parent | 6c0b2972dc2d92093a42d5f9bb6857fb65b1b078 (diff) | |
download | glibc-d8b8842b047cf1119609fa24b2ee59ddc69da7fb.zip glibc-d8b8842b047cf1119609fa24b2ee59ddc69da7fb.tar.gz glibc-d8b8842b047cf1119609fa24b2ee59ddc69da7fb.tar.bz2 |
* sysdeps/generic/errno.c [! USE___THREAD]
[HAVE_ELF && SHARED && DO_VERSIONING] (errno, _errno): Declare these
with compat_symbol so they are not link-time visible.
[! USE___THREAD] (__libc_errno): New alias for errno.
* csu/Versions [!(USE_TLS && HAVE___THREAD)] (libc: GLIBC_PRIVATE):
Add __libc_errno here.
* inet/herrno.c [USE___THREAD]: Use this conditional
in place of [USE_TLS && HAVE___THREAD].
[! USE___THREAD] [HAVE_ELF && SHARED && DO_VERSIONING]
(h_errno, _h_errno): Declare these with compat_symbol so they are not
link-time visible.
[! USE___THREAD] (__libc_h_errno): New alias for h_errno.
* resolv/res_libc.c [! USE___THREAD]
[HAVE_ELF && SHARED && DO_VERSIONING] (_res): Likewise.
(_res): Use __attribute__ ((section (".bss"))) so we can have an alias.
(__libc_res): Define as alias for _res.
* resolv/Versions [!(USE_TLS && HAVE___THREAD)] (libc: GLIBC_PRIVATE):
Add __libc_h_errno and __libc_res here.
2002-11-14 Jakub Jelinek <jakub@redhat.com>
* csu/Versions (errno): Move STT_TLS symbol to GLIBC_PRIVATE for now.
* resolv/Versions (h_errno, _res): Likewise.
2002-11-14 Roland McGrath <roland@redhat.com>
Diffstat (limited to 'resolv')
-rw-r--r-- | resolv/Versions | 11 | ||||
-rw-r--r-- | resolv/res_libc.c | 18 |
2 files changed, 23 insertions, 6 deletions
diff --git a/resolv/Versions b/resolv/Versions index 09dca6a..238d579 100644 --- a/resolv/Versions +++ b/resolv/Versions @@ -29,15 +29,18 @@ libc { # r* __res_state; __res_init; __res_nclose; __res_ninit; _res_hconf; } - GLIBC_2.3 { + GLIBC_PRIVATE { + __gai_sigqueue; + %if USE_TLS && HAVE___THREAD # This version is for the TLS symbol, GLIBC_2.0 is the old object symbol. h_errno; _res; +%else + # These internal aliases are solely to give libpthread access + # to the variables that are not directly user-visible. + __libc_h_errno; __libc_res; %endif } - GLIBC_PRIVATE { - __gai_sigqueue; - } } libresolv { diff --git a/resolv/res_libc.c b/resolv/res_libc.c index 60f7feb..b1132b0 100644 --- a/resolv/res_libc.c +++ b/resolv/res_libc.c @@ -31,8 +31,22 @@ 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. */ -struct __res_state _res; +/* The resolver state for use by single-threaded programs. + + This differs from a plain uninitialized definition 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"))); + +/* This alias is needed by libpthread. */ +strong_alias (_res, __libc_res) + +/* 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> +compat_symbol (libc, _res, _res, GLIBC_2_0); +# endif #endif /* This function is used to access the resolver state in |