diff --git a/qemu/accel/tcg/translator.c b/qemu/accel/tcg/translator.c index 0ee09488..8afbc1fd 100644 --- a/qemu/accel/tcg/translator.c +++ b/qemu/accel/tcg/translator.c @@ -61,6 +61,7 @@ void translator_loop(const TranslatorOps *ops, DisasContextBase *db, /* Reset the temp count so that we can identify leaks */ tcg_clear_temp_count(); +#ifdef UNICORN_HAS_AFL if (uc->afl) { // UNICORN-AFL supports (and needs) multiple exits. uint64_t *exits = cpu->uc->exits; @@ -81,6 +82,7 @@ void translator_loop(const TranslatorOps *ops, DisasContextBase *db, } } } +#endif /* Unicorn: early check to see if the address of this block is * the "run until" address. */ diff --git a/qemu/softmmu/cpus.c b/qemu/softmmu/cpus.c index 242b0279..464e7b94 100644 --- a/qemu/softmmu/cpus.c +++ b/qemu/softmmu/cpus.c @@ -194,6 +194,7 @@ void resume_all_vcpus(struct uc_struct* uc) tb_flush_jmp_cache(cpu, uc->addr_end); } +#ifdef UNICORN_HAS_AFL if (uc->afl) { // UNICORN-AFL supports (and needs) multiple exits. uint64_t *exits = uc->exits; @@ -209,6 +210,7 @@ void resume_all_vcpus(struct uc_struct* uc) } } } +#endif cpu->created = false; } diff --git a/qemu/target/arm/translate-a64.c b/qemu/target/arm/translate-a64.c index d3c4d5f2..ef8ad7aa 100644 --- a/qemu/target/arm/translate-a64.c +++ b/qemu/target/arm/translate-a64.c @@ -14641,6 +14641,7 @@ static void aarch64_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu) DisasContext *dc = container_of(dcbase, DisasContext, base); CPUARMState *env = cpu->env_ptr; +#ifdef UNICORN_HAS_AFL if (dc->uc->afl) { // UNICORN-AFL supports (and needs) multiple exits. uint64_t *exits = dc->uc->exits; @@ -14655,6 +14656,7 @@ static void aarch64_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu) } } } +#endif // Unicorn: end address tells us to stop emulation if (dcbase->pc_next == dc->uc->addr_end) { diff --git a/qemu/target/arm/translate.c b/qemu/target/arm/translate.c index f7f77666..1c4827d7 100644 --- a/qemu/target/arm/translate.c +++ b/qemu/target/arm/translate.c @@ -11420,6 +11420,7 @@ static void arm_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu) return; } +#ifdef UNICORN_HAS_AFL if (dc->uc->afl) { // UNICORN-AFL supports (and needs) multiple exits. uint64_t *exits = dc->uc->exits; @@ -11434,6 +11435,7 @@ static void arm_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu) } } } +#endif // Unicorn: end address tells us to stop emulation if (dcbase->pc_next == dc->uc->addr_end) { diff --git a/qemu/target/i386/translate.c b/qemu/target/i386/translate.c index a82ec50d..fce8d914 100644 --- a/qemu/target/i386/translate.c +++ b/qemu/target/i386/translate.c @@ -4764,6 +4764,7 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu) s->uc = env->uc; +#ifdef UNICORN_HAS_AFL if (s->uc->afl) { // UNICORN-AFL supports (and needs) multiple exits. uint64_t *exits = s->uc->exits; @@ -4782,6 +4783,7 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu) } } } +#endif // Unicorn: end address tells us to stop emulation if (s->pc == s->uc->addr_end) { diff --git a/qemu/target/m68k/translate.c b/qemu/target/m68k/translate.c index 44929992..0dc9af2b 100644 --- a/qemu/target/m68k/translate.c +++ b/qemu/target/m68k/translate.c @@ -6325,6 +6325,7 @@ static void m68k_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu) CPUM68KState *env = cpu->env_ptr; uint16_t insn; +#ifdef UNICORN_HAS_AFL if (uc->afl) { // UNICORN-AFL supports (and needs) multiple exits. uint64_t *exits = uc->exits; @@ -6339,6 +6340,7 @@ static void m68k_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu) } } } +#endif // Unicorn: end address tells us to stop emulation if (dc->pc == uc->addr_end) { diff --git a/qemu/target/mips/translate.c b/qemu/target/mips/translate.c index c604056a..4660a2b3 100644 --- a/qemu/target/mips/translate.c +++ b/qemu/target/mips/translate.c @@ -30930,7 +30930,8 @@ static void mips_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs) bool hook_insn = false; is_slot = ctx->hflags & MIPS_HFLAG_BMASK; - + +#ifdef UNICORN_HAS_AFL if (uc->afl) { // UNICORN-AFL supports (and needs) multiple exits. uint64_t *exits = uc->exits; @@ -30946,6 +30947,7 @@ static void mips_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs) } } } +#endif // Unicorn: end address tells us to stop emulation if (ctx->base.pc_next == uc->addr_end) { diff --git a/qemu/target/ppc/translate.c b/qemu/target/ppc/translate.c index 8394ac5f..2e06bbb7 100644 --- a/qemu/target/ppc/translate.c +++ b/qemu/target/ppc/translate.c @@ -7625,6 +7625,7 @@ static void ppc_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs) LOG_DISAS("nip=" TARGET_FMT_lx " super=%d ir=%d\n", ctx->base.pc_next, ctx->mem_idx, (int)msr_ir); +#ifdef UNICORN_HAS_AFL if (uc->afl) { // UNICORN-AFL supports (and needs) multiple exits. uint64_t *exits = uc->exits; @@ -7639,6 +7640,7 @@ static void ppc_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs) } } } +#endif // Unicorn: end address tells us to stop emulation if (ctx->base.pc_next == uc->addr_end) { diff --git a/qemu/target/riscv/translate.c b/qemu/target/riscv/translate.c index 5ec8a16d..a1ef4139 100644 --- a/qemu/target/riscv/translate.c +++ b/qemu/target/riscv/translate.c @@ -849,6 +849,7 @@ static void riscv_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu) TCGOp *tcg_op, *prev_op = NULL; bool insn_hook = false; +#ifdef UNICORN_HAS_AFL if (uc->afl) { // UNICORN-AFL supports (and needs) multiple exits. uint64_t *exits = ctx->uc->exits; @@ -864,6 +865,7 @@ static void riscv_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu) } } } +#endif // Unicorn: end address tells us to stop emulation if (ctx->base.pc_next == ctx->uc->addr_end) { diff --git a/qemu/target/sparc/translate.c b/qemu/target/sparc/translate.c index 46061c32..6c45978c 100644 --- a/qemu/target/sparc/translate.c +++ b/qemu/target/sparc/translate.c @@ -5950,6 +5950,7 @@ static void sparc_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs) CPUSPARCState *env = cs->env_ptr; unsigned int insn; +#ifdef UNICORN_HAS_AFL if (uc->afl) { // UNICORN-AFL supports (and needs) multiple exits. uint64_t *exits = uc->exits; @@ -5967,6 +5968,7 @@ static void sparc_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs) } } } +#endif // Unicorn: end address tells us to stop emulation if (dc->pc == uc->addr_end) { diff --git a/uc.c b/uc.c index 4ee3c8f2..a4f438b8 100644 --- a/uc.c +++ b/uc.c @@ -771,7 +771,7 @@ uc_err uc_emu_start(uc_engine* uc, uint64_t begin, uint64_t until, uint64_t time return uc->invalid_error; } - +#ifdef UNICORN_HAS_AFL static inline uc_afl_ret uc_afl_forkserver_start(uc_engine *uc, uint64_t *exits, size_t exit_count) { /* @@ -922,6 +922,7 @@ static inline uc_afl_ret uc_afl_next(uc_engine *uc, bool crash_found) return UC_AFL_RET_NO_AFL; } +#endif UNICORN_EXPORT uc_err uc_afl_fuzz(