aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2019-08-02 12:49:37 -0700
committerGitHub <noreply@github.com>2019-08-02 12:49:37 -0700
commita278033e489abb39476433f3e3fc496df9150464 (patch)
tree539afaaf712c03e58aebe3de33a64adae14f75ce
parent00dc081ced7a841eefb2ebd8830e797adb1e8561 (diff)
downloadriscv-tests-a278033e489abb39476433f3e3fc496df9150464.zip
riscv-tests-a278033e489abb39476433f3e3fc496df9150464.tar.gz
riscv-tests-a278033e489abb39476433f3e3fc496df9150464.tar.bz2
Miscellaneous minor test improvements (#199)
* Let the debugger enable mstatus.F if necessary. * Ignore (some) gdb debug output. * Increase timeout. * Make newer version of pylint happy.
-rwxr-xr-xdebug/gdbserver.py15
-rw-r--r--debug/targets.py3
-rw-r--r--debug/targets/RISC-V/spike64-2.py4
-rw-r--r--debug/testlib.py17
4 files changed, 20 insertions, 19 deletions
diff --git a/debug/gdbserver.py b/debug/gdbserver.py
index 3e739f3..b0dc6bc 100755
--- a/debug/gdbserver.py
+++ b/debug/gdbserver.py
@@ -13,7 +13,7 @@ import testlib
from testlib import assertEqual, assertNotEqual, assertIn, assertNotIn
from testlib import assertGreater, assertRegexpMatches, assertLess
from testlib import GdbTest, GdbSingleHartTest, TestFailed
-from testlib import assertTrue
+from testlib import assertTrue, TestNotApplicable
MSTATUS_UIE = 0x00000001
MSTATUS_SIE = 0x00000002
@@ -119,7 +119,6 @@ class SimpleT1Test(SimpleRegisterTest):
class SimpleF18Test(SimpleRegisterTest):
def check_reg(self, name, alias):
if self.hart.extensionSupported('F'):
- self.gdb.p_raw("$mstatus=$mstatus | 0x00006000")
self.gdb.stepi()
a = random.random()
b = random.random()
@@ -536,7 +535,7 @@ class DebugBreakpoint(DebugTest):
class Hwbp1(DebugTest):
def test(self):
if self.hart.instruction_hardware_breakpoint_count < 1:
- return 'not_applicable'
+ raise TestNotApplicable
if not self.hart.honors_tdata1_hmode:
# Run to main before setting the breakpoint, because startup code
@@ -558,7 +557,7 @@ class Hwbp1(DebugTest):
class Hwbp2(DebugTest):
def test(self):
if self.hart.instruction_hardware_breakpoint_count < 2:
- return 'not_applicable'
+ raise TestNotApplicable
self.gdb.command("delete")
self.gdb.hbreak("main")
@@ -800,7 +799,7 @@ class MulticoreRunAllHaltOne(GdbTest):
def test(self):
if not self.gdb.one_hart_per_gdb():
- return 'not_applicable'
+ raise TestNotApplicable
# Run harts in reverse order
for h in reversed(self.target.harts):
@@ -828,7 +827,7 @@ class MulticoreRtosSwitchActiveHartTest(GdbTest):
def test(self):
if self.gdb.one_hart_per_gdb():
- return 'not_applicable'
+ raise TestNotApplicable
# Set breakpoint near '_start' label to increase the chances of a
# situation when all harts hit breakpoint immediately and
@@ -857,7 +856,7 @@ class SmpSimultaneousRunHalt(GdbTest):
def test(self):
if self.gdb.one_hart_per_gdb() or not self.server.smp():
- return 'not_applicable'
+ raise TestNotApplicable
old_mtime = set()
for _ in range(5):
@@ -1230,7 +1229,7 @@ class PrivChange(PrivTest):
"""Test that the core's privilege level actually changes."""
if 0 not in self.supported:
- return 'not_applicable'
+ raise TestNotApplicable
self.gdb.b("main")
self.gdb.c()
diff --git a/debug/targets.py b/debug/targets.py
index c4bee73..d83e84b 100644
--- a/debug/targets.py
+++ b/debug/targets.py
@@ -43,8 +43,7 @@ class Hart(object):
# target.misa is set by testlib.ExamineTarget
if self.misa:
return self.misa & (1 << (ord(letter.upper()) - ord('A')))
- else:
- return False
+ return False
class Target(object):
# pylint: disable=too-many-instance-attributes
diff --git a/debug/targets/RISC-V/spike64-2.py b/debug/targets/RISC-V/spike64-2.py
index 596098d..8534ee7 100644
--- a/debug/targets/RISC-V/spike64-2.py
+++ b/debug/targets/RISC-V/spike64-2.py
@@ -6,7 +6,9 @@ import spike64 # pylint: disable=import-error
class spike64_2(targets.Target):
harts = [spike64.spike64_hart(), spike64.spike64_hart()]
openocd_config_path = "spike-2.cfg"
- timeout_sec = 10
+ # Increased timeout because we use abstract_rti to artificially slow things
+ # down.
+ timeout_sec = 20
implements_custom_test = True
support_hasel = False
diff --git a/debug/testlib.py b/debug/testlib.py
index 5c2366a..e80dd32 100644
--- a/debug/testlib.py
+++ b/debug/testlib.py
@@ -514,26 +514,27 @@ class Gdb(object):
self.select_child(child)
self.command(command)
- def c(self, wait=True, async=False, checkOutput=True, ops=20):
+ def c(self, wait=True, sync=True, checkOutput=True, ops=20):
"""
Dumb c command.
In RTOS mode, gdb will resume all harts.
In multi-gdb mode, this command will just go to the current gdb, so
will only resume one hart.
"""
- if async:
- async = "&"
+ if sync:
+ sync = ""
else:
- async = ""
+ sync = "&"
if wait:
- output = self.command("c%s" % async, ops=ops)
+ output = self.command("c%s" % sync, ops=ops)
if checkOutput:
assert "Continuing" in output
assert "Could not insert hardware" not in output
return output
else:
- self.active_child.sendline("c%s" % async)
+ self.active_child.sendline("c%s" % sync)
self.active_child.expect("Continuing", timeout=ops * self.timeout)
+ return ""
def c_all(self, wait=True):
"""
@@ -579,7 +580,7 @@ class Gdb(object):
return output.split('=', 1)[-1].strip()
def p(self, obj, fmt="/x", ops=1):
- output = self.command("p%s %s" % (fmt, obj), ops=ops)
+ output = self.command("p%s %s" % (fmt, obj), ops=ops).splitlines()[-1]
m = re.search("Cannot access memory at address (0x[0-9a-f]+)", output)
if m:
raise CannotAccess(int(m.group(1), 0))
@@ -1017,7 +1018,7 @@ class TestFailed(Exception):
self.message += ": %s" % comment
class TestNotApplicable(Exception):
- def __init__(self, message):
+ def __init__(self, message=""):
Exception.__init__(self)
self.message = message