X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=debug%2Fgdbserver.py;h=162854c59939d7ac57fa789910a8c42370a9f867;hb=6f7ebb610d6bb8817a9592cc06a7d108381f1761;hp=51c6ab6b09d550e2d1fbce5d4b8ee81ef09c5d35;hpb=a98122fc00d8a7178f41d27cb801a8c9069a7d05;p=riscv-tests.git diff --git a/debug/gdbserver.py b/debug/gdbserver.py index 51c6ab6..162854c 100755 --- a/debug/gdbserver.py +++ b/debug/gdbserver.py @@ -65,15 +65,19 @@ def readable_binary_string(s): return "".join("%02x" % ord(c) for c in s) class SimpleRegisterTest(GdbTest): - def check_reg(self, name): + def check_reg(self, name, alias): a = random.randrange(1< 1 -# -# def setup(self): -# self.gdb.load() -# for hart in self.target.harts: -# self.gdb.select_hart(hart) -# self.gdb.p("$pc=_start") -# -# def test(self): -# # Run to main -# # Hart 0 is the first to be resumed, so we have to set the breakpoint -# # there. gdb won't actually set the breakpoint until we tell it to -# # resume. -# self.gdb.select_hart(self.target.harts[0]) -# self.gdb.b("main") -# self.gdb.c_all() -# for hart in self.target.harts: -# self.gdb.select_hart(hart) -# assertIn("main", self.gdb.where()) -# self.gdb.select_hart(self.target.harts[0]) -# self.gdb.command("delete breakpoints") -# -# # Run through the entire loop. -# self.gdb.b("main_end") -# self.gdb.c_all() -# -# hart_ids = [] -# for hart in self.target.harts: -# self.gdb.select_hart(hart) -# assertIn("main_end", self.gdb.where()) -# # Check register values. -# hart_id = self.gdb.p("$x1") -# assertNotIn(hart_id, hart_ids) -# hart_ids.append(hart_id) -# for n in range(2, 32): -# value = self.gdb.p("$x%d" % n) -# assertEqual(value, hart_ids[-1] + n - 1) -# -# # Confirmed that we read different register values for different harts. -# # Write a new value to x1, and run through the add sequence again. -# -# for hart in self.target.harts: -# self.gdb.select_hart(hart) -# self.gdb.p("$x1=0x%x" % (hart.index * 0x800)) -# self.gdb.p("$pc=main_post_csrr") -# self.gdb.c_all() -# for hart in self.target.harts: -# self.gdb.select_hart(hart) -# assertIn("main", self.gdb.where()) -# # Check register values. -# for n in range(1, 32): -# value = self.gdb.p("$x%d" % n) -# assertEqual(value, hart.index * 0x800 + n - 1) +class MulticoreRegTest(GdbTest): + compile_args = ("programs/infinite_loop.S", "-DMULTICORE") + + def early_applicable(self): + return len(self.target.harts) > 1 + + def setup(self): + self.gdb.load() + for hart in self.target.harts: + self.gdb.select_hart(hart) + self.gdb.p("$pc=_start") + + def test(self): + # Run to main + for hart in self.target.harts: + self.gdb.select_hart(hart) + self.gdb.b("main") + self.gdb.c() + assertIn("main", self.gdb.where()) + self.gdb.command("delete breakpoints") + + # Run through the entire loop. + for hart in self.target.harts: + self.gdb.select_hart(hart) + self.gdb.b("main_end") + self.gdb.c() + assertIn("main_end", self.gdb.where()) + + hart_ids = [] + for hart in self.target.harts: + self.gdb.select_hart(hart) + # Check register values. + hart_id = self.gdb.p("$x1") + assertNotIn(hart_id, hart_ids) + hart_ids.append(hart_id) + for n in range(2, 32): + value = self.gdb.p("$x%d" % n) + assertEqual(value, hart_ids[-1] + n - 1) + + # Confirmed that we read different register values for different harts. + # Write a new value to x1, and run through the add sequence again. + + for hart in self.target.harts: + self.gdb.select_hart(hart) + self.gdb.p("$x1=0x%x" % (hart.index * 0x800)) + self.gdb.p("$pc=main_post_csrr") + self.gdb.c() + for hart in self.target.harts: + self.gdb.select_hart(hart) + assertIn("main", self.gdb.where()) + # Check register values. + for n in range(1, 32): + value = self.gdb.p("$x%d" % n) + assertEqual(value, hart.index * 0x800 + n - 1) class MulticoreRunHaltStepiTest(GdbTest): compile_args = ("programs/multicore.c", "-DMULTICORE") @@ -859,6 +863,8 @@ def main(): parsed = parser.parse_args() target = targets.target(parsed) + testlib.print_log_names = parsed.print_log_names + if parsed.xlen: target.xlen = parsed.xlen