X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=lib%2Fvirt_mem_ksyms.ml;h=8a38caec5b9fa05904c3b9e8b5fcdb76871f27ae;hb=30f9bc6cfcd5915fd64b00ec11e1329423d5a801;hp=438998303a2cb1ad1e7e1b517af5f7e3b59d5923;hpb=cf4669f31197abcfb14dee874a4b738c9c2e6483;p=virt-mem.git diff --git a/lib/virt_mem_ksyms.ml b/lib/virt_mem_ksyms.ml index 4389983..8a38cae 100644 --- a/lib/virt_mem_ksyms.ml +++ b/lib/virt_mem_ksyms.ml @@ -45,7 +45,7 @@ let common_ksyms = [ "schedule"; (* scheduler entry point *) ] -let find_kernel_symbols debug ({ mem = mem; domname = domname } as image) = +let find_kernel_symbols debug ({ mem = mem; domname = domname } as kimage) = (* Searching for string *) let common_ksyms_nul = List.map (sprintf "\000%s\000") common_ksyms in @@ -131,7 +131,7 @@ let find_kernel_symbols debug ({ mem = mem; domname = domname } as image) = List.iter ( fun (addr, size) -> eprintf "\t%Lx\t%Lx\t%!" addr size; - eprintf "first symbol: %s\n%!" + eprintf "first symbol: %S\n%!" (Virt_mem_mmap.get_string mem (Virt_mem_mmap.follow_pointer mem (Virt_mem_mmap.succ_long mem addr))) @@ -141,12 +141,12 @@ let find_kernel_symbols debug ({ mem = mem; domname = domname } as image) = (* Vote for the most popular symbol table candidate and from this * generate a function to look up ksyms. *) - let ksymmap = + let ksyms, have_ksyms = let freqs = frequency ksymtabs in match freqs with | [] -> eprintf (f_"%s: cannot find start of kernel symbol table\n") domname; - None + Ksymmap.empty, false | (_, (ksymtab_addr, ksymtab_size)) :: _ -> if debug then @@ -161,23 +161,23 @@ let find_kernel_symbols debug ({ mem = mem; domname = domname } as image) = (Int64.to_int ksymtab_size)) in (* Construct kernel symbol map. *) - let ksymmap = + let ksyms = let bits = bits_of_wordsize (Virt_mem_mmap.get_wordsize mem) in let e = Virt_mem_mmap.get_endian mem in - let rec loop ksymmap bs = + let rec loop ksyms bs = bitmatch bs with | { value : bits : endian(e); name_ptr : bits : endian(e); bs : -1 : bitstring } -> let name = Virt_mem_mmap.get_string mem name_ptr in - let ksymmap = Ksymmap.add name value ksymmap in - loop ksymmap bs + let ksyms = Ksymmap.add name value ksyms in + loop ksyms bs | { _ } -> - ksymmap + ksyms in loop Ksymmap.empty ksymtab in - Some ksymmap + ksyms, true in if debug then ( @@ -186,4 +186,4 @@ let find_kernel_symbols debug ({ mem = mem; domname = domname } as image) = (end_t -. start_t) ); - (image, ksymmap) + { kimage with ksyms = ksyms; have_ksyms = have_ksyms }