summaryrefslogtreecommitdiffstats
path: root/target/arm/arm-semi.c
diff options
context:
space:
mode:
authorAlex Bennée2019-05-14 12:07:15 +0200
committerAlex Bennée2019-05-28 11:28:50 +0200
commit0dc077212f6c1897e5bf39d1ab8e6bf23395ac4c (patch)
treec376e4e2dee8dd1cbb6b305942a245d4994f49a3 /target/arm/arm-semi.c
parenttarget/arm: fixup some of the commentary for arm-semi (diff)
downloadqemu-0dc077212f6c1897e5bf39d1ab8e6bf23395ac4c.tar.gz
qemu-0dc077212f6c1897e5bf39d1ab8e6bf23395ac4c.tar.xz
qemu-0dc077212f6c1897e5bf39d1ab8e6bf23395ac4c.zip
target/arm: use the common interface for WRITE0/WRITEC in arm-semi
Now we have a common semihosting console interface use that for our string output. However ARM is currently unique in also supporting semihosting for linux-user so we need to replicate the API in linux-user. If other architectures gain this support we can move the file later. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'target/arm/arm-semi.c')
-rw-r--r--target/arm/arm-semi.c29
1 files changed, 4 insertions, 25 deletions
diff --git a/target/arm/arm-semi.c b/target/arm/arm-semi.c
index d812eef151..384b01124e 100644
--- a/target/arm/arm-semi.c
+++ b/target/arm/arm-semi.c
@@ -27,6 +27,7 @@
#include "cpu.h"
#include "hw/semihosting/semihost.h"
+#include "hw/semihosting/console.h"
#ifdef CONFIG_USER_ONLY
#include "qemu.h"
@@ -313,32 +314,10 @@ target_ulong do_arm_semihosting(CPUARMState *env)
return set_swi_errno(ts, close(arg0));
}
case TARGET_SYS_WRITEC:
- {
- char c;
-
- if (get_user_u8(c, args))
- /* FIXME - should this error code be -TARGET_EFAULT ? */
- return (uint32_t)-1;
- /* Write to debug console. stderr is near enough. */
- if (use_gdb_syscalls()) {
- return arm_gdb_syscall(cpu, arm_semi_cb, "write,2,%x,1", args);
- } else {
- return write(STDERR_FILENO, &c, 1);
- }
- }
+ qemu_semihosting_console_out(env, args, 1);
+ return 0xdeadbeef;
case TARGET_SYS_WRITE0:
- if (!(s = lock_user_string(args)))
- /* FIXME - should this error code be -TARGET_EFAULT ? */
- return (uint32_t)-1;
- len = strlen(s);
- if (use_gdb_syscalls()) {
- return arm_gdb_syscall(cpu, arm_semi_cb, "write,2,%x,%x",
- args, len);
- } else {
- ret = write(STDERR_FILENO, s, len);
- }
- unlock_user(s, args, 0);
- return ret;
+ return qemu_semihosting_console_out(env, args, 0);
case TARGET_SYS_WRITE:
GET_ARG(0);
GET_ARG(1);