From patchwork Wed Jul 17 00:09:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 1133014 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-103704-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=wdc.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="uVD60CDu"; dkim=pass (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.b="Wqsrxfn3"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45pHp608dyz9s8m for ; Wed, 17 Jul 2019 10:14:53 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; q=dns; s= default; b=W5wJTansBxIJyGsXSYTJ3IL8tMLX0Pb4YIzEbSaPxtzW5jL1F6Bao xVJ6dMRTJ9eU+KK40bM/oSTVR5Sp9Bhph7AQEa/uYuVDXkINXCB4lkqac3Z688mJ HDyb3rBUHAJqv1b4H50V6Q6A96UzVQXXYulwkYHHL4r6+FMhJrbMPQ= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; s=default; bh=3YgPrEkZeQQ4V1ImSifndL9M+4I=; b=uVD60CDukNhEE0JkxFWOMSVD+JNq UWLJh10b/Crud9XUhWJxzOnOGQiRcrAVkEi8WX6rSsrBe0BHv9fxMBfG5Q7wcWrs Sw71SrwXTLzI7DDwoPsGrf+sw20mW0virSpOF7GvXpeluTMZMCOxu1lX3auMG5b4 p/nm8u4la8w8f5c= Received: (qmail 21395 invoked by alias); 17 Jul 2019 00:12:31 -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 21317 invoked by uid 89); 17 Jul 2019 00:12:30 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.7 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= 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=1563322356; x=1594858356; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=b0fZ3MLsmOZWYTxj54vGsE5NYLms681md/OAATPq8qs=; b=Wqsrxfn3Wciu2jwViIxTWXR9sc+yZYQiLuaO9/Xc5t33w6npqNNAPydn 2YrA0Fz2OiCNVVxYM+IcZN1vhF4kp/R0ONr0L73yU+7bXatsghapGKr0f qrcZRbxT7GFpyZpMa80Zvs65WGwuz7MiDIjl30CFTm7Ak7UHr8JgLTpj3 wTPEanAcbXKSyrCJO+hZ4gPqSxoTYqnKsUcG+8EO35/j15HJmrSFSNVns 0PoAh76/x02nFrKczlNsVCbqfNG8oMzlhmXCe4RtxEm7aQXRs7yOVh9bp NhNltnvefuA6QgkKmd1uid0uCb06jYR/ErIoSgrorR5lQzNTTJOin218h g==; IronPort-SDR: YNHzbDLSkQN10EE2oK9nYrC5BgmnwARBjHTvbj9Zyc5r1y1avZ9yATZ88vy5avPwF6tU8FS5P6 DguVGikV6Y2+fUkAVQpYGVkAqTr7dmsfCIKWnlv+r4bu0INqi8R1PoTV0Jhwe0zjeIUC0NroLg N948ivwPGP7NHwO4V7ljTjLp5FIkPyQx3e0UfeY4xTx0CHuxCW7Sw2JhTfWVMaVsg9BBugHbjz F+b+InkA2xiuuoYaFfI28jfoH/u0QR/3fImsjXFPt7CiQrbsgAcgkLTwOdZz/jzptIIGXZIGuG aps= IronPort-SDR: VKTSOHQdFQRvhYnmkvRC6IxhW74Yc6yg4UkYz+RaFL9LHfa/MHAbXOptMfOrDkzqwWn0Fn0ENY E5S0olhLo46de8L5uTy8eWVtcxrodoyIskP2BhK8ElTNn2vIJQ/BragEO7ALGnzTrFpwiAraSN z+3m2u59w6nfR4Mh+6MYDeEYKFE2J0TW2P/O+mH/K0o0c23DgzjdmLUHCRTX07CkzPqebvU1/8 yaj7KvFuvEM7fSU71lFmbhQQa3ZnrJV+hzLeydlKlWFv0Bm7zDVwmbHQJ78ZEmz9ld1qCqYZqT MerFnbaHzatEONsqY6y3FfPf IronPort-SDR: f31Uf8eL3z88clqc/l1SVBxNEmTxQpoS1vhJVmojh+NWL1xdyTpc0fhvfkwSbpFG2IzYr7EWYO xom8ZLLdonC95hi1jMURW9BYJ2828OER3J5uY6vvzZcZnU7nY6cTxQdojB7fPzbthwHfbW9l0S HiMvLy50bLOp28uj3gCMvwkcmwC4YZwzbW1QDpA0sd0+b5c70Ls6F3eic+dugqYL81+NlOtrta 91qIn/ma8Dy698N0hdX0CsamvRoXEHCMGb9cHOjJmaKGBpCra3owaI057cH5/fTMPyP19MnP6K /zI= 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 v3 20/23] RISC-V: Build Infastructure for the 32-bit Date: Tue, 16 Jul 2019 17:09:34 -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 c31e2dff87..131c1063fc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1105,6 +1105,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 d9adb31b64..1ab5d20f0e 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 0000000000..39a34c5f57 --- /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 0000000000..1151214e8f --- /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 0000000000..66c401443b --- /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 b47858769f..bf9c24ad77 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 3018ca8f1b..2b3c77f18c 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 d4819931ca..710d46afcd 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 0000000000..8b7deb33cd --- /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 98c9b29cc4..a767d0f2ef 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.29 +ld=ld-linux-riscv32-ilp32d.so.1 +%elif RISCV_ABI_XLEN == 32 && RISCV_ABI_FLEN == 0 +DEFAULT GLIBC_2.29 +ld=ld-linux-riscv32-ilp32.so.1 %else %error cannot determine ABI %endif