public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
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.

      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).