From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out30-131.freemail.mail.aliyun.com (out30-131.freemail.mail.aliyun.com [115.124.30.131]) by sourceware.org (Postfix) with ESMTPS id 07DFC3858D39 for ; Sun, 12 Dec 2021 03:54:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 07DFC3858D39 X-Alimail-AntiSpam: AC=PASS; BC=-1|-1; BR=01201311R851e4; CH=green; DM=||false|; DS=||; FP=0|-1|-1|-1|0|-1|-1|-1; HT=e01e04394; MF=rongwei.wang@linux.alibaba.com; NM=1; PH=DS; RN=2; SR=0; TI=SMTPD_---0V-HfyfI_1639281278; Received: from 30.27.225.21(mailfrom:rongwei.wang@linux.alibaba.com fp:SMTPD_---0V-HfyfI_1639281278) by smtp.aliyun-inc.com(127.0.0.1); Sun, 12 Dec 2021 11:54:39 +0800 Message-ID: <15c12c84-4f44-63e2-5a39-26bff6788848@linux.alibaba.com> Date: Sun, 12 Dec 2021 11:54:37 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:95.0) Gecko/20100101 Thunderbird/95.0 Subject: Re: [PATCH v2] Check alignment of PT_LOAD segment only if possible Content-Language: en-US To: "H.J. Lu" , libc-alpha@sourceware.org References: <20211210220213.3285838-1-hjl.tools@gmail.com> From: Rongwei Wang In-Reply-To: <20211210220213.3285838-1-hjl.tools@gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-20.4 required=5.0 tests=BAYES_00, ENV_AND_HDR_SPF_MATCH, GIT_PATCH_0, KAM_DMARC_STATUS, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, UNPARSEABLE_RELAY, USER_IN_DEF_SPF_WL 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: Sun, 12 Dec 2021 03:54:49 -0000 On 12/11/21 6:02 AM, H.J. Lu via Libc-alpha wrote: > Add a configure check for 2MB variable alignment and check alignment of > PT_LOAD segment only if 2MB variable alignment is supported. > > Tested with cross build to glibcs-alpha-linux-gnu. > --- > configure | 26 ++++++++++++++++++++++++++ > configure.ac | 11 +++++++++++ > elf/Makefile | 15 ++++++++++----- > 3 files changed, 47 insertions(+), 5 deletions(-) > > diff --git a/configure b/configure > index e4d013907c..37259efce7 100755 > --- a/configure > +++ b/configure > @@ -6817,6 +6817,32 @@ if test $libc_cv_builtin_trap = yes; then > > fi > > +# Check target support for 2MB variable alignment. > +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for 2MB variable alignment" >&5 > +$as_echo_n "checking for 2MB variable alignment... " >&6; } > +if ${libc_cv_have_2MB_alignment+:} false; then : > + $as_echo_n "(cached) " >&6 > +else > + > +cat confdefs.h - <<_ACEOF >conftest.$ac_ext > +/* end confdefs.h. */ > + > +int foo __attribute__((aligned(0x200000))) = 1; > + > +_ACEOF > +if ac_fn_c_try_compile "$LINENO"; then : > + libc_cv_have_2MB_alignment=yes > +else > + libc_cv_have_2MB_alignment=no > +fi > +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext > + > +fi > +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_have_2MB_alignment" >&5 > +$as_echo "$libc_cv_have_2MB_alignment" >&6; } > +config_vars="$config_vars > +have-2MB-alignment = $libc_cv_have_2MB_alignment" > + > ac_ext=cpp > ac_cpp='$CXXCPP $CPPFLAGS' > ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' > diff --git a/configure.ac b/configure.ac > index a91a7f399c..57d4572c26 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -1726,6 +1726,17 @@ if test $libc_cv_builtin_trap = yes; then > AC_DEFINE([HAVE_BUILTIN_TRAP]) > fi > > +# Check target support for 2MB variable alignment. > +AC_CACHE_CHECK([for 2MB variable alignment], > + libc_cv_have_2MB_alignment, [ > +AC_COMPILE_IFELSE([AC_LANG_SOURCE([ > +int foo __attribute__((aligned(0x200000))) = 1; > +])], > + [libc_cv_have_2MB_alignment=yes], > + [libc_cv_have_2MB_alignment=no]) > +]) > +LIBC_CONFIG_VAR([have-2MB-alignment], [$libc_cv_have_2MB_alignment]) > + > dnl C++ feature tests. > AC_LANG_PUSH([C++]) > > diff --git a/elf/Makefile b/elf/Makefile > index fe42caeb0e..1bf77bc5ac 100644 > --- a/elf/Makefile > +++ b/elf/Makefile > @@ -207,7 +207,7 @@ tests += restest1 preloadtest loadfail multiload origtest resolvfail \ > tst-tls4 tst-tls5 \ > tst-tls10 tst-tls11 tst-tls12 tst-tls13 tst-tls14 tst-tls15 \ > tst-tls16 tst-tls17 tst-tls18 tst-tls19 tst-tls-dlinfo \ > - tst-align tst-align2 tst-align3 \ > + tst-align tst-align2 \ > tst-dlmodcount tst-dlopenrpath tst-deep1 \ > tst-dlmopen1 tst-dlmopen3 tst-dlmopen4 \ > unload3 unload4 unload5 unload6 unload7 unload8 tst-global1 order2 \ > @@ -241,9 +241,6 @@ tests-internal += loadtest unload unload2 circleload1 \ > tests-container += tst-pldd tst-dlopen-tlsmodid-container \ > tst-dlopen-self-container tst-preload-pthread-libc > test-srcs = tst-pathopt > -ifeq (yes,$(have-fpie)) > -tests-pie += tst-align3 > -endif > selinux-enabled := $(shell cat /selinux/enforce 2> /dev/null) > ifneq ($(selinux-enabled),1) > tests-execstack-yes = tst-execstack tst-execstack-needed tst-execstack-prog > @@ -305,7 +302,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \ > circlemod3 circlemod3a \ > reldep8mod1 reldep8mod2 reldep8mod3 \ > reldep9mod1 reldep9mod2 reldep9mod3 \ > - tst-alignmod tst-alignmod2 tst-alignmod3 \ > + tst-alignmod tst-alignmod2 \ > $(modules-execstack-$(have-z-execstack)) \ > tst-dlopenrpathmod tst-deep1mod1 tst-deep1mod2 tst-deep1mod3 \ > tst-dlmopen1mod tst-auditmod1 \ > @@ -418,6 +415,14 @@ endif > modules-execstack-yes = tst-execstack-mod > extra-test-objs += $(addsuffix .os,$(strip $(modules-names))) > > +ifeq (yes,$(have-2MB-alignment)) > +tests += tst-align3 > +modules-names += tst-alignmod3 > +ifeq (yes,$(have-fpie)) > +tests-pie += tst-align3 > +endif > +endif > + > # 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 > Hello It seems that I need to wait for this patch to merge before I can send out the following patch again: "Add a testcase to check alignment of PT_LOAD segment" I am not sure if I got it right. If I missing something, please let me know. Thanks.