From 0f07eccaf2139b129b074800cbbcfadee3b45a7e Mon Sep 17 00:00:00 2001 From: Tim Newsome Date: Mon, 16 May 2022 09:53:54 -0700 Subject: Test semihosting_fileio In the original test, confirm that stdout data ends up in the OpenOCD log. In the new test, with `arm semihosting_fileio` enabled, confirm that stdout data ends up in gdb's CLI. This test requires https://github.com/riscv/riscv-openocd/pull/699. --- debug/gdbserver.py | 27 ++++++++++++++++++++++++--- debug/programs/semihosting.c | 4 +++- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/debug/gdbserver.py b/debug/gdbserver.py index 7213183..2e5a18e 100755 --- a/debug/gdbserver.py +++ b/debug/gdbserver.py @@ -952,10 +952,9 @@ class Semihosting(GdbSingleHartTest): assertIn("Breakpoint", output) assertIn("_exit", output) assertEqual(self.gdb.p("status"), expected_result) + return output def test(self): - """Sending gdb ^C while the program is running should cause it to - halt.""" temp = tempfile.NamedTemporaryFile(suffix=".data") self.gdb.b("main:begin") @@ -966,6 +965,28 @@ class Semihosting(GdbSingleHartTest): contents = open(temp.name, "r").readlines() assertIn("Hello, world!\n", contents) + # stdout should end up in the OpenOCD log + log = open(self.server.logname).read() + assertIn("Do re mi fa so la ti do!", log) + +class SemihostingFileio(Semihosting): + def setup(self): + self.gdb.command("monitor arm semihosting_fileio enable") + super().setup() + + def test(self): + temp = tempfile.NamedTemporaryFile(suffix=".data") + + self.gdb.b("main:begin") + self.gdb.c() + self.gdb.p('filename="%s"' % temp.name, ops=3) + output = self.exit() + # stdout should end up in gdb's CLI + assertIn("Do re mi fa so la ti do!", output) + + contents = open(temp.name, "r").readlines() + assertIn("Hello, world!\n", contents) + class InterruptTest(GdbSingleHartTest): compile_args = ("programs/interrupt.c",) @@ -1464,7 +1485,7 @@ class DownloadTest(GdbTest): # TODO: remove the next line so we get a bit more code to download. The # line above that allows for more data runs into some error I don't # have time to track down right now. - length = min(2**14, max(2**10, self.hart.ram_size - 2048)) + #length = min(2**14, max(2**10, self.hart.ram_size - 2048)) self.download_c = tempfile.NamedTemporaryFile(prefix="download_", suffix=".c", delete=False) self.download_c.write(b"#include \n") diff --git a/debug/programs/semihosting.c b/debug/programs/semihosting.c index 2ceea8c..ea3fdde 100644 --- a/debug/programs/semihosting.c +++ b/debug/programs/semihosting.c @@ -65,9 +65,11 @@ int main() { char *filename = NULL; const char *message = "Hello, world!\n"; + const char *message2 = "Do re mi fa so la ti do!\n"; int fd; begin: fd = open(filename, O_WRONLY, 0644); write(fd, message, strlen(message)); -} \ No newline at end of file + write(1, message2, strlen(message2)); +} -- cgit v1.1