From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31800 invoked by alias); 1 Jan 2014 19:57:34 -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 31790 invoked by uid 89); 1 Jan 2014 19:57:33 -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-f47.google.com Received: from mail-pb0-f47.google.com (HELO mail-pb0-f47.google.com) (209.85.160.47) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Wed, 01 Jan 2014 19:57:32 +0000 Received: by mail-pb0-f47.google.com with SMTP id um1so13605932pbc.6 for ; Wed, 01 Jan 2014 11:57:30 -0800 (PST) X-Received: by 10.66.222.234 with SMTP id qp10mr18723168pac.156.1388606250316; Wed, 01 Jan 2014 11:57:30 -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 xv2sm96763208pbb.39.2014.01.01.11.57.29 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 01 Jan 2014 11:57:29 -0800 (PST) References: <1388597841-30225-1-git-send-email-marcus.shawcroft@linaro.org> <5B4A856A-A214-4F20-83D2-BAD886EB9F04@gmail.com> Mime-Version: 1.0 (1.0) In-Reply-To: <5B4A856A-A214-4F20-83D2-BAD886EB9F04@gmail.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Message-Id: <277C1901-AE41-48AF-A042-C5A9E16F2128@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:57:00 -0000 To: Marcus Shawcroft X-IsSubscribed: yes X-SW-Source: 2014-01/txt/msg00008.txt.bz2 > On Jan 1, 2014, at 11:31 AM, pinskia@gmail.com wrote: >=20 >=20 >=20 >> 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. >=20 > We (Cavium and Montavista) already have a distro out in the wild for big-= endian and I think changing this is a bad idea as you won't have both littl= e-endian and big-endian on the same system ever. Also you forgot to change = both GCC and binutils.=20 And since A GCC and a glibc has been released already that supports aarch64= big endian this is a huge abi change.=20 Thanks, Andrew >=20 > Thanks, > Andrew >=20 >>=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/con= figure >> 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"; } || con= tinue >> +# 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" >"= conftest.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_SEP= ARATOR/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"; } || c= ontinue >> +# 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/nu= ll || 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_SE= PARATOR/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/= configure.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/aarch6= 4/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/sysd= eps/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/sy= sdeps/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