#os #amd64 #x86 #x86-64 #ia32

nightly x86

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.

50 releases (29 breaking)

✓ Uses Rust 2018 edition

0.29.0 Dec 30, 2019
0.28.0 Nov 22, 2019
0.27.0 Oct 12, 2019
0.19.0 May 31, 2019
0.0.1 Mar 28, 2015

#10 in Operating systems

Download history 280/week @ 2019-09-26 459/week @ 2019-10-03 250/week @ 2019-10-10 346/week @ 2019-10-17 183/week @ 2019-10-24 344/week @ 2019-10-31 205/week @ 2019-11-07 236/week @ 2019-11-14 225/week @ 2019-11-21 402/week @ 2019-11-28 354/week @ 2019-12-05 772/week @ 2019-12-12 603/week @ 2019-12-19 575/week @ 2019-12-26 438/week @ 2020-01-02

1,595 downloads per month
Used in 13 crates (10 directly)

MIT license

2MB
6K SLoC

x86 / amd64 library Build Status Crates.io docs.rs/x86

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
  • 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.

Documentation

Dependencies