diff options
author | Daniil Baturin <daniil@baturin.org> | 2015-03-05 16:12:19 +0600 |
---|---|---|
committer | Daniil Baturin <daniil@baturin.org> | 2015-03-05 16:12:19 +0600 |
commit | 43cd6abd8bb1ed7503205ac90cd79204dd23ca16 (patch) | |
tree | cc394a23365c1138e268dfded6bc25ece51d41c8 /src | |
parent | 257335197da3d6bb49d97515c82a5bb4a8fe1831 (diff) | |
download | hvinfo-43cd6abd8bb1ed7503205ac90cd79204dd23ca16.tar.gz hvinfo-43cd6abd8bb1ed7503205ac90cd79204dd23ca16.zip |
Add CPUID leaf 1 hypervisor presence check.
Diffstat (limited to 'src')
-rw-r--r-- | src/hypervisor_check.adb | 14 |
1 files changed, 14 insertions, 0 deletions
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; |