Message ID | 3bc3074d7ae29928b90efd584f018cc9da3b42db.1594568655.git.alistair.francis@wdc.com |
---|---|
State | New |
Headers | show |
Series | glibc port for 32-bit RISC-V (RV32) | expand |
Hi Alistair, The heading uses odd capitalisation and wording, how about: RISC-V: Build infastructure for 32-bit port ? On Sun, 12 Jul 2020, Alistair Francis via Libc-alpha wrote: > 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. How about: This patch lays out the top-level organization of the RISC-V 32-bit port. It provides all the Implies files as well as various other fragments of the build infastructure. ? [Oh, I can see where it all has been copied and pasted from.] > diff --git a/sysdeps/unix/sysv/linux/riscv/Makefile b/sysdeps/unix/sysv/linux/riscv/Makefile > index 301b082398..6c11f7fd9a 100644 > --- a/sysdeps/unix/sysv/linux/riscv/Makefile > +++ b/sysdeps/unix/sysv/linux/riscv/Makefile > @@ -7,11 +7,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 I feel like these all ought to use __WORDSIZE so as to be consistent, also with the majority of other ports, and inclusive for RV32 rather than exclusive. That if FAOD: abi-ilp32-condition := __WORDSIZE == 32 && defined __riscv_float_abi_soft abi-ilp32d-condition := __WORDSIZE == 32 && defined __riscv_float_abi_double abi-lp64-condition := __WORDSIZE == 64 && defined __riscv_float_abi_soft abi-lp64d-condition := __WORDSIZE == 64 && defined __riscv_float_abi_double This way the ABI condition is tied to a property that we can reasonably expect is not going to ever change and won't have to be adjusted if we add support for say RV128 sometime. Let me know if you disagree. Otherwise OK. Maciej
On Tue, Jul 14, 2020 at 4:55 PM Maciej W. Rozycki via Libc-alpha <libc-alpha@sourceware.org> wrote: > > Hi Alistair, > > The heading uses odd capitalisation and wording, how about: > > RISC-V: Build infastructure for 32-bit port > > ? > > On Sun, 12 Jul 2020, Alistair Francis via Libc-alpha wrote: > > > 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. > > How about: > > This patch lays out the top-level organization of the RISC-V 32-bit port. > It provides all the Implies files as well as various other fragments of > the build infastructure. Fixed. > > ? [Oh, I can see where it all has been copied and pasted from.] > > > diff --git a/sysdeps/unix/sysv/linux/riscv/Makefile b/sysdeps/unix/sysv/linux/riscv/Makefile > > index 301b082398..6c11f7fd9a 100644 > > --- a/sysdeps/unix/sysv/linux/riscv/Makefile > > +++ b/sysdeps/unix/sysv/linux/riscv/Makefile > > @@ -7,11 +7,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 > > I feel like these all ought to use __WORDSIZE so as to be consistent, > also with the majority of other ports, and inclusive for RV32 rather than > exclusive. That if FAOD: > > abi-ilp32-condition := __WORDSIZE == 32 && defined __riscv_float_abi_soft > abi-ilp32d-condition := __WORDSIZE == 32 && defined __riscv_float_abi_double > abi-lp64-condition := __WORDSIZE == 64 && defined __riscv_float_abi_soft > abi-lp64d-condition := __WORDSIZE == 64 && defined __riscv_float_abi_double > > This way the ABI condition is tied to a property that we can reasonably > expect is not going to ever change and won't have to be adjusted if we add > support for say RV128 sometime. Let me know if you disagree. Fixed Alistair > > Otherwise OK. > > Maciej
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 301b082398..6c11f7fd9a 100644 --- a/sysdeps/unix/sysv/linux/riscv/Makefile +++ b/sysdeps/unix/sysv/linux/riscv/Makefile @@ -7,11 +7,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..919c8ec1fd 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.32 +ld=ld-linux-riscv32-ilp32d.so.1 +%elif RISCV_ABI_XLEN == 32 && RISCV_ABI_FLEN == 0 +DEFAULT GLIBC_2.32 +ld=ld-linux-riscv32-ilp32.so.1 %else %error cannot determine ABI %endif
From: Zong Li <zongbox@gmail.com> 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. --- 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 ++++- 9 files changed, 67 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