Package: release.debian.org Severity: normal X-Debbugs-Cc: rust-rus...@packages.debian.org Control: affects -1 + src:rust-rustix User: release.debian....@packages.debian.org Usertags: unblock
Please unblock package rust-rustix [ Reason ] This fixes a bug exposed by rust-timerfd on arm64 (#1104704). rustix has a backend that makes use of Linux' vDSO, and thus requires changes from time to time when the kernel is updated. [ Impact ] rust-timerfd (and thus anything making use of it) would continue to be broken, other code attempting to use the vDSO parts of rustix might be broken as well. [ Tests ] A big part of the cherry-picked changes are tests for the feature that is fixed. autopkgtests caught an incomplete/broken cherry-pick that got fixed in a subsequent upload. [ Risks ] The code is not trivial, but it was broken before and the fixes are already part of an upstream release. [ Checklist ] [x] all changes are documented in the d/changelog [x] I reviewed all changes and I approve them [x] attach debdiff against the package in testing [ Other info ] There's a related binNMU request by the r.d.n folks: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1105033 unblock rust-rustix/0.38.37-4
diff -Nru rust-rustix-0.38.37/debian/changelog rust-rustix-0.38.37/debian/changelog --- rust-rustix-0.38.37/debian/changelog 2024-10-11 12:08:01.000000000 +0200 +++ rust-rustix-0.38.37/debian/changelog 2025-05-14 16:37:22.000000000 +0200 @@ -1,3 +1,27 @@ +rust-rustix (0.38.37-4) unstable; urgency=medium + + * Team upload. + * Package rustix 0.38.37 from crates.io using debcargo 2.7.8 + * one more vdso test fix + + -- Fabian Grünbichler <debian@fabian.gruenbichler.email> Wed, 14 May 2025 16:37:22 +0200 + +rust-rustix (0.38.37-3) unstable; urgency=medium + + * Team upload. + * Package rustix 0.38.37 from crates.io using debcargo 2.7.8 + * Fix vdso patch (Closes: #1105189) + + -- Fabian Grünbichler <debian@fabian.gruenbichler.email> Tue, 13 May 2025 21:13:04 +0200 + +rust-rustix (0.38.37-2) unstable; urgency=medium + + * Team upload. + * Package rustix 0.38.37 from crates.io using debcargo 2.7.8 + * Cherry-pick vDSO fixes (Closes: #1104704) + + -- Fabian Grünbichler <debian@fabian.gruenbichler.email> Fri, 09 May 2025 20:01:22 +0200 + rust-rustix (0.38.37-1) unstable; urgency=medium * Team upload. diff -Nru rust-rustix-0.38.37/debian/control rust-rustix-0.38.37/debian/control --- rust-rustix-0.38.37/debian/control 2024-10-11 12:08:01.000000000 +0200 +++ rust-rustix-0.38.37/debian/control 2025-05-14 16:37:22.000000000 +0200 @@ -2,8 +2,8 @@ Section: rust Priority: optional Build-Depends: debhelper-compat (= 13), - dh-sequence-cargo, - cargo:native <!nocheck>, + dh-sequence-cargo +Build-Depends-Arch: cargo:native <!nocheck>, rustc:native (>= 1.63) <!nocheck>, libstd-rust-dev <!nocheck>, librust-bitflags-2+std-dev (>= 2.4.0-~~) <!nocheck>, @@ -24,6 +24,7 @@ Standards-Version: 4.7.0 Vcs-Git: https://salsa.debian.org/rust-team/debcargo-conf.git [src/rustix] Vcs-Browser: https://salsa.debian.org/rust-team/debcargo-conf/tree/master/src/rustix +Homepage: https://github.com/bytecodealliance/rustix X-Cargo-Crate: rustix Rules-Requires-Root: no diff -Nru rust-rustix-0.38.37/debian/copyright.debcargo.hint rust-rustix-0.38.37/debian/copyright.debcargo.hint --- rust-rustix-0.38.37/debian/copyright.debcargo.hint 2024-10-11 12:08:01.000000000 +0200 +++ rust-rustix-0.38.37/debian/copyright.debcargo.hint 2025-05-14 16:37:22.000000000 +0200 @@ -18,8 +18,8 @@ Files: debian/* Copyright: - 2022-2024 Debian Rust Maintainers <pkg-rust-maintain...@alioth-lists.debian.net> - 2022-2024 John Goerzen <jgoer...@complete.org> + 2022-2025 Debian Rust Maintainers <pkg-rust-maintain...@alioth-lists.debian.net> + 2022-2025 John Goerzen <jgoer...@complete.org> License: Apache-2.0 WITH LLVM-exception or Apache-2.0 or MIT License: Apache-2.0 diff -Nru rust-rustix-0.38.37/debian/patches/fix-arm64-vdso.patch rust-rustix-0.38.37/debian/patches/fix-arm64-vdso.patch --- rust-rustix-0.38.37/debian/patches/fix-arm64-vdso.patch 1970-01-01 01:00:00.000000000 +0100 +++ rust-rustix-0.38.37/debian/patches/fix-arm64-vdso.patch 2025-05-14 16:37:22.000000000 +0200 @@ -0,0 +1,527 @@ +From 226840241248daf7bbf614677fcb4dc305aed20e Mon Sep 17 00:00:00 2001 +From: Dan Gohman <dev@sunfishcode.online> +Date: Mon, 13 Jan 2025 09:01:52 -0800 +Subject: [PATCH] Implement the `DT_GNU_HASH` mechanism for vDSO parsing. + (#1259) + +* Implement the `DT_GNU_HASH` mechanism for vDSO parsing. + +Linux recently [removed] the `DT_HASH` section from the aarch64 vDSO. To +continue to be able to read vDSOs, implement the `DT_GNU_HASH` section, +following the logic in [this patch]. + +[removed]: https://github.com/torvalds/linux/commit/48f6430505c0b0498ee9020ce3cf9558b1caaaeb +[this patch]: https://lkml.org/lkml/2024/12/6/828 + +* Fix compilation on s390x with experimental asm. + +* Fix pointer arithmetic on s390x. + +* Add comments. + +* Add more vDSO tests, and enable vDSO getcpu on s390x. +--- + src/backend/linux_raw/process/syscalls.rs | 6 +- + src/backend/linux_raw/vdso.rs | 291 +++++++++++++++++----- + src/backend/linux_raw/vdso_wrappers.rs | 33 ++- + 3 files changed, 255 insertions(+), 75 deletions(-) + +--- a/src/backend/linux_raw/process/syscalls.rs ++++ b/src/backend/linux_raw/process/syscalls.rs +@@ -41,7 +41,8 @@ + target_arch = "x86_64", + target_arch = "x86", + target_arch = "riscv64", +- target_arch = "powerpc64" ++ target_arch = "powerpc64", ++ target_arch = "s390x" + ))] + pub(crate) use crate::backend::vdso_wrappers::sched_getcpu; + +@@ -50,7 +51,8 @@ + target_arch = "x86_64", + target_arch = "x86", + target_arch = "riscv64", +- target_arch = "powerpc64" ++ target_arch = "powerpc64", ++ target_arch = "s390x" + )))] + #[inline] + pub(crate) fn sched_getcpu() -> usize { +--- a/src/backend/linux_raw/vdso.rs ++++ b/src/backend/linux_raw/vdso.rs +@@ -5,6 +5,10 @@ + //! with Creative Commons Zero License, version 1.0, + //! available at <https://creativecommons.org/publicdomain/zero/1.0/legalcode> + //! ++//! It also incorporates the patch at: ++//! <https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git/commit/tools/testing/selftests/vDSO?h=next&id=01587d80b04f29747b6fd6d766c3bfa632f14eb0>, ++//! with changes to fix the pointer arithmetic on s390x. ++//! + //! # Safety + //! + //! Parsing the vDSO involves a lot of raw pointer manipulation. This +@@ -34,6 +38,7 @@ + // Symbol table + symtab: *const Elf_Sym, + symstrings: *const u8, ++ gnu_hash: *const u32, + bucket: *const ElfHashEntry, + chain: *const ElfHashEntry, + nbucket: ElfHashEntry, +@@ -60,6 +65,16 @@ + h + } + ++fn gnu_hash(name: &CStr) -> u32 { ++ let mut h: u32 = 5381; ++ for s in name.to_bytes() { ++ h = h ++ .wrapping_add(h.wrapping_mul(32)) ++ .wrapping_add(u32::from(*s)); ++ } ++ h ++} ++ + /// Create a `Vdso` value by parsing the vDSO at the `sysinfo_ehdr` address. + fn init_from_sysinfo_ehdr() -> Option<Vdso> { + // SAFETY: The auxv initialization code does extensive checks to ensure +@@ -80,6 +95,7 @@ + pv_offset: 0, + symtab: null(), + symstrings: null(), ++ gnu_hash: null(), + bucket: null(), + chain: null(), + nbucket: 0, +@@ -159,6 +175,12 @@ + )? + .as_ptr(); + } ++ // linux-raw-sys too old / missing DT_GNU_HASH ++ 0x6fff_fef5 => { ++ vdso.gnu_hash = ++ check_raw_pointer::<u32>(vdso.addr_from_elf(d.d_un.d_ptr)? as *mut _)? ++ .as_ptr() ++ } + DT_VERSYM => { + vdso.versym = + check_raw_pointer::<u16>(vdso.addr_from_elf(d.d_un.d_ptr)? as *mut _)? +@@ -183,7 +205,10 @@ + // `check_raw_pointer` will have checked these pointers for null, + // however they could still be null if the expected dynamic table + // entries are absent. +- if vdso.symstrings.is_null() || vdso.symtab.is_null() || hash.is_null() { ++ if vdso.symstrings.is_null() ++ || vdso.symtab.is_null() ++ || (hash.is_null() && vdso.gnu_hash.is_null()) ++ { + return None; // Failed + } + +@@ -192,10 +217,21 @@ + } + + // Parse the hash table header. +- vdso.nbucket = *hash.add(0); +- //vdso.nchain = *hash.add(1); +- vdso.bucket = hash.add(2); +- vdso.chain = hash.add(vdso.nbucket as usize + 2); ++ if !vdso.gnu_hash.is_null() { ++ vdso.nbucket = ElfHashEntry::from(*vdso.gnu_hash); ++ // The bucket array is located after the header (4 uint32) and the bloom ++ // filter (size_t array of gnu_hash[2] elements). ++ vdso.bucket = vdso ++ .gnu_hash ++ .add(4) ++ .add(size_of::<c::size_t>() / 4 * *vdso.gnu_hash.add(2) as usize) ++ .cast(); ++ } else { ++ vdso.nbucket = *hash.add(0); ++ //vdso.nchain = *hash.add(1); ++ vdso.bucket = hash.add(2); ++ vdso.chain = hash.add(vdso.nbucket as usize + 2); ++ } + + // That's all we need. + Some(vdso) +@@ -261,49 +297,110 @@ + && (name == CStr::from_ptr(self.symstrings.add(aux.vda_name as usize).cast())) + } + ++ /// Check to see if the symbol is the one we're looking for. ++ /// ++ /// # Safety ++ /// ++ /// The raw pointers inside `self` must be valid. ++ unsafe fn check_sym( ++ &self, ++ sym: &Elf_Sym, ++ i: ElfHashEntry, ++ name: &CStr, ++ version: &CStr, ++ ver_hash: u32, ++ ) -> bool { ++ // Check for a defined global or weak function w/ right name. ++ // ++ // Accept `STT_NOTYPE` in addition to `STT_FUNC` for the symbol ++ // type, for compatibility with some versions of Linux on ++ // PowerPC64. See [this commit] in Linux for more background. ++ // ++ // [this commit]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/tools/testing/selftests/vDSO/parse_vdso.c?id=0161bd38c24312853ed5ae9a425a1c41c4ac674a ++ if ELF_ST_TYPE(sym.st_info) != STT_FUNC && ELF_ST_TYPE(sym.st_info) != STT_NOTYPE { ++ return false; ++ } ++ if ELF_ST_BIND(sym.st_info) != STB_GLOBAL && ELF_ST_BIND(sym.st_info) != STB_WEAK { ++ return false; ++ } ++ if name != CStr::from_ptr(self.symstrings.add(sym.st_name as usize).cast()) { ++ return false; ++ } ++ ++ // Check symbol version. ++ if !self.versym.is_null() ++ && !self.match_version(*self.versym.add(i as usize), version, ver_hash) ++ { ++ return false; ++ } ++ ++ true ++ } ++ + /// Look up a symbol in the vDSO. + pub(super) fn sym(&self, version: &CStr, name: &CStr) -> *mut c::c_void { + let ver_hash = elf_hash(version); +- let name_hash = elf_hash(name); + + // SAFETY: The pointers in `self` must be valid. + unsafe { +- let mut chain = *self +- .bucket +- .add((ElfHashEntry::from(name_hash) % self.nbucket) as usize); +- +- while chain != ElfHashEntry::from(STN_UNDEF) { +- let sym = &*self.symtab.add(chain as usize); +- +- // Check for a defined global or weak function w/ right name. +- // +- // Accept `STT_NOTYPE` in addition to `STT_FUNC` for the symbol +- // type, for compatibility with some versions of Linux on +- // PowerPC64. See [this commit] in Linux for more background. +- // +- // [this commit]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/tools/testing/selftests/vDSO/parse_vdso.c?id=0161bd38c24312853ed5ae9a425a1c41c4ac674a +- if (ELF_ST_TYPE(sym.st_info) != STT_FUNC && +- ELF_ST_TYPE(sym.st_info) != STT_NOTYPE) +- || (ELF_ST_BIND(sym.st_info) != STB_GLOBAL +- && ELF_ST_BIND(sym.st_info) != STB_WEAK) +- || sym.st_shndx == SHN_UNDEF +- || sym.st_shndx == SHN_ABS +- || ELF_ST_VISIBILITY(sym.st_other) != STV_DEFAULT +- || (name != CStr::from_ptr(self.symstrings.add(sym.st_name as usize).cast())) +- // Check symbol version. +- || (!self.versym.is_null() +- && !self.match_version(*self.versym.add(chain as usize), version, ver_hash)) +- { +- chain = *self.chain.add(chain as usize); +- continue; +- } +- +- let sum = self.addr_from_elf(sym.st_value).unwrap(); +- assert!( +- sum as usize >= self.load_addr as usize +- && sum as usize <= self.load_end as usize +- ); +- return sum as *mut c::c_void; ++ if !self.gnu_hash.is_null() { ++ let mut h1: u32 = gnu_hash(name); ++ ++ // Changes to fix the pointer arithmetic on s390x: cast ++ // `self.bucket` to `*const u32` here, because even though ++ // s390x's `ElfHashEntry` is 64-bit for `DT_HASH` tables, ++ // it uses 32-bit entries for `DT_GNU_HASH` tables. ++ let mut i = *self ++ .bucket ++ .cast::<u32>() ++ .add((ElfHashEntry::from(h1) % self.nbucket) as usize); ++ if i == 0 { ++ return null_mut(); ++ } ++ h1 |= 1; ++ // Changes to fix the pointer arithmetic on s390x: As above, ++ // cast `self.bucket` to `*const u32`. ++ let mut hashval = self ++ .bucket ++ .cast::<u32>() ++ .add(self.nbucket as usize) ++ .add((i - *self.gnu_hash.add(1)) as usize); ++ loop { ++ let sym: &Elf_Sym = &*self.symtab.add(i as usize); ++ let h2 = *hashval; ++ hashval = hashval.add(1); ++ if h1 == (h2 | 1) ++ && self.check_sym(sym, ElfHashEntry::from(i), name, version, ver_hash) ++ { ++ let sum = self.addr_from_elf(sym.st_value).unwrap(); ++ assert!( ++ sum as usize >= self.load_addr as usize ++ && sum as usize <= self.load_end as usize ++ ); ++ return sum as *mut c::c_void; ++ } ++ if (h2 & 1) != 0 { ++ break; ++ } ++ i += 1; ++ } ++ } else { ++ let mut i = *self ++ .bucket ++ .add((ElfHashEntry::from(elf_hash(name)) % self.nbucket) as usize); ++ while i != 0 { ++ let sym: &Elf_Sym = &*self.symtab.add(i as usize); ++ if sym.st_shndx != SHN_UNDEF && self.check_sym(sym, i, name, version, ver_hash) ++ { ++ let sum = self.addr_from_elf(sym.st_value).unwrap(); ++ assert!( ++ sum as usize >= self.load_addr as usize ++ && sum as usize <= self.load_end as usize ++ ); ++ return sum as *mut c::c_void; ++ } ++ i = *self.chain.add(i as usize); ++ } + } + } + +@@ -324,32 +421,103 @@ + } + } + ++// Disable on MIPS since QEMU on MIPS doesn't provide a vDSO. + #[cfg(linux_raw)] + #[test] +-#[ignore] // Until rustix is updated to the new vDSO format. ++#[cfg_attr(any(target_arch = "mips", target_arch = "mips64"), ignore)] + fn test_vdso() { + let vdso = Vdso::new().unwrap(); + assert!(!vdso.symtab.is_null()); + assert!(!vdso.symstrings.is_null()); + +- #[cfg(target_arch = "x86_64")] +- let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime")); +- #[cfg(target_arch = "arm")] +- let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime64")); +- #[cfg(target_arch = "aarch64")] +- let ptr = vdso.sym(cstr!("LINUX_2.6.39"), cstr!("__kernel_clock_gettime")); +- #[cfg(target_arch = "x86")] +- let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime64")); +- #[cfg(target_arch = "riscv64")] +- let ptr = vdso.sym(cstr!("LINUX_4.15"), cstr!("__vdso_clock_gettime")); +- #[cfg(target_arch = "powerpc64")] +- let ptr = vdso.sym(cstr!("LINUX_2.6.15"), cstr!("__kernel_clock_gettime")); +- #[cfg(target_arch = "s390x")] +- let ptr = vdso.sym(cstr!("LINUX_2.6.29"), cstr!("__kernel_clock_gettime")); +- #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] +- let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime64")); +- #[cfg(any(target_arch = "mips64", target_arch = "mips64r6"))] +- let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime")); ++ { ++ #[cfg(target_arch = "x86_64")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime")); ++ #[cfg(target_arch = "arm")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime64")); ++ #[cfg(target_arch = "aarch64")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.39"), cstr!("__kernel_clock_gettime")); ++ #[cfg(target_arch = "x86")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime64")); ++ #[cfg(target_arch = "riscv64")] ++ let ptr = vdso.sym(cstr!("LINUX_4.15"), cstr!("__vdso_clock_gettime")); ++ #[cfg(target_arch = "powerpc64")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.15"), cstr!("__kernel_clock_gettime")); ++ #[cfg(target_arch = "s390x")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.29"), cstr!("__kernel_clock_gettime")); ++ #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime64")); ++ #[cfg(any(target_arch = "mips64", target_arch = "mips64r6"))] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime")); + +- assert!(!ptr.is_null()); ++ assert!(!ptr.is_null()); ++ } ++ ++ { ++ #[cfg(target_arch = "x86_64")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_getres")); ++ #[cfg(target_arch = "arm")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_getres")); ++ #[cfg(target_arch = "aarch64")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.39"), cstr!("__kernel_clock_getres")); ++ #[cfg(target_arch = "x86")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_getres")); ++ #[cfg(target_arch = "riscv64")] ++ let ptr = vdso.sym(cstr!("LINUX_4.15"), cstr!("__vdso_clock_getres")); ++ #[cfg(target_arch = "powerpc64")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.15"), cstr!("__kernel_clock_getres")); ++ #[cfg(target_arch = "s390x")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.29"), cstr!("__kernel_clock_getres")); ++ #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_getres")); ++ #[cfg(any(target_arch = "mips64", target_arch = "mips64r6"))] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_getres")); ++ ++ assert!(!ptr.is_null()); ++ } ++ ++ { ++ #[cfg(target_arch = "x86_64")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_gettimeofday")); ++ #[cfg(target_arch = "arm")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_gettimeofday")); ++ #[cfg(target_arch = "aarch64")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.39"), cstr!("__kernel_gettimeofday")); ++ #[cfg(target_arch = "x86")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_gettimeofday")); ++ #[cfg(target_arch = "riscv64")] ++ let ptr = vdso.sym(cstr!("LINUX_4.15"), cstr!("__vdso_gettimeofday")); ++ #[cfg(target_arch = "powerpc64")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.15"), cstr!("__kernel_gettimeofday")); ++ #[cfg(target_arch = "s390x")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.29"), cstr!("__kernel_gettimeofday")); ++ #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_gettimeofday")); ++ #[cfg(any(target_arch = "mips64", target_arch = "mips64r6"))] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_gettimeofday")); ++ ++ assert!(!ptr.is_null()); ++ } ++ ++ #[cfg(any( ++ target_arch = "x86_64", ++ target_arch = "x86", ++ target_arch = "riscv64", ++ target_arch = "powerpc64", ++ target_arch = "s390x", ++ ))] ++ { ++ #[cfg(target_arch = "x86_64")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_getcpu")); ++ #[cfg(target_arch = "x86")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_getcpu")); ++ #[cfg(target_arch = "riscv64")] ++ let ptr = vdso.sym(cstr!("LINUX_4.15"), cstr!("__vdso_getcpu")); ++ #[cfg(target_arch = "powerpc64")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.15"), cstr!("__kernel_getcpu")); ++ #[cfg(target_arch = "s390x")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.29"), cstr!("__kernel_getcpu")); ++ ++ assert!(!ptr.is_null()); ++ } + } +--- a/src/backend/linux_raw/vdso_wrappers.rs ++++ b/src/backend/linux_raw/vdso_wrappers.rs +@@ -20,7 +20,8 @@ + target_arch = "x86_64", + target_arch = "x86", + target_arch = "riscv64", +- target_arch = "powerpc64" ++ target_arch = "powerpc64", ++ target_arch = "s390x", + ))] + use core::ffi::c_void; + use core::mem::transmute; +@@ -37,7 +38,8 @@ + target_arch = "x86_64", + target_arch = "x86", + target_arch = "riscv64", +- target_arch = "powerpc64" ++ target_arch = "powerpc64", ++ target_arch = "s390x" + ) + ), + feature = "time" +@@ -117,7 +119,8 @@ + target_arch = "x86_64", + target_arch = "x86", + target_arch = "riscv64", +- target_arch = "powerpc64" ++ target_arch = "powerpc64", ++ target_arch = "s390x", + ))] + #[inline] + pub(crate) fn sched_getcpu() -> usize { +@@ -268,7 +271,8 @@ + target_arch = "x86_64", + target_arch = "x86", + target_arch = "riscv64", +- target_arch = "powerpc64" ++ target_arch = "powerpc64", ++ target_arch = "s390x", + ))] + type GetcpuType = unsafe extern "C" fn(*mut u32, *mut u32, *mut c_void) -> c::c_int; + +@@ -294,7 +298,8 @@ + target_arch = "x86_64", + target_arch = "x86", + target_arch = "riscv64", +- target_arch = "powerpc64" ++ target_arch = "powerpc64", ++ target_arch = "s390x", + ))] + #[cold] + fn init_getcpu() -> GetcpuType { +@@ -324,7 +329,8 @@ + target_arch = "x86_64", + target_arch = "x86", + target_arch = "riscv64", +- target_arch = "powerpc64" ++ target_arch = "powerpc64", ++ target_arch = "s390x", + ))] + static mut GETCPU: AtomicPtr<Function> = AtomicPtr::new(null_mut()); + #[cfg(target_arch = "x86")] +@@ -393,7 +399,8 @@ + target_arch = "x86_64", + target_arch = "x86", + target_arch = "riscv64", +- target_arch = "powerpc64" ++ target_arch = "powerpc64", ++ target_arch = "s390x", + ))] + unsafe extern "C" fn rustix_getcpu_via_syscall( + cpu: *mut u32, +@@ -457,7 +464,8 @@ + target_arch = "x86_64", + target_arch = "x86", + target_arch = "riscv64", +- target_arch = "powerpc64" ++ target_arch = "powerpc64", ++ target_arch = "s390x", + ))] + { + GETCPU +@@ -544,7 +552,8 @@ + target_arch = "x86_64", + target_arch = "x86", + target_arch = "riscv64", +- target_arch = "powerpc64" ++ target_arch = "powerpc64", ++ target_arch = "s390x", + ))] + { + // Look up the platform-specific `getcpu` symbol as documented +@@ -559,11 +568,14 @@ + let ptr = vdso.sym(cstr!("LINUX_4.15"), cstr!("__vdso_getcpu")); + #[cfg(target_arch = "powerpc64")] + let ptr = vdso.sym(cstr!("LINUX_2.6.15"), cstr!("__kernel_getcpu")); ++ #[cfg(target_arch = "s390x")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.29"), cstr!("__kernel_getcpu")); + + #[cfg(any( + target_arch = "x86_64", + target_arch = "riscv64", +- target_arch = "powerpc64" ++ target_arch = "powerpc64", ++ target_arch = "s390x" + ))] + let ok = true; + diff -Nru rust-rustix-0.38.37/debian/patches/fix-vdso-test-i386.patch rust-rustix-0.38.37/debian/patches/fix-vdso-test-i386.patch --- rust-rustix-0.38.37/debian/patches/fix-vdso-test-i386.patch 1970-01-01 01:00:00.000000000 +0100 +++ rust-rustix-0.38.37/debian/patches/fix-vdso-test-i386.patch 2025-05-14 16:37:22.000000000 +0200 @@ -0,0 +1,94 @@ +From a92c89fe36379bd4ad14dd5d5905ca64dc6d9d85 Mon Sep 17 00:00:00 2001 +From: Dan Gohman <dev@sunfishcode.online> +Date: Tue, 4 Mar 2025 08:01:12 -0800 +Subject: [PATCH] Fix compatibility with older 32-bit kernels (#1374) + +FG: only pick hunk for: + +* Fix `test_vdso` to handle older kernel versions on x86 and powerpc. + +Signed-off-by: Fabian Grünbichler <debian@fabian.gruenbichler.email> + +--- + CHANGES.md | 16 ++ + Cargo.toml | 5 +- + src/backend/libc/event/syscalls.rs | 4 +- + src/backend/libc/thread/syscalls.rs | 25 ++- + src/backend/libc/winsock_c.rs | 2 +- + src/backend/linux_raw/event/syscalls.rs | 231 ++++++++++++++++------ + src/backend/linux_raw/fs/syscalls.rs | 63 +++++- + src/backend/linux_raw/runtime/syscalls.rs | 113 ++++++----- + src/backend/linux_raw/thread/syscalls.rs | 139 +++++++------ + src/backend/linux_raw/vdso.rs | 29 ++- + src/runtime.rs | 2 +- + src/thread/futex.rs | 48 +---- + src/timespec.rs | 21 +- + tests/event/epoll_timeout.rs | 23 ++- + tests/thread/futex.rs | 6 +- + 15 files changed, 486 insertions(+), 241 deletions(-) + +--- a/src/backend/linux_raw/vdso.rs ++++ b/src/backend/linux_raw/vdso.rs +@@ -425,6 +425,7 @@ + #[cfg(linux_raw)] + #[test] + #[cfg_attr(any(target_arch = "mips", target_arch = "mips64"), ignore)] ++#[allow(unused_variables)] + fn test_vdso() { + let vdso = Vdso::new().unwrap(); + assert!(!vdso.symtab.is_null()); +@@ -450,6 +451,11 @@ + #[cfg(any(target_arch = "mips64", target_arch = "mips64r6"))] + let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime")); + ++ // On PowerPC, "__kernel_clock_gettime64" isn't available in ++ // Linux < 5.11. ++ // On x86, "__vdso_clock_gettime64" isn't available in ++ // Linux < 5.3. ++ #[cfg(not(any(target_arch = "powerpc", target_arch = "x86")))] + assert!(!ptr.is_null()); + } + +@@ -473,6 +479,8 @@ + #[cfg(any(target_arch = "mips64", target_arch = "mips64r6"))] + let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_getres")); + ++ // Some versions of Linux appear to lack "__vdso_clock_getres" on x86. ++ #[cfg(not(target_arch = "x86"))] + assert!(!ptr.is_null()); + } + +@@ -496,6 +504,8 @@ + #[cfg(any(target_arch = "mips64", target_arch = "mips64r6"))] + let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_gettimeofday")); + ++ // Some versions of Linux appear to lack "__vdso_gettimeofday" on x86. ++ #[cfg(not(target_arch = "x86"))] + assert!(!ptr.is_null()); + } + +@@ -503,6 +513,7 @@ + target_arch = "x86_64", + target_arch = "x86", + target_arch = "riscv64", ++ target_arch = "powerpc", + target_arch = "powerpc64", + target_arch = "s390x", + ))] +@@ -513,11 +524,16 @@ + let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_getcpu")); + #[cfg(target_arch = "riscv64")] + let ptr = vdso.sym(cstr!("LINUX_4.15"), cstr!("__vdso_getcpu")); ++ #[cfg(target_arch = "powerpc")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.15"), cstr!("__kernel_getcpu")); + #[cfg(target_arch = "powerpc64")] + let ptr = vdso.sym(cstr!("LINUX_2.6.15"), cstr!("__kernel_getcpu")); + #[cfg(target_arch = "s390x")] + let ptr = vdso.sym(cstr!("LINUX_2.6.29"), cstr!("__kernel_getcpu")); + ++ // On PowerPC, "__kernel_getcpu" isn't available in 32-bit kernels. ++ // Some versions of Linux appear to lack "__vdso_getcpu" on x86. ++ #[cfg(not(any(target_arch = "powerpc", target_arch = "x86")))] + assert!(!ptr.is_null()); + } + } diff -Nru rust-rustix-0.38.37/debian/patches/series rust-rustix-0.38.37/debian/patches/series --- rust-rustix-0.38.37/debian/patches/series 2024-10-11 12:08:01.000000000 +0200 +++ rust-rustix-0.38.37/debian/patches/series 2025-05-14 16:37:22.000000000 +0200 @@ -2,3 +2,6 @@ drop-alloc.diff disable-benches.diff relax-dep.diff +vdso-check-for-missing-dt-hash.patch +fix-arm64-vdso.patch +fix-vdso-test-i386.patch diff -Nru rust-rustix-0.38.37/debian/patches/vdso-check-for-missing-dt-hash.patch rust-rustix-0.38.37/debian/patches/vdso-check-for-missing-dt-hash.patch --- rust-rustix-0.38.37/debian/patches/vdso-check-for-missing-dt-hash.patch 1970-01-01 01:00:00.000000000 +0100 +++ rust-rustix-0.38.37/debian/patches/vdso-check-for-missing-dt-hash.patch 2025-05-14 16:37:22.000000000 +0200 @@ -0,0 +1,199 @@ +From 83e769b98e8e820cd1f58385a7f975b39d2087d6 Mon Sep 17 00:00:00 2001 +From: Dan Gohman <dev@sunfishcode.online> +Date: Tue, 7 Jan 2025 12:02:11 -0800 +Subject: [PATCH] Check for a missing `DT_HASH` section in the VDSO parser + (#1254) + +* Check for a missing `DT_HASH` section in the VDSO parser + +Fix a missing check for a null hash table pointer, which can happen +if the vDSO lacks a `DT_HASH` entry. + +Also, incorporate the changes in the latest upstream version of thee +reference parse_vdso.c code. + +* Fix type differences on s390x. + +* Add more tests. + +* Remove an over-aggressive check. + +* Fix the name of getcpu on riscv64. + +FG: replace DT_GNU_HASH constant with value, can be removed once linux-raw-sys +>= 0.6.6 is available in Debian +Signed-off-by: Fabian Grünbichler <debian@fabian.gruenbichler.email> + +--- + src/backend/linux_raw/vdso.rs | 84 +++++++++++++++++++------- + src/backend/linux_raw/vdso_wrappers.rs | 2 +- + 2 files changed, 64 insertions(+), 22 deletions(-) + +--- a/src/backend/linux_raw/vdso.rs ++++ b/src/backend/linux_raw/vdso.rs +@@ -1,7 +1,7 @@ + //! Parse the Linux vDSO. + //! + //! The following code is transliterated from +-//! tools/testing/selftests/vDSO/parse_vdso.c in Linux 5.11, which is licensed ++//! tools/testing/selftests/vDSO/parse_vdso.c in Linux 6.12, which is licensed + //! with Creative Commons Zero License, version 1.0, + //! available at <https://creativecommons.org/publicdomain/zero/1.0/legalcode> + //! +@@ -20,6 +20,11 @@ + use core::ptr::{null, null_mut}; + use linux_raw_sys::elf::*; + ++#[cfg(target_arch = "s390x")] ++type ElfHashEntry = u64; ++#[cfg(not(target_arch = "s390x"))] ++type ElfHashEntry = u32; ++ + pub(super) struct Vdso { + // Load information + load_addr: *const Elf_Ehdr, +@@ -29,17 +34,19 @@ + // Symbol table + symtab: *const Elf_Sym, + symstrings: *const u8, +- bucket: *const u32, +- chain: *const u32, +- nbucket: u32, +- //nchain: u32, ++ bucket: *const ElfHashEntry, ++ chain: *const ElfHashEntry, ++ nbucket: ElfHashEntry, ++ //nchain: ElfHashEntry, + + // Version table + versym: *const u16, + verdef: *const Elf_Verdef, + } + +-// Straight from the ELF specification. ++/// Straight from the ELF specification...and then tweaked slightly, in order to ++/// avoid a few clang warnings. ++/// (And then translated to Rust). + fn elf_hash(name: &CStr) -> u32 { + let mut h: u32 = 0; + for b in name.to_bytes() { +@@ -91,11 +98,6 @@ + let mut found_vaddr = false; + for i in 0..hdr.e_phnum { + let phdr = &*pt.add(i as usize); +- if phdr.p_flags & PF_W != 0 { +- // Don't trust any vDSO that claims to be loading writable +- // segments into memory. +- return None; +- } + if phdr.p_type == PT_LOAD && !found_vaddr { + // The segment should be readable and executable, because it + // contains the symbol table and the function bodies. +@@ -129,7 +131,7 @@ + } + + // Fish out the useful bits of the dynamic table. +- let mut hash: *const u32 = null(); ++ let mut hash: *const ElfHashEntry = null(); + vdso.symstrings = null(); + vdso.symtab = null(); + vdso.versym = null(); +@@ -152,8 +154,10 @@ + .as_ptr(); + } + DT_HASH => { +- hash = check_raw_pointer::<u32>(vdso.addr_from_elf(d.d_un.d_ptr)? as *mut _)? +- .as_ptr(); ++ hash = check_raw_pointer::<ElfHashEntry>( ++ vdso.addr_from_elf(d.d_un.d_ptr)? as *mut _ ++ )? ++ .as_ptr(); + } + DT_VERSYM => { + vdso.versym = +@@ -176,8 +180,12 @@ + } + i = i.checked_add(1)?; + } +- // The upstream code checks `symstrings`, `symtab`, and `hash` for +- // null; here, `check_raw_pointer` has already done that. ++ // `check_raw_pointer` will have checked these pointers for null, ++ // however they could still be null if the expected dynamic table ++ // entries are absent. ++ if vdso.symstrings.is_null() || vdso.symtab.is_null() || hash.is_null() { ++ return None; // Failed ++ } + + if vdso.verdef.is_null() { + vdso.versym = null(); +@@ -260,16 +268,20 @@ + + // SAFETY: The pointers in `self` must be valid. + unsafe { +- let mut chain = *self.bucket.add((name_hash % self.nbucket) as usize); ++ let mut chain = *self ++ .bucket ++ .add((ElfHashEntry::from(name_hash) % self.nbucket) as usize); + +- while chain != STN_UNDEF { ++ while chain != ElfHashEntry::from(STN_UNDEF) { + let sym = &*self.symtab.add(chain as usize); + + // Check for a defined global or weak function w/ right name. + // +- // The reference parser in Linux's parse_vdso.c requires +- // symbols to have type `STT_FUNC`, but on powerpc64, the vDSO +- // uses `STT_NOTYPE`, so allow that too. ++ // Accept `STT_NOTYPE` in addition to `STT_FUNC` for the symbol ++ // type, for compatibility with some versions of Linux on ++ // PowerPC64. See [this commit] in Linux for more background. ++ // ++ // [this commit]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/tools/testing/selftests/vDSO/parse_vdso.c?id=0161bd38c24312853ed5ae9a425a1c41c4ac674a + if (ELF_ST_TYPE(sym.st_info) != STT_FUNC && + ELF_ST_TYPE(sym.st_info) != STT_NOTYPE) + || (ELF_ST_BIND(sym.st_info) != STB_GLOBAL +@@ -311,3 +323,33 @@ + self.base_plus(elf_addr.wrapping_add(self.pv_offset)) + } + } ++ ++#[cfg(linux_raw)] ++#[test] ++#[ignore] // Until rustix is updated to the new vDSO format. ++fn test_vdso() { ++ let vdso = Vdso::new().unwrap(); ++ assert!(!vdso.symtab.is_null()); ++ assert!(!vdso.symstrings.is_null()); ++ ++ #[cfg(target_arch = "x86_64")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime")); ++ #[cfg(target_arch = "arm")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime64")); ++ #[cfg(target_arch = "aarch64")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.39"), cstr!("__kernel_clock_gettime")); ++ #[cfg(target_arch = "x86")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime64")); ++ #[cfg(target_arch = "riscv64")] ++ let ptr = vdso.sym(cstr!("LINUX_4.15"), cstr!("__vdso_clock_gettime")); ++ #[cfg(target_arch = "powerpc64")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.15"), cstr!("__kernel_clock_gettime")); ++ #[cfg(target_arch = "s390x")] ++ let ptr = vdso.sym(cstr!("LINUX_2.6.29"), cstr!("__kernel_clock_gettime")); ++ #[cfg(any(target_arch = "mips", target_arch = "mips32r6"))] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime64")); ++ #[cfg(any(target_arch = "mips64", target_arch = "mips64r6"))] ++ let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_clock_gettime")); ++ ++ assert!(!ptr.is_null()); ++} +--- a/src/backend/linux_raw/vdso_wrappers.rs ++++ b/src/backend/linux_raw/vdso_wrappers.rs +@@ -556,7 +556,7 @@ + #[cfg(target_arch = "x86")] + let ptr = vdso.sym(cstr!("LINUX_2.6"), cstr!("__vdso_getcpu")); + #[cfg(target_arch = "riscv64")] +- let ptr = vdso.sym(cstr!("LINUX_4.15"), cstr!("__kernel_getcpu")); ++ let ptr = vdso.sym(cstr!("LINUX_4.15"), cstr!("__vdso_getcpu")); + #[cfg(target_arch = "powerpc64")] + let ptr = vdso.sym(cstr!("LINUX_2.6.15"), cstr!("__kernel_getcpu")); + diff -Nru rust-rustix-0.38.37/debian/tests/control rust-rustix-0.38.37/debian/tests/control --- rust-rustix-0.38.37/debian/tests/control 2024-10-11 12:08:01.000000000 +0200 +++ rust-rustix-0.38.37/debian/tests/control 2025-05-14 16:37:22.000000000 +0200 @@ -1,199 +1,199 @@ Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --all-features Features: test-name=rust-rustix:@ -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features all-apis Features: test-name=librust-rustix-dev:all-apis -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features alloc Features: test-name=librust-rustix-dev:alloc -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features cc Features: test-name=librust-rustix-dev:cc -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features compiler_builtins Features: test-name=librust-rustix-dev:compiler_builtins -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features core Features: test-name=librust-rustix-dev:core -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets Features: test-name=librust-rustix-dev:default -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features event Features: test-name=librust-rustix-dev:event -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features fs Features: test-name=librust-rustix-dev:fs -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features io_uring Features: test-name=librust-rustix-dev:io_uring -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features itoa Features: test-name=librust-rustix-dev:itoa -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features libc Features: test-name=librust-rustix-dev:libc -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features libc-extra-traits Features: test-name=librust-rustix-dev:libc-extra-traits -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features libc_errno Features: test-name=librust-rustix-dev:libc_errno -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features linux_4_11 Features: test-name=librust-rustix-dev:linux_4_11 -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features linux_latest Features: test-name=librust-rustix-dev:linux_latest -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features mm Features: test-name=librust-rustix-dev:mm -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features mount Features: test-name=librust-rustix-dev:mount -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features net Features: test-name=librust-rustix-dev:net -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features once_cell Features: test-name=librust-rustix-dev:once_cell -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features param Features: test-name=librust-rustix-dev:param -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features pipe Features: test-name=librust-rustix-dev:pipe -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features process Features: test-name=librust-rustix-dev:process -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features procfs Features: test-name=librust-rustix-dev:procfs -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features pty Features: test-name=librust-rustix-dev:pty -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features rand Features: test-name=librust-rustix-dev:rand -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features runtime Features: test-name=librust-rustix-dev:runtime -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features rustc-dep-of-std Features: test-name=librust-rustix-dev:rustc-dep-of-std -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features shm Features: test-name=librust-rustix-dev:shm -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features std Features: test-name=librust-rustix-dev:std -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features stdio Features: test-name=librust-rustix-dev:stdio -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features system Features: test-name=librust-rustix-dev:system -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features termios Features: test-name=librust-rustix-dev:termios -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features thread Features: test-name=librust-rustix-dev:thread -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features time Features: test-name=librust-rustix-dev:time -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features try_close Features: test-name=librust-rustix-dev:try_close -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features use-explicitly-provided-auxv Features: test-name=librust-rustix-dev:use-explicitly-provided-auxv -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features use-libc Features: test-name=librust-rustix-dev:use-libc -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features --features use-libc-auxv Features: test-name=librust-rustix-dev:use-libc-auxv -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky Test-Command: /usr/share/cargo/bin/cargo-auto-test rustix 0.38.37 --all-targets --no-default-features Features: test-name=librust-rustix-dev: -Depends: dh-cargo (>= 31), rustc:native (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ +Depends: dh-cargo (>= 31), rustc (>= 1.63), librust-errno-0.3-dev (>= 0.3.8-~~), librust-flate2-1+default-dev, librust-libc-0.2+default-dev (>= 0.2.156-~~), librust-memoffset-0.8+default-dev, librust-serial-test-2+default-dev, librust-static-assertions-1+default-dev (>= 1.1.0-~~), librust-tempfile-3+default-dev (>= 3.5.0-~~), @ Restrictions: allow-stderr, skip-not-installable, flaky
signature.asc
Description: PGP signature