[RFC v5 00/21] RISC-V glibc port for the 32-bit
Alistair Francis
alistair.francis@wdc.com
Thu Aug 29 16:55:00 GMT 2019
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
More information about the Libc-alpha
mailing list