From 397dba5ee2d3a53a7f49afdc326d4eda6e462d62 Mon Sep 17 00:00:00 2001 From: Steffen Schulz Date: Fri, 16 Dec 2022 04:48:44 -0800 Subject: [PATCH] reset aux_buffer pt_overflow bit --- nyx/auxiliary_buffer.c | 5 +++++ nyx/auxiliary_buffer.h | 1 + nyx/synchronization.c | 10 ++++++---- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/nyx/auxiliary_buffer.c b/nyx/auxiliary_buffer.c index d552a5f4a2..0bd7185175 100644 --- a/nyx/auxiliary_buffer.c +++ b/nyx/auxiliary_buffer.c @@ -208,6 +208,11 @@ void set_pt_overflow_auxiliary_result_buffer(auxilary_buffer_t *auxilary_buffer) VOLATILE_WRITE_8(auxilary_buffer->result.pt_overflow, 1); } +void reset_pt_overflow_auxiliary_result_buffer(auxilary_buffer_t *auxilary_buffer) +{ + VOLATILE_WRITE_8(auxilary_buffer->result.pt_overflow, 0); +} + void set_exec_done_auxiliary_result_buffer(auxilary_buffer_t *auxilary_buffer, uint32_t sec, uint32_t usec, diff --git a/nyx/auxiliary_buffer.h b/nyx/auxiliary_buffer.h index 8423e60068..2419fafa21 100644 --- a/nyx/auxiliary_buffer.h +++ b/nyx/auxiliary_buffer.h @@ -161,6 +161,7 @@ void set_asan_auxiliary_result_buffer(auxilary_buffer_t *auxilary_buffer); void set_timeout_auxiliary_result_buffer(auxilary_buffer_t *auxilary_buffer); void set_reload_auxiliary_result_buffer(auxilary_buffer_t *auxilary_buffer); void set_pt_overflow_auxiliary_result_buffer(auxilary_buffer_t *auxilary_buffer); +void reset_pt_overflow_auxiliary_result_buffer(auxilary_buffer_t *auxilary_buffer); void set_exec_done_auxiliary_result_buffer(auxilary_buffer_t *auxilary_buffer, uint32_t sec, uint32_t usec, diff --git a/nyx/synchronization.c b/nyx/synchronization.c index a7eafaa9c5..d150c1bf3b 100644 --- a/nyx/synchronization.c +++ b/nyx/synchronization.c @@ -220,10 +220,6 @@ void synchronization_lock(void) pthread_mutex_lock(&synchronization_lock_mutex); run_counter++; - if (qemu_get_cpu(0)->intel_pt_run_trashed) { - set_pt_overflow_auxiliary_result_buffer(GET_GLOBAL_STATE()->auxilary_buffer); - } - long runtime_sec = timer.config.tv_sec - timer.alarm.it_value.tv_sec; long runtime_usec = timer.config.tv_usec - timer.alarm.it_value.tv_usec; @@ -242,6 +238,11 @@ void synchronization_lock(void) set_success_auxiliary_result_buffer(GET_GLOBAL_STATE()->auxilary_buffer, 0); } + if (qemu_get_cpu(0)->intel_pt_run_trashed) { + set_pt_overflow_auxiliary_result_buffer(GET_GLOBAL_STATE()->auxilary_buffer); + qemu_get_cpu(0)->intel_pt_run_trashed = false; + } + if (GET_GLOBAL_STATE()->dump_page) { GET_GLOBAL_STATE()->dump_page = false; GET_GLOBAL_STATE()->dump_page_addr = 0x0; @@ -269,6 +270,7 @@ void synchronization_lock(void) set_success_auxiliary_result_buffer(GET_GLOBAL_STATE()->auxilary_buffer, 2); else set_success_auxiliary_result_buffer(GET_GLOBAL_STATE()->auxilary_buffer, 1); + reset_pt_overflow_auxiliary_result_buffer(GET_GLOBAL_STATE()->auxilary_buffer); GET_GLOBAL_STATE()->pt_trace_size = 0; }