|
|
Message-ID: <20261102165837.24591-1-kaloz@kernel.org>
Date: Mon, 2 Nov 2026 17:58:27 +0100
From: Imre Kaloz <kaloz@...nel.org>
To: musl@...ts.openwall.com
Subject: [PATCH 00/10] add sparc64 port
This adds a sparc64 port.
Patch 1 fixes pthread_sigmask, which assumed the SIG_* values are
consecutive; it stands alone.
Patches 2-8 add the arch hooks, and patch 9 is the port itself.
Patch 10 documents it in INSTALL.
On sparc64:
- clone returns as fork does on sparc: %o1 is 1 in the child, and %o0
holds a pid on both sides. glibc tests %o1 the same way.
- rt_sigaction takes the restorer as its fourth argument, and there is
no SA_RESTORER.
- PLT entries are code, so the dynamic linker resolves a JMP_SLOT by
writing and flushing instructions.
- Relocations against local symbols resolve to the load base, because
the linker puts the full address in the addend.
- The kernel's struct timeval is {long, int}. Patch 7 converts it for
the syscalls and ioctls that pass one; SO_TIMESTAMP needs Linux 5.1
or later, since recvmsg's conversion of the old timestamp assumes
two longs.
- The signal frame holds only the first 8 bytes of uc_sigmask, so
handlers change it with sigaddset and sigdelset.
- long double is IEEE quad, computed by software _Qp_* helpers in
src/math/sparc64. Their u128 code is copied from sqrtl.c and could
move to a shared header.
Tested with libc-test, static and dynamic, on a Sun Ultra 45 and under
qemu-sparc64. The failures that also occur on x86_64 are api/main,
strptime, wordexp, math/powf, and the dlopen and TLS tests in a static
build. In the static build on the Ultra 45 and in qemu system mode
malloc-brk-fail fails too: its memory fill cannot exhaust the sparc64
address space, so malloc still succeeds. Under qemu-user the robust and
priority-inheritance mutex tests fail; they pass on the Ultra 45.
Imre Kaloz (10):
pthread_sigmask: validate how by value, not as a contiguous range
allow archs to override fcntl lock and socket option numbers
support archs whose clone indicates the child in a second return
register
add SYSCALL_RT_SIGACTION_RESTORER hook for sparc
add MC_NPC hook for cancellation on delayed-branch archs
add sparc ipc() hooks for semctl and msgrcv
convert kernel timevals where suseconds_t is 32-bit
add ARCH_PLT_WRITE hook for archs whose PLT entries hold code
add sparc64 port
document sparc64 support in INSTALL file
INSTALL | 6 +
arch/sparc64/atomic_arch.h | 35 ++
arch/sparc64/bits/alltypes.h.in | 18 +
arch/sparc64/bits/errno.h | 134 ++++++
arch/sparc64/bits/fcntl.h | 39 ++
arch/sparc64/bits/fenv.h | 17 +
arch/sparc64/bits/float.h | 20 +
arch/sparc64/bits/ioctl.h | 101 +++++
arch/sparc64/bits/limits.h | 1 +
arch/sparc64/bits/mman.h | 12 +
arch/sparc64/bits/poll.h | 5 +
arch/sparc64/bits/resource.h | 5 +
arch/sparc64/bits/setjmp.h | 1 +
arch/sparc64/bits/shm.h | 24 +
arch/sparc64/bits/signal.h | 98 +++++
arch/sparc64/bits/socket.h | 81 ++++
arch/sparc64/bits/syscall.h.in | 395 +++++++++++++++++
arch/sparc64/bits/termios.h | 151 +++++++
arch/sparc64/bits/user.h | 25 ++
arch/sparc64/crt_arch.h | 19 +
arch/sparc64/ksigaction.h | 10 +
arch/sparc64/kstat.h | 23 +
arch/sparc64/pthread_arch.h | 10 +
arch/sparc64/reloc.h | 69 +++
arch/sparc64/syscall_arch.h | 134 ++++++
configure | 5 +
include/fcntl.h | 2 +
include/sys/socket.h | 2 +
ldso/dynlink.c | 11 +
src/fenv/sparc64/fenv.c | 58 +++
src/internal/syscall.h | 11 +
src/ipc/msgrcv.c | 2 +
src/ipc/semctl.c | 2 +
src/ldso/sparc64/dlsym.s | 8 +
src/linux/clock_adjtime.c | 18 +
src/linux/wait4.c | 10 +
src/math/sparc64/qp.c | 231 ++++++++++
src/math/sparc64/quad.h | 580 +++++++++++++++++++++++++
src/misc/getrusage.c | 10 +
src/misc/ioctl.c | 12 +
src/network/getsockopt.c | 13 +
src/network/setsockopt.c | 6 +
src/process/_Fork.c | 4 +-
src/process/vfork.c | 4 +-
src/select/select.c | 5 +
src/setjmp/sparc64/longjmp.s | 18 +
src/setjmp/sparc64/setjmp.s | 22 +
src/signal/getitimer.c | 12 +
src/signal/setitimer.c | 18 +
src/signal/sigaction.c | 12 +
src/signal/sparc64/restore.s | 15 +
src/signal/sparc64/sigsetjmp.s | 25 ++
src/thread/pthread_cancel.c | 3 +
src/thread/pthread_sigmask.c | 3 +-
src/thread/sparc64/__set_thread_area.s | 8 +
src/thread/sparc64/__unmapself.c | 28 ++
src/thread/sparc64/clone.S | 51 +++
src/thread/sparc64/syscall_cp.s | 38 ++
src/unistd/sparc64/pipe.s | 18 +
59 files changed, 2695 insertions(+), 3 deletions(-)
create mode 100644 arch/sparc64/atomic_arch.h
create mode 100644 arch/sparc64/bits/alltypes.h.in
create mode 100644 arch/sparc64/bits/errno.h
create mode 100644 arch/sparc64/bits/fcntl.h
create mode 100644 arch/sparc64/bits/fenv.h
create mode 100644 arch/sparc64/bits/float.h
create mode 100644 arch/sparc64/bits/ioctl.h
create mode 100644 arch/sparc64/bits/limits.h
create mode 100644 arch/sparc64/bits/mman.h
create mode 100644 arch/sparc64/bits/poll.h
create mode 100644 arch/sparc64/bits/resource.h
create mode 100644 arch/sparc64/bits/setjmp.h
create mode 100644 arch/sparc64/bits/shm.h
create mode 100644 arch/sparc64/bits/signal.h
create mode 100644 arch/sparc64/bits/socket.h
create mode 100644 arch/sparc64/bits/syscall.h.in
create mode 100644 arch/sparc64/bits/termios.h
create mode 100644 arch/sparc64/bits/user.h
create mode 100644 arch/sparc64/crt_arch.h
create mode 100644 arch/sparc64/ksigaction.h
create mode 100644 arch/sparc64/kstat.h
create mode 100644 arch/sparc64/pthread_arch.h
create mode 100644 arch/sparc64/reloc.h
create mode 100644 arch/sparc64/syscall_arch.h
create mode 100644 src/fenv/sparc64/fenv.c
create mode 100644 src/ldso/sparc64/dlsym.s
create mode 100644 src/math/sparc64/qp.c
create mode 100644 src/math/sparc64/quad.h
create mode 100644 src/setjmp/sparc64/longjmp.s
create mode 100644 src/setjmp/sparc64/setjmp.s
create mode 100644 src/signal/sparc64/restore.s
create mode 100644 src/signal/sparc64/sigsetjmp.s
create mode 100644 src/thread/sparc64/__set_thread_area.s
create mode 100644 src/thread/sparc64/__unmapself.c
create mode 100644 src/thread/sparc64/clone.S
create mode 100644 src/thread/sparc64/syscall_cp.s
create mode 100644 src/unistd/sparc64/pipe.s
base-commit: 7813e9119eb5fe681b6750b8a033a0490bca0941
--
2.47.3
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.