diff options
author | Richard Henderson <richard.henderson@linaro.org> | 2022-05-01 17:55:20 -0700 |
---|---|---|
committer | Richard Henderson <richard.henderson@linaro.org> | 2022-06-28 04:39:56 +0530 |
commit | 5d77289dac9917db89d56f558bcf7c3a82332222 (patch) | |
tree | 67782206011459999dfd3cfeb3b425e27644331a /semihosting | |
parent | 1577eec0fca6fd67bdc0727d10de4bdc3f8afa95 (diff) | |
download | qemu-5d77289dac9917db89d56f558bcf7c3a82332222.zip qemu-5d77289dac9917db89d56f558bcf7c3a82332222.tar.gz qemu-5d77289dac9917db89d56f558bcf7c3a82332222.tar.bz2 |
semihosting: Use console_out_gf for SYS_WRITEC
Reviewed-by: Luc Michel <lmichel@kalray.eu>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'semihosting')
-rw-r--r-- | semihosting/arm-compat-semi.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 9d4d6d2..d61b773 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -229,6 +229,15 @@ static void common_semi_cb(CPUState *cs, uint64_t ret, int err) } /* + * Use 0xdeadbeef as the return value when there isn't a defined + * return value for the call. + */ +static void common_semi_dead_cb(CPUState *cs, uint64_t ret, int err) +{ + common_semi_set_ret(cs, 0xdeadbeef); +} + +/* * SYS_READ and SYS_WRITE always return the number of bytes not read/written. * There is no error condition, other than returning the original length. */ @@ -341,8 +350,7 @@ static const uint8_t featurefile_data[] = { * The specification always says that the "return register" either * returns a specific value or is corrupted, so we don't need to * report to our caller whether we are returning a value or trying to - * leave the register unchanged. We use 0xdeadbeef as the return value - * when there isn't a defined return value for the call. + * leave the register unchanged. */ void do_common_semihosting(CPUState *cs) { @@ -420,8 +428,12 @@ void do_common_semihosting(CPUState *cs) break; case TARGET_SYS_WRITEC: - qemu_semihosting_console_outc(env, args); - common_semi_set_ret(cs, 0xdeadbeef); + /* + * FIXME: the byte to be written is in a target_ulong slot, + * which means this is wrong for a big-endian guest. + */ + semihost_sys_write_gf(cs, common_semi_dead_cb, + &console_out_gf, args, 1); break; case TARGET_SYS_WRITE0: |