74 releases (breaking)
0.52.0 | Oct 18, 2022 |
---|---|
0.51.0 | Jul 15, 2022 |
0.50.0 | Jun 30, 2022 |
0.47.0 | Mar 3, 2022 |
0.0.1 | Mar 28, 2015 |
#64 in Hardware support
52,924 downloads per month
Used in 47 crates
(29 directly)
2MB
8K
SLoC
Contains (Zip file, 670KB) x86data/perfmon_data/TMA_Metrics.xlsx
x86 / amd64 library
Library to program x86 (amd64) hardware. Contains x86 specific data structure descriptions, data-tables, as well as convenience function to call assembly instructions typically not exposed in higher level languages.
Currently supports:
- I/O registers
- Control registers
- Debug registers
- MSR registers
- Segmentation
- Descriptor-tables (GDT, LDT, IDT)
- IA32-e page table layout
- Interrupts (with xAPIC and x2APIC, I/O APIC drivers)
- Task state
- Performance counter information
- Intel SGX: Software Guard Extensions
- Random numbers (rdrand, rdseed)
- Time (rdtsc, rdtscp)
- Querying CPUID (uses raw_cpuid library)
- Transactional memory (Intel RTM and HLE)
- Virtualization (Intel VMX)
This library depends on libcore so it can be used in kernel level code.
Testing
We use two forms of tests for the crate. Regular tests with #[test]
that run in a ring 3 process
and #[x86test]
tests that run in a VM (and therefore grant a privileged execution environment, see x86test).
# To execute x86tests run:
$ RUSTFLAGS="-C relocation-model=dynamic-no-pic -C code-model=kernel" RUST_BACKTRACE=1 cargo test --features vmtest
# To execute the regular tests, run:
$ cargo test --features utest
Features
- performance-counter: Includes the performance counter information. Note this feature can increase compilation time significantly due to large, statically generated hash-tables that are included in the source. Therefore, it is disabled by default.