Skip to content

Commit 125b77c

Browse files
authored
Support native TCG vector read/write operations in LibAFL hooks (#64)
* Support rw vector operations
1 parent 4627398 commit 125b77c

File tree

2 files changed

+35
-7
lines changed

2 files changed

+35
-7
lines changed

tcg/tcg-op-ldst.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@
3131
#include "exec/plugin-gen.h"
3232
#include "tcg-internal.h"
3333

34+
//// --- Begin LibAFL code ---
35+
36+
void libafl_gen_read(TCGTemp *addr, MemOpIdx oi);
37+
void libafl_gen_write(TCGTemp *addr, MemOpIdx oi);
38+
39+
//// --- End LibAFL code ---
3440

3541
static void check_max_alignment(unsigned a_bits)
3642
{
@@ -175,13 +181,6 @@ plugin_gen_mem_callbacks(TCGv_i64 copy_addr, TCGTemp *orig_addr, MemOpIdx oi,
175181
#endif
176182
}
177183

178-
//// --- Begin LibAFL code ---
179-
180-
void libafl_gen_read(TCGTemp *addr, MemOpIdx oi);
181-
void libafl_gen_write(TCGTemp *addr, MemOpIdx oi);
182-
183-
//// --- End LibAFL code ---
184-
185184
static void tcg_gen_qemu_ld_i32_int(TCGv_i32 val, TCGTemp *addr,
186185
TCGArg idx, MemOp memop)
187186
{

tcg/tcg-op-vec.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@
2424
#include "tcg/tcg-mo.h"
2525
#include "tcg-internal.h"
2626

27+
//// --- Begin LibAFL code ---
28+
29+
void libafl_gen_read(TCGTemp *addr, MemOpIdx oi);
30+
void libafl_gen_write(TCGTemp *addr, MemOpIdx oi);
31+
32+
//// --- End LibAFL code ---
33+
2734
/*
2835
* Vector optional opcode tracking.
2936
* Except for the basic logical operations (and, or, xor), and
@@ -276,12 +283,34 @@ static void vec_gen_ldst(TCGOpcode opc, TCGv_vec r, TCGv_ptr b, TCGArg o)
276283

277284
void tcg_gen_ld_vec(TCGv_vec r, TCGv_ptr b, TCGArg o)
278285
{
286+
//// --- Begin LibAFL code ---
287+
TCGArg ri = tcgv_vec_arg(r);
288+
TCGTemp *rt = arg_temp(ri);
289+
TCGType type = rt->base_type;
290+
MemOpIdx oi = make_memop_idx((type - TCG_TYPE_V64) + MO_64, 0);
291+
//// --- End LibAFL code ---
292+
279293
vec_gen_ldst(INDEX_op_ld_vec, r, b, o);
294+
295+
//// --- Begin LibAFL code ---
296+
libafl_gen_read(tcgv_ptr_temp(b), oi);
297+
//// --- End LibAFL code ---
280298
}
281299

282300
void tcg_gen_st_vec(TCGv_vec r, TCGv_ptr b, TCGArg o)
283301
{
302+
//// --- Begin LibAFL code ---
303+
TCGArg ri = tcgv_vec_arg(r);
304+
TCGTemp *rt = arg_temp(ri);
305+
TCGType type = rt->base_type;
306+
MemOpIdx oi = make_memop_idx((type - TCG_TYPE_V64) + MO_64, 0);
307+
//// --- End LibAFL code ---
308+
284309
vec_gen_ldst(INDEX_op_st_vec, r, b, o);
310+
311+
//// --- Begin LibAFL code ---
312+
libafl_gen_write(tcgv_ptr_temp(b), oi);
313+
//// --- End LibAFL code ---
285314
}
286315

287316
void tcg_gen_stl_vec(TCGv_vec r, TCGv_ptr b, TCGArg o, TCGType low_type)

0 commit comments

Comments
 (0)