X-Git-Url: http://git.annexia.org/?p=virt-mem.git;a=blobdiff_plain;f=lib%2Fvirt_mem_kallsyms.ml;fp=lib%2Fvirt_mem_kallsyms.ml;h=9e6eccb6629a2ea067ee46a7c690aea17e44c0d2;hp=631bf615a35f214a66795cf5adaefbb994ca4d95;hb=82201a5312c3582daeb7215efd731f7e784d9edf;hpb=d2a3a6758dca234d0b201e8e965c0861517d37bb diff --git a/lib/virt_mem_kallsyms.ml b/lib/virt_mem_kallsyms.ml index 631bf61..9e6eccb 100644 --- a/lib/virt_mem_kallsyms.ml +++ b/lib/virt_mem_kallsyms.ml @@ -36,7 +36,8 @@ type kallsyms_compr = | Compressed of (string * Virt_mem_mmap.addr) list * Virt_mem_mmap.addr | Uncompressed of (string * Virt_mem_mmap.addr) list -let find_kallsyms debug ({ domname = domname; mem = mem } as image) ksymmap = +let find_kallsyms debug ({ domname = domname; mem = mem; ksyms = ksyms } + as kimage) = let start_t = gettimeofday () in (* Now try to find the /proc/kallsyms table. This is in an odd @@ -50,7 +51,7 @@ let find_kallsyms debug ({ domname = domname; mem = mem } as image) ksymmap = * more useful than the basic list of exports. *) let ksym_addrs = List.filter_map ( - fun ksym -> try Some (Ksymmap.find ksym ksymmap) with Not_found -> None + fun ksym -> try Some (Ksymmap.find ksym ksyms) with Not_found -> None ) Virt_mem_ksyms.common_ksyms in (* Search for those kernel addresses in the image. We're looking @@ -196,20 +197,20 @@ let find_kallsyms debug ({ domname = domname; mem = mem } as image) ksymmap = (* Vote for the most popular symbol table candidate and * enhance the function for looking up ksyms. *) - let ksymmap = + let ksyms, have_kallsyms = let freqs = frequency kallsymtabs in match freqs with | [] -> (* Can't find any kallsymtabs. *) - None + ksyms, false | (_, (_, _, _, Uncompressed names)) :: _ -> - let rec loop ksymmap = function + let rec loop ksyms = function | (name, value) :: names -> - loop (Ksymmap.add name value ksymmap) names - | [] -> ksymmap + loop (Ksymmap.add name value ksyms) names + | [] -> ksyms in - Some (loop ksymmap names) + loop ksyms names, true | (_, (start_addr, num_entries, names_addr, Compressed (compressed_names, markers_addr))) :: _ -> @@ -255,12 +256,12 @@ let find_kallsyms debug ({ domname = domname; mem = mem } as image) ksymmap = Some (name, sym_value) ) compressed_names in - let rec loop ksymmap = function + let rec loop ksyms = function | (name, value) :: names -> - loop (Ksymmap.add name value ksymmap) names - | [] -> ksymmap + loop (Ksymmap.add name value ksyms) names + | [] -> ksyms in - Some (loop ksymmap names) in + loop ksyms names, true in if debug then ( let end_t = gettimeofday () in @@ -268,4 +269,4 @@ let find_kallsyms debug ({ domname = domname; mem = mem } as image) ksymmap = (end_t -. start_t) ); - (image, ksymmap) + { kimage with ksyms = ksyms; have_kallsyms = have_kallsyms }