From patchwork Sat Aug 10 01:00:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 34045 Received: (qmail 78067 invoked by alias); 10 Aug 2019 01:04:02 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 78005 invoked by uid 89); 10 Aug 2019 01:04:01 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.1 spammy=1511 X-HELO: esa2.hgst.iphmx.com DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1565399059; x=1596935059; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=9WCbmL3SwMPvqBmS6MujChcfyTvO/LA3iEH+dsxN+qk=; b=R4/xwQSP21Qx//bEvfqUTyjgWYtTBuz8+ooURS0YTIJjqcBc18Ypk8Xh Lb/iWOr/PYRQcH56son6OmwWanAxhY1X4uI+75O/dGil2n6nvz5NUMqwb ORhn2TkWiLMrInwol0sp7A8q39aOrqlZytTwO4qUVEcJrh/VBVyKV9O4i CDgRUcdMWXrzR11lXoc2LkiLJT/hAXEZygnBZzjRj+FW1NCUcv5klV/p9 AxYs5hDhTnzu0qH1XJakwq97quZe+PfihIjVsz9lsHzKq9ZValkCQr5/7 gjvS5xV8yh29bla0nzysIMjHhVUw8nXICwJT7DN8uT2V40aeLpsu2atqf A==; IronPort-SDR: Qq+q+Fxwy7daLf0NaOOz3fjDzR6ZXsayhRw2meJ3dORMxzZ536naTUB2D1tl0zXzRA10Te5Ifj 6bRP3hKBRUK00Ak8AuTsiWIp3WoXkwkRCVVPfYZQXG1gg2EfP5bKi+r5IRV/x1NstPeAPgEIzM zzk6C0mtq1apnsCouEPlVY9H+HOHhOdkH8FO6Hp7uC/KV/x9awM0tDqFMc+D+4bbsfK98YwsUB QE3i1yvxITqqubphQVYCyYZp/PrTtMTO8MoB9JTV+U3Dt5HwVsVLKZ932PVMcavKa1jHzoCB2j 4Os= IronPort-SDR: E5TWGonJ/pPJCb+l38bFNQj1HYPX9r6+gYiPnmxXKDV8MfMg9kjiyBhs0Eg/MIN+8hN6FGJK4O Wo2BVAJhj7bJ+r3kAJHYVVLKX4VwtmsEpkLucI05b4qIsZ3/s4TdqthaISRaxYeetY4V1Y5KAf oUWZSiR0pJSIOGT1U7zurUpL/bFZhhzaw3mMj2VHmVif+QDP0JbdmfDPl0GL8sa0Vf6/TpzLxY hAhvSn2nvGge2Zl8sq7MUAi5t6zMNhrlUVGcMsltDtAy+fO1VrTPM+Ej8IaMUZn2cAvxaaq3lS uJZku4eYWPofNVJ5VDYTS/r9 IronPort-SDR: uXTt+i5S8vOomgPeflUiWqJQfg0+jcfbF5nyzzhmC53PjtYz2scZ2Rh7iS/Rp6p9tOYG/LXKnH y7F1nGOgSPm9mYXnHy0pjmp4kugzCxOqB9tvRUf5d6AZANoo7bFbwVkx+A6kpa4Jd0VjNhoWjq pvLFg77yPAkV4t/cbmui2JTPO+C2aTyaxStK1HKfOvSSU+R6mSSXkrKHvuNzls6+uIQl/xoPWS k3x/TwxLxzF53U0nSMobYvaFULuX62w/amP0MWLnweJF50XvgsYJOUCdQFgABuJXotDnSaSsWM abg= From: Alistair Francis To: libc-alpha@sourceware.org Cc: arnd@arndb.de, adhemerval.zanella@linaro.org, fweimer@redhat.com, palmer@sifive.com, macro@wdc.com, zongbox@gmail.com, alistair.francis@wdc.com, alistair23@gmail.com Subject: [RFC v4 19/24] RISC-V: Build Infastructure for the 32-bit Date: Fri, 9 Aug 2019 18:00:37 -0700 Message-Id: In-Reply-To: References: MIME-Version: 1.0 From: Zong Li This patch lays out the top-level orginazition of the RISC-V 32-bit port. It contains all the Implies files as well as various other fragments of build infastructure for the RISC-V 32-bit port. 2018-11-29 Zong Li * sysdeps/riscv/rv32/Implies-after: New file. * sysdeps/riscv/rv32/rvd/Implies: Likewise. * sysdeps/riscv/rv32/rvf/Implies: Likewise. * sysdeps/unix/sysv/linux/riscv/rv32/Implies: Likewise. * sysdeps/unix/sysv/linux/riscv/Makefile: Support rv32. * sysdeps/unix/sysv/linux/riscv/configure: Likewise. * sysdeps/unix/sysv/linux/riscv/configure.ac: Likewise. * sysdeps/unix/sysv/linux/riscv/shlib-versions: Likewise. * sysdeps/riscv/preconfigure: Likewise. --- ChangeLog | 9 +++++ sysdeps/riscv/preconfigure | 6 +-- sysdeps/riscv/rv32/Implies-after | 1 + sysdeps/riscv/rv32/rvd/Implies | 3 ++ sysdeps/riscv/rv32/rvf/Implies | 1 + sysdeps/unix/sysv/linux/riscv/Makefile | 4 +- sysdeps/unix/sysv/linux/riscv/configure | 39 ++++++++++++++++++++ sysdeps/unix/sysv/linux/riscv/configure.ac | 8 ++++ sysdeps/unix/sysv/linux/riscv/rv32/Implies | 3 ++ sysdeps/unix/sysv/linux/riscv/shlib-versions | 10 ++++- 10 files changed, 76 insertions(+), 8 deletions(-) create mode 100644 sysdeps/riscv/rv32/Implies-after create mode 100644 sysdeps/riscv/rv32/rvd/Implies create mode 100644 sysdeps/riscv/rv32/rvf/Implies create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/Implies diff --git a/ChangeLog b/ChangeLog index 6896401d0e9..a0399acdcbc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1482,6 +1482,15 @@ * sysdeps/unix/sysv/linux/riscv/rv32/libutil.abilist: Likewise. * sysdeps/unix/sysv/linux/riscv/rv32/libBrokenLocale.abilist: Likewise. + * sysdeps/riscv/rv32/Implies-after: New file. + * sysdeps/riscv/rv32/rvd/Implies: Likewise. + * sysdeps/riscv/rv32/rvf/Implies: Likewise. + * sysdeps/unix/sysv/linux/riscv/rv32/Implies: Likewise. + * sysdeps/unix/sysv/linux/riscv/Makefile: Support rv32. + * sysdeps/unix/sysv/linux/riscv/configure: Likewise. + * sysdeps/unix/sysv/linux/riscv/configure.ac: Likewise. + * sysdeps/unix/sysv/linux/riscv/shlib-versions: Likewise. + * sysdeps/riscv/preconfigure: Likewise. 2019-06-20 Dmitry V. Levin Florian Weimer diff --git a/sysdeps/riscv/preconfigure b/sysdeps/riscv/preconfigure index d9adb31b649..1ab5d20f0ec 100644 --- a/sysdeps/riscv/preconfigure +++ b/sysdeps/riscv/preconfigure @@ -6,11 +6,7 @@ riscv*) atomic=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | grep '#define __riscv_atomic' | cut -d' ' -f2` case "$xlen" in - 32) - echo "glibc does not yet support 32-bit systems" >&2 - exit 1 - ;; - 64) + 64 | 32) ;; *) echo "Unable to determine XLEN" >&2 diff --git a/sysdeps/riscv/rv32/Implies-after b/sysdeps/riscv/rv32/Implies-after new file mode 100644 index 00000000000..39a34c5f574 --- /dev/null +++ b/sysdeps/riscv/rv32/Implies-after @@ -0,0 +1 @@ +wordsize-32 diff --git a/sysdeps/riscv/rv32/rvd/Implies b/sysdeps/riscv/rv32/rvd/Implies new file mode 100644 index 00000000000..1151214e8f4 --- /dev/null +++ b/sysdeps/riscv/rv32/rvd/Implies @@ -0,0 +1,3 @@ +riscv/rv32/rvf +riscv/rvd +riscv/rvf diff --git a/sysdeps/riscv/rv32/rvf/Implies b/sysdeps/riscv/rv32/rvf/Implies new file mode 100644 index 00000000000..66c401443b8 --- /dev/null +++ b/sysdeps/riscv/rv32/rvf/Implies @@ -0,0 +1 @@ +riscv/rvf diff --git a/sysdeps/unix/sysv/linux/riscv/Makefile b/sysdeps/unix/sysv/linux/riscv/Makefile index b47858769f5..bf9c24ad77d 100644 --- a/sysdeps/unix/sysv/linux/riscv/Makefile +++ b/sysdeps/unix/sysv/linux/riscv/Makefile @@ -15,11 +15,13 @@ ifeq ($(subdir),stdlib) gen-as-const-headers += ucontext_i.sym endif -abi-variants := lp64 lp64d +abi-variants := ilp32 ilp32d lp64 lp64d ifeq (,$(filter $(default-abi),$(abi-variants))) $(error Unknown ABI $(default-abi), must be one of $(abi-variants)) endif +abi-ilp32-condition := !defined __LP64__ && defined __riscv_float_abi_soft +abi-ilp32d-condition := !defined __LP64__ && defined __riscv_float_abi_double abi-lp64-condition := defined __LP64__ && defined __riscv_float_abi_soft abi-lp64d-condition := defined __LP64__ && defined __riscv_float_abi_double diff --git a/sysdeps/unix/sysv/linux/riscv/configure b/sysdeps/unix/sysv/linux/riscv/configure index 3018ca8f1b8..2b3c77f18cb 100755 --- a/sysdeps/unix/sysv/linux/riscv/configure +++ b/sysdeps/unix/sysv/linux/riscv/configure @@ -147,6 +147,17 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | fi rm -f conftest* +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__ + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "4 4 4" >/dev/null 2>&1; then : + libc_cv_riscv_int_abi=ilp32 +fi +rm -f conftest* + if test $libc_cv_riscv_int_abi = no; then as_fn_error $? "Unable to determine integer ABI" "$LINENO" 5 fi @@ -214,6 +225,34 @@ case "$prefix" in ;; esac ;; +ilp32-riscv/rv32/*) + test -n "$libc_cv_slibdir" || +case "$prefix" in +/usr | /usr/) + libc_cv_slibdir='/lib32/ilp32' + libc_cv_rtlddir='/lib' + if test "$libdir" = '${exec_prefix}/lib'; then + libdir='${exec_prefix}/lib32/ilp32'; + # Locale data can be shared between 32-bit and 64-bit libraries. + libc_cv_complocaledir='${exec_prefix}/lib/locale' + fi + ;; +esac + ;; +ilp32d-riscv/rv32/*) + test -n "$libc_cv_slibdir" || +case "$prefix" in +/usr | /usr/) + libc_cv_slibdir='/lib32/ilp32d' + libc_cv_rtlddir='/lib' + if test "$libdir" = '${exec_prefix}/lib'; then + libdir='${exec_prefix}/lib32/ilp32d'; + # Locale data can be shared between 32-bit and 64-bit libraries. + libc_cv_complocaledir='${exec_prefix}/lib/locale' + fi + ;; +esac + ;; esac ldd_rewrite_script=sysdeps/unix/sysv/linux/riscv/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/riscv/configure.ac b/sysdeps/unix/sysv/linux/riscv/configure.ac index d4819931ca3..710d46afcd3 100644 --- a/sysdeps/unix/sysv/linux/riscv/configure.ac +++ b/sysdeps/unix/sysv/linux/riscv/configure.ac @@ -7,6 +7,8 @@ arch_minimum_kernel=4.15.0 libc_cv_riscv_int_abi=no AC_EGREP_CPP(4 8 8, [__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__ ], libc_cv_riscv_int_abi=lp64) +AC_EGREP_CPP(4 4 4, [__SIZEOF_INT__ __SIZEOF_LONG__ __SIZEOF_POINTER__ + ], libc_cv_riscv_int_abi=ilp32) if test $libc_cv_riscv_int_abi = no; then AC_MSG_ERROR([Unable to determine integer ABI]) fi @@ -33,6 +35,12 @@ lp64-riscv/rv64/*) lp64d-riscv/rv64/*) LIBC_SLIBDIR_RTLDDIR([lib64/lp64d], [lib]) ;; +ilp32-riscv/rv32/*) + LIBC_SLIBDIR_RTLDDIR([lib32/ilp32], [lib]) + ;; +ilp32d-riscv/rv32/*) + LIBC_SLIBDIR_RTLDDIR([lib32/ilp32d], [lib]) + ;; esac ldd_rewrite_script=sysdeps/unix/sysv/linux/riscv/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/Implies b/sysdeps/unix/sysv/linux/riscv/rv32/Implies new file mode 100644 index 00000000000..8b7deb33cd5 --- /dev/null +++ b/sysdeps/unix/sysv/linux/riscv/rv32/Implies @@ -0,0 +1,3 @@ +unix/sysv/linux/riscv +unix/sysv/linux/generic/wordsize-32 +unix/sysv/linux/generic diff --git a/sysdeps/unix/sysv/linux/riscv/shlib-versions b/sysdeps/unix/sysv/linux/riscv/shlib-versions index 98c9b29cc4d..0f9552a1dd5 100644 --- a/sysdeps/unix/sysv/linux/riscv/shlib-versions +++ b/sysdeps/unix/sysv/linux/riscv/shlib-versions @@ -1,9 +1,15 @@ -DEFAULT GLIBC_2.27 - %if RISCV_ABI_XLEN == 64 && RISCV_ABI_FLEN == 64 +DEFAULT GLIBC_2.27 ld=ld-linux-riscv64-lp64d.so.1 %elif RISCV_ABI_XLEN == 64 && RISCV_ABI_FLEN == 0 +DEFAULT GLIBC_2.27 ld=ld-linux-riscv64-lp64.so.1 +%elif RISCV_ABI_XLEN == 32 && RISCV_ABI_FLEN == 64 +DEFAULT GLIBC_2.31 +ld=ld-linux-riscv32-ilp32d.so.1 +%elif RISCV_ABI_XLEN == 32 && RISCV_ABI_FLEN == 0 +DEFAULT GLIBC_2.31 +ld=ld-linux-riscv32-ilp32.so.1 %else %error cannot determine ABI %endif