semihosting: Create qemu_semihosting_console_write
authorRichard Henderson <richard.henderson@linaro.org>
Sun, 1 May 2022 19:42:37 +0000 (12:42 -0700)
committerRichard Henderson <richard.henderson@linaro.org>
Mon, 27 Jun 2022 23:05:52 +0000 (04:35 +0530)
Will replace qemu_semihosting_console_{outs,outc},
but we need more plumbing first.

Reviewed-by: Luc Michel <lmichel@kalray.eu>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
include/semihosting/console.h
linux-user/semihost.c
semihosting/console.c

index 39dbf1b062578c73050c1de3fb9fe0b25296b41b..6994f23c820b1e466a9e9f2a6b37e9cbf61ed4bd 100644 (file)
@@ -54,6 +54,18 @@ void qemu_semihosting_console_outc(CPUArchState *env, target_ulong c);
  */
 int qemu_semihosting_console_read(CPUState *cs, void *buf, int len);
 
+/**
+ * qemu_semihosting_console_write:
+ * @buf: host buffer
+ * @len: buffer size
+ *
+ * Write len bytes from buf to the debug console.
+ *
+ * Returns: number of bytes written -- this should only ever be short
+ * on some sort of i/o error.
+ */
+int qemu_semihosting_console_write(void *buf, int len);
+
 /**
  * qemu_semihosting_log_out:
  * @s: pointer to string
index 2029fb674c0c4ade0647c11d4aabfa4adcf6da7c..871edf993a5d14299320f32cdcbe83a7e0958b02 100644 (file)
@@ -76,3 +76,8 @@ int qemu_semihosting_console_read(CPUState *cs, void *buf, int len)
 
     return ret;
 }
+
+int qemu_semihosting_console_write(void *buf, int len)
+{
+    return fwrite(buf, 1, len, stderr);
+}
index 1d16a290c4333c32ba699a43cb1d7dd056c9aab4..540aa0cd4b7dd873620a8a7d2ecb79bbb8124972 100644 (file)
@@ -169,6 +169,15 @@ int qemu_semihosting_console_read(CPUState *cs, void *buf, int len)
     return ret;
 }
 
+int qemu_semihosting_console_write(void *buf, int len)
+{
+    if (console.chr) {
+        return qemu_chr_write_all(console.chr, (uint8_t *)buf, len);
+    } else {
+        return fwrite(buf, 1, len, stderr);
+    }
+}
+
 void qemu_semihosting_console_init(Chardev *chr)
 {
     console.chr = chr;