Age | Commit message (Collapse) | Author | Files | Lines |
|
present in pexpect match
Problem was observed on UnavailableMultiTest - this test was sporadically failing.
When the failure was observed the log of the failing test looked as follows:
```
File "/whatever/RISCVTests/debug/testlib.py", line 504, in <genexpr>
if all(targets[hart.id]["State"] == "running" for hart in harts):
~~~~~~~~~~~~~~~~^^^^^^^^^
KeyError: 'State'
```
Adding this modification to testlib.py
```
--- a/debug/testlib.py
+++ b/debug/testlib.py
@@ -498,6 +498,10 @@ class Openocd:
for line in lines[2:]:
if line.strip():
data.append(dict(zip(headers, line.split()[1:])))
+ str_data = str(data)
+ sys.stdout.flush()
+ sys.stdout.write(f"parsed targets:\n{result}\n===\n{str_data}\n---\n")
+ sys.stdout.flush()
return data
```
Allowed me to root cause the issue. Namely we have the following
situation:
```
parsed targets:
Exception ignored in: <function _TemporaryFileCloser.__del__ at 0x7f2dee64d1c0>
Traceback (most recent call last):
File "/usr/local/lib/python3.11/tempfile.py", line 450, in __del__
self.close()
File "/usr/local/lib/python3.11/tempfile.py", line 446, in close
unlink(self.name)
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/gdb@38873-8s6ud03x.log'
...
TargetName Type Endian TapName State
-- ------------------ ---------- ------ ------------------ ------------
0 riscv.cpu0 riscv little riscv.cpu running
1* riscv.cpu1 riscv little riscv.cpu running
===
[{'Exception': '"/usr/local/lib/python3.11/tempfile.py",', 'ignored': 'line', 'in:': '450,', ...
```
The only reasonable (to me) explanation for the observed behavior is below.
Here is how we connect to TCL-RPC server:
```
self.openocd_cli = pexpect.spawn(f"nc localhost {self.tclrpc_port}")
tty.setraw(self.openocd_cli.child_fd)
```
Later we request target list by issuing "targets" command:
```
self.command("targets")
```
Internally, pexpect.spawn implemented as follows:
- we fork the process
- set up pty and then call execve
- all these steps are written in python
"Exception ignored" messages are result of exceptions thrown from
finalizers of NamedTemporaryFile objects. When exception is thrown from
the finalizer - python unconditionally prints a "warning" to stderr. It
seems that these messages are polluting our output from "nc" since python
GC can be invoked before the execve syscall.
The workaround is just to make sure that execve was executed before we
rely on the format of command output. To have such a guarantee we just
issue a dummy "echo" command and check that we have a proper reply in the
output stream.
While this explanation looks convincing, the behavior above still looks
strange, given that we have https://bugs.python.org/issue14548 which
was resolved long ago.
However, the proposed workaround fixes the issue.
|
|
Remove old warning check in RepeatReadTest
|
|
debug: Fix nonexistent trigger registers trap handle in entry.S
|
|
Use Ubuntu 20.04 for debug tests
|
|
debug: Fix loading of empty exclude lists with comments
|
|
This patch fixes the case when we are using an empty exception list (for example just a YAML file with comments but without any test items to skip).
|
|
Spike simulator is very demanding to CPU resources. This causes debug
tests to sporadically fail on slower machines. Increasing of gdb's
`remotetimeout` should get rid of such failures, unless we run the
testsuite on a potato.
The only downside is that if OpenOCD is broken, tests can run longer.
However, I think this is the sacrifice we can make, since execution time
is not affected if everything works as expected.
|
|
|
|
Check the mcontrol triggers, no other triggers.
|
|
|
|
Signed-off-by: 梁镇 <zhen.liang@spacemit.com>
Change-Id: I4657a0417b79d515655f6ad4a5ba4465ca58061f
|
|
Clear breakpoints so that gdb will not single step
|
|
improvements to debug tests infrastructure to help with triaging process
|
|
Add virtual memory synchronization after completing the page tables
|
|
Restore $stap and $mstatus after test translate
|
|
See https://github.com/riscv/riscv-debug-spec/blob/f510a7dd33317d0eee0f26b4fa082cd43a5ac7ea/Sdtrig.tex#L213-L214
|
|
Add bitmanip test cases
|
|
Signed-off-by: Roger Chang <rogerycchang@google.com>
|
|
Signed-off-by: Roger Chang <rogerycchang@google.com>
|
|
Signed-off-by: Roger Chang <rogerycchang@google.com>
|
|
Signed-off-by: Roger Chang <rogerycchang@google.com>
|
|
Signed-off-by: liangzhen <zhen.liang@spacemit.com>
Change-Id: Iac914aef8080411e6acd9039c4bdfa728533103c
|
|
If Svnapot is not implemented, skip the test.
|
|
If Svnapot is not implemented, a page fault will occur when accessing a page with napot specified.
In this case, let the test pass.
|
|
Signed-off-by: liangzhen <zhen.liang@spacemit.com>
Change-Id: I7a4a24972cfa2ddc307a5f06fe3fd5380794719f
|
|
Signed-off-by: liangzhen <zhen.liang@spacemit.com>
Change-Id: Ida1490338d204541c5c7f143aec3b8d79d83d7f4
|
|
fixes setting of `remotetimeout`. It was silently overwritten by default
values from platform definition even if user specified one.
|
|
introduce a new option to log communications over GDB remote serial
protocol which is helpful for debugging some tests.
|
|
Previously the seed was not printed and this created problems with
reproduction of the issues. It's still not an ideal - meaning
interactions between spike/gdb/openocd are inherently non-determistic
(since time is involved), but at least we should get the same sources
for the same seed now.
|
|
Uses appropriate addi instruction in lrsc test.
|
|
|
|
Signed-off-by: liangzhen <zhen.liang@spacemit.com>
|
|
debug: use TCL-RPC to fetch results of OpenOCD commands instead of parsing log file
|
|
log file
Quick and dirty fix for https://github.com/riscv-software-src/riscv-tests/issues/520
|
|
Support limits_icount_to_one in IcountTest
|
|
This is taking into account that the hardware limits count to 1.
Signed-off-by: liangzhen <zhen.liang@spacemit.com>
|
|
Make the non-existent csr configurable
|
|
Make CLINT address configurable
|
|
debug: Add UnavailableHaltedTest
|
|
Signed-off-by: liangzhen <zhen.liang@spacemit.com>
|
|
Signed-off-by: liangzhen <zhen.liang@spacemit.com>
|
|
Test behavior when a hart becomes unavailable while halted.
|
|
debug: Document that pexpect is needed.
|
|
Resolves #510.
|
|
Disable timer interrupt to fix some bugs
|
|
Signed-off-by: liangzhen <zhen.liang@spacemit.com>
|
|
debug: Add Openocd.set_available()
|
|
debug: Better interlock when interacting with gdb CLI.
|
|
This helper uses dmi_write commands to mark harts
available/unavailable.
|
|
debug: Make Openocd.targets() tolerate blank lines.
|