| 573 | } |
| 574 | |
| 575 | pub fn init(&mut self, cpu: &mut Cpu) { |
| 576 | if let Some(reg) = cpu.arch.sleigh.get_varnode("afl.prev_pc") { |
| 577 | tracing::info!("Edge hit counts (afl.prev_pc) masking enabled for interrupts"); |
| 578 | self.masking = CovMasking::HitCounts { prev_pc_var: reg }; |
| 579 | } |
| 580 | self.xpsr = |
| 581 | cpu.arch.sleigh.get_varnode("xpsr").expect("xpsr must be configured before init"); |
| 582 | |
| 583 | if let Some(hook) = cpu |
| 584 | .get_hooks() |
| 585 | .iter_mut() |
| 586 | .position(|x| x.data_mut::<icicle_fuzzing::coverage::EdgeHookData>().is_some()) |
| 587 | { |
| 588 | self.masking = CovMasking::ExactEdgeCov { hook: hook as pcode::HookId } |
| 589 | } |
| 590 | } |
| 591 | |
| 592 | /// Handles code associated with pushing the stack frame associated with an interrupt entry. |
| 593 | /// |