From 43cd6abd8bb1ed7503205ac90cd79204dd23ca16 Mon Sep 17 00:00:00 2001 From: Daniil Baturin Date: Thu, 5 Mar 2015 16:12:19 +0600 Subject: Add CPUID leaf 1 hypervisor presence check. --- src/hypervisor_check.adb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src') diff --git a/src/hypervisor_check.adb b/src/hypervisor_check.adb index 6a68df0..ff89dc5 100644 --- a/src/hypervisor_check.adb +++ b/src/hypervisor_check.adb @@ -24,6 +24,20 @@ package body Hypervisor_Check is return Result; end String_of_U32; + -- Hypervisors should set the bit 31 of %ecx to 1 in CPUID leaf 1 + function Hypervisor_Present return Boolean is + Registers : CPUID_Registers; + ECX : Unsigned_32; + begin + Registers := CPUID (1); + ECX := Shift_Right (Registers(3), 31); + if (ecx and 1) = 1 then + return True; + else + return False; + end if; + end Hypervisor_Present; + function Get_Vendor_String return Unbounded_String is Vendor_String : Unbounded_String; Registers : CPUID_Registers; -- cgit v1.2.3