diff options
-rwxr-xr-x | debug/gdbserver.py | 26 | ||||
-rw-r--r-- | debug/programs/interrupt.c | 5 |
2 files changed, 30 insertions, 1 deletions
diff --git a/debug/gdbserver.py b/debug/gdbserver.py index 1ffb15f..64554d3 100755 --- a/debug/gdbserver.py +++ b/debug/gdbserver.py @@ -1973,6 +1973,32 @@ class EtriggerTest(DebugTest): assertIn("breakpoint", output) assertIn("trap_entry", self.gdb.where()) +class ItriggerTest(GdbSingleHartTest): + compile_args = ("programs/interrupt.c",) + + def early_applicable(self): + return self.target.supports_clint_mtime + + def setup(self): + self.gdb.load() + + def test(self): + self.gdb.command(f"monitor targets {self.hart.id}") + output = self.gdb.command("monitor riscv itrigger set 0x80") + assertIn("Doesn't make sense", output) + output = self.gdb.command("monitor riscv itrigger set m 0") + assertIn("Doesn't make sense", output) + output = self.gdb.command("monitor riscv itrigger clear") + assertIn("No itrigger is set", output) + self.gdb.command("monitor riscv itrigger set m 0x80") + + self.gdb.c() + assertIn("trap_entry", self.gdb.where()) + + self.gdb.command("monitor riscv itrigger clear") + self.gdb.p("keep_running=0") + self.exit() + parsed = None def main(): parser = argparse.ArgumentParser( diff --git a/debug/programs/interrupt.c b/debug/programs/interrupt.c index 8378576..847644c 100644 --- a/debug/programs/interrupt.c +++ b/debug/programs/interrupt.c @@ -3,6 +3,7 @@ static volatile unsigned interrupt_count; static volatile unsigned local; +static volatile unsigned keep_running; static unsigned delta = 0x100; void *increment_count(unsigned hartid, unsigned mcause, void *mepc, void *sp) @@ -20,13 +21,15 @@ int main() { interrupt_count = 0; local = 0; + keep_running = 1; unsigned hartid = read_csr(mhartid); set_trap_handler(increment_count); MTIMECMP[hartid] = MTIME - 1; enable_timer_interrupts(); - while (1) { + while (keep_running) { local++; } + return 10; } |