From: Richard Henderson Date: Mon, 2 May 2022 00:42:43 +0000 (-0700) Subject: semihosting: Use console_in_gf for SYS_READC X-Git-Tag: qemu-xen-4.18.0-rc5~644^2~12 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=1577eec0fca6fd67bdc0727d10de4bdc3f8afa95;p=qemu-xen.git semihosting: Use console_in_gf for SYS_READC Reviewed-by: Luc Michel Signed-off-by: Richard Henderson --- diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index fdb143ace8..9d4d6d2812 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -302,6 +302,22 @@ common_semi_flen_fstat_cb(CPUState *cs, uint64_t ret, int err) common_semi_cb(cs, ret, err); } +static void +common_semi_readc_cb(CPUState *cs, uint64_t ret, int err) +{ + if (!err) { + CPUArchState *env G_GNUC_UNUSED = cs->env_ptr; + uint8_t ch; + + if (get_user_u8(ch, common_semi_stack_bottom(cs) - 1)) { + ret = -1, err = EFAULT; + } else { + ret = ch; + } + } + common_semi_cb(cs, ret, err); +} + #define SHFB_MAGIC_0 0x53 #define SHFB_MAGIC_1 0x48 #define SHFB_MAGIC_2 0x46 @@ -428,15 +444,8 @@ void do_common_semihosting(CPUState *cs) break; case TARGET_SYS_READC: - { - uint8_t ch; - int ret = qemu_semihosting_console_read(cs, &ch, 1); - if (ret == 1) { - common_semi_cb(cs, ch, 0); - } else { - common_semi_cb(cs, -1, EIO); - } - } + semihost_sys_read_gf(cs, common_semi_readc_cb, &console_in_gf, + common_semi_stack_bottom(cs) - 1, 1); break; case TARGET_SYS_ISERROR: