@@ -31,35 +31,37 @@ let measure_optimizer_coverage llm =
3131 AUtil. clean optimized_ir_filename;
3232 (optimization_res, validation_res)
3333
34- let evaluate_mutant parent_llm llm importants covset node_tbl distance_map =
34+ let is_in_slice addr node_tbl distmap =
35+ if ! Config. coverage = Config.FuzzingMode. Sliced_cfg then
36+ Coverage. node_of_addr node_tbl distmap addr |> Option. is_some
37+ else true
38+
39+ let log_new_points new_points =
40+ if Coverage.EdgeCoverage. is_empty new_points then
41+ L. debug " No new coverage points"
42+ else L. debug " New coverage points"
43+
44+ let save_covering_mutant parent_llm seed =
45+ if seed.Seedpool.CfgSeed. covers then
46+ let seed_name =
47+ Seedpool.Seed. name ~parent: (ALlvm. hash_llm parent_llm) seed
48+ in
49+ ALlvm. save_ll ! Config. covers_dir seed_name seed.llm |> ignore
50+
51+ let evaluate_mutant parent_llm llm importants covset node_tbl distmap =
3552 let optim_res, _ = measure_optimizer_coverage llm in
3653 L. debug " Mutant: " ;
3754 L. debug " %s" (ALlvm. string_of_llmodule llm);
3855 match optim_res with
3956 | Error _ -> None
4057 | Ok lines ->
41- let in_slice =
42- match ! Config. coverage with
43- | Config.FuzzingMode. Sliced_cfg ->
44- fun addr ->
45- Coverage. sliced_cfg_node_of_addr node_tbl distance_map addr
46- |> Option. is_some
47- | _ -> fun _ -> true
48- in
49- let trace = lines |> List. map int_of_string |> List. filter in_slice in
58+ let is_in_slice addr = is_in_slice addr node_tbl distmap in
59+ let trace = lines |> List. map int_of_string |> List. filter is_in_slice in
5060 let cov = trace |> AUtil. pairs |> Coverage.EdgeCoverage. of_list in
5161 let new_points = Coverage.EdgeCoverage. diff cov covset in
52- if Coverage.EdgeCoverage. is_empty new_points then
53- prerr_endline " No new coverage points"
54- else prerr_endline " New coverage points" ;
55- let (new_seed : Seedpool.Seed.t ) =
56- Seedpool.Seed. make llm [ trace ] importants node_tbl distance_map
57- in
58- (if new_seed.covers then
59- let seed_name =
60- Seedpool.Seed. name ~parent: (ALlvm. hash_llm parent_llm) new_seed
61- in
62- ALlvm. save_ll ! Config. covers_dir seed_name llm |> ignore);
62+ log_new_points new_points;
63+ let new_seed = Seedpool.Seed. make llm trace importants node_tbl distmap in
64+ save_covering_mutant parent_llm new_seed;
6365 let interesting = not (Coverage.EdgeCoverage. is_empty new_points) in
6466 if interesting then Some new_seed else None
6567 | Assert _ -> None
@@ -97,13 +99,14 @@ let update_progress progress seed =
9799 let cov_set = Seedpool.Seed. edge_cov seed in
98100 progress |> Progress. add_cov cov_set |> Progress. inc_gen
99101
100- let rec try_gen_mutant mutator node_tbl distmap energy llm ( prog : Progress.t ) =
102+ let rec try_gen_mutant mutator node_tbl distmap energy llm prog =
101103 if energy = 0 then None
102104 else
103105 match mutator llm with
104106 | Some (mutant , importants ) -> (
105107 match
106- evaluate_mutant llm mutant importants prog.cov_sofar node_tbl distmap
108+ evaluate_mutant llm mutant importants prog.Progress. cov_sofar node_tbl
109+ distmap
107110 with
108111 | Some new_seed -> Some new_seed
109112 | None ->
0 commit comments