From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oa1-x2e.google.com (mail-oa1-x2e.google.com [IPv6:2001:4860:4864:20::2e]) by sourceware.org (Postfix) with ESMTPS id E70CE3858D37 for ; Mon, 4 Apr 2022 18:45:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E70CE3858D37 Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-df22f50e0cso11789472fac.3 for ; Mon, 04 Apr 2022 11:45:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:references:from:in-reply-to :content-transfer-encoding; bh=LtlSrpg2kCLms528mI77RibuS1SFTEUlM0noFinxdIs=; b=SsLNRBL6nF8LSyGTOEZMNmUIQ+TxCRGWb8lNwyotYZA2zMIcpoJzBZp3bJNHGDogfJ Im02iQ4MhV16RrrkCJieYrZHLKZUGFhI1uHoX9cPyDGdCAR9UkUCJxtnhTAvDiYjuRDI OmsAz1+wSnmW75hca0le547BoT15wuXArZKK4//CRISxmFnVYmeQdEVV5GzcyL39tQkh +oqUfMoQtYfTd2SI+koagXaQo+W4wAaJ6kiLeSI1gPO6RHqYpEkdK5ql31qL6D69K3sX fJLjB1cbzczsTRXWQAySLo3lJMN8nAYLg9rhaQbiwNv/z6Tj6FG3oduG28AzBE24j2fy EGNw== X-Gm-Message-State: AOAM53397IVd+uB8nv/647huGx5awaQn8+JG+4qzgdCXieOXWYqV6uwA 7dZzVG4BoaPEL2ubCPyIFjdUDg== X-Google-Smtp-Source: ABdhPJxQzbm4MOrhpjlBYb/RZOFUe+IGu0dpRCn7ufHpGxb3I3gFJDEd/egaiiF3lcTPAr5NUuMZpQ== X-Received: by 2002:a05:6870:590:b0:d7:b0:7412 with SMTP id m16-20020a056870059000b000d700b07412mr298731oap.115.1649097900108; Mon, 04 Apr 2022 11:45:00 -0700 (PDT) Received: from ?IPV6:2804:431:c7cb:a6c0:94cf:60bc:16d1:2727? ([2804:431:c7cb:a6c0:94cf:60bc:16d1:2727]) by smtp.gmail.com with ESMTPSA id n15-20020aca240f000000b002da2fc73741sm4456446oic.33.2022.04.04.11.44.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 04 Apr 2022 11:44:59 -0700 (PDT) Message-ID: <38fefcc6-110a-35ab-f0c6-becd973f0838@linaro.org> Date: Mon, 4 Apr 2022 15:44:56 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.0 Subject: Re: [PATCH] Remove -z combreloc and HAVE_Z_COMBRELOC Content-Language: en-US To: Fangrui Song , libc-alpha@sourceware.org References: <20220330061707.4119477-1-maskray@google.com> From: Adhemerval Zanella In-Reply-To: <20220330061707.4119477-1-maskray@google.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Apr 2022 18:45:04 -0000 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 > --- > 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 < -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 < -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.