From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: "H.J. Lu" <hjl.tools@gmail.com>
Cc: GNU C Library <libc-alpha@sourceware.org>
Subject: Re: [PATCH] Check alignment of PT_LOAD segment only if possible
Date: Fri, 10 Dec 2021 19:50:04 -0300 [thread overview]
Message-ID: <cefbdb88-38e4-6c4b-e3f0-3e57e7ac7f63@linaro.org> (raw)
In-Reply-To: <CAMe9rOqP6SJ7WsoYYqGXhENyCZ23G4WS9TJnQXsHyKTmqvkBFQ@mail.gmail.com>
On 10/12/2021 18:54, H.J. Lu wrote:
> On Fri, Dec 10, 2021 at 1:36 PM Adhemerval Zanella
> <adhemerval.zanella@linaro.org> wrote:
>>
>>
>>
>> On 10/12/2021 17:59, H.J. Lu 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 | 40 +++++++++++++++++++++++++++++++++++++++-
>>> configure.ac | 11 +++++++++++
>>> elf/Makefile | 15 ++++++++++-----
>>> 3 files changed, 60 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/configure b/configure
>>> index e4d013907c..9da30f428f 100755
>>> --- a/configure
>>> +++ b/configure
>>> @@ -732,6 +732,7 @@ infodir
>>> docdir
>>> oldincludedir
>>> includedir
>>> +runstatedir
>>> localstatedir
>>> sharedstatedir
>>> sysconfdir
>>> @@ -845,6 +846,7 @@ datadir='${datarootdir}'
>>> sysconfdir='${prefix}/etc'
>>> sharedstatedir='${prefix}/com'
>>> localstatedir='${prefix}/var'
>>> +runstatedir='${localstatedir}/run'
>>> includedir='${prefix}/include'
>>> oldincludedir='/usr/include'
>>> docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
>>> @@ -1097,6 +1099,15 @@ do
>>> | -silent | --silent | --silen | --sile | --sil)
>>> silent=yes ;;
>>>
>>> + -runstatedir | --runstatedir | --runstatedi | --runstated \
>>> + | --runstate | --runstat | --runsta | --runst | --runs \
>>> + | --run | --ru | --r)
>>> + ac_prev=runstatedir ;;
>>> + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
>>> + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
>>> + | --run=* | --ru=* | --r=*)
>>> + runstatedir=$ac_optarg ;;
>>> +
>>> -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
>>> ac_prev=sbindir ;;
>>> -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
>>
>> Please use a non patched autoconf (usually debian based one adds the runstatedir).
>
> Fixed.
>
>>> @@ -1234,7 +1245,7 @@ fi
>>> for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
>>> datadir sysconfdir sharedstatedir localstatedir includedir \
>>> oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
>>> - libdir localedir mandir
>>> + libdir localedir mandir runstatedir
>>> do
>>> eval ac_val=\$$ac_var
>>> # Remove trailing slashes.
>>> @@ -1387,6 +1398,7 @@ Fine tuning of the installation directories:
>>> --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
>>> --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
>>> --localstatedir=DIR modifiable single-machine data [PREFIX/var]
>>> + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
>>> --libdir=DIR object code libraries [EPREFIX/lib]
>>> --includedir=DIR C header files [PREFIX/include]
>>> --oldincludedir=DIR C header files for non-gcc [/usr/include]
>>> @@ -6817,6 +6829,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++])
>>>
>>
>> Would be better to check 2 times the maximum supported pagesize instead?
>
> Why 2 times? The test only uses 2MB alignment. The implementation
> self doesn't depend on the maximum supported page size. The limit
> is available free address space.
It is an arbitrary value larger than the pagesize to make the test check
for it even on architecture that do no support 2MB alignment.
prev parent reply other threads:[~2021-12-10 22:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-10 20:59 H.J. Lu
2021-12-10 21:36 ` Adhemerval Zanella
2021-12-10 21:54 ` H.J. Lu
2021-12-10 22:50 ` Adhemerval Zanella [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cefbdb88-38e4-6c4b-e3f0-3e57e7ac7f63@linaro.org \
--to=adhemerval.zanella@linaro.org \
--cc=hjl.tools@gmail.com \
--cc=libc-alpha@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).