diff options
-rw-r--r-- | ChangeLog | 26 | ||||
-rw-r--r-- | csu/Versions | 6 | ||||
-rw-r--r-- | inet/herrno.c | 13 | ||||
-rw-r--r-- | resolv/Versions | 11 | ||||
-rw-r--r-- | resolv/res_libc.c | 18 | ||||
-rw-r--r-- | sysdeps/generic/errno.c | 11 |
6 files changed, 77 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog index 6a643229a9..1f6afc8ecb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,31 @@ 2002-11-14 Roland McGrath <roland@redhat.com> + * 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> + * Makerules (%.dynsym): Remove $(objpfx) from target and dep. (%.symlist): Likewise. diff --git a/csu/Versions b/csu/Versions index f0dfe91ca6..bd82a96149 100644 --- a/csu/Versions +++ b/csu/Versions @@ -17,10 +17,14 @@ libc { # New special glibc functions. gnu_get_libc_release; gnu_get_libc_version; } - GLIBC_2.3 { + GLIBC_PRIVATE { %if USE_TLS && HAVE___THREAD # This version is for the TLS symbol, GLIBC_2.0 is the old object symbol. errno; +%else + # This internal alias is solely to give libpthread access + # to the variable that is not directly user-visible at link time. + __libc_errno; %endif } } diff --git a/inet/herrno.c b/inet/herrno.c index 406e91ec4b..f0ee81b804 100644 --- a/inet/herrno.c +++ b/inet/herrno.c @@ -25,7 +25,7 @@ /* We need to have the error status variable of the resolver accessible in the libc. */ -#if USE_TLS && HAVE___THREAD +#if USE___THREAD __thread int h_errno; extern __thread int __libc_h_errno __attribute__ ((alias ("h_errno"))) attribute_hidden; @@ -33,6 +33,17 @@ extern __thread int __libc_h_errno __attribute__ ((alias ("h_errno"))) #else int h_errno = 0; weak_alias (h_errno, _h_errno) + +/* This alias is needed by libpthread. */ +strong_alias (h_errno, __libc_h_errno) + +/* We declare these with compat_symbol so that they are 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, h_errno, h_errno, GLIBC_2_0); +compat_symbol (libc, _h_errno, _h_errno, GLIBC_2_0); +# endif #endif /* When threaded, h_errno may be a per-thread variable. */ diff --git a/resolv/Versions b/resolv/Versions index 09dca6aa2a..238d579d8c 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 60f7febf05..b1132b0ffd 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 diff --git a/sysdeps/generic/errno.c b/sysdeps/generic/errno.c index e33c6b88ad..45c9639095 100644 --- a/sysdeps/generic/errno.c +++ b/sysdeps/generic/errno.c @@ -31,4 +31,15 @@ extern __thread int __libc_errno __attribute__ ((alias ("errno"))) which can have an alias. */ int errno __attribute__ ((section (".bss"))); strong_alias (errno, _errno) + +/* This alias is needed by libpthread. */ +strong_alias (errno, __libc_errno) + +/* We declare these with compat_symbol so that they are 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, errno, errno, GLIBC_2_0); +compat_symbol (libc, _errno, _errno, GLIBC_2_0); +# endif #endif |