#![cfg(target_arch = "x86_64")] #![allow(dead_code)] use core::arch::x86_64::{__cpuid as do_cpuid, CpuidResult}; use core::arch::asm; fn safe_cpuid(leaf: u32) -> CpuidResult { return unsafe { do_cpuid(leaf) }; } pub fn get_processor_id() -> u32 { let cpuid_result = safe_cpuid(1); return cpuid_result.ebx >> 24; } pub fn halt() -> ! { loop { unsafe { asm!("cli"); asm!("hlt"); } } } pub fn wait_for_interrupt() -> () { unsafe { asm!("hlt"); } } pub fn breakpoint() -> () { unsafe { asm!("int3"); } }