From 9dfe6e5c5178a15ebd84f33bbff8e3cc1eb33eb1 Mon Sep 17 00:00:00 2001 From: Alwin Berger Date: Mon, 13 Mar 2023 14:46:09 +0100 Subject: [PATCH] re-introduce native breakpoints --- include/libafl/exit.h | 5 +++++ libafl/exit.c | 17 +++++++++++++++++ system/cpus.c | 5 ++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/include/libafl/exit.h b/include/libafl/exit.h index a9cc5c007a..423719a4f6 100644 --- a/include/libafl/exit.h +++ b/include/libafl/exit.h @@ -69,3 +69,8 @@ void libafl_exit_request_timeout(void); #endif struct libafl_exit_reason* libafl_get_exit_reason(void); + +#ifndef CONFIG_USER_ONLY +void libafl_qemu_set_native_breakpoint(vaddr pc); +void libafl_qemu_remove_native_breakpoint(vaddr pc); +#endif diff --git a/libafl/exit.c b/libafl/exit.c index 27d3444f5a..a1c3db6cb8 100644 --- a/libafl/exit.c +++ b/libafl/exit.c @@ -169,3 +169,20 @@ void libafl_qemu_breakpoint_run(vaddr pc_next) bp = bp->next; } } +#ifndef CONFIG_USER_ONLY +void libafl_qemu_set_native_breakpoint(vaddr pc) +{ + CPUState *cpu; + CPU_FOREACH(cpu) { + cpu_breakpoint_insert(cpu, pc, BP_GDB, NULL); + } +} + +void libafl_qemu_remove_native_breakpoint(vaddr pc) +{ + CPUState *cpu; + CPU_FOREACH(cpu) { + cpu_breakpoint_remove(cpu, pc, BP_GDB); + } +} +#endif diff --git a/system/cpus.c b/system/cpus.c index f4d2a132e2..015837299d 100644 --- a/system/cpus.c +++ b/system/cpus.c @@ -344,7 +344,10 @@ void cpu_handle_guest_debug(CPUState *cpu) cpu_single_step(cpu, 0); } } else { - gdb_set_stop_cpu(cpu); + /* Begin LibAFL changes */ + // With LibAFL Breakpoints there is no gdb attached. + // gdb_set_stop_cpu(cpu); + /* End LibAFL changes */ qemu_system_debug_request(); cpu->stopped = true; }