From: Megan Wachs Date: Mon, 14 May 2018 23:04:10 +0000 (-0700) Subject: Merge remote-tracking branch 'origin/downloadtest' into debug-tests-more-single X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bd8f01b7942177911208fff916492ad4539638fb;hp=-c;p=riscv-tests.git Merge remote-tracking branch 'origin/downloadtest' into debug-tests-more-single --- bd8f01b7942177911208fff916492ad4539638fb diff --combined debug/gdbserver.py index 4472bdf,dd30a3d..be89d19 --- a/debug/gdbserver.py +++ b/debug/gdbserver.py @@@ -615,7 -615,7 +615,7 @@@ class MulticoreRunAllHaltOne(GdbTest) time.sleep(1) self.gdb.p("buf", fmt="") -class StepTest(GdbTest): +class StepTest(GdbSingleHartTest): compile_args = ("programs/step.S", ) def setup(self): @@@ -634,7 -634,7 +634,7 @@@ pc = self.gdb.p("$pc") assertEqual("%x" % (pc - main_address), "%x" % expected) -class TriggerTest(GdbTest): +class TriggerTest(GdbSingleHartTest): compile_args = ("programs/trigger.S", ) def setup(self): self.gdb.load() @@@ -753,7 -753,7 +753,7 @@@ class TriggerDmode(TriggerTest) assertIn("clear_triggers", output) self.check_triggers((1<<6) | (1<<0), 0xfeedac00) -class RegsTest(GdbTest): +class RegsTest(GdbSingleHartTest): compile_args = ("programs/regs.S", ) def setup(self): self.gdb.load() @@@ -830,30 -830,17 +830,17 @@@ class DownloadTest(GdbTest) self.binary = self.target.compile(self.hart, self.download_c.name, "programs/checksum.c") - self.gdb.command("file %s" % self.binary) + self.gdb.global_command("file %s" % self.binary) def test(self): - # Some hart will compete the CRC calculation first! - # Let them race in RTOS mode. - # In non-RTOS mode, only one hart will continue. - # This loop will fail because the others won't know - # about '_start'. But if that is the case, they - # won't run on the `continue` either, so we don't really care. - try: - self.gdb.load() - for hart in self.target.harts: - self.gdb.select_hart(hart) - self.gdb.p("$pc=_start") - except ValueError: #invalid literal for int() with base 0: 'No symbol table is loaded. Use the "file" command.' - pass - finally: - - self.gdb.select_hart(self.hart) + self.gdb.load() + self.parkOtherHarts() + self.gdb.command("b _exit") self.gdb.c() assertEqual(self.gdb.p("status"), self.crc) os.unlink(self.download_c.name) -#class MprvTest(GdbTest): +#class MprvTest(GdbSingleHartTest): # compile_args = ("programs/mprv.S", ) # def setup(self): # self.gdb.load() @@@ -866,7 -853,7 +853,7 @@@ # output = self.gdb.command("p/x *(int*)(((char*)&data)-0x80000000)") # assertIn("0xbead", output) -class PrivTest(GdbTest): +class PrivTest(GdbSingleHartTest): compile_args = ("programs/priv.S", ) def setup(self): # pylint: disable=attribute-defined-outside-init diff --combined debug/testlib.py index 09baf1b,0a6c185..fb5bee3 --- a/debug/testlib.py +++ b/debug/testlib.py @@@ -549,8 -549,6 +549,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) @@@ -854,25 -852,25 +854,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: