Support native TCG vector read/write operations in LibAFL hooks (#64)

* Support rw vector operations
This commit is contained in:
Romain Malmain 2024-04-19 11:11:34 +02:00 committed by GitHub
parent 46273983f3
commit 125b77cbc3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 35 additions and 7 deletions

View File

@ -31,6 +31,12 @@
#include "exec/plugin-gen.h"
#include "tcg-internal.h"
//// --- Begin LibAFL code ---
void libafl_gen_read(TCGTemp *addr, MemOpIdx oi);
void libafl_gen_write(TCGTemp *addr, MemOpIdx oi);
//// --- End LibAFL code ---
static void check_max_alignment(unsigned a_bits)
{
@ -175,13 +181,6 @@ plugin_gen_mem_callbacks(TCGv_i64 copy_addr, TCGTemp *orig_addr, MemOpIdx oi,
#endif
}
//// --- Begin LibAFL code ---
void libafl_gen_read(TCGTemp *addr, MemOpIdx oi);
void libafl_gen_write(TCGTemp *addr, MemOpIdx oi);
//// --- End LibAFL code ---
static void tcg_gen_qemu_ld_i32_int(TCGv_i32 val, TCGTemp *addr,
TCGArg idx, MemOp memop)
{

View File

@ -24,6 +24,13 @@
#include "tcg/tcg-mo.h"
#include "tcg-internal.h"
//// --- Begin LibAFL code ---
void libafl_gen_read(TCGTemp *addr, MemOpIdx oi);
void libafl_gen_write(TCGTemp *addr, MemOpIdx oi);
//// --- End LibAFL code ---
/*
* Vector optional opcode tracking.
* 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)
void tcg_gen_ld_vec(TCGv_vec r, TCGv_ptr b, TCGArg o)
{
//// --- Begin LibAFL code ---
TCGArg ri = tcgv_vec_arg(r);
TCGTemp *rt = arg_temp(ri);
TCGType type = rt->base_type;
MemOpIdx oi = make_memop_idx((type - TCG_TYPE_V64) + MO_64, 0);
//// --- End LibAFL code ---
vec_gen_ldst(INDEX_op_ld_vec, r, b, o);
//// --- Begin LibAFL code ---
libafl_gen_read(tcgv_ptr_temp(b), oi);
//// --- End LibAFL code ---
}
void tcg_gen_st_vec(TCGv_vec r, TCGv_ptr b, TCGArg o)
{
//// --- Begin LibAFL code ---
TCGArg ri = tcgv_vec_arg(r);
TCGTemp *rt = arg_temp(ri);
TCGType type = rt->base_type;
MemOpIdx oi = make_memop_idx((type - TCG_TYPE_V64) + MO_64, 0);
//// --- End LibAFL code ---
vec_gen_ldst(INDEX_op_st_vec, r, b, o);
//// --- Begin LibAFL code ---
libafl_gen_write(tcgv_ptr_temp(b), oi);
//// --- End LibAFL code ---
}
void tcg_gen_stl_vec(TCGv_vec r, TCGv_ptr b, TCGArg o, TCGType low_type)