Your message dated Tue, 20 May 2025 17:46:30 +0000 with message-id <E1uHR2s-0048Og-2k@respighi.debian.org> and subject line unblock rust-rustix has caused the Debian Bug report #1106141, regarding unblock: rust-rustix/0.38.37-4 to be marked as done. This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the Bug report if necessary, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what this message is talking about, this may indicate a serious mail system misconfiguration somewhere. Please contact owner@bugs.debian.org immediately.) -- 1106141: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1106141 Debian Bug Tracking System Contact owner@bugs.debian.org with problems
--- Begin Message ---
- To: Debian Bug Tracking System <submit@bugs.debian.org>
- Subject: unblock: rust-rustix/0.38.37-4
- From: Fabian Grünbichler <debian@fabian.gruenbichler.email>
- Date: Tue, 20 May 2025 09:49:37 +0200
- Message-id: <[🔎] mwbzvefsqqwdv5uult4itznwpqgnrkazkbyh3kp7ae3kl5mirj@4lgdhb7fzxi2>
Package: release.debian.org Severity: normal X-Debbugs-Cc: rust-rustix@packages.debian.org Control: affects -1 + src:rust-rustix User: release.debian.org@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-4diff -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-maintainers@alioth-lists.debian.net> - 2022-2024 John Goerzen <jgoerzen@complete.org> + 2022-2025 Debian Rust Maintainers <pkg-rust-maintainers@alioth-lists.debian.net> + 2022-2025 John Goerzen <jgoerzen@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, flakyAttachment: signature.asc
Description: PGP signature
--- End Message ---
--- Begin Message ---
- To: 1106141-done@bugs.debian.org
- Subject: unblock rust-rustix
- From: Sebastian Ramacher <sramacher@respighi.debian.org>
- Date: Tue, 20 May 2025 17:46:30 +0000
- Message-id: <E1uHR2s-0048Og-2k@respighi.debian.org>
Unblocked.
--- End Message ---