From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ot1-x32d.google.com (mail-ot1-x32d.google.com [IPv6:2607:f8b0:4864:20::32d]) by sourceware.org (Postfix) with ESMTPS id DB4103857369 for ; Wed, 20 Apr 2022 17:41:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org DB4103857369 Received: by mail-ot1-x32d.google.com with SMTP id s21-20020a0568301e1500b006054da8e72dso1588360otr.1 for ; Wed, 20 Apr 2022 10:41:48 -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:from:to:cc:references:in-reply-to :content-transfer-encoding; bh=R7t2jKjaBtlTkJcuaiWh0QgfZBO7jogm2RuY+J/qJgc=; b=PeC6Q2NUXb/4W2MrA+gZQsYktZvC/1IP8KJRiAMqCo79Vz+MuEvlpu8Rc5cuH4pqpo 32scCYFnpY1HWhp0aNPBpn5T0B46Xr0Zh92vmC9hsggHRCtOKeHIqJw5Xht4YAn3NFsM XsVIAVE+Ryz0M04d5wfA4twIEDCzAHeRts8+wCRvmpPh0X1UEWy3QF785VO5vFGO6lgu qj0WAfD9RkQSnSSt+iU4+Enifw/MS71zoE3GnKlafLvLz6oZlCsbYgZEPzn6qZ7r/YJ9 uJfuid7h9kak0VSNlUZokMQYwAHqujmtKDh1KqXv9uNyMi7Hg3LXG/b6aTU3KTeEOl/q /NYw== X-Gm-Message-State: AOAM530iL+Z8Nqbmw3UAR3sR/prORrfuxchBOF+qgZvAF+wujwWLPCGa WLc+JwRHF/R7/XTn+PblWwBT9arh4+GJkQ== X-Google-Smtp-Source: ABdhPJyXd3AqlCMhKD7RvyF92XcpQFFuqOibCoK/dtsZb4zhTi+4K1XwhAd4jhQnqfMcswqPBR5CUQ== X-Received: by 2002:a05:6830:4184:b0:605:5945:4a8d with SMTP id r4-20020a056830418400b0060559454a8dmr2970402otu.384.1650476507924; Wed, 20 Apr 2022 10:41:47 -0700 (PDT) Received: from ?IPV6:2804:431:c7ca:c9d0:24b1:bd98:2ef4:714c? ([2804:431:c7ca:c9d0:24b1:bd98:2ef4:714c]) by smtp.gmail.com with ESMTPSA id pp23-20020a0568709d1700b000e2d876505dsm194402oab.32.2022.04.20.10.41.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 20 Apr 2022 10:41:47 -0700 (PDT) Message-ID: Date: Wed, 20 Apr 2022 14:41:44 -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 v10 5/7] elf: Add more DT_RELR tests Content-Language: en-US From: Adhemerval Zanella To: "H.J. Lu" , libc-alpha@sourceware.org References: <20220414232129.1886210-1-hjl.tools@gmail.com> <20220414232129.1886210-6-hjl.tools@gmail.com> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-14.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, URIBL_BLACK 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: Wed, 20 Apr 2022 17:41:51 -0000 On 20/04/2022 14:24, Adhemerval Zanella wrote: > > > On 14/04/2022 20:21, H.J. Lu wrote: >> Verify that: >> >> 1. A DT_RELR shared library without DT_NEEDED works. >> 2. A DT_RELR shared library without DT_VERNEED works. >> 3. A DT_RELR shared library without libc.so on DT_NEEDED works. > > LGTM, thanks. > > Reviewed-by: Adhemerval Zanella > >> --- >> elf/Makefile | 71 ++++++++++++++++++++++++++++++++++++++++-- >> elf/tst-relr-mod2.c | 46 +++++++++++++++++++++++++++ >> elf/tst-relr-mod3a.c | 49 +++++++++++++++++++++++++++++ >> elf/tst-relr-mod3b.c | 22 +++++++++++++ >> elf/tst-relr-mod4a.c | 19 +++++++++++ >> elf/tst-relr-mod4b.c | 19 +++++++++++ >> elf/tst-relr-mod4b.map | 3 ++ >> elf/tst-relr2.c | 27 ++++++++++++++++ >> elf/tst-relr3.c | 27 ++++++++++++++++ >> elf/tst-relr4.c | 1 + >> 10 files changed, 281 insertions(+), 3 deletions(-) >> create mode 100644 elf/tst-relr-mod2.c >> create mode 100644 elf/tst-relr-mod3a.c >> create mode 100644 elf/tst-relr-mod3b.c >> create mode 100644 elf/tst-relr-mod4a.c >> create mode 100644 elf/tst-relr-mod4b.c >> create mode 100644 elf/tst-relr-mod4b.map >> create mode 100644 elf/tst-relr2.c >> create mode 100644 elf/tst-relr3.c >> create mode 100644 elf/tst-relr4.c >> >> diff --git a/elf/Makefile b/elf/Makefile >> index 3f3e711dd2..07ac9ec3ef 100644 >> --- a/elf/Makefile >> +++ b/elf/Makefile >> @@ -544,7 +544,20 @@ endif >> ifeq ($(have-dt-relr),yes) >> tests += \ >> tst-relr \ >> + tst-relr2 \ >> + tst-relr3 \ >> + tst-relr4 \ >> # tests >> +modules-names-dt-relr = \ >> + tst-relr-mod2 \ >> + tst-relr-mod3a \ >> + tst-relr-mod3b \ >> + tst-relr-mod4a \ >> + tst-relr-mod4b \ >> +# modules-names-dt-relr >> +modules-names += $(modules-names-dt-relr) >> +# These shared libraries have special build rules. >> +modules-names-nobuild += $(modules-names-dt-relr) >> ifeq ($(have-fpie),yes) >> tests += \ >> tst-relr-pie \ >> @@ -603,7 +616,7 @@ test-extras += \ >> tst-tlsmod17a \ >> tst-tlsmod18a \ >> # test-extras >> -modules-names = \ >> +modules-names += \ >> circlemod1 \ >> circlemod1a \ >> circlemod2 \ >> @@ -973,8 +986,13 @@ extra-test-objs += $(addsuffix .os,$(strip $(modules-names))) >> >> # filtmod1.so, tst-big-note-lib.so, tst-ro-dynamic-mod.so have special >> # rules. >> -modules-names-nobuild := filtmod1 tst-big-note-lib tst-ro-dynamic-mod \ >> - tst-audit24bmod1 tst-audit24bmod2 >> +modules-names-nobuild += \ >> + filtmod1 \ >> + tst-audit24bmod1 \ >> + tst-audit24bmod2 \ >> + tst-big-note-lib \ >> + tst-ro-dynamic-mod \ >> +# modules-names-nobuild >> >> tests += $(tests-static) >> > > Ok. > >> @@ -2768,3 +2786,50 @@ $(objpfx)check-tst-relr-pie.out: $(objpfx)tst-relr-pie >> | sed -ne '/required from libc.so/,$$ p' \ >> | grep GLIBC_ABI_DT_RELR > $@; \ >> $(evaluate-test) >> + >> +# The test checks if a DT_RELR shared library without DT_NEEDED works as >> +# intended, so it uses an explicit link rule. >> +$(objpfx)tst-relr2: $(objpfx)tst-relr-mod2.so >> +$(objpfx)tst-relr-mod2.so: $(objpfx)tst-relr-mod2.os >> + $(LINK.o) -nostdlib -nostartfiles -Wl,-z,pack-relative-relocs \ >> + $(LDFLAGS-soname-fname) \ >> + -shared -o $@.new $(filter-out $(map-file),$^) >> + $(call after-link,$@.new) >> + mv -f $@.new $@ >> + >> +# The test checks if a DT_RELR shared library without DT_VERNEED works as >> +# intended, so it uses an explicit link rule. >> +$(objpfx)tst-relr3: $(objpfx)tst-relr-mod3a.so >> +$(objpfx)tst-relr-mod3b.so: $(objpfx)tst-relr-mod3b.os >> + $(LINK.o) -nostdlib -nostartfiles -Wl,-z,pack-relative-relocs \ >> + $(LDFLAGS-soname-fname) \ >> + -shared -o $@.new $(filter-out $(map-file),$^) >> + $(call after-link,$@.new) >> + mv -f $@.new $@ >> + >> +$(objpfx)tst-relr-mod3a.so: $(objpfx)tst-relr-mod3a.os \ >> + $(objpfx)tst-relr-mod3b.so >> + $(LINK.o) -nostdlib -nostartfiles -Wl,-z,pack-relative-relocs \ >> + $(LDFLAGS-soname-fname) \ >> + -shared -o $@.new $(filter-out $(map-file),$^) >> + $(call after-link,$@.new) >> + mv -f $@.new $@ >> + >> +# The test checks if a DT_RELR shared library without libc.so on DT_NEEDED >> +# works as intended, so it uses an explicit link rule. >> +$(objpfx)tst-relr4: $(objpfx)tst-relr-mod4a.so >> +$(objpfx)tst-relr-mod4b.so: $(objpfx)tst-relr-mod4b.os >> + $(LINK.o) -nostdlib -nostartfiles -Wl,-z,pack-relative-relocs \ >> + $(LDFLAGS-soname-fname) \ >> + -Wl,--version-script=tst-relr-mod4b.map \ >> + -shared -o $@.new $(filter-out $(map-file),$^) >> + $(call after-link,$@.new) >> + mv -f $@.new $@ >> + >> +$(objpfx)tst-relr-mod4a.so: $(objpfx)tst-relr-mod4a.os \ >> + $(objpfx)tst-relr-mod4b.so >> + $(LINK.o) -nostdlib -nostartfiles -Wl,-z,pack-relative-relocs \ >> + $(LDFLAGS-soname-fname) \ >> + -shared -o $@.new $(filter-out $(map-file),$^) >> + $(call after-link,$@.new) >> + mv -f $@.new $@ > > Ok. In fact I am seeing issues on i686-linux-gnu where linking is failing with a missing __stack_chk_fail_local if --enable-stack-protector is used. I think you will need to explicit add libc_nonshared for this specific shared objects: diff --git a/elf/Makefile b/elf/Makefile index bf8a61dc30..152e495b8d 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -2795,7 +2795,8 @@ $(objpfx)tst-relr2: $(objpfx)tst-relr-mod2.so $(objpfx)tst-relr-mod2.so: $(objpfx)tst-relr-mod2.os $(LINK.o) -nostdlib -nostartfiles -Wl,-z,pack-relative-relocs \ $(LDFLAGS-soname-fname) \ - -shared -o $@.new $(filter-out $(map-file),$^) + -shared -o $@.new $(filter-out $(map-file),$^) \ + $(common-objpfx)libc_nonshared.a $(call after-link,$@.new) mv -f $@.new $@ @@ -2805,7 +2806,8 @@ $(objpfx)tst-relr3: $(objpfx)tst-relr-mod3a.so $(objpfx)tst-relr-mod3b.so: $(objpfx)tst-relr-mod3b.os $(LINK.o) -nostdlib -nostartfiles -Wl,-z,pack-relative-relocs \ $(LDFLAGS-soname-fname) \ - -shared -o $@.new $(filter-out $(map-file),$^) + -shared -o $@.new $(filter-out $(map-file),$^) \ + $(common-objpfx)libc_nonshared.a $(call after-link,$@.new) mv -f $@.new $@ @@ -2813,7 +2815,8 @@ $(objpfx)tst-relr-mod3a.so: $(objpfx)tst-relr-mod3a.os \ $(objpfx)tst-relr-mod3b.so $(LINK.o) -nostdlib -nostartfiles -Wl,-z,pack-relative-relocs \ $(LDFLAGS-soname-fname) \ - -shared -o $@.new $(filter-out $(map-file),$^) + -shared -o $@.new $(filter-out $(map-file),$^) \ + $(common-objpfx)libc_nonshared.a $(call after-link,$@.new) mv -f $@.new $@ @@ -2824,7 +2827,8 @@ $(objpfx)tst-relr-mod4b.so: $(objpfx)tst-relr-mod4b.os $(LINK.o) -nostdlib -nostartfiles -Wl,-z,pack-relative-relocs \ $(LDFLAGS-soname-fname) \ -Wl,--version-script=tst-relr-mod4b.map \ - -shared -o $@.new $(filter-out $(map-file),$^) + -shared -o $@.new $(filter-out $(map-file),$^) \ + $(common-objpfx)libc_nonshared.a $(call after-link,$@.new) mv -f $@.new $@ @@ -2832,6 +2836,7 @@ $(objpfx)tst-relr-mod4a.so: $(objpfx)tst-relr-mod4a.os \ $(objpfx)tst-relr-mod4b.so $(LINK.o) -nostdlib -nostartfiles -Wl,-z,pack-relative-relocs \ $(LDFLAGS-soname-fname) \ - -shared -o $@.new $(filter-out $(map-file),$^) + -shared -o $@.new $(filter-out $(map-file),$^) \ + $(common-objpfx)libc_nonshared.a $(call after-link,$@.new) mv -f $@.new $@