From d46bd843deede893515984117c1a7f1fbf2a571e Mon Sep 17 00:00:00 2001 From: Aelin Reidel Date: Sun, 13 Sep 2026 14:15:08 +0200 Subject: [PATCH 1/6] ci: Test riscv64gc-unknown-linux-musl This is a tier 2 with host tools target since 1.99. --- .github/workflows/ci.yaml | 4 ++++ Cargo.toml | 2 +- .../riscv64gc-unknown-linux-musl/Dockerfile | 24 +++++++++++++++++++ ci/install-musl.sh | 7 ++++++ ci/verify-build.py | 2 +- 5 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 ci/docker/riscv64gc-unknown-linux-musl/Dockerfile diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 644d33bd88876..90df8e5e09948 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -228,6 +228,10 @@ jobs: env: { TEST_MUSL_V1_2: 1 } artifact-tag: new-musl - target: riscv64gc-unknown-linux-gnu + - target: riscv64gc-unknown-linux-musl + - target: riscv64gc-unknown-linux-musl + env: { TEST_MUSL_V1_2: 1 } + artifact-tag: new-musl - target: s390x-unknown-linux-gnu - target: sparc64-unknown-linux-gnu - target: wasm32-unknown-emscripten diff --git a/Cargo.toml b/Cargo.toml index 56a782ffbffb8..799faa0471200 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -52,6 +52,7 @@ targets = [ "powerpc64le-unknown-linux-gnu", "powerpc64le-unknown-linux-musl", "riscv64gc-unknown-linux-gnu", + "riscv64gc-unknown-linux-musl", "s390x-unknown-linux-gnu", "sparcv9-sun-solaris", "x86_64-apple-darwin", @@ -85,7 +86,6 @@ targets = [ "i686-unknown-freebsd", "i686-unknown-linux-musl", "nvptx64-nvidia-cuda", - "riscv64gc-unknown-linux-musl", "sparc64-unknown-linux-gnu", "thumbv7neon-linux-androideabi", "thumbv7neon-unknown-linux-gnueabihf", diff --git a/ci/docker/riscv64gc-unknown-linux-musl/Dockerfile b/ci/docker/riscv64gc-unknown-linux-musl/Dockerfile new file mode 100644 index 0000000000000..6890ff885488b --- /dev/null +++ b/ci/docker/riscv64gc-unknown-linux-musl/Dockerfile @@ -0,0 +1,24 @@ +FROM ubuntu:26.04 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + gcc \ + gcc-riscv64-linux-gnu \ + git \ + libc6-dev \ + make \ + patch \ + rsync \ + qemu-user \ + xz-utils + +ARG MUSL_VERSION +COPY . /ci +RUN ci/install-musl.sh riscv64 "$MUSL_VERSION" + +ENV PATH=$PATH:/musl-riscv64/bin:/rust/bin \ + CC_riscv64gc_unknown_linux_musl=musl-gcc \ + CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_MUSL_LINKER=musl-gcc \ + CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_MUSL_RUNNER="qemu-riscv64 -L /musl-riscv64" \ + EXTRA_RUSTFLAGS="-Ctarget-feature=+crt-static -Clink-args=-L/musl-riscv64/lib" diff --git a/ci/install-musl.sh b/ci/install-musl.sh index 8627f580facc6..4d2a1ed504291 100755 --- a/ci/install-musl.sh +++ b/ci/install-musl.sh @@ -107,6 +107,13 @@ case ${1} in ./configure --prefix="/musl-${musl_arch}" --enable-wrapper=yes make install -j4 ;; + riscv64) + musl_arch=riscv64 + kernel_arch=riscv + CC=riscv64-linux-gnu-gcc \ + ./configure --prefix="/musl-${musl_arch}" --enable-wrapper=yes + make install -j4 + ;; *) echo "Unknown target arch: \"${1}\"" exit 1 diff --git a/ci/verify-build.py b/ci/verify-build.py index 14ee05a2cea40..cc5645b0a279a 100755 --- a/ci/verify-build.py +++ b/ci/verify-build.py @@ -108,6 +108,7 @@ class TargetResult: Target("powerpc64le-unknown-linux-gnu"), Target("powerpc64le-unknown-linux-musl", min_toolchain=Toolchain.STABLE), Target("riscv64gc-unknown-linux-gnu"), + Target("riscv64gc-unknown-linux-musl", min_toolchain=Toolchain.STABLE), Target("s390x-unknown-linux-gnu"), Target("sparcv9-sun-solaris"), Target("x86_64-apple-darwin"), @@ -141,7 +142,6 @@ class TargetResult: Target("i686-unknown-freebsd"), Target("i686-unknown-linux-musl"), Target("nvptx64-nvidia-cuda", min_toolchain=Toolchain.STABLE), - Target("riscv64gc-unknown-linux-musl", min_toolchain=Toolchain.STABLE), Target("sparc64-unknown-linux-gnu"), Target("thumbv7neon-linux-androideabi", min_toolchain=Toolchain.STABLE), Target("thumbv7neon-unknown-linux-gnueabihf", min_toolchain=Toolchain.STABLE), From 664269adfe9dbdf0194be0c8c52c89ed703037b9 Mon Sep 17 00:00:00 2001 From: Aelin Reidel Date: Sun, 13 Sep 2026 15:01:58 +0200 Subject: [PATCH 2/6] musl: riscv64: REG_NARGS does not exist glibc defines this, musl has no idea what it is. --- src/unix/linux_like/linux/musl/b64/riscv64/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs index 31f388d5c8338..ba431f477122d 100644 --- a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs @@ -657,4 +657,3 @@ pub const REG_S0: usize = 8; pub const REG_S1: usize = 9; pub const REG_A0: usize = 10; pub const REG_S2: usize = 18; -pub const REG_NARGS: usize = 8; From 7f5c43500dbb13dd0e7f5ef2f7072ea44bea6dca Mon Sep 17 00:00:00 2001 From: Aelin Reidel Date: Sun, 13 Sep 2026 15:02:16 +0200 Subject: [PATCH 3/6] musl: riscv64: Remove REG_* definitions gated under _GNU_SOURCE See also https://git.musl-libc.org/cgit/musl/tree/arch/riscv64/bits/signal.h#n38 --- src/unix/linux_like/linux/musl/b64/riscv64/mod.rs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs index ba431f477122d..46d68749e77a0 100644 --- a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs @@ -649,11 +649,3 @@ pub const TOSTOP: crate::tcflag_t = 0x00000100; pub const FLUSHO: crate::tcflag_t = 0x00001000; pub const NGREG: usize = 32; -pub const REG_PC: usize = 0; -pub const REG_RA: usize = 1; -pub const REG_SP: usize = 2; -pub const REG_TP: usize = 4; -pub const REG_S0: usize = 8; -pub const REG_S1: usize = 9; -pub const REG_A0: usize = 10; -pub const REG_S2: usize = 18; From 1c98293003aaf095ec80f9ddb17a1a74f16644e0 Mon Sep 17 00:00:00 2001 From: Aelin Reidel Date: Sun, 13 Sep 2026 15:02:31 +0200 Subject: [PATCH 4/6] musl: riscv64: Fix name of uc_flags field in ucontext_t https://git.musl-libc.org/cgit/musl/tree/arch/riscv64/bits/signal.h#n67 --- src/unix/linux_like/linux/musl/b64/riscv64/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs index 46d68749e77a0..c63620f3595a9 100644 --- a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs @@ -78,7 +78,7 @@ s! { s_no_extra_traits! { pub struct ucontext_t { - pub __uc_flags: c_ulong, + pub uc_flags: c_ulong, pub uc_link: *mut ucontext_t, pub uc_stack: crate::stack_t, pub uc_sigmask: crate::sigset_t, From 1facf10c1cf578bfe94ef0c99c0e4882a62af911 Mon Sep 17 00:00:00 2001 From: Aelin Reidel Date: Sun, 13 Sep 2026 15:07:49 +0200 Subject: [PATCH 5/6] musl: riscv64: Fix definition of ipc_perm riscv64 musl uses the generic definition of ipc_perm found here: https://git.musl-libc.org/cgit/musl/tree/arch/generic/bits/ipc.h --- src/unix/linux_like/linux/musl/b64/riscv64/mod.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs index c63620f3595a9..680e47f9d86d7 100644 --- a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs @@ -52,12 +52,10 @@ s! { pub gid: crate::gid_t, pub cuid: crate::uid_t, pub cgid: crate::gid_t, - pub mode: c_ushort, - __pad1: Padding, - pub __seq: c_ushort, - __pad2: Padding, - __unused1: Padding, - __unused2: Padding, + pub mode: crate::mode_t, + pub __ipc_perm_seq: c_int, + __pad1: Padding, + __pad2: Padding, } #[repr(align(8))] From f645f199ecc2ea4368448fde45ee34b194ccfd95 Mon Sep 17 00:00:00 2001 From: Aelin Reidel Date: Sun, 13 Sep 2026 15:12:51 +0200 Subject: [PATCH 6/6] musl: riscv64: Add SYS_futex_waitv https://git.musl-libc.org/cgit/musl/tree/arch/riscv64/bits/syscall.h.in#n305 --- src/unix/linux_like/linux/musl/b64/riscv64/mod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs index 680e47f9d86d7..58f698f537507 100644 --- a/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs @@ -412,6 +412,7 @@ pub const SYS_mount_setattr: c_long = 442; pub const SYS_landlock_create_ruleset: c_long = 444; pub const SYS_landlock_add_rule: c_long = 445; pub const SYS_landlock_restrict_self: c_long = 446; +pub const SYS_futex_waitv: c_long = 449; pub const O_APPEND: c_int = 1024; pub const O_DIRECT: c_int = 0x4000;