diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2017-10-03 01:26:58 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2017-10-03 01:33:38 +0200 |
commit | 3d1870fa3301c5cd00d5fdab0014c4e22b71fef2 (patch) | |
tree | 16a225633d1dac36b3914e16221145104e1f24cd /sysdeps | |
parent | 38722448c64682628244d285c1e30c8887a8c801 (diff) | |
download | glibc-3d1870fa3301c5cd00d5fdab0014c4e22b71fef2.tar.gz glibc-3d1870fa3301c5cd00d5fdab0014c4e22b71fef2.tar.xz glibc-3d1870fa3301c5cd00d5fdab0014c4e22b71fef2.zip |
Introduce NO_RTLD_HIDDEN, make hurd use it instead of NO_HIDDEN
On the Hurd, the rtld needs to see its own dumb versions of a few functions (defined in sysdeps/mach/hurd/dl-sysdep.c) overridden by libc's versions once loaded. rtld should thus not have hidden attribute for these. To achieve this, the Hurd port used to just define NO_HIDDEN, which disables it completely. For now, this changes that to disabling it for all rtld functions, for simplicity. See Roland's comment on https://sourceware.org/bugzilla/show_bug.cgi?id=15605#c5 The ld.so numbers remain at 8 .rel.plt 000000c8 00000c24 00000c24 00000c24 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 9 .plt 000001a0 00000cf0 00000cf0 00000cf0 2**4 CONTENTS, ALLOC, LOAD, READONLY, CODE 10 .plt.got 00000010 00000e90 00000e90 00000e90 2**3 CONTENTS, ALLOC, LOAD, READONLY, CODE 18 .got.plt 00000070 0002d000 0002d000 0002c000 2**2 CONTENTS, ALLOC, LOAD, DATA which is about 3 times as much as on Linux. The libc.so numbers get divided by 3 (the remainings are mostly RPC stub calls) * include/libc-symbols.h [NO_RTLD_HIDDEN] (rtld_hidden_proto, rtld_hidden_tls_proto, rtld_hidden_def, rtld_hidden_weak, rtld_hidden_rtld_hidden_ver, data_def, rtld_hidden_data_weak, rtld_hidden_data_ver): Define to empty. * include/assert.h [IS_IN(rtld) && NO_RTLD_HIDDEN] (__assert_fail, __assert_perror_fail): Likewise. * include/dirent.h [IS_IN(rtld) && NO_RTLD_HIDDEN] (__rewinddir): Likewise. * include/libc-internal.h [IS_IN(rtld) && NO_RTLD_HIDDEN] (__profile_frequency): Likewise. * include/setjmp.h (__sigsetjmp): Likewise. * include/signal.h [IS_IN(rtld) && NO_RTLD_HIDDEN] (__sigaction, __libc_sigaction): Likewise. * include/stdlib.h [NO_RTLD_HIDDEN] (unsetenv, __strtoul_internal): Do not set hidden attribute. * include/string.h [IS_IN(rtld) && NO_RTLD_HIDDEN] (__stpcpy, __strdup, __strerror_t, __strsep_g, memchr, memcmp, memcpy, memmove, memset, rawmemchr, stpcpy, strchr, strcmp, strlen, strnlen, strsep): Likewise. * include/sys/stat.h [IS_IN(rtld) && NO_RTLD_HIDDEN] (__fxstat, __fxstat64, __lxstat, __lxstat64, __xstat, __xstat64, __fxstatat64): Likewise. * include/sys/utsname.h [IS_IN(rtld) && NO_RTLD_HIDDEN] (__uname): Likewise. * include/sysdeps/generic/_itoa.h [IS_IN(rtld) && NO_RTLD_HIDDEN] (_itoa_upper_digits, _itoa_lower_digits): Likewise. * sysdeps/mach/hurd/configure.ac (NO_HIDDEN): Do not set. (NO_RTLD_HIDDEN): Set. * sysdeps/mach/hurd/configure: Refresh. * config.h.in: Refresh.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/generic/_itoa.h | 2 | ||||
-rw-r--r-- | sysdeps/mach/hurd/configure | 2 | ||||
-rw-r--r-- | sysdeps/mach/hurd/configure.ac | 2 |
3 files changed, 3 insertions, 3 deletions
diff --git a/sysdeps/generic/_itoa.h b/sysdeps/generic/_itoa.h index a065ecb890..6998c0859f 100644 --- a/sysdeps/generic/_itoa.h +++ b/sysdeps/generic/_itoa.h @@ -46,7 +46,7 @@ extern char *_itoa (unsigned long long int value, char *buflim, extern const char _itoa_upper_digits[]; extern const char _itoa_lower_digits[]; -#if IS_IN (libc) || IS_IN (rtld) +#if IS_IN (libc) || (IS_IN (rtld) && !defined NO_RTLD_HIDDEN) hidden_proto (_itoa_upper_digits) hidden_proto (_itoa_lower_digits) #endif diff --git a/sysdeps/mach/hurd/configure b/sysdeps/mach/hurd/configure index 163b5c7730..66cc0ce3a5 100644 --- a/sysdeps/mach/hurd/configure +++ b/sysdeps/mach/hurd/configure @@ -1,6 +1,6 @@ # This file is generated from configure.ac by Autoconf. DO NOT EDIT! -$as_echo "#define NO_HIDDEN 1" >>confdefs.h +$as_echo "#define NO_RTLD_HIDDEN 1" >>confdefs.h if test -n "$sysheaders"; then diff --git a/sysdeps/mach/hurd/configure.ac b/sysdeps/mach/hurd/configure.ac index 5539a8c8af..774ffc80a9 100644 --- a/sysdeps/mach/hurd/configure.ac +++ b/sysdeps/mach/hurd/configure.ac @@ -3,7 +3,7 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. dnl We need this setting because of the need for PLT calls in ld.so. dnl See Roland's comment in dnl https://sourceware.org/bugzilla/show_bug.cgi?id=15605 -AC_DEFINE([NO_HIDDEN]) +AC_DEFINE([NO_RTLD_HIDDEN]) if test -n "$sysheaders"; then OLD_CPPFLAGS=$CPPFLAGS |