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"
|
#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:
|
* qemu_semihosting_console_read:
|
||||||
* @cs: CPUState
|
* @cs: CPUState
|
||||||
|
@ -16,23 +16,6 @@
|
|||||||
#include "user-internals.h"
|
#include "user-internals.h"
|
||||||
#include <termios.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
|
* 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
|
* 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
|
#define FIFO_SIZE 1024
|
||||||
|
|
||||||
static int console_can_read(void *opaque)
|
static int console_can_read(void *opaque)
|
||||||
|
Loading…
Reference in New Issue
Block a user