From: Tim Newsome Date: Tue, 27 Dec 2016 19:34:50 +0000 (-0800) Subject: Use compressed code if the target supports it. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4ec77dde62f8c14df9403abf7b10a2455ea72125;p=riscv-tests.git Use compressed code if the target supports it. The main change was to read misa before running any other test. If misa indicates C is supported, then use compressed code. This required changing some tests, mostly to ensure correct alignment. The single step test also needs to know the correct addresses to step through in compressed code. Only print at most 1000 lines from each log file. --- diff --git a/debug/gdbserver.py b/debug/gdbserver.py index 323d32c..9dfea39 100755 --- a/debug/gdbserver.py +++ b/debug/gdbserver.py @@ -11,6 +11,7 @@ import targets import testlib from testlib import assertEqual, assertNotEqual, assertIn from testlib import assertGreater, assertTrue, assertRegexpMatches, assertLess +from testlib import GdbTest MSTATUS_UIE = 0x00000001 MSTATUS_SIE = 0x00000002 @@ -34,30 +35,6 @@ MSTATUS64_SD = 0x8000000000000000 # pylint: disable=abstract-method -def gdb( - target=None, - port=None, - binary=None - ): - - g = None - if parsed.gdb: - g = testlib.Gdb(parsed.gdb) - else: - g = testlib.Gdb() - - if binary: - g.command("file %s" % binary) - if target: - g.command("set arch riscv:rv%d" % target.xlen) - g.command("set remotetimeout %d" % target.timeout_sec) - if port: - g.command("target extended-remote localhost:%d" % port) - - g.p("$priv=3") - - return g - def ihex_line(address, record_type, data): assert len(data) < 128 line = ":%02X%04X%02X" % (len(data), address, record_type) @@ -86,20 +63,6 @@ def ihex_parse(line): def readable_binary_string(s): return "".join("%02x" % ord(c) for c in s) -class GdbTest(testlib.BaseTest): - def __init__(self, target): - testlib.BaseTest.__init__(self, target) - self.gdb = None - - def classSetup(self): - testlib.BaseTest.classSetup(self) - self.logs.append("gdb.log") - self.gdb = gdb(self.target, self.server.port, self.binary) - - def classTeardown(self): - del self.gdb - testlib.BaseTest.classTeardown(self) - class SimpleRegisterTest(GdbTest): def check_reg(self, name): a = random.randrange(1< 1000: + for l in lines[:500]: + sys.stdout.write(l) + print "..." + for l in lines[-500:]: + sys.stdout.write(l) + else: + for l in lines: + sys.stdout.write(l) + class BaseTest(object): compiled = {} - logs = [] def __init__(self, target): self.target = target @@ -382,6 +404,7 @@ class BaseTest(object): self.target_process = None self.binary = None self.start = 0 + self.logs = [] def early_applicable(self): """Return a false value if the test has determined it cannot run @@ -450,8 +473,7 @@ class BaseTest(object): header("Traceback") traceback.print_exc(file=sys.stdout) for log in self.logs: - header(log) - print open(log, "r").read() + print_log(log) print "/" * 40 return result @@ -463,6 +485,55 @@ class BaseTest(object): print "%s in %.2fs" % (result, time.time() - self.start) return result +gdb_cmd = None +class GdbTest(BaseTest): + def __init__(self, target): + BaseTest.__init__(self, target) + self.gdb = None + + def classSetup(self): + BaseTest.classSetup(self) + self.logs.append("gdb.log") + + if gdb_cmd: + self.gdb = Gdb(gdb_cmd) + else: + self.gdb = Gdb() + + if self.binary: + self.gdb.command("file %s" % self.binary) + if self.target: + self.gdb.command("set arch riscv:rv%d" % self.target.xlen) + self.gdb.command("set remotetimeout %d" % self.target.timeout_sec) + if self.server.port: + self.gdb.command( + "target extended-remote localhost:%d" % self.server.port) + + self.gdb.p("$priv=3") + + def classTeardown(self): + del self.gdb + BaseTest.classTeardown(self) + +class ExamineTarget(GdbTest): + def test(self): + self.target.misa = self.gdb.p("$misa") + + txt = "RV" + if (self.target.misa >> 30) == 1: + txt += "32" + elif (self.target.misa >> 62) == 2: + txt += "64" + elif (self.target.misa >> 126) == 3: + txt += "128" + else: + txt += "??" + + for i in range(26): + if self.target.misa & (1<