Expand description
x86-alignment-check is set ac flag in eflags on x86 or x86_64
§Features
- set
acflag bit into ON, its includedeflagsofx86. x86_64are supported too.#![no_std]
§Example 1: If your code is correctly controlled by alignment
First, add the following to Cargo.toml:
[target.'cfg(any(target_arch = "x86_64", target_arch = "x86"))'.dev-dependencies]
x86-alignment-check = "*"Second, enclose your test code with x86_alignment_check() as follows:
use x86_alignment_check::x86_alignment_check;
//
let old_flag = x86_alignment_check(true);
//
// here your test codes, processing anythings, a bus error may occur.
//
let _ = x86_alignment_check(old_flag);Finally execute cargo test
§Example 2: call_once style
let val = x86_alignment_check::ac_call_once(|| {
// here is alignment check
// processing anythings
// return value for assertion
1
});
assert_eq!(val, 1);For now, assertions such as assert_eq!() cannot be included inside FnOnce,
because of the rust runtime bug.
§Example 3: call_once style, but not alignment check
let val = x86_alignment_check::no_ac_call_once(|| {
// here is not alignment check
// processing anythings
// return value for assertion
1
});
assert_eq!(val, 1);Functions§
- ac_
call_ once - execute under alignment check
- no_
ac_ call_ once - execute under no alignment check
- x86_
alignment_ check - alignment check flag manipulation