aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2018-04-16 12:14:13 -0700
committerGitHub <noreply@github.com>2018-04-16 12:14:13 -0700
commitfc8268fb59f0d017073a31a076800c8b7111db93 (patch)
tree944f34d9bb4f98fc804444003a6681547bc5c376
parentd63a6a4ad0057614d1c838c1b506b6fa0032de01 (diff)
parentdf93b0dc9a6580b4f74a10c50190e008d57f41f4 (diff)
downloadriscv-tests-fc8268fb59f0d017073a31a076800c8b7111db93.zip
riscv-tests-fc8268fb59f0d017073a31a076800c8b7111db93.tar.gz
riscv-tests-fc8268fb59f0d017073a31a076800c8b7111db93.tar.bz2
Merge pull request #123 from riscv/gdb_timeout
Compute gdb command timeout based on ops estimate
-rwxr-xr-xdebug/gdbserver.py2
-rw-r--r--debug/testlib.py30
2 files changed, 18 insertions, 14 deletions
diff --git a/debug/gdbserver.py b/debug/gdbserver.py
index c7bfbf0..d085e2e 100755
--- a/debug/gdbserver.py
+++ b/debug/gdbserver.py
@@ -835,7 +835,7 @@ class DownloadTest(GdbTest):
def test(self):
self.gdb.load()
self.gdb.command("b _exit")
- self.gdb.c(timeout=60)
+ self.gdb.c()
assertEqual(self.gdb.p("status"), self.crc)
os.unlink(self.download_c.name)
diff --git a/debug/testlib.py b/debug/testlib.py
index 2fa70df..38ae33b 100644
--- a/debug/testlib.py
+++ b/debug/testlib.py
@@ -424,7 +424,7 @@ class Gdb(object):
h = self.harts[hart.id]
self.select_child(h['child'])
if not h['solo']:
- output = self.command("thread %s" % h['thread'].id, timeout=10)
+ output = self.command("thread %s" % h['thread'].id, ops=5)
assert "Unknown" not in output
def push_state(self):
@@ -440,8 +440,11 @@ class Gdb(object):
"""Wait for prompt."""
self.active_child.expect(r"\(gdb\)")
- def command(self, command, timeout=6000):
- """timeout is in seconds"""
+ def command(self, command, ops=1):
+ """ops is the estimated number of operations gdb will have to perform
+ to perform this command. It is used to compute a timeout based on
+ self.timeout."""
+ timeout = ops * self.timeout
self.active_child.sendline(command)
self.active_child.expect("\n", timeout=timeout)
self.active_child.expect(r"\(gdb\)", timeout=timeout)
@@ -454,7 +457,7 @@ class Gdb(object):
self.select_child(child)
self.command(command)
- def c(self, wait=True, timeout=-1, async=False):
+ def c(self, wait=True, async=False):
"""
Dumb c command.
In RTOS mode, gdb will resume all harts.
@@ -465,13 +468,14 @@ class Gdb(object):
async = "&"
else:
async = ""
+ ops = 10
if wait:
- output = self.command("c%s" % async, timeout=timeout)
+ output = self.command("c%s" % async, ops=ops)
assert "Continuing" in output
return output
else:
self.active_child.sendline("c%s" % async)
- self.active_child.expect("Continuing")
+ self.active_child.expect("Continuing", timeout=ops * self.timeout)
def c_all(self):
"""
@@ -538,28 +542,28 @@ class Gdb(object):
return value
def stepi(self):
- output = self.command("stepi", timeout=60)
+ output = self.command("stepi", ops=10)
return output
def load(self):
- output = self.command("load", timeout=6000)
+ output = self.command("load", ops=1000)
assert "failed" not in output
assert "Transfer rate" in output
def b(self, location):
- output = self.command("b %s" % location)
+ output = self.command("b %s" % location, ops=5)
assert "not defined" not in output
assert "Breakpoint" in output
return output
def hbreak(self, location):
- output = self.command("hbreak %s" % location)
+ output = self.command("hbreak %s" % location, ops=5)
assert "not defined" not in output
assert "Hardware assisted breakpoint" in output
return output
def threads(self):
- output = self.command("info threads")
+ output = self.command("info threads", ops=100)
threads = []
for line in output.splitlines():
m = re.match(
@@ -842,8 +846,8 @@ class GdbTest(BaseTest):
if not self.gdb:
return
self.gdb.interrupt()
- self.gdb.command("disassemble")
- self.gdb.command("info registers all", timeout=10)
+ self.gdb.command("disassemble", ops=20)
+ self.gdb.command("info registers all", ops=100)
def classTeardown(self):
del self.gdb