diff --git a/.github/workflows/full_ci.yml b/.github/workflows/full_ci.yml index 2788aa8848757..2a60edddd211e 100644 --- a/.github/workflows/full_ci.yml +++ b/.github/workflows/full_ci.yml @@ -165,6 +165,7 @@ jobs: - i686-linux-android - i686-unknown-linux-musl - loongarch64-unknown-linux-gnu + - loongarch64-unknown-linux-musl - powerpc-unknown-linux-gnu - powerpc64-unknown-linux-gnu - powerpc64le-unknown-linux-gnu diff --git a/ci/android-install-ndk.sh b/ci/android-install-ndk.sh index eb666e2db5da1..546917b5f8d53 100644 --- a/ci/android-install-ndk.sh +++ b/ci/android-install-ndk.sh @@ -1,6 +1,6 @@ #!/usr/bin/env sh -set -ex +set -eux ndk=android-ndk-r27 wget --tries=20 -q "https://dl.google.com/android/repository/${ndk}-linux.zip" diff --git a/ci/android-install-sdk.sh b/ci/android-install-sdk.sh index b7f2b8e1443fc..331e061357648 100644 --- a/ci/android-install-sdk.sh +++ b/ci/android-install-sdk.sh @@ -1,6 +1,6 @@ #!/usr/bin/env sh -set -ex +set -eux # Prep the SDK and emulator # diff --git a/ci/android-sysimage.sh b/ci/android-sysimage.sh index b49712035cf33..98484b3521f60 100644 --- a/ci/android-sysimage.sh +++ b/ci/android-sysimage.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -set -ex +set -eux URL=https://dl.google.com/android/repository/sys-img/android diff --git a/ci/build.sh b/ci/build.sh index 0239309ddf355..78556b6f7a8fc 100644 --- a/ci/build.sh +++ b/ci/build.sh @@ -5,7 +5,7 @@ # The FILTER environment variable can be used to select which target(s) to build. # For example: set FILTER to vxworks to select the targets that has vxworks in name -set -ex +set -eux : "${TOOLCHAIN?The TOOLCHAIN environment variable must be set.}" : "${OS?The OS environment variable must be set.}" diff --git a/ci/docker/loongarch64-unknown-linux-musl/Dockerfile b/ci/docker/loongarch64-unknown-linux-musl/Dockerfile new file mode 100644 index 0000000000000..c1219c034c81f --- /dev/null +++ b/ci/docker/loongarch64-unknown-linux-musl/Dockerfile @@ -0,0 +1,14 @@ +FROM ubuntu:24.04 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates curl gcc git libc6-dev make qemu-user xz-utils + +COPY install-musl-cross.sh / +RUN sh /install-musl-cross.sh loongarch64-unknown-linux-musl + +ENV CARGO_TARGET_LOONGARCH64_UNKNOWN_LINUX_MUSL_LINKER=loongarch64-unknown-linux-musl-gcc \ + CARGO_TARGET_LOONGARCH64_UNKNOWN_LINUX_MUSL_RUNNER="qemu-loongarch64" \ + CC_loongarch64_unknown_linux_musl=loongarch64-unknown-linux-musl-gcc \ + CFLAGS_loongarch64_unknown_linux_musl="-mabi=lp64d -fPIC" \ + QEMU_LD_PREFIX=/loongarch64-unknown-linux-musl/loongarch64-unknown-linux-musl/sysroot \ + PATH=$PATH:/loongarch64-unknown-linux-musl/bin:/rust/bin diff --git a/ci/docker/wasm32-unknown-emscripten/node-wrapper.sh b/ci/docker/wasm32-unknown-emscripten/node-wrapper.sh index 369439269a683..0fd93dc49d9c8 100755 --- a/ci/docker/wasm32-unknown-emscripten/node-wrapper.sh +++ b/ci/docker/wasm32-unknown-emscripten/node-wrapper.sh @@ -1,6 +1,6 @@ #!/bin/sh -set -e +set -eux me="$1" shift diff --git a/ci/emscripten-entry.sh b/ci/emscripten-entry.sh index e950cbe33ab06..344c347b75a72 100755 --- a/ci/emscripten-entry.sh +++ b/ci/emscripten-entry.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -set -ex +set -eux # shellcheck disable=SC1091 source /emsdk-portable/emsdk_env.sh &> /dev/null diff --git a/ci/emscripten.sh b/ci/emscripten.sh index b17a40c1a287d..0a4112e7e205e 100644 --- a/ci/emscripten.sh +++ b/ci/emscripten.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -set -ex +set -eux # Note: keep in sync with: # https://github.com/rust-lang/rust/blob/master/src/ci/docker/scripts/emscripten.sh diff --git a/ci/install-musl-cross.sh b/ci/install-musl-cross.sh new file mode 100644 index 0000000000000..38381dc9bd6bf --- /dev/null +++ b/ci/install-musl-cross.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# +# Install musl cross toolchain + +set -ex + +MUSL_CROSS_VER=20241103 +MUSL_CROSS_URL=https://github.com/musl-cross/musl-cross/releases/download/$MUSL_CROSS_VER/$1.tar.xz + +curl -L --retry 5 "$MUSL_CROSS_URL" | tar -xJf - -C / diff --git a/ci/install-musl.sh b/ci/install-musl.sh index fae46ee928c9f..5f8c681fa6678 100644 --- a/ci/install-musl.sh +++ b/ci/install-musl.sh @@ -3,7 +3,7 @@ # Install musl and musl-sanitized linux kernel headers # to musl-{$1} directory -set -ex +set -eux musl_version=1.1.24 musl="musl-${musl_version}" diff --git a/ci/install-rust.sh b/ci/install-rust.sh index a0b841807b106..becb532d1469d 100644 --- a/ci/install-rust.sh +++ b/ci/install-rust.sh @@ -1,17 +1,14 @@ #!/usr/bin/env sh # This is intended to be used in CI only. -set -ex +set -eux echo "Setup toolchain" -toolchain= -if [ -n "$TOOLCHAIN" ]; then - toolchain=$TOOLCHAIN -else - toolchain=nightly -fi -if [ "$OS" = "windows" ]; then +toolchain="${TOOLCHAIN:-nightly}" +os="${OS:-}" + +if [ "$os" = "windows" ]; then : "${TARGET?The TARGET environment variable must be set.}" rustup set profile minimal rustup update --force "$toolchain-$TARGET" @@ -22,18 +19,18 @@ else rustup default "$toolchain" fi -if [ -n "$TARGET" ]; then +if [ -n "${TARGET:-}" ]; then echo "Install target" rustup target add "$TARGET" fi -if [ -n "$INSTALL_RUST_SRC" ]; then +if [ -n "${INSTALL_RUST_SRC:-}" ]; then echo "Install rust-src" rustup component add rust-src fi -if [ "$OS" = "windows" ]; then - if [ "$ARCH_BITS" = "i686" ]; then +if [ "$os" = "windows" ]; then + if [ "${ARCH_BITS:-}" = "i686" ]; then echo "Install MinGW32" choco install mingw --x86 --force fi @@ -44,7 +41,7 @@ if [ "$OS" = "windows" ]; then /usr/bin/find "C:\ProgramData\Chocolatey" -name "dllcrt2*" /usr/bin/find "C:\ProgramData\Chocolatey" -name "libmsvcrt*" - if [ -n "$ARCH_BITS" ]; then + if [ -n "${ARCH_BITS:-}" ]; then echo "Fix MinGW" for i in crt2.o dllcrt2.o libmingwex.a libmsvcrt.a ; do cp -f "/C/ProgramData/Chocolatey/lib/mingw/tools/install/mingw$ARCH_BITS/$ARCH-w64-mingw32/lib/$i" "$(rustc --print sysroot)/lib/rustlib/$TARGET/lib" diff --git a/ci/linux-s390x.sh b/ci/linux-s390x.sh index 63d29b5beb597..5c89e90b11906 100644 --- a/ci/linux-s390x.sh +++ b/ci/linux-s390x.sh @@ -1,6 +1,6 @@ #!/usr/bin/env sh -set -ex +set -eux mkdir -m 777 /qemu cd /qemu diff --git a/ci/linux-sparc64.sh b/ci/linux-sparc64.sh index a42218a62ead0..d81ed104277a9 100644 --- a/ci/linux-sparc64.sh +++ b/ci/linux-sparc64.sh @@ -1,6 +1,6 @@ #!/usr/bin/env sh -set -ex +set -eux mkdir -m 777 /qemu cd /qemu diff --git a/ci/run-docker.sh b/ci/run-docker.sh index a812ee7ab183a..4cef3d45c504d 100755 --- a/ci/run-docker.sh +++ b/ci/run-docker.sh @@ -6,7 +6,7 @@ # Small script to run tests for a target (or all targets) inside all the # respective docker images. -set -ex +set -eux # Default to assuming the CARGO_HOME is one directory up (to account for a `bin` # subdir) from where the `cargo` binary in `$PATH` lives. @@ -89,13 +89,13 @@ build_switch() { } if [ -z "${1}" ]; then - for d in ci/docker/*; do - run "${d}" - done + for d in ci/docker/*; do + run "${d}" + done else - if [ "${1}" != "switch" ]; then - run "${1}" - else - build_switch - fi + if [ "${1}" != "switch" ]; then + run "${1}" + else + build_switch + fi fi diff --git a/ci/run.sh b/ci/run.sh index e01dd3c14a574..f4fef82fcdc2d 100755 --- a/ci/run.sh +++ b/ci/run.sh @@ -3,7 +3,7 @@ # Builds and runs tests for a particular target passed as an argument to this # script. -set -ex +set -eux mirrors_url="https://ci-mirrors.rust-lang.org/libc" @@ -15,7 +15,7 @@ target="$1" # # It's assume that all images, when run with two disks, will run the `run.sh` # script from the second which we place inside. -if [ "$QEMU" != "" ]; then +if [ -n "${QEMU:-}" ]; then tmpdir=/tmp/qemu-img-creation mkdir -p "${tmpdir}" diff --git a/ci/style.sh b/ci/style.sh index 53efb82280c87..d1b639db5bb89 100755 --- a/ci/style.sh +++ b/ci/style.sh @@ -1,6 +1,6 @@ #!/bin/sh -set -ex +set -eux if [ -n "${CI:-}" ]; then rustup toolchain install nightly -c rustfmt --allow-downgrade diff --git a/ci/test-runner-linux b/ci/test-runner-linux index 9ab029b0a7df2..55f84da1700f7 100755 --- a/ci/test-runner-linux +++ b/ci/test-runner-linux @@ -1,6 +1,6 @@ #!/bin/sh -set -e +set -eux arch="$1" prog="$2" diff --git a/ci/wasi.sh b/ci/wasi.sh index 1b72d356fac06..e7896233ad7f3 100644 --- a/ci/wasi.sh +++ b/ci/wasi.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -set -ex +set -eux apt-get update apt-get install -y --no-install-recommends \ diff --git a/libc-test/build.rs b/libc-test/build.rs index 1b0d442431e55..4b5b7f41e3789 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -580,6 +580,10 @@ fn test_openbsd(target: &str) { // Good chance it's going to be wrong depending on the host release "KERN_MAXID" | "NET_RT_MAXID" => true, "EV_SYSFLAGS" => true, + + // Removed in OpenBSD 7.7 (unused since 1991) + "ATF_COM" | "ATF_PERM" | "ATF_PUBL" | "ATF_USETRAILERS" => true, + _ => false, } }); @@ -4551,14 +4555,14 @@ fn test_linux(target: &str) { (struct_ == "iw_encode_ext" && field == "key") || // the `tcpi_snd_rcv_wscale` map two bitfield fields stored in a u8 (struct_ == "tcp_info" && field == "tcpi_snd_rcv_wscale") || - // the `tcpi_delivery_rate_app_limited` field is a bitfield on musl - (musl && struct_ == "tcp_info" && field == "tcpi_delivery_rate_app_limited") || - // the `tcpi_fast_open_client_fail` field is a bitfield on musl - (musl && struct_ == "tcp_info" && field == "tcpi_fast_open_client_fail") || + // the `tcpi_delivery_fastopen_bitfields` map two bitfield fields stored in a u8 + (musl && struct_ == "tcp_info" && field == "tcpi_delivery_fastopen_bitfields") || // either fsid_t or int[2] type (struct_ == "fanotify_event_info_fid" && field == "fsid") || // `handle` is a VLA - (struct_ == "fanotify_event_info_fid" && field == "handle") + (struct_ == "fanotify_event_info_fid" && field == "handle") || + // invalid application of 'sizeof' to incomplete type 'long unsigned int[]' + (musl && struct_ == "mcontext_t" && field == "__extcontext" && loongarch64) }); cfg.skip_roundtrip(move |s| match s { diff --git a/libc-test/semver/linux-gnu-loongarch64.txt b/libc-test/semver/linux-gnu-loongarch64.txt index dd1781a03504e..ec6595b79b76f 100644 --- a/libc-test/semver/linux-gnu-loongarch64.txt +++ b/libc-test/semver/linux-gnu-loongarch64.txt @@ -1,6 +1,21 @@ +KEYCTL_CAPABILITIES +KEYCTL_CAPS0_BIG_KEY +KEYCTL_CAPS0_CAPABILITIES +KEYCTL_CAPS0_DIFFIE_HELLMAN +KEYCTL_CAPS0_INVALIDATE +KEYCTL_CAPS0_MOVE +KEYCTL_CAPS0_PERSISTENT_KEYRINGS +KEYCTL_CAPS0_PUBLIC_KEY +KEYCTL_CAPS0_RESTRICT_KEYRING +KEYCTL_CAPS1_NS_KEYRING_NAME +KEYCTL_CAPS1_NS_KEY_TAG +KEYCTL_MOVE +MADV_SOFT_OFFLINE PTRACE_GETFPREGS PTRACE_GETFPXREGS PTRACE_GETREGS PTRACE_SETFPREGS PTRACE_SETFPXREGS PTRACE_SETREGS +PTRACE_SYSEMU +PTRACE_SYSEMU_SINGLESTEP diff --git a/libc-test/semver/linux-loongarch64.txt b/libc-test/semver/linux-loongarch64.txt index 2e2b66b83bf42..ebcd4bf93356f 100644 --- a/libc-test/semver/linux-loongarch64.txt +++ b/libc-test/semver/linux-loongarch64.txt @@ -40,26 +40,11 @@ BPF_XOR CIBAUD FICLONE FICLONERANGE -KEYCTL_CAPABILITIES -KEYCTL_CAPS0_BIG_KEY -KEYCTL_CAPS0_CAPABILITIES -KEYCTL_CAPS0_DIFFIE_HELLMAN -KEYCTL_CAPS0_INVALIDATE -KEYCTL_CAPS0_MOVE -KEYCTL_CAPS0_PERSISTENT_KEYRINGS -KEYCTL_CAPS0_PUBLIC_KEY -KEYCTL_CAPS0_RESTRICT_KEYRING -KEYCTL_CAPS1_NS_KEYRING_NAME -KEYCTL_CAPS1_NS_KEY_TAG -KEYCTL_MOVE -MADV_SOFT_OFFLINE MAP_SYNC NFT_MSG_DELOBJ NFT_MSG_GETOBJ NFT_MSG_GETOBJ_RESET NFT_MSG_NEWOBJ -PTRACE_SYSEMU -PTRACE_SYSEMU_SINGLESTEP SCM_TIMESTAMPNS SCM_WIFI_STATUS SIGSTKFLT diff --git a/libc-test/semver/solarish.txt b/libc-test/semver/solarish.txt index 076eb5988bcb7..f70409ed8ae88 100644 --- a/libc-test/semver/solarish.txt +++ b/libc-test/semver/solarish.txt @@ -16,6 +16,7 @@ LIO_WAIT LIO_WRITE PIPE_BUF SIGEV_PORT +_POSIX_VDISABLE aio_cancel aio_error aio_fsync diff --git a/src/unix/hurd/mod.rs b/src/unix/hurd/mod.rs index fe3ee55aa9e91..72e5bf76087b4 100644 --- a/src/unix/hurd/mod.rs +++ b/src/unix/hurd/mod.rs @@ -874,6 +874,7 @@ s! { pub release: [::c_char; _UTSNAME_LENGTH], pub version: [::c_char; _UTSNAME_LENGTH], pub machine: [::c_char; _UTSNAME_LENGTH], + pub domainname: [::c_char; _UTSNAME_LENGTH], } pub struct rlimit64 { diff --git a/src/unix/linux_like/linux/arch/generic/mod.rs b/src/unix/linux_like/linux/arch/generic/mod.rs index 63511e61f83e0..0d2514b60aa41 100644 --- a/src/unix/linux_like/linux/arch/generic/mod.rs +++ b/src/unix/linux_like/linux/arch/generic/mod.rs @@ -353,7 +353,10 @@ cfg_if! { pub const RLIMIT_RTPRIO: ::c_int = 14; pub const RLIMIT_RTTIME: ::c_int = 15; #[deprecated(since = "0.2.64", note = "Not stable across OS versions")] + #[cfg(not(target_arch = "loongarch64"))] pub const RLIM_NLIMITS: ::c_int = 15; + #[cfg(target_arch = "loongarch64")] + pub const RLIM_NLIMITS: ::c_int = 16; #[allow(deprecated)] #[deprecated(since = "0.2.64", note = "Not stable across OS versions")] pub const RLIMIT_NLIMITS: ::c_int = RLIM_NLIMITS; diff --git a/src/unix/linux_like/linux/musl/b64/loongarch64/mod.rs b/src/unix/linux_like/linux/musl/b64/loongarch64/mod.rs index de2477022950b..40bdb0aa42e3c 100644 --- a/src/unix/linux_like/linux/musl/b64/loongarch64/mod.rs +++ b/src/unix/linux_like/linux/musl/b64/loongarch64/mod.rs @@ -11,10 +11,6 @@ pub type __u64 = ::c_ulonglong; pub type __s64 = ::c_longlong; s! { - pub struct pthread_attr_t { - __size: [::c_ulong; 7], - } - pub struct stat { pub st_dev: ::dev_t, pub st_ino: ::ino_t, @@ -59,21 +55,6 @@ s! { __unused: [::c_int; 2], } - pub struct statfs { - pub f_type: ::c_long, - pub f_bsize: ::c_long, - pub f_blocks: ::fsblkcnt_t, - pub f_bfree: ::fsblkcnt_t, - pub f_bavail: ::fsblkcnt_t, - pub f_files: ::fsfilcnt_t, - pub f_ffree: ::fsfilcnt_t, - pub f_fsid: ::fsid_t, - pub f_namelen: ::c_long, - pub f_frsize: ::c_long, - pub f_flags: ::c_long, - pub f_spare: [::c_long; 4], - } - pub struct statfs64 { pub f_type: ::c_long, pub f_bsize: ::c_long, @@ -96,7 +77,7 @@ s! { pub cuid: ::uid_t, pub cgid: ::gid_t, pub mode: ::c_uint, - pub __seq: ::c_ushort, + pub __seq: ::c_int, __pad2: ::c_ushort, __unused1: ::c_ulong, __unused2: ::c_ulong, @@ -126,10 +107,10 @@ s! { #[repr(align(16))] pub struct mcontext_t { - pub __pc: ::c_ulonglong, - pub __gregs: [::c_ulonglong; 32], + pub __pc: ::c_ulong, + pub __gregs: [::c_ulong; 32], pub __flags: ::c_uint, - pub __extcontext: [::c_ulonglong; 0], + pub __extcontext: [::c_ulong; 0], } #[repr(align(8))] @@ -467,7 +448,7 @@ pub const SYS_futex_requeue: ::c_long = 456; pub const O_APPEND: ::c_int = 1024; pub const O_DIRECT: ::c_int = 0x4000; pub const O_DIRECTORY: ::c_int = 0x10000; -pub const O_LARGEFILE: ::c_int = 0; +pub const O_LARGEFILE: ::c_int = 0o0100000; pub const O_NOFOLLOW: ::c_int = 0x20000; pub const O_CREAT: ::c_int = 64; pub const O_EXCL: ::c_int = 128; @@ -476,7 +457,7 @@ pub const O_NONBLOCK: ::c_int = 2048; pub const O_SYNC: ::c_int = 1052672; pub const O_RSYNC: ::c_int = 1052672; pub const O_DSYNC: ::c_int = 4096; -pub const O_ASYNC: ::c_int = 4096; +pub const O_ASYNC: ::c_int = 0o20000; pub const SIGSTKSZ: ::size_t = 16384; pub const MINSIGSTKSZ: ::size_t = 4096; @@ -660,6 +641,7 @@ pub const ECHOPRT: ::tcflag_t = 0x00000400; pub const ECHOCTL: ::tcflag_t = 0x00000200; pub const ISIG: ::tcflag_t = 0x00000001; pub const ICANON: ::tcflag_t = 0x00000002; +pub const XCASE: ::tcflag_t = 0x00000004; pub const PENDIN: ::tcflag_t = 0x00004000; pub const NOFLSH: ::tcflag_t = 0x00000080; pub const CIBAUD: ::tcflag_t = 0o02003600000; diff --git a/src/unix/linux_like/linux/musl/mod.rs b/src/unix/linux_like/linux/musl/mod.rs index 2135fb588122f..3c13e3a3d131a 100644 --- a/src/unix/linux_like/linux/musl/mod.rs +++ b/src/unix/linux_like/linux/musl/mod.rs @@ -355,14 +355,16 @@ s! { pub tcpi_backoff: u8, pub tcpi_options: u8, /* - * FIXME(musl): when musl headers are more up to date + * FIXME(musl): enable on all targets once musl headers are more up to date + */ /// This contains the bitfields `tcpi_snd_wscale` and `tcpi_rcv_wscale`. /// Each is 4 bits. + #[cfg(target_arch = "loongarch64")] pub tcpi_snd_rcv_wscale: u8, /// This contains the bitfields `tcpi_delivery_rate_app_limited` (1 bit) and /// `tcpi_fastopen_client_fail` (2 bits). + #[cfg(target_arch = "loongarch64")] pub tcpi_delivery_fastopen_bitfields: u8, - */ pub tcpi_rto: u32, pub tcpi_ato: u32, pub tcpi_snd_mss: u32, @@ -407,9 +409,11 @@ s! { pub tcpi_bytes_retrans: u64, pub tcpi_dsack_dups: u32, pub tcpi_reord_seen: u32, - // FIXME(musl): to uncomment once CI musl is updated - //pub tcpi_rcv_ooopack: u32, - //pub tcpi_snd_wnd: u32, + // FIXME(musl): enable on all targets once CI musl is updated + #[cfg(target_arch = "loongarch64")] + pub tcpi_rcv_ooopack: u32, + #[cfg(target_arch = "loongarch64")] + pub tcpi_snd_wnd: u32, } } @@ -449,8 +453,17 @@ s_no_extra_traits! { pub ut_exit: __exit_status, #[cfg(target_env = "musl")] + #[cfg(not(target_arch = "loongarch64"))] pub ut_session: ::c_long, + #[cfg(target_env = "musl")] + #[cfg(target_arch = "loongarch64")] + pub ut_session: ::c_int, + + #[cfg(target_env = "musl")] + #[cfg(target_arch = "loongarch64")] + __ut_pad2: ::c_int, + #[cfg(target_env = "ohos")] #[cfg(target_endian = "little")] pub ut_session: ::c_int, @@ -712,7 +725,10 @@ pub const __SIZEOF_PTHREAD_MUTEXATTR_T: usize = 4; pub const __SIZEOF_PTHREAD_RWLOCKATTR_T: usize = 8; pub const __SIZEOF_PTHREAD_BARRIERATTR_T: usize = 4; +#[cfg(not(target_arch = "loongarch64"))] pub const CPU_SETSIZE: ::c_int = 128; +#[cfg(target_arch = "loongarch64")] +pub const CPU_SETSIZE: ::c_int = 1024; pub const PTRACE_TRACEME: ::c_int = 0; pub const PTRACE_PEEKTEXT: ::c_int = 1; diff --git a/src/unix/solarish/mod.rs b/src/unix/solarish/mod.rs index 1b978b17be720..c6fd956f5d3b5 100644 --- a/src/unix/solarish/mod.rs +++ b/src/unix/solarish/mod.rs @@ -1870,6 +1870,8 @@ pub const _PC_FILESIZEBITS: ::c_int = 67; pub const _PC_XATTR_ENABLED: ::c_int = 100; pub const _PC_XATTR_EXISTS: ::c_int = 101; +pub const _POSIX_VDISABLE: ::cc_t = 0; + pub const _SC_ARG_MAX: ::c_int = 1; pub const _SC_CHILD_MAX: ::c_int = 2; pub const _SC_CLK_TCK: ::c_int = 3;