From 49e60a7763ccfc359761e4d46d14626c97f093fe Mon Sep 17 00:00:00 2001 From: Trevor Gross Date: Sun, 26 Oct 2025 05:51:09 -0400 Subject: [PATCH 1/3] ci: Pass the `MUSL_V1_2_3` env in docker This was being set as part of CI but not forwarded to the jobs. Start passing it now. --- ci/run-docker.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/run-docker.sh b/ci/run-docker.sh index a39cc743999d1..734bfa6632119 100755 --- a/ci/run-docker.sh +++ b/ci/run-docker.sh @@ -45,6 +45,7 @@ run() { --env LIBC_CI_ZBUILD_STD \ --env RUST_LIBC_UNSTABLE_GNU_FILE_OFFSET_BITS \ --env RUST_LIBC_UNSTABLE_GNU_TIME_BITS \ + --env RUST_LIBC_UNSTABLE_MUSL_V1_2_3 \ --env CARGO_HOME=/cargo \ --env CARGO_TARGET_DIR=/checkout/target \ --volume "$CARGO_HOME":/cargo \ From f230904e980f431959628958bf8b73a77d782200 Mon Sep 17 00:00:00 2001 From: Trevor Gross Date: Sun, 26 Oct 2025 05:51:09 -0400 Subject: [PATCH 2/3] musl: Fix skips with recent versions It appeared that tests with the constants here were passing in CI with new versions of musl before, but that was only because the correct config wasn't being set. Go back to our original configuration (with some cleanup) to resolve this. Fixes: dd44cb603e77 ("test: linux: Unskip types and constants that are now available") --- libc-test/build.rs | 125 ++++++++++++++++++++++----------------------- 1 file changed, 61 insertions(+), 64 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index bf6abab6a0685..a6a98abc232a3 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -3935,8 +3935,14 @@ fn test_linux(target: &str) { // FIXME(linux): Requires >= 6.12 kernel headers. "mnt_ns_info" => true, - // Struct has changed for new musl versions - "tcp_info" if old_musl => true, + // FIXME(musl): Struct has changed for new musl versions + "tcp_info" if musl => true, + + // FIXME(musl): Supported in new musl but we don't have a new enough version in CI. + "statx" | "statx_timestamp" if musl => true, + + // FIXME(musl): New fields in newer versions + "utmpx" if !old_musl => true, _ => false, } @@ -3990,35 +3996,26 @@ fn test_linux(target: &str) { if name.starts_with("NI_IDN") { return true; } - // FIXME(musl): Not in musl yet - if name == "SO_NETNS_COOKIE" - || name == "SO_BUF_LOCK" - || name == "SO_RESERVE_MEM" - || name == "SO_TXREHASH" - || name == "SO_RCVMARK" - || name == "SO_PASSPIDFD" - || name == "SO_PEERPIDFD" - || name == "SO_DEVMEM_LINEAR" - || name == "SO_DEVMEM_DMABUF" - || name == "SO_DEVMEM_DONTNEED" - { - return true; - } - // FIXME(musl): Not in musl yet - if name == "SCM_DEVMEM_LINEAR" || name == "SCM_DEVMEM_DMABUF" { - return true; - } - // FIXME: Does not exist on non-x86 architectures, slated for removal - // in libc in 1.0 - if ppc64 && name == "MAP_32BIT" { - return true; - } - } - if old_musl { - // Constants that don't exist on the old version of musl we test with, but do exist - // on newer versions. + match name { - "FAN_EVENT_INFO_TYPE_ERROR" + // FIXME: Does not exist on non-x86 architectures, slated for removal + // in libc in 1.0 + "MAP_32BIT" if ppc64 => return true, + + // FIXME(musl): None of these are actually defined in musl, they should be removed. + "SO_NETNS_COOKIE" + | "SO_BUF_LOCK" + | "SO_RESERVE_MEM" + | "SO_TXREHASH" + | "SO_RCVMARK" + | "SO_PASSPIDFD" + | "SO_PEERPIDFD" + | "SO_DEVMEM_LINEAR" + | "SO_DEVMEM_DMABUF" + | "SO_DEVMEM_DONTNEED" + | "SCM_DEVMEM_LINEAR" + | "SCM_DEVMEM_DMABUF" + | "FAN_EVENT_INFO_TYPE_ERROR" | "FAN_EVENT_INFO_TYPE_NEW_DFID_NAME" | "FAN_EVENT_INFO_TYPE_OLD_DFID_NAME" | "FAN_FS_ERROR" @@ -4031,21 +4028,39 @@ fn test_linux(target: &str) { | "FAN_REPORT_TARGET_FID" | "FAN_RESPONSE_INFO_AUDIT_RULE" | "FAN_RESPONSE_INFO_NONE" - | "IPPROTO_ETHERNET" - | "IPPROTO_MPTCP" | "PR_GET_MDWE" | "PR_MDWE_NO_INHERIT" | "PR_MDWE_REFUSE_EXEC_GAIN" | "PR_SET_MDWE" - | "RLIM_NLIMITS" + | "IPPROTO_ETHERNET" + | "IPPROTO_MPTCP" | "SI_DETHREAD" - | "SO_BUSY_POLL_BUDGET" - | "SO_PREFER_BUSY_POLL" => return true, - // Values changed in newer musl versions on these arches + | "PR_SET_VMA" + | "PR_SET_VMA_ANON_NAME" + | "PR_SCHED_CORE" + | "PR_SCHED_CORE_CREATE" + | "PR_SCHED_CORE_GET" + | "PR_SCHED_CORE_MAX" + | "PR_SCHED_CORE_SCOPE_PROCESS_GROUP" + | "PR_SCHED_CORE_SCOPE_THREAD" + | "PR_SCHED_CORE_SCOPE_THREAD_GROUP" + | "PR_SCHED_CORE_SHARE_FROM" + | "PR_SCHED_CORE_SHARE_TO" => return true, + + /* Added in versions more recent than what we test */ + // Since 1.2.3 + "SO_BUSY_POLL_BUDGET" | "SO_PREFER_BUSY_POLL" => return true, + + // FIXME(musl): value was updated in new musl + "RLIM_NLIMITS" => return true, + + // FIXME(musl): Values changed in newer musl versions on these arches "O_LARGEFILE" if riscv64 || x86_64 => return true, + _ => (), } } + match name { // These constants are not available if gnu headers have been included // and can therefore not be tested here @@ -4158,23 +4173,6 @@ fn test_linux(target: &str) { // is a private value for kernel usage normally "FUSE_SUPER_MAGIC" => true, - // Not present on old musl - "PR_SET_VMA" - | "PR_SET_VMA_ANON_NAME" - | "PR_SCHED_CORE" - | "PR_SCHED_CORE_CREATE" - | "PR_SCHED_CORE_GET" - | "PR_SCHED_CORE_MAX" - | "PR_SCHED_CORE_SCOPE_PROCESS_GROUP" - | "PR_SCHED_CORE_SCOPE_THREAD" - | "PR_SCHED_CORE_SCOPE_THREAD_GROUP" - | "PR_SCHED_CORE_SHARE_FROM" - | "PR_SCHED_CORE_SHARE_TO" - if old_musl => - { - true - } - // Not present in glibc "PR_SME_VL_LEN_MAX" | "PR_SME_SET_VL_INHERIT" | "PR_SME_SET_VL_ONE_EXEC" if gnu => true, @@ -4359,20 +4357,22 @@ fn test_linux(target: &str) { // assume it's a int instead. "getnameinfo" if uclibc => true, - // FIXME(musl): This needs musl 1.2.2 or later. - "gettid" if old_musl => true, + // FIXME(musl): This needs musl 1.2.2 or later, which is newer than what we test with + // on CI. + "gettid" | "reallocarray" if musl => true, + // Needs musl 1.2.3 or later. + "pthread_getname_np" if musl => true, + // Added in musl 1.2.5 + "preadv2" | "pwritev2" if musl => true, + // FIXME(musl): Supported in new musl but we don't have a new enough version in CI. + "statx" if musl => true, // Needs glibc 2.33 or later. "mallinfo2" => true, - "reallocarray" if old_musl => true, - // Not defined in uclibc as of 1.0.34 "gettid" if uclibc => true, - // Needs musl 1.2.3 or later. - "pthread_getname_np" if old_musl => true, - // There are two versions of basename(3) on Linux with glibc, see // // https://man7.org/linux/man-pages/man3/basename.3.html @@ -4392,9 +4392,6 @@ fn test_linux(target: &str) { // FIXME(linux): function pointers changed since Ubuntu 23.10 "strtol" | "strtoll" | "strtoul" | "strtoull" | "fscanf" | "scanf" | "sscanf" => true, - // Added in musl 1.2.5 - "preadv2" | "pwritev2" if musl => true, - _ => false, } }); @@ -4506,7 +4503,7 @@ fn test_linux(target: &str) { // the `xsk_tx_metadata_union` field is an anonymous union (struct_ == "xsk_tx_metadata" && field == "xsk_tx_metadata_union") || // After musl 1.2.0, the type becomes `int` instead of `long`. - (old_musl && struct_ == "utmpx" && field == "ut_session") || + (musl && struct_ == "utmpx" && field == "ut_session") || // `frames` is a flexible array member (struct_ == "bcm_msg_head" && field == "frames") || // FAM From 6d7d1d817626fb4e2e567b05f09bd3737611a0c1 Mon Sep 17 00:00:00 2001 From: Trevor Gross Date: Mon, 27 Oct 2025 03:41:18 -0400 Subject: [PATCH 3/3] ci: Skip running ctest on ppc64le-musl The issue building rustix that we hit with loongarch is now being hit with ppc64le. --- ci/run.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ci/run.sh b/ci/run.sh index 8bb4af01f5701..bee3d97f232d8 100755 --- a/ci/run.sh +++ b/ci/run.sh @@ -28,8 +28,9 @@ esac case "$target" in # crash in std::env::tmp_dir (no filesystem on wasm). *wasm*) cmd="$cmd --exclude ctest --exclude ctest-test --exclude ctest-next" ;; + # Loongarch was fixed, but there are new instances of # https://github.com/bytecodealliance/rustix/issues/1496 - *loongarch*) cmd="$cmd --exclude ctest --exclude ctest-test --exclude ctest-next" ;; + powerpc64le*musl) cmd="$cmd --exclude ctest --exclude ctest-test --exclude ctest-next" ;; esac # shellcheck disable=SC2086