summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@baturin.org>2015-03-05 16:12:19 +0600
committerDaniil Baturin <daniil@baturin.org>2015-03-05 16:12:19 +0600
commit43cd6abd8bb1ed7503205ac90cd79204dd23ca16 (patch)
treecc394a23365c1138e268dfded6bc25ece51d41c8 /src
parent257335197da3d6bb49d97515c82a5bb4a8fe1831 (diff)
downloadhvinfo-43cd6abd8bb1ed7503205ac90cd79204dd23ca16.tar.gz
hvinfo-43cd6abd8bb1ed7503205ac90cd79204dd23ca16.zip
Add CPUID leaf 1 hypervisor presence check.
Diffstat (limited to 'src')
-rw-r--r--src/hypervisor_check.adb14
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;