Skip to content

Commit a548ae0

Browse files
committed
[Fuzzer][Seedpool] refactor
1 parent 98f71d6 commit a548ae0

File tree

2 files changed

+36
-30
lines changed

2 files changed

+36
-30
lines changed

src/fuzzer.ml

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -41,29 +41,34 @@ let log_new_points new_points =
4141
L.debug "No new coverage points"
4242
else L.debug "New coverage points"
4343

44-
let save_covering_mutant parent_llm seed =
44+
let save_if_cover parent_llm seed =
4545
if seed.Seedpool.CfgSeed.covers then
4646
let seed_name =
4747
Seedpool.Seed.name ~parent:(ALlvm.hash_llm parent_llm) seed
4848
in
4949
ALlvm.save_ll !Config.covers_dir seed_name seed.llm |> ignore
5050

51+
let compute_coverage_and_seed llm lines importants covset node_tbl distmap =
52+
let is_in_slice addr = is_in_slice addr node_tbl distmap in
53+
let trace = lines |> List.map int_of_string |> List.filter is_in_slice in
54+
let cov = trace |> AUtil.pairs |> Coverage.EdgeCoverage.of_list in
55+
let new_points = Coverage.EdgeCoverage.diff cov covset in
56+
let new_seed = Seedpool.Seed.make llm trace importants node_tbl distmap in
57+
(new_seed, new_points)
58+
5159
let evaluate_mutant parent_llm llm importants covset node_tbl distmap =
5260
let optim_res, _ = measure_optimizer_coverage llm in
53-
L.debug "Mutant: ";
54-
L.debug "%s" (ALlvm.string_of_llmodule llm);
61+
L.debug "Mutant:\n%s" (ALlvm.string_of_llmodule llm);
5562
match optim_res with
56-
| Error _ -> None
5763
| Ok lines ->
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
60-
let cov = trace |> AUtil.pairs |> Coverage.EdgeCoverage.of_list in
61-
let new_points = Coverage.EdgeCoverage.diff cov covset in
64+
let seed, new_points =
65+
compute_coverage_and_seed llm lines importants covset node_tbl distmap
66+
in
6267
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;
68+
save_if_cover parent_llm seed;
6569
let interesting = not (Coverage.EdgeCoverage.is_empty new_points) in
66-
if interesting then Some new_seed else None
70+
if interesting then Some seed else None
71+
| Error _ -> None
6772
| Assert _ -> None
6873

6974
let change_suffix filename suffix =
@@ -127,19 +132,22 @@ let gen_mutants mutator node_tbl distmap energy llm pool progress =
127132
in
128133
aux energy pool progress
129134

135+
let save_importants seed =
136+
AUtil.clean "importants";
137+
Out_channel.with_open_text "importants" (fun line ->
138+
Printf.fprintf line "%s" seed.Seedpool.CfgSeed.importants)
139+
130140
let run seed_pool node_tbl distmap llctx llset progress =
131141
(* generate and deduplicate seeds *)
132142
let mutator = mutate_seed llctx llset in
133143

134-
let rec campaign pool (progress : Progress.t) =
135-
let seed, pool_popped = Seedpool.pop pool in
136-
let energy = Seedpool.Seed.get_energy seed in
137-
let llm = Seedpool.Seed.llmodule seed in
138-
AUtil.clean "importants";
139-
Out_channel.with_open_text "importants" (fun line ->
140-
Printf.fprintf line "%s" seed.importants);
141-
L.debug "campaign: seed popped (energy: %d): %a" energy Seedpool.Seed.pp
142-
seed;
144+
let rec campaign pool progress =
145+
let open Seedpool in
146+
let seed, pool_popped = pop pool in
147+
let energy = Seed.get_energy seed in
148+
let llm = Seed.llmodule seed in
149+
save_importants seed;
150+
L.debug "campaign: seed popped (energy: %d): %a" energy Seed.pp seed;
143151

144152
assert (energy >= 0);
145153

src/seedpool.ml

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -437,16 +437,14 @@ let make llctx node_tbl (distmap : float Coverage.DistanceTable.t) =
437437
let* path, lines = can_optimize seed node_tbl distmap in
438438
L.debug "filter seed: %s " path;
439439
match ALlvm.read_ll llctx path with
440-
| Error _ -> None
441-
| Ok llm ->
442-
if check_llm_for_mutation llm then (
443-
let cov = lines |> List.map int_of_string in
444-
let llm = add_dummy_params llm in
445-
L.debug "filtered seeds: %s" (ALlvm.string_of_llmodule llm);
446-
seed_count := !seed_count + 1;
447-
L.debug "seed count: %d" !seed_count;
448-
Some (path, llm, cov))
449-
else None
440+
| Ok llm when check_llm_for_mutation llm ->
441+
let cov = lines |> List.map int_of_string in
442+
let llm = add_dummy_params llm in
443+
L.debug "filtered seeds: %s" (ALlvm.string_of_llmodule llm);
444+
seed_count := !seed_count + 1;
445+
L.debug "seed count: %d" !seed_count;
446+
Some (path, llm, cov)
447+
| _ -> None
450448
in
451449

452450
let seeds =

0 commit comments

Comments
 (0)