fix build
This commit is contained in:
parent
cb70307812
commit
19f046ef6a
125
cpu-target.c
125
cpu-target.c
@ -62,16 +62,8 @@ int libafl_qemu_read_reg(CPUState* cpu, int reg, uint8_t* val);
|
|||||||
int libafl_qemu_num_regs(CPUState* cpu);
|
int libafl_qemu_num_regs(CPUState* cpu);
|
||||||
|
|
||||||
//// --- Begin LibAFL code ---
|
//// --- Begin LibAFL code ---
|
||||||
int libafl_qemu_set_breakpoint(target_ulong addr);
|
|
||||||
int libafl_qemu_remove_breakpoint(target_ulong addr);
|
|
||||||
void libafl_qemu_set_native_breakpoint( vaddr );
|
void libafl_qemu_set_native_breakpoint( vaddr );
|
||||||
void libafl_qemu_remove_native_breakpoint( vaddr );
|
void libafl_qemu_remove_native_breakpoint( vaddr );
|
||||||
size_t libafl_qemu_set_hook(target_ulong pc, void (*callback)(target_ulong, uint64_t),
|
|
||||||
uint64_t data, int invalidate);
|
|
||||||
size_t libafl_qemu_remove_hooks_at(target_ulong addr, int invalidate);
|
|
||||||
int libafl_qemu_remove_hook(size_t num, int invalidate);
|
|
||||||
struct libafl_hook* libafl_search_hook(target_ulong addr);
|
|
||||||
void libafl_flush_jit(void);
|
|
||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
hwaddr libafl_qemu_current_paging_id(CPUState* cpu);
|
hwaddr libafl_qemu_current_paging_id(CPUState* cpu);
|
||||||
@ -185,27 +177,6 @@ hwaddr libafl_qemu_current_paging_id(CPUState* cpu)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int libafl_qemu_remove_breakpoint(target_ulong pc)
|
|
||||||
{
|
|
||||||
CPUState *cpu;
|
|
||||||
int r = 0;
|
|
||||||
|
|
||||||
struct libafl_breakpoint** bp = &libafl_qemu_breakpoints;
|
|
||||||
while (*bp) {
|
|
||||||
if ((*bp)->addr == pc) {
|
|
||||||
CPU_FOREACH(cpu) {
|
|
||||||
libafl_breakpoint_invalidate(cpu, pc);
|
|
||||||
}
|
|
||||||
|
|
||||||
*bp = (*bp)->next;
|
|
||||||
r = 1;
|
|
||||||
} else {
|
|
||||||
bp = &(*bp)->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
void libafl_qemu_set_native_breakpoint(vaddr pc)
|
void libafl_qemu_set_native_breakpoint(vaddr pc)
|
||||||
{
|
{
|
||||||
CPUState *cpu;
|
CPUState *cpu;
|
||||||
@ -222,102 +193,6 @@ void libafl_qemu_remove_native_breakpoint(vaddr pc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t libafl_qemu_set_hook(target_ulong pc, void (*callback)(target_ulong, uint64_t),
|
|
||||||
uint64_t data, int invalidate)
|
|
||||||
{
|
|
||||||
CPUState *cpu;
|
|
||||||
|
|
||||||
if (invalidate) {
|
|
||||||
CPU_FOREACH(cpu) {
|
|
||||||
libafl_breakpoint_invalidate(cpu, pc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t idx = LIBAFL_TABLES_HASH(pc);
|
|
||||||
|
|
||||||
struct libafl_hook* hk = calloc(sizeof(struct libafl_hook), 1);
|
|
||||||
hk->addr = pc;
|
|
||||||
hk->callback = callback;
|
|
||||||
hk->data = data;
|
|
||||||
hk->helper_info.func = callback;
|
|
||||||
hk->helper_info.name = "libafl_hook";
|
|
||||||
hk->helper_info.flags = dh_callflag(void);
|
|
||||||
hk->helper_info.typemask = dh_typemask(void, 0) | dh_typemask(tl, 1) | dh_typemask(i64, 2);
|
|
||||||
hk->num = libafl_qemu_hooks_num++;
|
|
||||||
hk->next = libafl_qemu_hooks[idx];
|
|
||||||
libafl_qemu_hooks[idx] = hk;
|
|
||||||
return hk->num;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t libafl_qemu_remove_hooks_at(target_ulong addr, int invalidate)
|
|
||||||
{
|
|
||||||
CPUState *cpu;
|
|
||||||
size_t r = 0;
|
|
||||||
|
|
||||||
size_t idx = LIBAFL_TABLES_HASH(addr);
|
|
||||||
struct libafl_hook** hk = &libafl_qemu_hooks[idx];
|
|
||||||
while (*hk) {
|
|
||||||
if ((*hk)->addr == addr) {
|
|
||||||
if (invalidate) {
|
|
||||||
CPU_FOREACH(cpu) {
|
|
||||||
libafl_breakpoint_invalidate(cpu, addr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void *tmp = *hk;
|
|
||||||
*hk = (*hk)->next;
|
|
||||||
free(tmp);
|
|
||||||
r++;
|
|
||||||
} else {
|
|
||||||
hk = &(*hk)->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
int libafl_qemu_remove_hook(size_t num, int invalidate)
|
|
||||||
{
|
|
||||||
CPUState *cpu;
|
|
||||||
size_t idx;
|
|
||||||
|
|
||||||
for (idx = 0; idx < LIBAFL_TABLES_SIZE; ++idx) {
|
|
||||||
struct libafl_hook** hk = &libafl_qemu_hooks[idx];
|
|
||||||
while (*hk) {
|
|
||||||
if ((*hk)->num == num) {
|
|
||||||
if (invalidate) {
|
|
||||||
CPU_FOREACH(cpu) {
|
|
||||||
libafl_breakpoint_invalidate(cpu, (*hk)->addr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void *tmp = *hk;
|
|
||||||
*hk = (*hk)->next;
|
|
||||||
free(tmp);
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
hk = &(*hk)->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct libafl_hook* libafl_search_hook(target_ulong addr)
|
|
||||||
{
|
|
||||||
size_t idx = LIBAFL_TABLES_HASH(addr);
|
|
||||||
|
|
||||||
struct libafl_hook* hk = libafl_qemu_hooks[idx];
|
|
||||||
while (hk) {
|
|
||||||
if (hk->addr == addr) {
|
|
||||||
return hk;
|
|
||||||
}
|
|
||||||
hk = hk->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
//// --- End LibAFL code ---
|
|
||||||
|
|
||||||
void libafl_flush_jit(void)
|
void libafl_flush_jit(void)
|
||||||
{
|
{
|
||||||
CPUState *cpu;
|
CPUState *cpu;
|
||||||
|
@ -2738,20 +2738,21 @@ type_init(armv7m_nvic_register_types)
|
|||||||
|
|
||||||
/* Begin LibAFL instrumentation */
|
/* Begin LibAFL instrumentation */
|
||||||
#include "qemu/main-loop.h"
|
#include "qemu/main-loop.h"
|
||||||
|
#include "include/qom/object.h"
|
||||||
void libafl_send_irq(int irqn);
|
void libafl_send_irq(int irqn);
|
||||||
void libafl_send_irq(int irqn) {
|
void libafl_send_irq(int irqn) {
|
||||||
bool haslock = qemu_mutex_iothread_locked();
|
bool haslock = qemu_mutex_iothread_locked();
|
||||||
if (!haslock) {
|
if (!haslock) {
|
||||||
qemu_mutex_lock_iothread();
|
qemu_mutex_lock_iothread();
|
||||||
}
|
}
|
||||||
CPUState *cpu;
|
// CPUState *cpu;
|
||||||
CPU_FOREACH(cpu) {
|
//CPU_FOREACH(cpu) {
|
||||||
CPUARMState* env = cpu->env_ptr;
|
//CPUARMState* env = cpu->env_ptr;
|
||||||
NVICState* nvic = env->nvic;
|
NVICState* nvic = (NVICState*)object_resolve_path("/machine/armv7m/nvic", 0);
|
||||||
// set_irq_level(nvic, irqn, 1);
|
// set_irq_level(nvic, irqn, 1);
|
||||||
// set_irq_level(nvic, irqn, 0);
|
// set_irq_level(nvic, irqn, 0);
|
||||||
armv7m_nvic_set_pending(nvic, irqn+16, false);
|
armv7m_nvic_set_pending(nvic, irqn+16, false);
|
||||||
}
|
//}
|
||||||
if (!haslock) {
|
if (!haslock) {
|
||||||
qemu_mutex_unlock_iothread();
|
qemu_mutex_unlock_iothread();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user