Message ID | 20220330061707.4119477-1-maskray@google.com |
---|---|
State | New |
Headers | show |
Series | Remove -z combreloc and HAVE_Z_COMBRELOC | expand |
On 30/03/2022 03:17, Fangrui Song via Libc-alpha wrote: > -z combreloc has been the default since binutils commit > f4d733664aabd7bd78c82895e030ec9779a92809 (2002). The configure check added in > commit fdde83499a05 (2001) has long been unneeded. It seems to the default regadless of the architecture. > > We can therefore treat HAVE_Z_COMBRELOC as always 1 and delete code > paths in dl-machine.h files (many were copied from commit a711b01d34ca > and ee0cb67ec238). LGTM, thanks. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> > --- > Makeconfig | 10 ++------ > config.h.in | 3 --- > config.make.in | 1 - > configure | 39 ------------------------------ > configure.ac | 31 ------------------------ > sysdeps/alpha/dl-machine.h | 33 +++++++------------------ > sysdeps/arm/dl-machine.h | 18 ++------------ > sysdeps/hppa/dl-machine.h | 9 ------- > sysdeps/i386/dl-machine.h | 20 +++------------ > sysdeps/ia64/dl-machine.h | 18 ++------------ > sysdeps/riscv/dl-machine.h | 18 ++------------ > sysdeps/s390/s390-32/dl-machine.h | 18 ++------------ > sysdeps/s390/s390-64/dl-machine.h | 18 ++------------ > sysdeps/sparc/sparc32/dl-machine.h | 16 ++---------- > sysdeps/sparc/sparc64/dl-machine.h | 16 ++---------- > sysdeps/x86_64/dl-machine.h | 18 ++------------ > 16 files changed, 30 insertions(+), 256 deletions(-) > > diff --git a/Makeconfig b/Makeconfig > index 47db08d6ae..0aa5fb0099 100644 > --- a/Makeconfig > +++ b/Makeconfig > @@ -358,12 +358,6 @@ else > real-static-start-installed-name = $(static-start-installed-name) > endif > > -ifeq (yesyes,$(build-shared)$(have-z-combreloc)) > -combreloc-LDFLAGS = -Wl,-z,combreloc > -LDFLAGS.so += $(combreloc-LDFLAGS) > -LDFLAGS-rtld += $(combreloc-LDFLAGS) > -endif > - > relro-LDFLAGS = -Wl,-z,relro > LDFLAGS.so += $(relro-LDFLAGS) > LDFLAGS-rtld += $(relro-LDFLAGS) > @@ -421,7 +415,7 @@ ifndef +link-pie > +link-pie-before-inputs = $(if $($(@F)-no-pie),$(no-pie-ldflag),-pie) \ > -Wl,-O1 -nostdlib -nostartfiles \ > $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \ > - $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \ > + $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \ > $(firstword $(CRT-$(@F)) $(csu-objpfx)S$(start-installed-name)) \ > $(+preinit) $(+prectorS) > +link-pie-before-libc = -o $@ $(+link-pie-before-inputs) \ > @@ -487,7 +481,7 @@ ifeq (yes,$(build-pie-default)) > else # not build-pie-default > +link-before-inputs = -nostdlib -nostartfiles $(no-pie-ldflag) \ > $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \ > - $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \ > + $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \ > $(firstword $(CRT-$(@F)) $(csu-objpfx)$(start-installed-name)) \ > $(+preinit) $(+prector) Ok. > +link-before-libc = -o $@ $(+link-before-inputs) \ > diff --git a/config.h.in b/config.h.in > index ff8597413d..a94f756859 100644 > --- a/config.h.in > +++ b/config.h.in > @@ -56,9 +56,6 @@ > #undef STACK_PROTECTOR_LEVEL > #endif > > -/* Define if the linker supports the -z combreloc option. */ > -#undef HAVE_Z_COMBRELOC > - > /* Define if _rtld_local structure should be forced into .sdata section. */ > #undef HAVE_SDATA_SECTION > Ok. > diff --git a/config.make.in b/config.make.in > index 6d43e691f7..bf728c71c0 100644 > --- a/config.make.in > +++ b/config.make.in > @@ -53,7 +53,6 @@ c++-bits-std_abs-h = @CXX_BITS_STD_ABS_H@ > all-warnings = @all_warnings@ > enable-werror = @enable_werror@ > > -have-z-combreloc = @libc_cv_z_combreloc@ > have-z-execstack = @libc_cv_z_execstack@ > have-protected-data = @libc_cv_protected_data@ > have-insert = @libc_cv_insert@ Ok. > diff --git a/configure b/configure > index 2a3cb49b0b..d2f413d05d 100755 > --- a/configure > +++ b/configure > @@ -625,7 +625,6 @@ libc_cv_has_glob_dat > libc_cv_hashstyle > libc_cv_fpie > libc_cv_z_execstack > -libc_cv_z_combreloc > ASFLAGS_config > libc_cv_cc_with_libunwind > libc_cv_insert > @@ -5967,44 +5966,6 @@ if test $libc_cv_as_noexecstack = yes; then > fi > > > -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -z combreloc" >&5 > -$as_echo_n "checking for -z combreloc... " >&6; } > -if ${libc_cv_z_combreloc+:} false; then : > - $as_echo_n "(cached) " >&6 > -else > - cat > conftest.c <<EOF > -extern int bar (int); > -extern int mumble; > -int foo (void) { return bar (mumble); } > -EOF > -if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS > - -fPIC -shared $no_ssp -o conftest.so conftest.c > - -nostdlib -nostartfiles > - -Wl,-z,combreloc 1>&5' > - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 > - (eval $ac_try) 2>&5 > - ac_status=$? > - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 > - test $ac_status = 0; }; } > -then > - if $READELF -S conftest.so | grep -E '.rela?.dyn' > /dev/null; then > - libc_cv_z_combreloc=yes > - else > - libc_cv_z_combreloc=no > - fi > -else > - libc_cv_z_combreloc=no > -fi > -rm -f conftest* > -fi > -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_z_combreloc" >&5 > -$as_echo "$libc_cv_z_combreloc" >&6; } > -if test "$libc_cv_z_combreloc" = yes; then > - $as_echo "#define HAVE_Z_COMBRELOC 1" >>confdefs.h > - > -fi > - > - > { $as_echo "$as_me:${as_lineno-$LINENO}: checking for linker that supports -z execstack" >&5 > $as_echo_n "checking for linker that supports -z execstack... " >&6; } > libc_linker_feature=no > diff --git a/configure.ac b/configure.ac > index fa7d3c025b..b6a747dece 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -1324,37 +1324,6 @@ if test $libc_cv_as_noexecstack = yes; then > fi > AC_SUBST(ASFLAGS_config) > > -AC_CACHE_CHECK(for -z combreloc, > - libc_cv_z_combreloc, [dnl > -cat > conftest.c <<EOF > -extern int bar (int); > -extern int mumble; > -int foo (void) { return bar (mumble); } > -EOF > -if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS > - -fPIC -shared $no_ssp -o conftest.so conftest.c > - -nostdlib -nostartfiles > - -Wl,-z,combreloc 1>&AS_MESSAGE_LOG_FD]) > -then > -dnl The following test is a bit weak. We must use a tool which can test > -dnl cross-platform since the gcc used can be a cross compiler. Without > -dnl introducing new options this is not easily doable. Instead use a tool > -dnl which always is cross-platform: readelf. To detect whether -z combreloc > -dnl look for a section named .rel.dyn or .rela.dyn. > - if $READELF -S conftest.so | grep -E '.rela?.dyn' > /dev/null; then > - libc_cv_z_combreloc=yes > - else > - libc_cv_z_combreloc=no > - fi > -else > - libc_cv_z_combreloc=no > -fi > -rm -f conftest*]) > -if test "$libc_cv_z_combreloc" = yes; then > - AC_DEFINE(HAVE_Z_COMBRELOC) > -fi > -AC_SUBST(libc_cv_z_combreloc) > - > LIBC_LINKER_FEATURE([-z execstack], [-Wl,-z,execstack], > [libc_cv_z_execstack=yes], [libc_cv_z_execstack=no]) > AC_SUBST(libc_cv_z_execstack) Ok. > diff --git a/sysdeps/alpha/dl-machine.h b/sysdeps/alpha/dl-machine.h > index 30fc790e88..ccee972c96 100644 > --- a/sysdeps/alpha/dl-machine.h > +++ b/sysdeps/alpha/dl-machine.h > @@ -371,37 +371,22 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > Elf64_Addr *const reloc_addr = reloc_addr_arg; > unsigned long int const r_type = ELF64_R_TYPE (reloc->r_info); > > -#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED > - /* This is defined in rtld.c, but nowhere in the static libc.a; make the > - reference weak so static programs can still link. This declaration > - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) > - because rtld.c contains the common defn for _dl_rtld_map, which is > - incompatible with a weak decl in the same file. */ > - weak_extern (_dl_rtld_map); > -#endif > - > /* We cannot use a switch here because we cannot locate the switch > jump table until we've self-relocated. */ > > -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC > +#if !defined RTLD_BOOTSTRAP > if (__builtin_expect (r_type == R_ALPHA_RELATIVE, 0)) > { > -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC > - /* Already done in dynamic linker. */ > - if (map != &GL(dl_rtld_map)) > -# endif > - { > - /* XXX Make some timings. Maybe it's preferable to test for > - unaligned access and only do it the complex way if necessary. */ > - Elf64_Addr reloc_addr_val; > + /* XXX Make some timings. Maybe it's preferable to test for > + unaligned access and only do it the complex way if necessary. */ > + Elf64_Addr reloc_addr_val; > > - /* Load value without causing unaligned trap. */ > - memcpy (&reloc_addr_val, reloc_addr_arg, 8); > - reloc_addr_val += map->l_addr; > + /* Load value without causing unaligned trap. */ > + memcpy (&reloc_addr_val, reloc_addr_arg, 8); > + reloc_addr_val += map->l_addr; > > - /* Store value without causing unaligned trap. */ > - memcpy (reloc_addr_arg, &reloc_addr_val, 8); > - } > + /* Store value without causing unaligned trap. */ > + memcpy (reloc_addr_arg, &reloc_addr_val, 8); > } > else > #endif Ok. > diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h > index 94f41c65cb..a7898bf420 100644 > --- a/sysdeps/arm/dl-machine.h > +++ b/sysdeps/arm/dl-machine.h > @@ -335,23 +335,9 @@ elf_machine_rel (struct link_map *map, struct r_scope_elem *scope[], > Elf32_Addr *const reloc_addr = reloc_addr_arg; > const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); > > -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC > +#if !defined RTLD_BOOTSTRAP > if (__builtin_expect (r_type == R_ARM_RELATIVE, 0)) > - { > -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC > - /* This is defined in rtld.c, but nowhere in the static libc.a; > - make the reference weak so static programs can still link. > - This declaration cannot be done when compiling rtld.c > - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the > - common defn for _dl_rtld_map, which is incompatible with a > - weak decl in the same file. */ > -# ifndef SHARED > - weak_extern (_dl_rtld_map); > -# endif > - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ > -# endif > - *reloc_addr += map->l_addr; > - } > + *reloc_addr += map->l_addr; > # ifndef RTLD_BOOTSTRAP > else if (__builtin_expect (r_type == R_ARM_NONE, 0)) > return; Ok. > diff --git a/sysdeps/hppa/dl-machine.h b/sysdeps/hppa/dl-machine.h > index 7b7a697cbb..8c0ca32fc6 100644 > --- a/sysdeps/hppa/dl-machine.h > +++ b/sysdeps/hppa/dl-machine.h > @@ -557,15 +557,6 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > struct link_map *sym_map; > Elf32_Addr value; > > -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED > - /* This is defined in rtld.c, but nowhere in the static libc.a; make the > - reference weak so static programs can still link. This declaration > - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) > - because rtld.c contains the common defn for _dl_rtld_map, which is > - incompatible with a weak decl in the same file. */ > - weak_extern (GL(dl_rtld_map)); > -# endif > - > /* RESOLVE_MAP will return a null value for undefined syms, and > non-null for all other syms. In particular, relocs with no > symbol (symbol index of zero), also called *ABS* relocs, will be Ok. > diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h > index 3ffd0b4e31..1f8d734215 100644 > --- a/sysdeps/i386/dl-machine.h > +++ b/sysdeps/i386/dl-machine.h > @@ -266,29 +266,15 @@ elf_machine_rel (struct link_map *map, struct r_scope_elem *scope[], > Elf32_Addr *const reloc_addr = reloc_addr_arg; > const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); > > -# if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC > +# if !defined RTLD_BOOTSTRAP > if (__glibc_unlikely (r_type == R_386_RELATIVE)) > - { > -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC > - /* This is defined in rtld.c, but nowhere in the static libc.a; > - make the reference weak so static programs can still link. > - This declaration cannot be done when compiling rtld.c > - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the > - common defn for _dl_rtld_map, which is incompatible with a > - weak decl in the same file. */ > -# ifndef SHARED > - weak_extern (_dl_rtld_map); > -# endif > - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ > -# endif > - *reloc_addr += map->l_addr; > - } > + *reloc_addr += map->l_addr; > # ifndef RTLD_BOOTSTRAP > else if (__glibc_unlikely (r_type == R_386_NONE)) > return; > # endif > else > -# endif /* !RTLD_BOOTSTRAP and have no -z combreloc */ > +# endif /* !RTLD_BOOTSTRAP */ > { > # ifndef RTLD_BOOTSTRAP > const Elf32_Sym *const refsym = sym; Ok. > diff --git a/sysdeps/ia64/dl-machine.h b/sysdeps/ia64/dl-machine.h > index e2c5004a26..20e586aa35 100644 > --- a/sysdeps/ia64/dl-machine.h > +++ b/sysdeps/ia64/dl-machine.h > @@ -383,29 +383,15 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > const unsigned long int r_type = ELF64_R_TYPE (reloc->r_info); > Elf64_Addr value; > > -#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED > - /* This is defined in rtld.c, but nowhere in the static libc.a; make the > - reference weak so static programs can still link. This declaration > - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) > - because rtld.c contains the common defn for _dl_rtld_map, which is > - incompatible with a weak decl in the same file. */ > - weak_extern (_dl_rtld_map); > -#endif > - > /* We cannot use a switch here because we cannot locate the switch > jump table until we've self-relocated. */ > > -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC > +#if !defined RTLD_BOOTSTRAP > if (__builtin_expect (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_REL64LSB), > 0)) > { > assert (ELF64_R_TYPE (reloc->r_info) == R_IA64_REL64LSB); > - value = *reloc_addr; > -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC > - /* Already done in dynamic linker. */ > - if (map != &GL(dl_rtld_map)) > -# endif > - value += map->l_addr; > + value = *reloc_addr + map->l_addr; > } > else > #endif Ok. > diff --git a/sysdeps/riscv/dl-machine.h b/sysdeps/riscv/dl-machine.h > index 1d3e2e588c..4912735c2b 100644 > --- a/sysdeps/riscv/dl-machine.h > +++ b/sysdeps/riscv/dl-machine.h > @@ -244,24 +244,10 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > } > #endif > > -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC > +#if !defined RTLD_BOOTSTRAP > case R_RISCV_RELATIVE: > - { > -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC > - /* This is defined in rtld.c, but nowhere in the static libc.a; > - make the reference weak so static programs can still link. > - This declaration cannot be done when compiling rtld.c > - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the > - common defn for _dl_rtld_map, which is incompatible with a > - weak decl in the same file. */ > -# ifndef SHARED > - weak_extern (GL(dl_rtld_map)); > -# endif > - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ > -# endif > - *addr_field = map->l_addr + reloc->r_addend; > + *addr_field = map->l_addr + reloc->r_addend; > break; > - } > #endif > > case R_RISCV_IRELATIVE: Ok. > diff --git a/sysdeps/s390/s390-32/dl-machine.h b/sysdeps/s390/s390-32/dl-machine.h > index 4e6229e945..4392abb355 100644 > --- a/sysdeps/s390/s390-32/dl-machine.h > +++ b/sysdeps/s390/s390-32/dl-machine.h > @@ -329,23 +329,9 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > Elf32_Addr *const reloc_addr = reloc_addr_arg; > const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); > > -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC > +#if !defined RTLD_BOOTSTRAP > if (__glibc_unlikely (r_type == R_390_RELATIVE)) > - { > -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC > - /* This is defined in rtld.c, but nowhere in the static libc.a; > - make the reference weak so static programs can still link. > - This declaration cannot be done when compiling rtld.c > - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the > - common defn for _dl_rtld_map, which is incompatible with a > - weak decl in the same file. */ > -# ifndef SHARED > - weak_extern (GL(dl_rtld_map)); > -# endif > - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ > -# endif > - *reloc_addr = map->l_addr + reloc->r_addend; > - } > + *reloc_addr = map->l_addr + reloc->r_addend; > else > #endif > if (__glibc_unlikely (r_type == R_390_NONE)) Ok. > diff --git a/sysdeps/s390/s390-64/dl-machine.h b/sysdeps/s390/s390-64/dl-machine.h > index 4bd97f5645..7a94b3a7a6 100644 > --- a/sysdeps/s390/s390-64/dl-machine.h > +++ b/sysdeps/s390/s390-64/dl-machine.h > @@ -276,23 +276,9 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > Elf64_Addr *const reloc_addr = reloc_addr_arg; > const unsigned int r_type = ELF64_R_TYPE (reloc->r_info); > > -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC > +#if !defined RTLD_BOOTSTRAP > if (__glibc_unlikely (r_type == R_390_RELATIVE)) > - { > -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC > - /* This is defined in rtld.c, but nowhere in the static libc.a; > - make the reference weak so static programs can still link. > - This declaration cannot be done when compiling rtld.c > - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the > - common defn for _dl_rtld_map, which is incompatible with a > - weak decl in the same file. */ > -# ifndef SHARED > - weak_extern (GL(dl_rtld_map)); > -# endif > - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ > -# endif > - *reloc_addr = map->l_addr + reloc->r_addend; > - } > + *reloc_addr = map->l_addr + reloc->r_addend; > else > #endif > if (__glibc_unlikely (r_type == R_390_NONE)) Ok. > diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h > index e8d208a080..8c2408b1e6 100644 > --- a/sysdeps/sparc/sparc32/dl-machine.h > +++ b/sysdeps/sparc/sparc32/dl-machine.h > @@ -303,15 +303,6 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); > struct link_map *sym_map = NULL; > > -#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC > - /* This is defined in rtld.c, but nowhere in the static libc.a; make the > - reference weak so static programs can still link. This declaration > - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) > - because rtld.c contains the common defn for _dl_rtld_map, which is > - incompatible with a weak decl in the same file. */ > - weak_extern (_dl_rtld_map); > -#endif > - > if (__glibc_unlikely (r_type == R_SPARC_NONE)) > return; > > @@ -321,13 +312,10 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > return; > } > > -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC > +#if !defined RTLD_BOOTSTRAP > if (__glibc_unlikely (r_type == R_SPARC_RELATIVE)) > { > -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC > - if (map != &_dl_rtld_map) /* Already done in rtld itself. */ > -# endif > - *reloc_addr += map->l_addr + reloc->r_addend; > + *reloc_addr += map->l_addr + reloc->r_addend; > return; > } > #endif Ok. > diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h > index dc24dbc305..8c4bab14fc 100644 > --- a/sysdeps/sparc/sparc64/dl-machine.h > +++ b/sysdeps/sparc/sparc64/dl-machine.h > @@ -324,15 +324,6 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > const unsigned long int r_type = ELF64_R_TYPE_ID (reloc->r_info); > struct link_map *sym_map = NULL; > > -#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC > - /* This is defined in rtld.c, but nowhere in the static libc.a; make the > - reference weak so static programs can still link. This declaration > - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) > - because rtld.c contains the common defn for _dl_rtld_map, which is > - incompatible with a weak decl in the same file. */ > - weak_extern (_dl_rtld_map); > -#endif > - > if (__glibc_unlikely (r_type == R_SPARC_NONE)) > return; > > @@ -342,13 +333,10 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > return; > } > > -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC > +#if !defined RTLD_BOOTSTRAP > if (__glibc_unlikely (r_type == R_SPARC_RELATIVE)) > { > -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC > - if (map != &_dl_rtld_map) /* Already done in rtld itself. */ > -# endif > - *reloc_addr += map->l_addr + reloc->r_addend; > + *reloc_addr += map->l_addr + reloc->r_addend; > return; > } > #endif Ok. > diff --git a/sysdeps/x86_64/dl-machine.h b/sysdeps/x86_64/dl-machine.h > index 6a6187490b..c70af7ab1e 100644 > --- a/sysdeps/x86_64/dl-machine.h > +++ b/sysdeps/x86_64/dl-machine.h > @@ -258,23 +258,9 @@ elf_machine_rela(struct link_map *map, struct r_scope_elem *scope[], > ElfW(Addr) *const reloc_addr = reloc_addr_arg; > const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info); > > -# if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC > +# if !defined RTLD_BOOTSTRAP > if (__glibc_unlikely (r_type == R_X86_64_RELATIVE)) > - { > -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC > - /* This is defined in rtld.c, but nowhere in the static libc.a; > - make the reference weak so static programs can still link. > - This declaration cannot be done when compiling rtld.c > - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the > - common defn for _dl_rtld_map, which is incompatible with a > - weak decl in the same file. */ > -# ifndef SHARED > - weak_extern (GL(dl_rtld_map)); > -# endif > - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ > -# endif > - *reloc_addr = map->l_addr + reloc->r_addend; > - } > + *reloc_addr = map->l_addr + reloc->r_addend; > else > # endif > # if !defined RTLD_BOOTSTRAP Ok.
diff --git a/Makeconfig b/Makeconfig index 47db08d6ae..0aa5fb0099 100644 --- a/Makeconfig +++ b/Makeconfig @@ -358,12 +358,6 @@ else real-static-start-installed-name = $(static-start-installed-name) endif -ifeq (yesyes,$(build-shared)$(have-z-combreloc)) -combreloc-LDFLAGS = -Wl,-z,combreloc -LDFLAGS.so += $(combreloc-LDFLAGS) -LDFLAGS-rtld += $(combreloc-LDFLAGS) -endif - relro-LDFLAGS = -Wl,-z,relro LDFLAGS.so += $(relro-LDFLAGS) LDFLAGS-rtld += $(relro-LDFLAGS) @@ -421,7 +415,7 @@ ifndef +link-pie +link-pie-before-inputs = $(if $($(@F)-no-pie),$(no-pie-ldflag),-pie) \ -Wl,-O1 -nostdlib -nostartfiles \ $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \ - $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \ + $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \ $(firstword $(CRT-$(@F)) $(csu-objpfx)S$(start-installed-name)) \ $(+preinit) $(+prectorS) +link-pie-before-libc = -o $@ $(+link-pie-before-inputs) \ @@ -487,7 +481,7 @@ ifeq (yes,$(build-pie-default)) else # not build-pie-default +link-before-inputs = -nostdlib -nostartfiles $(no-pie-ldflag) \ $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \ - $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \ + $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \ $(firstword $(CRT-$(@F)) $(csu-objpfx)$(start-installed-name)) \ $(+preinit) $(+prector) +link-before-libc = -o $@ $(+link-before-inputs) \ diff --git a/config.h.in b/config.h.in index ff8597413d..a94f756859 100644 --- a/config.h.in +++ b/config.h.in @@ -56,9 +56,6 @@ #undef STACK_PROTECTOR_LEVEL #endif -/* Define if the linker supports the -z combreloc option. */ -#undef HAVE_Z_COMBRELOC - /* Define if _rtld_local structure should be forced into .sdata section. */ #undef HAVE_SDATA_SECTION diff --git a/config.make.in b/config.make.in index 6d43e691f7..bf728c71c0 100644 --- a/config.make.in +++ b/config.make.in @@ -53,7 +53,6 @@ c++-bits-std_abs-h = @CXX_BITS_STD_ABS_H@ all-warnings = @all_warnings@ enable-werror = @enable_werror@ -have-z-combreloc = @libc_cv_z_combreloc@ have-z-execstack = @libc_cv_z_execstack@ have-protected-data = @libc_cv_protected_data@ have-insert = @libc_cv_insert@ diff --git a/configure b/configure index 2a3cb49b0b..d2f413d05d 100755 --- a/configure +++ b/configure @@ -625,7 +625,6 @@ libc_cv_has_glob_dat libc_cv_hashstyle libc_cv_fpie libc_cv_z_execstack -libc_cv_z_combreloc ASFLAGS_config libc_cv_cc_with_libunwind libc_cv_insert @@ -5967,44 +5966,6 @@ if test $libc_cv_as_noexecstack = yes; then fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -z combreloc" >&5 -$as_echo_n "checking for -z combreloc... " >&6; } -if ${libc_cv_z_combreloc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.c <<EOF -extern int bar (int); -extern int mumble; -int foo (void) { return bar (mumble); } -EOF -if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS - -fPIC -shared $no_ssp -o conftest.so conftest.c - -nostdlib -nostartfiles - -Wl,-z,combreloc 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } -then - if $READELF -S conftest.so | grep -E '.rela?.dyn' > /dev/null; then - libc_cv_z_combreloc=yes - else - libc_cv_z_combreloc=no - fi -else - libc_cv_z_combreloc=no -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_z_combreloc" >&5 -$as_echo "$libc_cv_z_combreloc" >&6; } -if test "$libc_cv_z_combreloc" = yes; then - $as_echo "#define HAVE_Z_COMBRELOC 1" >>confdefs.h - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for linker that supports -z execstack" >&5 $as_echo_n "checking for linker that supports -z execstack... " >&6; } libc_linker_feature=no diff --git a/configure.ac b/configure.ac index fa7d3c025b..b6a747dece 100644 --- a/configure.ac +++ b/configure.ac @@ -1324,37 +1324,6 @@ if test $libc_cv_as_noexecstack = yes; then fi AC_SUBST(ASFLAGS_config) -AC_CACHE_CHECK(for -z combreloc, - libc_cv_z_combreloc, [dnl -cat > conftest.c <<EOF -extern int bar (int); -extern int mumble; -int foo (void) { return bar (mumble); } -EOF -if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS - -fPIC -shared $no_ssp -o conftest.so conftest.c - -nostdlib -nostartfiles - -Wl,-z,combreloc 1>&AS_MESSAGE_LOG_FD]) -then -dnl The following test is a bit weak. We must use a tool which can test -dnl cross-platform since the gcc used can be a cross compiler. Without -dnl introducing new options this is not easily doable. Instead use a tool -dnl which always is cross-platform: readelf. To detect whether -z combreloc -dnl look for a section named .rel.dyn or .rela.dyn. - if $READELF -S conftest.so | grep -E '.rela?.dyn' > /dev/null; then - libc_cv_z_combreloc=yes - else - libc_cv_z_combreloc=no - fi -else - libc_cv_z_combreloc=no -fi -rm -f conftest*]) -if test "$libc_cv_z_combreloc" = yes; then - AC_DEFINE(HAVE_Z_COMBRELOC) -fi -AC_SUBST(libc_cv_z_combreloc) - LIBC_LINKER_FEATURE([-z execstack], [-Wl,-z,execstack], [libc_cv_z_execstack=yes], [libc_cv_z_execstack=no]) AC_SUBST(libc_cv_z_execstack) diff --git a/sysdeps/alpha/dl-machine.h b/sysdeps/alpha/dl-machine.h index 30fc790e88..ccee972c96 100644 --- a/sysdeps/alpha/dl-machine.h +++ b/sysdeps/alpha/dl-machine.h @@ -371,37 +371,22 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], Elf64_Addr *const reloc_addr = reloc_addr_arg; unsigned long int const r_type = ELF64_R_TYPE (reloc->r_info); -#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED - /* This is defined in rtld.c, but nowhere in the static libc.a; make the - reference weak so static programs can still link. This declaration - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) - because rtld.c contains the common defn for _dl_rtld_map, which is - incompatible with a weak decl in the same file. */ - weak_extern (_dl_rtld_map); -#endif - /* We cannot use a switch here because we cannot locate the switch jump table until we've self-relocated. */ -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC +#if !defined RTLD_BOOTSTRAP if (__builtin_expect (r_type == R_ALPHA_RELATIVE, 0)) { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* Already done in dynamic linker. */ - if (map != &GL(dl_rtld_map)) -# endif - { - /* XXX Make some timings. Maybe it's preferable to test for - unaligned access and only do it the complex way if necessary. */ - Elf64_Addr reloc_addr_val; + /* XXX Make some timings. Maybe it's preferable to test for + unaligned access and only do it the complex way if necessary. */ + Elf64_Addr reloc_addr_val; - /* Load value without causing unaligned trap. */ - memcpy (&reloc_addr_val, reloc_addr_arg, 8); - reloc_addr_val += map->l_addr; + /* Load value without causing unaligned trap. */ + memcpy (&reloc_addr_val, reloc_addr_arg, 8); + reloc_addr_val += map->l_addr; - /* Store value without causing unaligned trap. */ - memcpy (reloc_addr_arg, &reloc_addr_val, 8); - } + /* Store value without causing unaligned trap. */ + memcpy (reloc_addr_arg, &reloc_addr_val, 8); } else #endif diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h index 94f41c65cb..a7898bf420 100644 --- a/sysdeps/arm/dl-machine.h +++ b/sysdeps/arm/dl-machine.h @@ -335,23 +335,9 @@ elf_machine_rel (struct link_map *map, struct r_scope_elem *scope[], Elf32_Addr *const reloc_addr = reloc_addr_arg; const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC +#if !defined RTLD_BOOTSTRAP if (__builtin_expect (r_type == R_ARM_RELATIVE, 0)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; - make the reference weak so static programs can still link. - This declaration cannot be done when compiling rtld.c - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the - common defn for _dl_rtld_map, which is incompatible with a - weak decl in the same file. */ -# ifndef SHARED - weak_extern (_dl_rtld_map); -# endif - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ -# endif - *reloc_addr += map->l_addr; - } + *reloc_addr += map->l_addr; # ifndef RTLD_BOOTSTRAP else if (__builtin_expect (r_type == R_ARM_NONE, 0)) return; diff --git a/sysdeps/hppa/dl-machine.h b/sysdeps/hppa/dl-machine.h index 7b7a697cbb..8c0ca32fc6 100644 --- a/sysdeps/hppa/dl-machine.h +++ b/sysdeps/hppa/dl-machine.h @@ -557,15 +557,6 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], struct link_map *sym_map; Elf32_Addr value; -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED - /* This is defined in rtld.c, but nowhere in the static libc.a; make the - reference weak so static programs can still link. This declaration - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) - because rtld.c contains the common defn for _dl_rtld_map, which is - incompatible with a weak decl in the same file. */ - weak_extern (GL(dl_rtld_map)); -# endif - /* RESOLVE_MAP will return a null value for undefined syms, and non-null for all other syms. In particular, relocs with no symbol (symbol index of zero), also called *ABS* relocs, will be diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h index 3ffd0b4e31..1f8d734215 100644 --- a/sysdeps/i386/dl-machine.h +++ b/sysdeps/i386/dl-machine.h @@ -266,29 +266,15 @@ elf_machine_rel (struct link_map *map, struct r_scope_elem *scope[], Elf32_Addr *const reloc_addr = reloc_addr_arg; const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); -# if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC +# if !defined RTLD_BOOTSTRAP if (__glibc_unlikely (r_type == R_386_RELATIVE)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; - make the reference weak so static programs can still link. - This declaration cannot be done when compiling rtld.c - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the - common defn for _dl_rtld_map, which is incompatible with a - weak decl in the same file. */ -# ifndef SHARED - weak_extern (_dl_rtld_map); -# endif - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ -# endif - *reloc_addr += map->l_addr; - } + *reloc_addr += map->l_addr; # ifndef RTLD_BOOTSTRAP else if (__glibc_unlikely (r_type == R_386_NONE)) return; # endif else -# endif /* !RTLD_BOOTSTRAP and have no -z combreloc */ +# endif /* !RTLD_BOOTSTRAP */ { # ifndef RTLD_BOOTSTRAP const Elf32_Sym *const refsym = sym; diff --git a/sysdeps/ia64/dl-machine.h b/sysdeps/ia64/dl-machine.h index e2c5004a26..20e586aa35 100644 --- a/sysdeps/ia64/dl-machine.h +++ b/sysdeps/ia64/dl-machine.h @@ -383,29 +383,15 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], const unsigned long int r_type = ELF64_R_TYPE (reloc->r_info); Elf64_Addr value; -#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED - /* This is defined in rtld.c, but nowhere in the static libc.a; make the - reference weak so static programs can still link. This declaration - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) - because rtld.c contains the common defn for _dl_rtld_map, which is - incompatible with a weak decl in the same file. */ - weak_extern (_dl_rtld_map); -#endif - /* We cannot use a switch here because we cannot locate the switch jump table until we've self-relocated. */ -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC +#if !defined RTLD_BOOTSTRAP if (__builtin_expect (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_REL64LSB), 0)) { assert (ELF64_R_TYPE (reloc->r_info) == R_IA64_REL64LSB); - value = *reloc_addr; -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* Already done in dynamic linker. */ - if (map != &GL(dl_rtld_map)) -# endif - value += map->l_addr; + value = *reloc_addr + map->l_addr; } else #endif diff --git a/sysdeps/riscv/dl-machine.h b/sysdeps/riscv/dl-machine.h index 1d3e2e588c..4912735c2b 100644 --- a/sysdeps/riscv/dl-machine.h +++ b/sysdeps/riscv/dl-machine.h @@ -244,24 +244,10 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], } #endif -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC +#if !defined RTLD_BOOTSTRAP case R_RISCV_RELATIVE: - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; - make the reference weak so static programs can still link. - This declaration cannot be done when compiling rtld.c - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the - common defn for _dl_rtld_map, which is incompatible with a - weak decl in the same file. */ -# ifndef SHARED - weak_extern (GL(dl_rtld_map)); -# endif - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ -# endif - *addr_field = map->l_addr + reloc->r_addend; + *addr_field = map->l_addr + reloc->r_addend; break; - } #endif case R_RISCV_IRELATIVE: diff --git a/sysdeps/s390/s390-32/dl-machine.h b/sysdeps/s390/s390-32/dl-machine.h index 4e6229e945..4392abb355 100644 --- a/sysdeps/s390/s390-32/dl-machine.h +++ b/sysdeps/s390/s390-32/dl-machine.h @@ -329,23 +329,9 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], Elf32_Addr *const reloc_addr = reloc_addr_arg; const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC +#if !defined RTLD_BOOTSTRAP if (__glibc_unlikely (r_type == R_390_RELATIVE)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; - make the reference weak so static programs can still link. - This declaration cannot be done when compiling rtld.c - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the - common defn for _dl_rtld_map, which is incompatible with a - weak decl in the same file. */ -# ifndef SHARED - weak_extern (GL(dl_rtld_map)); -# endif - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ -# endif - *reloc_addr = map->l_addr + reloc->r_addend; - } + *reloc_addr = map->l_addr + reloc->r_addend; else #endif if (__glibc_unlikely (r_type == R_390_NONE)) diff --git a/sysdeps/s390/s390-64/dl-machine.h b/sysdeps/s390/s390-64/dl-machine.h index 4bd97f5645..7a94b3a7a6 100644 --- a/sysdeps/s390/s390-64/dl-machine.h +++ b/sysdeps/s390/s390-64/dl-machine.h @@ -276,23 +276,9 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], Elf64_Addr *const reloc_addr = reloc_addr_arg; const unsigned int r_type = ELF64_R_TYPE (reloc->r_info); -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC +#if !defined RTLD_BOOTSTRAP if (__glibc_unlikely (r_type == R_390_RELATIVE)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; - make the reference weak so static programs can still link. - This declaration cannot be done when compiling rtld.c - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the - common defn for _dl_rtld_map, which is incompatible with a - weak decl in the same file. */ -# ifndef SHARED - weak_extern (GL(dl_rtld_map)); -# endif - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ -# endif - *reloc_addr = map->l_addr + reloc->r_addend; - } + *reloc_addr = map->l_addr + reloc->r_addend; else #endif if (__glibc_unlikely (r_type == R_390_NONE)) diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h index e8d208a080..8c2408b1e6 100644 --- a/sysdeps/sparc/sparc32/dl-machine.h +++ b/sysdeps/sparc/sparc32/dl-machine.h @@ -303,15 +303,6 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); struct link_map *sym_map = NULL; -#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; make the - reference weak so static programs can still link. This declaration - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) - because rtld.c contains the common defn for _dl_rtld_map, which is - incompatible with a weak decl in the same file. */ - weak_extern (_dl_rtld_map); -#endif - if (__glibc_unlikely (r_type == R_SPARC_NONE)) return; @@ -321,13 +312,10 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], return; } -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC +#if !defined RTLD_BOOTSTRAP if (__glibc_unlikely (r_type == R_SPARC_RELATIVE)) { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - if (map != &_dl_rtld_map) /* Already done in rtld itself. */ -# endif - *reloc_addr += map->l_addr + reloc->r_addend; + *reloc_addr += map->l_addr + reloc->r_addend; return; } #endif diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h index dc24dbc305..8c4bab14fc 100644 --- a/sysdeps/sparc/sparc64/dl-machine.h +++ b/sysdeps/sparc/sparc64/dl-machine.h @@ -324,15 +324,6 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], const unsigned long int r_type = ELF64_R_TYPE_ID (reloc->r_info); struct link_map *sym_map = NULL; -#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; make the - reference weak so static programs can still link. This declaration - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) - because rtld.c contains the common defn for _dl_rtld_map, which is - incompatible with a weak decl in the same file. */ - weak_extern (_dl_rtld_map); -#endif - if (__glibc_unlikely (r_type == R_SPARC_NONE)) return; @@ -342,13 +333,10 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], return; } -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC +#if !defined RTLD_BOOTSTRAP if (__glibc_unlikely (r_type == R_SPARC_RELATIVE)) { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - if (map != &_dl_rtld_map) /* Already done in rtld itself. */ -# endif - *reloc_addr += map->l_addr + reloc->r_addend; + *reloc_addr += map->l_addr + reloc->r_addend; return; } #endif diff --git a/sysdeps/x86_64/dl-machine.h b/sysdeps/x86_64/dl-machine.h index 6a6187490b..c70af7ab1e 100644 --- a/sysdeps/x86_64/dl-machine.h +++ b/sysdeps/x86_64/dl-machine.h @@ -258,23 +258,9 @@ elf_machine_rela(struct link_map *map, struct r_scope_elem *scope[], ElfW(Addr) *const reloc_addr = reloc_addr_arg; const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info); -# if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC +# if !defined RTLD_BOOTSTRAP if (__glibc_unlikely (r_type == R_X86_64_RELATIVE)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; - make the reference weak so static programs can still link. - This declaration cannot be done when compiling rtld.c - (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the - common defn for _dl_rtld_map, which is incompatible with a - weak decl in the same file. */ -# ifndef SHARED - weak_extern (GL(dl_rtld_map)); -# endif - if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ -# endif - *reloc_addr = map->l_addr + reloc->r_addend; - } + *reloc_addr = map->l_addr + reloc->r_addend; else # endif # if !defined RTLD_BOOTSTRAP