virt-ps working again.
[virt-mem.git] / lib / virt_mem.ml
index c00face..a65d95e 100644 (file)
@@ -552,7 +552,7 @@ Possibly the '-T' command line parameter was used inconsistently.");
            let { ksyms = ksyms; have_ksyms = have_ksyms; utsname = utsname;
                  addrmap = addrmap } = kimage in
            match have_ksyms, utsname with
-           | true, Some { uts_kernel_release = kversion } ->
+           | true, Some { uts_kernel_release = kernel_version } ->
                let kimage = ref kimage in
                let load struct_name addr size =
                  if debug then
@@ -564,10 +564,20 @@ Possibly the '-T' command line parameter was used inconsistently.");
                  let bits = Virt_mem_mmap.get_bytes !kimage.mem addr size in
                  Bitstring.bitstring_of_string bits
                in
-               let init_task = Ksymmap.find "init_task" ksyms in
                let addrmap =
-                 Kernel.task_struct_follower kversion load addrmap init_task in
-               { !kimage with addrmap = addrmap }
+                 try
+                   let init_task = Ksymmap.find "init_task" ksyms in
+                   Some (Kernel.task_struct_follower kernel_version
+                           load addrmap init_task)
+                 with
+                   Not_found ->
+                     eprintf (f_"%s: cannot find init_task symbol in kernel image.\n") !kimage.domname;
+                     None in
+               (match addrmap with
+                | None -> !kimage
+                | Some addrmap ->
+                    { !kimage with addrmap = addrmap; have_tasks = true }
+               )
            | _, _ -> kimage
          ) in
 
@@ -578,7 +588,7 @@ Possibly the '-T' command line parameter was used inconsistently.");
            let { ksyms = ksyms; have_ksyms = have_ksyms; utsname = utsname;
                  addrmap = addrmap } = kimage in
            match have_ksyms, utsname with
-           | true, Some { uts_kernel_release = kversion } ->
+           | true, Some { uts_kernel_release = kernel_version } ->
                let kimage = ref kimage in
                let load struct_name addr size =
                  if debug then
@@ -593,7 +603,8 @@ Possibly the '-T' command line parameter was used inconsistently.");
                let addrmap =
                  try
                    let dev_base = Ksymmap.find "dev_base" ksyms in
-                   Kernel.net_device_follower kversion load addrmap dev_base
+                   Some (Kernel.net_device_follower kernel_version
+                           load addrmap dev_base)
                  with Not_found ->
                    try
                      let dev_base_head = Ksymmap.find "dev_base_head" ksyms in
@@ -602,11 +613,16 @@ Possibly the '-T' command line parameter was used inconsistently.");
                    with Not_found ->
                      try
                        let init_net = Ksymmap.find "init_net" ksyms in
-                       Kernel.net_follower kversion load addrmap init_net
+                       Some (Kernel.net_follower kernel_version
+                               load addrmap init_net)
                      with Not_found ->
                        eprintf (f_"%s: cannot find dev_base, dev_base_head or init_net symbols in kernel image.\n") !kimage.domname;
-                       addrmap in
-               { !kimage with addrmap = addrmap }
+                       None in
+               (match addrmap with
+                | None -> !kimage
+                | Some addrmap ->
+                    { !kimage with addrmap = addrmap; have_net_devices = true }
+               )
            | _, _ -> kimage
          ) in