Skip to content

Commit

Permalink
fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
taiki-e committed Mar 29, 2024
1 parent c54a7b8 commit 059f650
Show file tree
Hide file tree
Showing 11 changed files with 113 additions and 8 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ See also [setup-cross-toolchain-action](https://github.com/taiki-e/setup-cross-t

| libc | GCC | clang | C++ | test | host |
| ---- | --- | ----- | --- | ---- | ---- |
| uClibc-ng 1.0.34 | 10.2.0 | host | ✓ (libstdc++) | ✓ (qemu) | x86_64 Linux (glibc 2.17+) |
| uClibc-ng 1.0.45 | 13.2.0 | host | ✓ (libstdc++) | ✓ (qemu) | x86_64 Linux (glibc 2.17+) |

([Dockerfile](docker/linux-uclibc.Dockerfile))

Expand Down
7 changes: 3 additions & 4 deletions docker/linux-uclibc.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,10 @@

ARG UBUNTU_VERSION=20.04

# TODO: update to 2021.11-1 or 2022.08-1
# https://toolchains.bootlin.com/toolchains.html
# GCC 10.2.0, GDB 9.2, Linux headers 5.4.61, uClibc 1.0.34, binutils 2.34
ARG TOOLCHAIN_VERSION=2020.08-1
ARG GCC_VERSION=10.2.0
# GCC 13.2.0, GDB 14.1, Linux headers 5.15.149, uClibc 1.0.45, binutils 2.42
ARG TOOLCHAIN_VERSION=2024.02-1
ARG GCC_VERSION=13.2.0

FROM ghcr.io/taiki-e/downloader as toolchain
SHELL ["/bin/bash", "-eEuxo", "pipefail", "-c"]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
diff --git a/src/mem/mod.rs b/src/mem/mod.rs
index ccf1917..dcbbf52 100644
--- a/src/mem/mod.rs
+++ b/src/mem/mod.rs
@@ -130,6 +130,7 @@ fn memset_element_unordered_atomic<T>(s: *mut T, c: u8, bytes: usize)
}
}

+#[cfg(not(target_arch = "m68k"))]
intrinsics! {
#[cfg(target_has_atomic_load_store = "8")]
pub unsafe extern "C" fn __llvm_memcpy_element_unordered_atomic_1(dest: *mut u8, src: *const u8, bytes: usize) -> () {
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ index 4afb98e95..67d5ba1b3 100644
}
}

+extern "C" {
+ pub fn getauxval(type_: ::c_ulong) -> ::c_ulong;
+}
+cfg_if! {
+ if #[cfg(libc_union)] {
+ // Internal, for casts to access union fields
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ index 4afb98e95..67d5ba1b3 100644
}
}

+extern "C" {
+ pub fn getauxval(type_: ::c_ulong) -> ::c_ulong;
+}
+cfg_if! {
+ if #[cfg(libc_union)] {
+ // Internal, for casts to access union fields
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ index 4afb98e95..67d5ba1b3 100644
}
}

+extern "C" {
+ pub fn getauxval(type_: ::c_ulong) -> ::c_ulong;
+}
+cfg_if! {
+ if #[cfg(libc_union)] {
+ // Internal, for casts to access union fields
Expand Down
3 changes: 3 additions & 0 deletions docker/test-base/patches/libc+mips-unknown-linux-uclibc.diff
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ index 4afb98e95..67d5ba1b3 100644
}
}

+extern "C" {
+ pub fn getauxval(type_: ::c_ulong) -> ::c_ulong;
+}
+cfg_if! {
+ if #[cfg(libc_union)] {
+ // Internal, for casts to access union fields
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ index 4afb98e95..67d5ba1b3 100644
}
}

+extern "C" {
+ pub fn getauxval(type_: ::c_ulong) -> ::c_ulong;
+}
+cfg_if! {
+ if #[cfg(libc_union)] {
+ // Internal, for casts to access union fields
Expand Down
81 changes: 81 additions & 0 deletions docker/test-base/patches/libc+x86_64-unknown-dragonfly.diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
diff --git a/libc-test/semver/dragonfly.txt b/libc-test/semver/dragonfly.txt
index 8135be3b4..febed0b3a 100644
--- a/libc-test/semver/dragonfly.txt
+++ b/libc-test/semver/dragonfly.txt
@@ -326,6 +326,9 @@ GLOB_NOESCAPE
GLOB_NOMATCH
GLOB_NOSORT
GLOB_NOSPACE
+GRND_INSECURE
+GRND_NONBLOCK
+GRND_RANDOM
HW_BYTEORDER
HW_DISKNAMES
HW_DISKSTATS
@@ -1308,6 +1311,7 @@ fstatfs
futimes
getdomainname
getdtablesize
+getentropy
getgrent
getgrent_r
getgrgid
@@ -1331,6 +1335,7 @@ getprogname
getpwent
getpwent_r
getpwnam_r
+getrandom
getresgid
getresuid
getrlimit
diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs
index 78314084c..195c6cb3e 100644
--- a/src/unix/bsd/freebsdlike/freebsd/mod.rs
+++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs
@@ -3875,11 +3875,6 @@ fn clone(&self) -> dot3Vendors {
// for use with fspacectl
pub const SPACECTL_DEALLOC: ::c_int = 1;

-// For getrandom()
-pub const GRND_NONBLOCK: ::c_uint = 0x1;
-pub const GRND_RANDOM: ::c_uint = 0x2;
-pub const GRND_INSECURE: ::c_uint = 0x4;
-
// For realhostname* api
pub const HOSTNAME_FOUND: ::c_int = 0;
pub const HOSTNAME_INCORRECTNAME: ::c_int = 1;
@@ -5393,8 +5388,6 @@ pub fn shm_rename(

pub fn fdatasync(fd: ::c_int) -> ::c_int;

- pub fn getrandom(buf: *mut ::c_void, buflen: ::size_t, flags: ::c_uint) -> ::ssize_t;
- pub fn getentropy(buf: *mut ::c_void, buflen: ::size_t) -> ::c_int;
pub fn elf_aux_info(aux: ::c_int, buf: *mut ::c_void, buflen: ::c_int) -> ::c_int;
pub fn setproctitle_fast(fmt: *const ::c_char, ...);
pub fn timingsafe_bcmp(a: *const ::c_void, b: *const ::c_void, len: ::size_t) -> ::c_int;
diff --git a/src/unix/bsd/freebsdlike/mod.rs b/src/unix/bsd/freebsdlike/mod.rs
index 00a944e42..9b555e42e 100644
--- a/src/unix/bsd/freebsdlike/mod.rs
+++ b/src/unix/bsd/freebsdlike/mod.rs
@@ -1456,6 +1456,11 @@ fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
pub const RB_MUTE: ::c_int = 0x10000;
pub const RB_SELFTEST: ::c_int = 0x20000;

+// For getrandom()
+pub const GRND_NONBLOCK: ::c_uint = 0x1;
+pub const GRND_RANDOM: ::c_uint = 0x2;
+pub const GRND_INSECURE: ::c_uint = 0x4;
+
safe_f! {
pub {const} fn WIFCONTINUED(status: ::c_int) -> bool {
status == 0x13
@@ -1829,6 +1834,9 @@ pub fn mq_timedsend(
abs_timeout: *const ::timespec,
) -> ::c_int;
pub fn mq_unlink(name: *const ::c_char) -> ::c_int;
+
+ pub fn getrandom(buf: *mut ::c_void, buflen: ::size_t, flags: ::c_uint) -> ::ssize_t;
+ pub fn getentropy(buf: *mut ::c_void, buflen: ::size_t) -> ::c_int;
}

#[link(name = "util")]
2 changes: 0 additions & 2 deletions docker/test/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -288,8 +288,6 @@ if [[ -f /BUILD_STD ]]; then
export RUSTFLAGS="${RUSTFLAGS:-} -C link-args=-lclang_rt.builtins-hexagon"
build_std+=(-Z build-std-features=llvm-libunwind)
;;
# TODO(mips): LLVM bug: Undefined temporary symbol error when building std.
mips-*-linux-* | mipsel-*-linux-*) build_mode=release ;;
esac
fi

Expand Down
2 changes: 1 addition & 1 deletion tools/target-list-shared.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ linux_gnu_targets=(
i586-unknown-linux-gnu
i686-unknown-linux-gnu
loongarch64-unknown-linux-gnu
# m68k-unknown-linux-gnu # tier3, build fail: https://github.com/rust-lang/rust/issues/89498
m68k-unknown-linux-gnu # tier3, build fail: https://github.com/rust-lang/rust/issues/89498
mips-unknown-linux-gnu # tier3
mips64-unknown-linux-gnuabi64 # tier3
mips64el-unknown-linux-gnuabi64 # tier3
Expand Down

0 comments on commit 059f650

Please sign in to comment.