bytecodealliance/rustix

Several compilation issues on uClibc targets in version 0.38.28.

spritetong opened this issue · 2 comments

  1. msghdr::msg_iovlen is ::c_int on uClibc targets of arm mips32.
    libc/src/unix/linux_like/linux/uclibc/arm/mod.rs
    libc/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs

  2. There is no prlimit64() function on uClibc targets.
    libc/src/unix/linux_like/linux/uclibc/mod.rs

I have made a patch for these issues, for your reference.

diff --git a/src/backend/libc/c.rs b/src/backend/libc/c.rs
index d3a1e5f4..5af91571 100644
--- a/src/backend/libc/c.rs
+++ b/src/backend/libc/c.rs
@@ -166,7 +166,7 @@ pub(super) use libc::{pread64 as pread, pwrite64 as pwrite};
 #[cfg(any(target_os = "linux", target_os = "hurd", target_os = "emscripten"))]
 pub(super) use libc::{preadv64 as preadv, pwritev64 as pwritev};
 
-#[cfg(all(target_os = "linux", target_env = "gnu"))]
+#[cfg(all(target_os = "linux", any(target_env = "gnu", target_env = "uclibc")))]
 pub(super) unsafe fn prlimit(
     pid: libc::pid_t,
     resource: libc::__rlimit_resource_t,
diff --git a/src/backend/libc/conv.rs b/src/backend/libc/conv.rs
index 25395100..1f9bcaf2 100644
--- a/src/backend/libc/conv.rs
+++ b/src/backend/libc/conv.rs
@@ -182,7 +182,11 @@ pub(super) fn ret_send_recv(len: i32) -> io::Result<usize> {
     not(any(windows, target_os = "espidf", target_os = "redox", target_os = "wasi")),
     any(
         target_os = "android",
-        all(target_os = "linux", not(target_env = "musl"))
+        all(
+            target_os = "linux",
+            not(target_env = "musl"),
+            not(all(target_env = "uclibc", any(target_arch = "arm", target_arch = "mips")))
+        )
     )
 ))]
 #[inline]
@@ -201,7 +205,11 @@ pub(super) fn msg_iov_len(len: usize) -> c::size_t {
     )),
     not(any(
         target_os = "android",
-        all(target_os = "linux", not(target_env = "musl"))
+        all(
+            target_os = "linux",
+            not(target_env = "musl"),
+            not(all(target_env = "uclibc", any(target_arch = "arm", target_arch = "mips")))
+        )
     ))
 ))]
 #[inline]

This is released in rustix 0.38.29.

Thanks. 😊