From ea630b437567955fda7454b299c246cec271707c Mon Sep 17 00:00:00 2001 From: Andrea Fioraldi Date: Wed, 25 Oct 2023 10:34:13 +0200 Subject: [PATCH] Crash hook --- accel/tcg/tcg-runtime.c | 8 ++++---- linux-user/cpu_loop-common.h | 2 +- linux-user/signal.c | 5 ++--- softmmu/cpus.c | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/accel/tcg/tcg-runtime.c b/accel/tcg/tcg-runtime.c index daa357ef1c..91d29ef898 100644 --- a/accel/tcg/tcg-runtime.c +++ b/accel/tcg/tcg-runtime.c @@ -132,10 +132,10 @@ void libafl_load_qemu_snapshot(char *name, bool sync) #define EXCP_LIBAFL_BP 0xf4775747 -int libafl_qemu_break_asap = 0; +__thread int libafl_qemu_break_asap = 0; -CPUState* libafl_breakpoint_cpu; -vaddr libafl_breakpoint_pc; +__thread CPUState* libafl_breakpoint_cpu; +__thread vaddr libafl_breakpoint_pc; #ifdef TARGET_ARM #define THUMB_MASK(value) (value | libafl_breakpoint_cpu->env_ptr->thumb) @@ -167,7 +167,7 @@ void libafl_qemu_trigger_breakpoint(CPUState* cpu) cpu->exception_index = EXCP_LIBAFL_BP; cpu_loop_exit(cpu); } else { - libafl_qemu_break_asap = 1; + libafl_qemu_break_asap = 1;//TODO add a field to CPU } } diff --git a/linux-user/cpu_loop-common.h b/linux-user/cpu_loop-common.h index d039b1937a..34ec83e407 100644 --- a/linux-user/cpu_loop-common.h +++ b/linux-user/cpu_loop-common.h @@ -25,7 +25,7 @@ //// --- Begin LibAFL code --- -extern int libafl_qemu_break_asap; +extern __thread int libafl_qemu_break_asap; //// --- End LibAFL code --- diff --git a/linux-user/signal.c b/linux-user/signal.c index 5774832bff..04ab10d594 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -695,8 +695,7 @@ void cpu_loop_exit_sigbus(CPUState *cpu, target_ulong addr, //// --- Begin LibAFL code --- -__attribute__((weak)) void libafl_executor_reinstall_handlers(void); -__attribute__((weak)) void libafl_executor_reinstall_handlers(void) {} +void (*libafl_dump_core_hook)(int target_sig); //// --- End LibAFL code --- @@ -746,7 +745,7 @@ void dump_core_and_abort(CPUArchState *cpu_env, int target_sig) //// --- Begin LibAFL code --- - libafl_executor_reinstall_handlers(); + if (libafl_dump_core_hook) libafl_dump_core_hook(target_sig); //// --- End LibAFL code --- diff --git a/softmmu/cpus.c b/softmmu/cpus.c index 556129385e..fcc54c1c4c 100644 --- a/softmmu/cpus.c +++ b/softmmu/cpus.c @@ -714,7 +714,7 @@ int vm_prepare_start(bool step_pending) //// --- Begin LibAFL code --- -extern CPUState* libafl_breakpoint_cpu; +extern __thread CPUState* libafl_breakpoint_cpu; //// --- End LibAFL code ---