From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25752 invoked by alias); 1 Jan 2014 19:31:48 -0000 Mailing-List: contact libc-ports-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: libc-ports-owner@sourceware.org Received: (qmail 25734 invoked by uid 89); 1 Jan 2014 19:31:47 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-pb0-f43.google.com Received: from mail-pb0-f43.google.com (HELO mail-pb0-f43.google.com) (209.85.160.43) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Wed, 01 Jan 2014 19:31:20 +0000 Received: by mail-pb0-f43.google.com with SMTP id rq2so13732938pbb.2 for ; Wed, 01 Jan 2014 11:31:18 -0800 (PST) X-Received: by 10.68.91.3 with SMTP id ca3mr83230767pbb.20.1388604678715; Wed, 01 Jan 2014 11:31:18 -0800 (PST) Received: from [192.168.1.51] (76-253-2-104.lightspeed.sntcca.sbcglobal.net. [76.253.2.104]) by mx.google.com with ESMTPSA id si6sm109187925pab.19.2014.01.01.11.31.17 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 01 Jan 2014 11:31:17 -0800 (PST) References: <1388597841-30225-1-git-send-email-marcus.shawcroft@linaro.org> In-Reply-To: <1388597841-30225-1-git-send-email-marcus.shawcroft@linaro.org> Mime-Version: 1.0 (1.0) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Message-Id: <5B4A856A-A214-4F20-83D2-BAD886EB9F04@gmail.com> Cc: "libc-ports@sourceware.org" , Marcus Shawcroft From: pinskia@gmail.com Subject: Re: [PATCH] [AArch64] Define BE loader name. Date: Wed, 01 Jan 2014 19:31:00 -0000 To: Marcus Shawcroft X-IsSubscribed: yes X-SW-Source: 2014-01/txt/msg00007.txt.bz2 > On Jan 1, 2014, at 9:37 AM, Marcus Shawcroft wrote: >=20 > Hi, >=20 > This patch defines the BE loader name for aarch64 to be ld-linux-aarch64_= be.so.1. We (Cavium and Montavista) already have a distro out in the wild for big-en= dian and I think changing this is a bad idea as you won't have both little-= endian and big-endian on the same system ever. Also you forgot to change bo= th GCC and binutils.=20 Thanks, Andrew >=20 > Cheers > /Marcus >=20 > --- > ports/ChangeLog.aarch64 | 12 ++ > ports/sysdeps/aarch64/configure | 174 ++++++++++++++++++= +++++ > ports/sysdeps/aarch64/configure.ac | 22 +++ > ports/sysdeps/aarch64/shlib-versions | 5 + > ports/sysdeps/unix/sysv/linux/aarch64/Makefile | 15 ++ > ports/sysdeps/unix/sysv/linux/aarch64/ldconfig.h | 1 + > 6 files changed, 229 insertions(+) > create mode 100644 ports/sysdeps/aarch64/configure > create mode 100644 ports/sysdeps/aarch64/configure.ac >=20 > diff --git a/ports/ChangeLog.aarch64 b/ports/ChangeLog.aarch64 > index bad3b91..c1602ce 100644 > --- a/ports/ChangeLog.aarch64 > +++ b/ports/ChangeLog.aarch64 > @@ -1,5 +1,17 @@ > 2014-01-01 Marcus Shawcroft >=20 > + * sysdeps/aarch64/configure.ac: New file. > + * sysdeps/aarch64/configure: New file. > + * sysdeps/aarch64/shlib-versions: Define ld-linux-aarch64_be.so.1 > + * sysdeps/unix/sysv/linux/aarch64/Makefile (abi-variants) > + (abi-lp64-options, abi-lp64-condition, abi-lp64-ld-soname) > + (abi-lp64_be-options, abi-lp64_be-condition) > + (abi-lp64_be-ld-soname) Define. > + * sysdeps/unix/sysv/linux/aarch64/ldconfig.h > + (SYSDEP_KNOWN_INTERPRETER_NAMES): Add ld-linux-aarch64_be.so.1 > + > +2014-01-01 Marcus Shawcroft > + > * sysdeps/aarch64/abort-instr.h: New file. >=20 > 2013-12-18 Marcus Shawcroft > diff --git a/ports/sysdeps/aarch64/configure b/ports/sysdeps/aarch64/conf= igure > new file mode 100644 > index 0000000..af870b7 > --- /dev/null > +++ b/ports/sysdeps/aarch64/configure > @@ -0,0 +1,174 @@ > +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! > + # Local configure fragment for sysdeps/aarch64. > + > +# We check to see if the compiler and flags are > +# selecting the big endian ABI and if they are then > +# we set libc_cv_aarch64_be to yes which causes > +# HAVE_AARCH64_BE to be defined in config.h and > +# in include/libc-symbols.h and thus available to > +# shlib-versions to select the appropriate name for > +# the dynamic linker via %ifdef. > + > + > +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles = long lines and -e" >&5 > +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } > +if ${ac_cv_path_GREP+:} false; then : > + $as_echo_n "(cached) " >&6 > +else > + if test -z "$GREP"; then > + ac_path_GREP_found=3Dfalse > + # Loop through the user's path and test for each of PROGNAME-LIST > + as_save_IFS=3D$IFS; IFS=3D$PATH_SEPARATOR > +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin > +do > + IFS=3D$as_save_IFS > + test -z "$as_dir" && as_dir=3D. > + for ac_prog in grep ggrep; do > + for ac_exec_ext in '' $ac_executable_extensions; do > + ac_path_GREP=3D"$as_dir/$ac_prog$ac_exec_ext" > + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || cont= inue > +# Check for GNU ac_path_GREP and select it if it is found. > + # Check for GNU $ac_path_GREP > +case `"$ac_path_GREP" --version 2>&1` in > +*GNU*) > + ac_cv_path_GREP=3D"$ac_path_GREP" ac_path_GREP_found=3D:;; > +*) > + ac_count=3D0 > + $as_echo_n 0123456789 >"conftest.in" > + while : > + do > + cat "conftest.in" "conftest.in" >"conftest.tmp" > + mv "conftest.tmp" "conftest.in" > + cp "conftest.in" "conftest.nl" > + $as_echo 'GREP' >> "conftest.nl" > + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"c= onftest.out" 2>/dev/null || break > + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break > + as_fn_arith $ac_count + 1 && ac_count=3D$as_val > + if test $ac_count -gt ${ac_path_GREP_max-0}; then > + # Best one so far, save it but keep looking for a better one > + ac_cv_path_GREP=3D"$ac_path_GREP" > + ac_path_GREP_max=3D$ac_count > + fi > + # 10*(2^10) chars as input seems more than enough > + test $ac_count -gt 10 && break > + done > + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; > +esac > + > + $ac_path_GREP_found && break 3 > + done > + done > + done > +IFS=3D$as_save_IFS > + if test -z "$ac_cv_path_GREP"; then > + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPA= RATOR/usr/xpg4/bin" "$LINENO" 5 > + fi > +else > + ac_cv_path_GREP=3D$GREP > +fi > + > +fi > +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 > +$as_echo "$ac_cv_path_GREP" >&6; } > + GREP=3D"$ac_cv_path_GREP" > + > + > +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 > +$as_echo_n "checking for egrep... " >&6; } > +if ${ac_cv_path_EGREP+:} false; then : > + $as_echo_n "(cached) " >&6 > +else > + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 > + then ac_cv_path_EGREP=3D"$GREP -E" > + else > + if test -z "$EGREP"; then > + ac_path_EGREP_found=3Dfalse > + # Loop through the user's path and test for each of PROGNAME-LIST > + as_save_IFS=3D$IFS; IFS=3D$PATH_SEPARATOR > +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin > +do > + IFS=3D$as_save_IFS > + test -z "$as_dir" && as_dir=3D. > + for ac_prog in egrep; do > + for ac_exec_ext in '' $ac_executable_extensions; do > + ac_path_EGREP=3D"$as_dir/$ac_prog$ac_exec_ext" > + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || co= ntinue > +# Check for GNU ac_path_EGREP and select it if it is found. > + # Check for GNU $ac_path_EGREP > +case `"$ac_path_EGREP" --version 2>&1` in > +*GNU*) > + ac_cv_path_EGREP=3D"$ac_path_EGREP" ac_path_EGREP_found=3D:;; > +*) > + ac_count=3D0 > + $as_echo_n 0123456789 >"conftest.in" > + while : > + do > + cat "conftest.in" "conftest.in" >"conftest.tmp" > + mv "conftest.tmp" "conftest.in" > + cp "conftest.in" "conftest.nl" > + $as_echo 'EGREP' >> "conftest.nl" > + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/nul= l || break > + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break > + as_fn_arith $ac_count + 1 && ac_count=3D$as_val > + if test $ac_count -gt ${ac_path_EGREP_max-0}; then > + # Best one so far, save it but keep looking for a better one > + ac_cv_path_EGREP=3D"$ac_path_EGREP" > + ac_path_EGREP_max=3D$ac_count > + fi > + # 10*(2^10) chars as input seems more than enough > + test $ac_count -gt 10 && break > + done > + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; > +esac > + > + $ac_path_EGREP_found && break 3 > + done > + done > + done > +IFS=3D$as_save_IFS > + if test -z "$ac_cv_path_EGREP"; then > + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEP= ARATOR/usr/xpg4/bin" "$LINENO" 5 > + fi > +else > + ac_cv_path_EGREP=3D$EGREP > +fi > + > + fi > +fi > +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 > +$as_echo "$ac_cv_path_EGREP" >&6; } > + EGREP=3D"$ac_cv_path_EGREP" > + > + > +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for big endian" >&5 > +$as_echo_n "checking for big endian... " >&6; } > +if ${libc_cv_aarch64_be+:} false; then : > + $as_echo_n "(cached) " >&6 > +else > + cat confdefs.h - <<_ACEOF >conftest.$ac_ext > +/* end confdefs.h. */ > +#ifdef __AARCH64EB__ > + yes > + #endif > + > +_ACEOF > +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | > + $EGREP "yes" >/dev/null 2>&1; then : > + libc_cv_aarch64_be=3Dyes > +else > + libc_cv_aarch64_be=3Dno > +fi > +rm -f conftest* > + > +fi > +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_aarch64_be" >&5 > +$as_echo "$libc_cv_aarch64_be" >&6; } > +if test $libc_cv_aarch64_be =3D yes; then > + $as_echo "#define HAVE_AARCH64_BE 1" >>confdefs.h > + > + config_vars=3D"$config_vars > +default-abi =3D lp64_be" > +else > + config_vars=3D"$config_vars > +default-abi =3D lp64" > +fi > diff --git a/ports/sysdeps/aarch64/configure.ac b/ports/sysdeps/aarch64/c= onfigure.ac > new file mode 100644 > index 0000000..7851dd4 > --- /dev/null > +++ b/ports/sysdeps/aarch64/configure.ac > @@ -0,0 +1,22 @@ > +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. > +# Local configure fragment for sysdeps/aarch64. > + > +# We check to see if the compiler and flags are > +# selecting the big endian ABI and if they are then > +# we set libc_cv_aarch64_be to yes which causes > +# HAVE_AARCH64_BE to be defined in config.h and > +# in include/libc-symbols.h and thus available to > +# shlib-versions to select the appropriate name for > +# the dynamic linker via %ifdef. > +AC_CACHE_CHECK([for big endian], > + [libc_cv_aarch64_be], > + [AC_EGREP_CPP(yes,[#ifdef __AARCH64EB__ > + yes > + #endif > + ], libc_cv_aarch64_be=3Dyes, libc_cv_aarch64_be=3Dno)]) > +if test $libc_cv_aarch64_be =3D yes; then > + AC_DEFINE(HAVE_AARCH64_BE) > + LIBC_CONFIG_VAR([default-abi], [lp64_be]) > +else > + LIBC_CONFIG_VAR([default-abi], [lp64]) > +fi > diff --git a/ports/sysdeps/aarch64/shlib-versions b/ports/sysdeps/aarch64= /shlib-versions > index 82b227d..67f1911 100644 > --- a/ports/sysdeps/aarch64/shlib-versions > +++ b/ports/sysdeps/aarch64/shlib-versions > @@ -1,2 +1,7 @@ > aarch64.*-.*-linux.* DEFAULT GLIBC_2.17 > + > +%ifdef HAVE_AARCH64_BE > +aarch64.*-.*-linux.* ld=3Dld-linux-aarch64_be.so.1 > +%else > aarch64.*-.*-linux.* ld=3Dld-linux-aarch64.so.1 > +%endif > diff --git a/ports/sysdeps/unix/sysv/linux/aarch64/Makefile b/ports/sysde= ps/unix/sysv/linux/aarch64/Makefile > index 8a3d76b..d3f1603 100644 > --- a/ports/sysdeps/unix/sysv/linux/aarch64/Makefile > +++ b/ports/sysdeps/unix/sysv/linux/aarch64/Makefile > @@ -22,3 +22,18 @@ endif > ifeq ($(subdir),stdlib) > gen-as-const-headers +=3D ucontext_i.sym > endif > + > +abi-variants :=3D lp64 > +abi-variants +=3D lp64_be > + > +ifeq (,$(filter $(default-abi),$(abi-variants))) > +Unknown ABI, must be one of $(abi-variants) > +endif > + > +abi-lp64-options :=3D -U__AARCH64EB__ > +abi-lp64-condition :=3D !defined __AARCH64EB__ > +abi-lp64-ld-soname :=3D ld-linux-aarch64.so.1 > + > +abi-lp64_be-options :=3D -D__AARCH6464EB__ > +abi-lp64_be-condition :=3D defined __AARCH64EB__ > +abi-lp64_be-ld-soname :=3D ld-linux-aarch64_be.so.1 > diff --git a/ports/sysdeps/unix/sysv/linux/aarch64/ldconfig.h b/ports/sys= deps/unix/sysv/linux/aarch64/ldconfig.h > index 10be197..b0e6b6a 100644 > --- a/ports/sysdeps/unix/sysv/linux/aarch64/ldconfig.h > +++ b/ports/sysdeps/unix/sysv/linux/aarch64/ldconfig.h > @@ -20,6 +20,7 @@ >=20 > #define SYSDEP_KNOWN_INTERPRETER_NAMES \ > { "/lib/ld-linux-aarch64.so.1", FLAG_ELF_LIBC6 }, \ > + { "/lib/ld-linux-aarch64_be.so.1", FLAG_ELF_LIBC6 }, \ > { "/lib/ld-linux.so.3", FLAG_ELF_LIBC6 }, \ > { "/lib/ld-linux-armhf.so.3", FLAG_ELF_LIBC6 }, > #define SYSDEP_KNOWN_LIBRARY_NAMES \ > --=20 > 1.8.3.2 >=20