aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdebug/gdbserver.py26
-rw-r--r--debug/programs/interrupt.c5
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;
}