Browse Source

Add ISA flag detection for s390x (#4101)

Adds support for s390x to check_compatible_with_isa_flag,
which fixes running the test suite on z15 and later.
pull/4098/head
Ulrich Weigand 3 years ago
committed by GitHub
parent
commit
e1f7b50a12
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 26
      crates/wasmtime/src/engine.rs

26
crates/wasmtime/src/engine.rs

@ -390,7 +390,8 @@ impl Engine {
} }
} }
let enabled; #[allow(unused_assignments)]
let mut enabled = None;
#[cfg(target_arch = "aarch64")] #[cfg(target_arch = "aarch64")]
{ {
@ -403,6 +404,24 @@ impl Engine {
}; };
} }
// There is no is_s390x_feature_detected macro yet, so for now
// we use getauxval from the libc crate directly.
#[cfg(all(target_arch = "s390x", target_os = "linux"))]
{
let v = unsafe { libc::getauxval(libc::AT_HWCAP) };
const HWCAP_S390X_VXRS_EXT2: libc::c_ulong = 32768;
enabled = match flag {
// There is no separate HWCAP bit for mie2, so assume
// that any machine with vxrs_ext2 also has mie2.
"has_vxrs_ext2" | "has_mie2" => Some((v & HWCAP_S390X_VXRS_EXT2) != 0),
// fall through to the very bottom to indicate that support is
// not enabled to test whether this feature is enabled on the
// host.
_ => None,
}
}
#[cfg(target_arch = "x86_64")] #[cfg(target_arch = "x86_64")]
{ {
enabled = match flag { enabled = match flag {
@ -429,11 +448,6 @@ impl Engine {
}; };
} }
#[cfg(not(any(target_arch = "aarch64", target_arch = "x86_64")))]
{
enabled = None;
}
match enabled { match enabled {
Some(true) => return Ok(()), Some(true) => return Ok(()),
Some(false) => { Some(false) => {

Loading…
Cancel
Save