semihosting: Use console_in_gf for SYS_READC

Reviewed-by: Luc Michel <lmichel@kalray.eu>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2022-05-01 17:42:43 -07:00
parent e4a4aaa51b
commit 1577eec0fc

View File

@ -302,6 +302,22 @@ common_semi_flen_fstat_cb(CPUState *cs, uint64_t ret, int err)
common_semi_cb(cs, ret, 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_0 0x53
#define SHFB_MAGIC_1 0x48 #define SHFB_MAGIC_1 0x48
#define SHFB_MAGIC_2 0x46 #define SHFB_MAGIC_2 0x46
@ -428,15 +444,8 @@ void do_common_semihosting(CPUState *cs)
break; break;
case TARGET_SYS_READC: case TARGET_SYS_READC:
{ semihost_sys_read_gf(cs, common_semi_readc_cb, &console_in_gf,
uint8_t ch; common_semi_stack_bottom(cs) - 1, 1);
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);
}
}
break; break;
case TARGET_SYS_ISERROR: case TARGET_SYS_ISERROR: