This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[COMMITTED PATCH] Clean up _res declaration to use __thread unconditionally.
- From: Roland McGrath <roland at hack dot frob dot com>
- To: "GNU C. Library" <libc-alpha at sourceware dot org>
- Date: Tue, 27 Aug 2013 11:13:58 -0700 (PDT)
- Subject: [COMMITTED PATCH] Clean up _res declaration to use __thread unconditionally.
- Authentication-results: sourceware.org; auth=none
There is bit rot in the [!_LIBC_REENTRANT] case for _res. Since we already
use __thread unconditionally for errno, I've just made its use for _res be
unconditional too.
Thanks,
Roland
* include/resolv.h [_RESOLV_H_]:
Don't include <tls.h>.
(__resp, _res): Move declaration and macro out of [_LIBC_REENTRANT].
* resolv/res_libc.c: Don't include <tls.h>.
(_res): Use __attribute__ ((nocommon)) in place of
__attribute__ ((section (".bss"))).
--- a/include/resolv.h
+++ b/include/resolv.h
@@ -13,20 +13,12 @@
#ifdef _RESOLV_H_
-# ifdef _LIBC_REENTRANT
-# include <tls.h>
-# undef _res
-# ifndef NOT_IN_libc
-# define __resp __libc_resp
-# endif
-# define _res (*__resp)
-extern __thread struct __res_state *__resp attribute_tls_model_ie;
-# else
-# ifndef __BIND_NOSTATIC
-# undef _res
-extern struct __res_state _res;
-# endif
+# ifndef NOT_IN_libc
+# define __resp __libc_resp
# endif
+extern __thread struct __res_state *__resp attribute_tls_model_ie;
+# undef _res
+# define _res (*__resp)
/* Now define the internal interfaces. */
extern int __res_vinit (res_state, int);
--- a/resolv/res_libc.c
+++ b/resolv/res_libc.c
@@ -122,9 +122,7 @@ libc_hidden_def (__res_maybe_init)
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>
+struct __res_state _res __attribute__ ((nocommon));
#undef __resp
__thread struct __res_state *__resp = &_res;