semihosting: Remove qemu_semihosting_console_outs
This function has been replaced by *_write. Reviewed-by: Luc Michel <lmichel@kalray.eu> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
7281550cfb
commit
2d010c2719
@ -11,19 +11,6 @@
|
||||
|
||||
#include "cpu.h"
|
||||
|
||||
/**
|
||||
* qemu_semihosting_console_outs:
|
||||
* @env: CPUArchState
|
||||
* @s: host address of null terminated guest string
|
||||
*
|
||||
* Send a null terminated guest string to the debug console. This may
|
||||
* be the remote gdb session if a softmmu guest is currently being
|
||||
* debugged.
|
||||
*
|
||||
* Returns: number of bytes written.
|
||||
*/
|
||||
int qemu_semihosting_console_outs(CPUArchState *env, target_ulong s);
|
||||
|
||||
/**
|
||||
* qemu_semihosting_console_read:
|
||||
* @cs: CPUState
|
||||
|
@ -16,23 +16,6 @@
|
||||
#include "user-internals.h"
|
||||
#include <termios.h>
|
||||
|
||||
int qemu_semihosting_console_outs(CPUArchState *env, target_ulong addr)
|
||||
{
|
||||
int len = target_strlen(addr);
|
||||
void *s;
|
||||
if (len < 0){
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"%s: passed inaccessible address " TARGET_FMT_lx,
|
||||
__func__, addr);
|
||||
return 0;
|
||||
}
|
||||
s = lock_user(VERIFY_READ, addr, (long)(len + 1), 1);
|
||||
g_assert(s); /* target_strlen has already verified this will work */
|
||||
len = write(STDERR_FILENO, s, len);
|
||||
unlock_user(s, addr, 0);
|
||||
return len;
|
||||
}
|
||||
|
||||
/*
|
||||
* For linux-user we can safely block. However as we want to return as
|
||||
* soon as a character is read we need to tweak the termio to disable
|
||||
|
@ -47,55 +47,6 @@ int qemu_semihosting_log_out(const char *s, int len)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* A re-implementation of lock_user_string that we can use locally
|
||||
* instead of relying on softmmu-semi. Hopefully we can deprecate that
|
||||
* in time. Copy string until we find a 0 or address error.
|
||||
*/
|
||||
static GString *copy_user_string(CPUArchState *env, target_ulong addr)
|
||||
{
|
||||
CPUState *cpu = env_cpu(env);
|
||||
GString *s = g_string_sized_new(128);
|
||||
uint8_t c;
|
||||
|
||||
do {
|
||||
if (cpu_memory_rw_debug(cpu, addr++, &c, 1, 0) == 0) {
|
||||
if (c) {
|
||||
s = g_string_append_c(s, c);
|
||||
}
|
||||
} else {
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"%s: passed inaccessible address " TARGET_FMT_lx,
|
||||
__func__, addr);
|
||||
break;
|
||||
}
|
||||
} while (c!=0);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
static void semihosting_cb(CPUState *cs, uint64_t ret, int err)
|
||||
{
|
||||
if (err) {
|
||||
qemu_log("%s: gdb console output failed (%d)\n", __func__, err);
|
||||
}
|
||||
}
|
||||
|
||||
int qemu_semihosting_console_outs(CPUArchState *env, target_ulong addr)
|
||||
{
|
||||
GString *s = copy_user_string(env, addr);
|
||||
int out = s->len;
|
||||
|
||||
if (use_gdb_syscalls()) {
|
||||
gdb_do_syscall(semihosting_cb, "write,2,%x,%x", addr, s->len);
|
||||
} else {
|
||||
out = qemu_semihosting_log_out(s->str, s->len);
|
||||
}
|
||||
|
||||
g_string_free(s, true);
|
||||
return out;
|
||||
}
|
||||
|
||||
#define FIFO_SIZE 1024
|
||||
|
||||
static int console_can_read(void *opaque)
|
||||
|
Loading…
Reference in New Issue
Block a user