aboutsummaryrefslogtreecommitdiff
path: root/debug/gdbserver.py
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2016-12-27 11:34:50 -0800
committerTim Newsome <tim@sifive.com>2016-12-27 11:34:50 -0800
commit4ec77dde62f8c14df9403abf7b10a2455ea72125 (patch)
treece54ad127f65f392c149d66d1caf84c677d8daec /debug/gdbserver.py
parentb986817eebe9bd810be371dc84ee94e8f654de42 (diff)
downloadriscv-tests-4ec77dde62f8c14df9403abf7b10a2455ea72125.zip
riscv-tests-4ec77dde62f8c14df9403abf7b10a2455ea72125.tar.gz
riscv-tests-4ec77dde62f8c14df9403abf7b10a2455ea72125.tar.bz2
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.
Diffstat (limited to 'debug/gdbserver.py')
-rwxr-xr-xdebug/gdbserver.py59
1 files changed, 12 insertions, 47 deletions
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<<self.target.xlen)
@@ -145,10 +108,10 @@ class SimpleF18Test(SimpleRegisterTest):
self.gdb.stepi()
assertLess(abs(float(self.gdb.p_raw("$%s" % name)) - b), .001)
+ def early_applicable(self):
+ return self.target.extensionSupported('F')
+
def test(self):
- misa = self.gdb.p("$misa")
- if not misa & (1<<(ord('F')-ord('A'))):
- return 'not_applicable'
self.check_reg("f18")
class SimpleMemoryTest(GdbTest):
@@ -440,10 +403,14 @@ class StepTest(GdbTest):
def test(self):
main_address = self.gdb.p("$pc")
- for expected in (4, 8, 0xc, 0x10, 0x18, 0x1c, 0x28, 0x20, 0x2c, 0x2c):
+ if self.target.extensionSupported("c"):
+ sequence = (4, 8, 0xc, 0xe, 0x14, 0x18, 0x22, 0x1c, 0x24, 0x24)
+ else:
+ sequence = (4, 8, 0xc, 0x10, 0x18, 0x1c, 0x28, 0x20, 0x2c, 0x2c)
+ for expected in sequence:
self.gdb.stepi()
pc = self.gdb.p("$pc")
- assertEqual("%x" % pc, "%x" % (expected + main_address))
+ assertEqual("%x" % (pc - main_address), "%x" % expected)
class TriggerTest(GdbTest):
compile_args = ("programs/trigger.S", )
@@ -656,7 +623,7 @@ class PrivTest(GdbTest):
# pylint: disable=attribute-defined-outside-init
self.gdb.load()
- misa = self.gdb.p("$misa")
+ misa = self.target.misa
self.supported = set()
if misa & (1<<20):
self.supported.add(0)
@@ -710,8 +677,6 @@ def main():
./gdbserver.py --freedom-e300 --cmd "$HOME/SiFive/openocd/src/openocd -s $HOME/SiFive/openocd/tcl -d" Simple
""")
targets.add_target_options(parser)
- parser.add_argument("--gdb",
- help="The command to use to start gdb.")
testlib.add_test_run_options(parser)
@@ -725,7 +690,7 @@ def main():
module = sys.modules[__name__]
- return testlib.run_all_tests(module, target, parsed.test, parsed.fail_fast)
+ return testlib.run_all_tests(module, target, parsed)
# TROUBLESHOOTING TIPS
# If a particular test fails, run just that one test, eg.: