Skip to content

Commit

Permalink
Fix pool (mis)compile on AArch64
Browse files Browse the repository at this point in the history
The LLSC probe in `build.rs` checks for the presence of the
`clrex` instruction and assumes the target also has both `ldrex`
and `strex`.

In AArch64 `clrex` is a known mnemonic but `ldrex` and `strex`
are not. This caused the `arm_llsc` feature (and subsequently the
oiik module) to be included in the crate for AArc64 which is invalid.
  • Loading branch information
rjsberry authored and newAM committed Oct 20, 2023
1 parent 357f82c commit 8cdd497
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,13 @@ fn main() -> Result<(), Box<dyn Error>> {
}
}

match compile_probe(ARM_LLSC_PROBE) {
Some(status) if status.success() => println!("cargo:rustc-cfg=arm_llsc"),
_ => {}
// AArch64 instruction set contains `clrex` but not `ldrex` or `strex`; the
// probe will succeed when we already know to deny this target from LLSC.
if !target.starts_with("aarch64") {
match compile_probe(ARM_LLSC_PROBE) {
Some(status) if status.success() => println!("cargo:rustc-cfg=arm_llsc"),
_ => {}
}
}

Ok(())
Expand Down

0 comments on commit 8cdd497

Please sign in to comment.