aboutsummaryrefslogtreecommitdiff
path: root/resolv/res_libc.c
diff options
context:
space:
mode:
Diffstat (limited to 'resolv/res_libc.c')
-rw-r--r--resolv/res_libc.c18
1 files changed, 16 insertions, 2 deletions
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