This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[RFC v5 00/21] RISC-V glibc port for the 32-bit
- From: Alistair Francis <alistair dot francis at wdc dot com>
- To: libc-alpha at sourceware dot org
- Cc: arnd at arndb dot de, adhemerval dot zanella at linaro dot org, fweimer at redhat dot com, palmer at sifive dot com, macro at wdc dot com, zongbox at gmail dot com, alistair dot francis at wdc dot com, alistair23 at gmail dot com
- Date: Thu, 29 Aug 2019 09:50:00 -0700
- Subject: [RFC v5 00/21] RISC-V glibc port for the 32-bit
- Ironport-sdr: PqWh5L6K+oLXOX7MIvJZZyenrLvkGfUtcV+nSPFstVlWLaa5XPgi5ZukP/6kF9ZX9UpHDiLaw8 e3Yr9Qo/zzRXosHmnsAWjMsdosv+bM2W5Wvjo73Fbi6bxXBdi1li3WOR3x2lxgh0MLRiQoq7jD DMQIM27ky9FFo0Zz6nAa03dViohi+JDyI9fAwxNt2kyLvVHTKyonAGTVb79FHf485TVhdCNSXU QlInZzwb6BTgQXp3zoD4oIeGVlJW2EIZmLDzlHPOSa/t/Qnn9sHLv6Uow9r+fmAu9RKIPrTvmd qtk=
- Ironport-sdr: NUh7LJvoCqZUlO+EKCbAEcitkzJPAbMyJw2IzsMlfVf3tX2WbGAh4ftYg5cL5J9aEr45W8z7mJ H6T8pFgdi2uZ6oWXzxLcsQ7uWlfiHhxEEklNo2mON9KIkzlHpspJD7TGIb5bp0LCXmLBGnsl0u N+mmiXO8r0b3EQw2MzqYZZv2mk6fe/c/KHsv9GWkvfzcbuP9Y5pN6S1NcF3Dvvoa0nbvLMO7cT 5MO9IPyYnlz8axoGl9fvrT3rsnMI/oqjG6FcUlAe3/7NXeeaK4nikcXng0wCGyoyVWTPADNpAA DwABybsdEnqvQWrKx/ZFca1M
- Ironport-sdr: R1r+wy8M7mRfhSqdvp4fklsQF+o1txP7aPp3GOolJ02cXlkWDCA5oHiLte4LE641NUWRc+fDiC DAwXdRfGg7w5uGOIjFbTd8FM4k+GXRXG+GPFI80X05wcvmvab1Mzmu+wPNfG8TaO83ktOvhiFE u6kiJQLcjpJXFj9DsRR8pt5XFyFgjWlka2P1SOWwRmKaMYZBWK0BYS3y6D4J1G+mwfkoNFMkA+ m1EPTg0k71Cfe0XwehHOnucVlAt9FADjH9ZJle6idOK3ZE0ht3GFSmrJGCQFNVXXzSnhs5z+Qh xIo=
- Wdcironportexception: Internal
This patch set contains the glibc port for the 32-bit RISC-V.
This is based on all of the work that Zong Li has done [1].
Unfortunately the Linux ABI has changed since Zong Li's latest
submission. The RISC-V 32-bit (RV32) ABI no longer defines
__ARCH_WANT_TIME32_SYSCALLS which means there are no 32-bit versions of
time_t, off_t or any struct resource or system calls that use them.
To mitigate this I have set the RV32 port to use 64-bit time_t and off_t
(as is done in x86-32) and also changed the syscall imvocation to handle
the missing syscalls. This means that the RV32 port will be y2038 safe.
This series applies ontop of Lukasz's __clock_settime64
implementation [2] and __ASSUME_TIME64_SYSCALLS patch [3].
All testing has been done on a 5.3 kernel with these two patches back
ported from linux-next:
- pidfd: add P_PIDFD to waitid()
- waitid: Add support for waiting for the current process group
to fix the waitid() syscall race.
Issues still to address:
- Wait for Lukasz's patche series mentioned above to be merged (2)
- Get the RV32 tests running. At the moment the tests are hanging and
I'm trying to investigate.
- Rebased on the clock_gettime series [4] on list once it is merged.
1: https://sourceware.org/ml/libc-alpha/2018-07/msg00892.html
2: https://sourceware.org/ml/libc-alpha/2019-05/msg00661.html
3: https://patchwork.ozlabs.org/project/glibc/list/?series=127618
4: https://patchwork.ozlabs.org/project/glibc/list/?series=127832
The latest version of my work can be found here: https://github.com/alistair23/glibc/tree/alistair/rv32.next
This specific version can be found here: https://github.com/alistair23/glibc/tree/alistair/rv32.rfc5
RFC v5:
- Hopefully finally get the correct layout for the *64 syscalls
- Sort out the Changelog
RFC v4:
- Continue to fix things that weren't working
- Update the coding style to match glibc
- Update the __ASSUME_TIME64_SYSCALLS work to better match Lukasz's
work
RFC v3:
- Remove all "Hack" patches
- Incorporate upstream comments
- Ensure we don't break RV64
- Lot's more testing and fixes
RFC v2:
- Add Lukasz's patches
- Update the non HACK syscalls after feedback
- define __ASSUME_TIME64_SYSCALLS and __ASSUME_RLIM64_SYSCALLS
- Remove lockf64.c
- Other smaller changes from RFC v1
Alistair Francis (12):
sunrpc/clnt_udp: Ensure total_deadline is initalised
sysdeps/nanosleep: Use clock_nanosleep_time64 if avaliable
sysdeps/gettimeofday: Use clock_gettime64 if avaliable
sysdeps/wait: Use waitid if avaliable
sysdeps/clock_gettime: Use clock_gettime64 if avaliable
sysdeps/timespec_get: Use clock_gettime64 if avaliable
sysdeps/stat: Handle 64-bit ino_t types on 32-bit hosts
sysdeps/statfs: Handle 64-bit ino_t types on 32-bit hosts
RISC-V: Use 64-bit time_t and off_t for RV32 and RV64
RISC-V: Define __NR_* as __NR_*_time64/64 for 32-bit
RISC-V: Use 64-bit timespec in clock_gettime vdso calls
RISC-V: Use 64-bit vdso syscalls for RV32
Zong Li (9):
Documentation for the RISC-V 32-bit port
RISC-V: Support dynamic loader for the 32-bit
RISC-V: Add path of library directories for RV32
RISC-V: The ABI implementation for the 32-bit
RISC-V: Hard float support for the 32 bit
RISC-V: Add ABI lists
RISC-V: Build Infastructure for the 32-bit
RISC-V: Fix llrint and llround missing exceptions on RV32
Add RISC-V 32-bit target to build-many-glibcs.py
NEWS | 6 +
README | 1 +
include/time.h | 8 +
nptl/thrd_sleep.c | 69 +-
scripts/build-many-glibcs.py | 15 +
sunrpc/clnt_udp.c | 2 +-
sysdeps/riscv/bits/wordsize.h | 4 +-
sysdeps/riscv/nptl/bits/pthreadtypes-arch.h | 25 +-
sysdeps/riscv/preconfigure | 6 +-
sysdeps/riscv/rv32/Implies-after | 1 +
.../riscv/rv32/fix-fp-int-convert-overflow.h | 38 +
sysdeps/riscv/rv32/rvd/Implies | 3 +
sysdeps/riscv/rv32/rvd/s_lrint.c | 31 +
sysdeps/riscv/rv32/rvd/s_lround.c | 31 +
sysdeps/riscv/rv32/rvf/Implies | 1 +
sysdeps/riscv/rv32/rvf/s_lrintf.c | 31 +
sysdeps/riscv/rv32/rvf/s_lroundf.c | 31 +
sysdeps/riscv/sfp-machine.h | 27 +-
sysdeps/riscv/sys/asm.h | 5 +-
sysdeps/unix/sysv/linux/clock_getres.c | 4 +
sysdeps/unix/sysv/linux/clock_gettime.c | 48 +-
sysdeps/unix/sysv/linux/clock_nanosleep.c | 74 +-
sysdeps/unix/sysv/linux/generic/bits/stat.h | 5 +-
sysdeps/unix/sysv/linux/generic/bits/statfs.h | 5 +-
.../sysv/linux/generic/wordsize-32/overflow.h | 8 +
sysdeps/unix/sysv/linux/gettimeofday.c | 59 +-
sysdeps/unix/sysv/linux/nanosleep.c | 65 +-
sysdeps/unix/sysv/linux/nanosleep_nocancel.c | 64 +-
sysdeps/unix/sysv/linux/riscv/Makefile | 4 +-
.../unix/sysv/linux/riscv/bits/environments.h | 85 +
sysdeps/unix/sysv/linux/riscv/bits/time64.h | 36 +
sysdeps/unix/sysv/linux/riscv/bits/timesize.h | 22 +
.../unix/sysv/linux/riscv/bits/typesizes.h | 84 +
sysdeps/unix/sysv/linux/riscv/configure | 39 +
sysdeps/unix/sysv/linux/riscv/configure.ac | 8 +
sysdeps/unix/sysv/linux/riscv/dl-cache.h | 17 +-
sysdeps/unix/sysv/linux/riscv/init-first.c | 19 +-
sysdeps/unix/sysv/linux/riscv/kernel_stat.h | 23 +
sysdeps/unix/sysv/linux/riscv/ldconfig.h | 2 +-
sysdeps/unix/sysv/linux/riscv/libc-vdso.h | 9 +-
sysdeps/unix/sysv/linux/riscv/rv32/Implies | 3 +
.../unix/sysv/linux/riscv/rv32/c++-types.data | 67 +
.../sysv/linux/riscv/rv32/jmp_buf-macros.h | 53 +
sysdeps/unix/sysv/linux/riscv/rv32/ld.abilist | 9 +
.../linux/riscv/rv32/libBrokenLocale.abilist | 1 +
.../unix/sysv/linux/riscv/rv32/libanl.abilist | 4 +
.../unix/sysv/linux/riscv/rv32/libc.abilist | 2101 +++++++++++++++++
.../sysv/linux/riscv/rv32/libcrypt.abilist | 2 +
.../unix/sysv/linux/riscv/rv32/libdl.abilist | 9 +
.../unix/sysv/linux/riscv/rv32/libm.abilist | 1021 ++++++++
.../sysv/linux/riscv/rv32/libpthread.abilist | 235 ++
.../sysv/linux/riscv/rv32/libresolv.abilist | 79 +
.../unix/sysv/linux/riscv/rv32/librt.abilist | 35 +
.../linux/riscv/rv32/libthread_db.abilist | 40 +
.../sysv/linux/riscv/rv32/libutil.abilist | 6 +
sysdeps/unix/sysv/linux/riscv/shlib-versions | 10 +-
sysdeps/unix/sysv/linux/riscv/sysdep.h | 73 +
sysdeps/unix/sysv/linux/timespec_get.c | 48 +-
sysdeps/unix/sysv/linux/wait.c | 41 +-
sysdeps/unix/sysv/linux/waitpid.c | 59 +-
sysdeps/unix/sysv/linux/waitpid_nocancel.c | 56 +-
61 files changed, 4915 insertions(+), 52 deletions(-)
create mode 100644 sysdeps/riscv/rv32/Implies-after
create mode 100644 sysdeps/riscv/rv32/fix-fp-int-convert-overflow.h
create mode 100644 sysdeps/riscv/rv32/rvd/Implies
create mode 100644 sysdeps/riscv/rv32/rvd/s_lrint.c
create mode 100644 sysdeps/riscv/rv32/rvd/s_lround.c
create mode 100644 sysdeps/riscv/rv32/rvf/Implies
create mode 100644 sysdeps/riscv/rv32/rvf/s_lrintf.c
create mode 100644 sysdeps/riscv/rv32/rvf/s_lroundf.c
create mode 100644 sysdeps/unix/sysv/linux/riscv/bits/environments.h
create mode 100644 sysdeps/unix/sysv/linux/riscv/bits/time64.h
create mode 100644 sysdeps/unix/sysv/linux/riscv/bits/timesize.h
create mode 100644 sysdeps/unix/sysv/linux/riscv/bits/typesizes.h
create mode 100644 sysdeps/unix/sysv/linux/riscv/kernel_stat.h
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/Implies
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/c++-types.data
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/jmp_buf-macros.h
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/ld.abilist
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/libBrokenLocale.abilist
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/libanl.abilist
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/libcrypt.abilist
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/libdl.abilist
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/libm.abilist
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/libresolv.abilist
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/librt.abilist
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/libthread_db.abilist
create mode 100644 sysdeps/unix/sysv/linux/riscv/rv32/libutil.abilist
--
2.22.0