mirror of
https://github.com/AFLplusplus/AFLplusplus.git
synced 2025-06-08 08:11:34 +00:00
63 lines
2.5 KiB
Diff
63 lines
2.5 KiB
Diff
diff --git a/target/i386/translate.c b/target/i386/translate.c
|
|
index 0dd5fbe4..0d405fb6 100644
|
|
--- a/target/i386/translate.c
|
|
+++ b/target/i386/translate.c
|
|
@@ -32,6 +32,8 @@
|
|
#include "trace-tcg.h"
|
|
#include "exec/log.h"
|
|
|
|
+#include "../patches/afl-qemu-cpu-translate-inl.h"
|
|
+
|
|
#define PREFIX_REPZ 0x01
|
|
#define PREFIX_REPNZ 0x02
|
|
#define PREFIX_LOCK 0x04
|
|
@@ -1343,9 +1345,11 @@ static void gen_op(DisasContext *s1, int op, TCGMemOp ot, int d)
|
|
tcg_gen_atomic_fetch_add_tl(s1->cc_srcT, s1->A0, s1->T0,
|
|
s1->mem_index, ot | MO_LE);
|
|
tcg_gen_sub_tl(s1->T0, s1->cc_srcT, s1->T1);
|
|
+ afl_gen_compcov(s1->pc, s1->cc_srcT, s1->T1, ot, d == OR_EAX);
|
|
} else {
|
|
tcg_gen_mov_tl(s1->cc_srcT, s1->T0);
|
|
tcg_gen_sub_tl(s1->T0, s1->T0, s1->T1);
|
|
+ afl_gen_compcov(s1->pc, s1->T0, s1->T1, ot, d == OR_EAX);
|
|
gen_op_st_rm_T0_A0(s1, ot, d);
|
|
}
|
|
gen_op_update2_cc(s1);
|
|
@@ -1389,6 +1393,7 @@ static void gen_op(DisasContext *s1, int op, TCGMemOp ot, int d)
|
|
tcg_gen_mov_tl(cpu_cc_src, s1->T1);
|
|
tcg_gen_mov_tl(s1->cc_srcT, s1->T0);
|
|
tcg_gen_sub_tl(cpu_cc_dst, s1->T0, s1->T1);
|
|
+ afl_gen_compcov(s1->pc, s1->T0, s1->T1, ot, d == OR_EAX);
|
|
set_cc_op(s1, CC_OP_SUBB + ot);
|
|
break;
|
|
}
|
|
@@ -4508,6 +4513,8 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
|
|
rex_w = -1;
|
|
rex_r = 0;
|
|
|
|
+ AFL_QEMU_TARGET_I386_SNIPPET
|
|
+
|
|
next_byte:
|
|
b = x86_ldub_code(env, s);
|
|
/* Collect prefixes. */
|
|
@@ -5056,6 +5063,9 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
|
|
tcg_gen_ext16u_tl(s->T0, s->T0);
|
|
}
|
|
next_eip = s->pc - s->cs_base;
|
|
+ if (__afl_cmp_map && next_eip >= afl_start_code &&
|
|
+ next_eip < afl_end_code)
|
|
+ gen_helper_afl_cmplog_rtn(cpu_env);
|
|
tcg_gen_movi_tl(s->T1, next_eip);
|
|
gen_push_v(s, s->T1);
|
|
gen_op_jmp_v(s->T0);
|
|
@@ -6544,6 +6554,9 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
|
|
tval = (int16_t)insn_get(env, s, MO_16);
|
|
}
|
|
next_eip = s->pc - s->cs_base;
|
|
+ if (__afl_cmp_map && next_eip >= afl_start_code &&
|
|
+ next_eip < afl_end_code)
|
|
+ gen_helper_afl_cmplog_rtn(cpu_env);
|
|
tval += next_eip;
|
|
if (dflag == MO_16) {
|
|
tval &= 0xffff;
|