X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=debug%2Ftestlib.py;h=2fd978cc283f5dbc502c32cdb96efb82302d33da;hb=016147c6167f714c95dbfe9d99d6b983e6202507;hp=0fe0322726a30ce0216ae81a2951bce4b9115948;hpb=7ba428b5d1d3c6d56a2e534daf7b3983cf3f46bf;p=riscv-tests.git diff --git a/debug/testlib.py b/debug/testlib.py index 0fe0322..2fd978c 100644 --- a/debug/testlib.py +++ b/debug/testlib.py @@ -477,7 +477,7 @@ class Gdb(object): self.active_child.sendline("c%s" % async) self.active_child.expect("Continuing", timeout=ops * self.timeout) - def c_all(self): + def c_all(self, wait=True): """ Resume every hart. @@ -494,15 +494,20 @@ class Gdb(object): child.sendline("c") child.expect("Continuing") - # Now wait for them all to halt - for child in self.children: - child.expect(r"\(gdb\)") + if wait: + for child in self.children: + child.expect(r"\(gdb\)") def interrupt(self): self.active_child.send("\003") self.active_child.expect(r"\(gdb\)", timeout=6000) return self.active_child.before.strip() + def interrupt_all(self): + for child in self.children: + self.select_child(child) + self.interrupt() + def x(self, address, size='w'): output = self.command("x/%s %s" % (size, address)) value = int(output.split(':')[1].strip(), 0) @@ -549,6 +554,8 @@ class Gdb(object): output = self.command("load", ops=1000) assert "failed" not in output assert "Transfer rate" in output + output = self.command("compare-sections", ops=1000) + assert "MIS" not in output def b(self, location): output = self.command("b %s" % location, ops=5) @@ -852,22 +859,28 @@ class GdbTest(BaseTest): self.gdb.interrupt() self.gdb.command("disassemble", ops=20) self.gdb.command("info registers all", ops=100) + self.gdb.command("flush regs") + self.gdb.command("info threads", ops=100) def classTeardown(self): del self.gdb BaseTest.classTeardown(self) -class GdbSingleHartTest(GdbTest): - def classSetup(self): - GdbTest.classSetup(self) - + def parkOtherHarts(self): + """Park harts besides the currently selected one in loop_forever().""" for hart in self.target.harts: # Park all harts that we're not using in a safe place. if hart != self.hart: self.gdb.select_hart(hart) self.gdb.p("$pc=loop_forever") + self.gdb.select_hart(self.hart) +class GdbSingleHartTest(GdbTest): + def classSetup(self): + GdbTest.classSetup(self) + self.parkOtherHarts() + class ExamineTarget(GdbTest): def test(self): for hart in self.target.harts: