From 16960d9d078650852a7434c459533050f040165b Mon Sep 17 00:00:00 2001 From: Alwin Berger Date: Thu, 5 Sep 2024 15:20:06 +0200 Subject: [PATCH] allow interrupts from multiple sources --- hw/timer/armv7m_systick.c | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/hw/timer/armv7m_systick.c b/hw/timer/armv7m_systick.c index 764b394b9f..2d2509b32c 100644 --- a/hw/timer/armv7m_systick.c +++ b/hw/timer/armv7m_systick.c @@ -310,33 +310,42 @@ static void armv7m_systick_register_types(void) type_init(armv7m_systick_register_types) /* Begin LibAFL instrumentation */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpointer-to-int-cast" +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wint-to-pointer-cast" #include "qemu/seqlock.h" #include "sysemu/cpu-timers-internal.h" +#define NUM_INTERRUPT_SOURCES 6 #define MAX_NUM_INTERRUPT 128 extern void libafl_send_irq(int irqn); -volatile uint32_t libafl_interrupt_offsets[MAX_NUM_INTERRUPT]; -volatile uint64_t libafl_num_interrupts = 0; -static ptimer_state* libafl_interrupt_timers[MAX_NUM_INTERRUPT] = {0}; +volatile uint32_t libafl_interrupt_offsets[NUM_INTERRUPT_SOURCES][MAX_NUM_INTERRUPT]; +volatile uint64_t libafl_num_interrupts[NUM_INTERRUPT_SOURCES] = {0}; +static ptimer_state* libafl_interrupt_timers[NUM_INTERRUPT_SOURCES][MAX_NUM_INTERRUPT] = {0}; /* This can be moved to a helper function later */ static void libafl_timed_int_hook(void*); static void libafl_timed_int_hook(void* arg) { - libafl_send_irq(0); + libafl_send_irq((int)arg); } void libafl_start_int_timer( void ); void libafl_start_int_timer( void ) { - if (libafl_num_interrupts == 0) {return;} - for (int i=0; i