mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
8de702cb67
Provides a blocking call to read a character from the console using semihosting.chardev, if specified. This takes some careful command line options to use stdio successfully as the serial ports, monitor and semihost all want to use stdio. Here's a sample set of command line options which share stdio between semihost, monitor and serial ports: qemu \ -chardev stdio,mux=on,id=stdio0 \ -serial chardev:stdio0 \ -semihosting-config enable=on,chardev=stdio0 \ -mon chardev=stdio0,mode=readline This creates a chardev hooked to stdio and then connects all of the subsystems to it. A shorter mechanism would be good to hear about. Signed-off-by: Keith Packard <keithp@keithp.com> Message-Id: <20191104204230.12249-1-keithp@keithp.com> [AJB: fixed up deadlock, minor commit title reword] Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Cc: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Keith Packard <keithp@keithp.com> Tested-by: Keith Packard <keithp@keithp.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
75 lines
1.3 KiB
C
75 lines
1.3 KiB
C
/*
|
|
* Semihosting Stubs for SoftMMU
|
|
*
|
|
* Copyright (c) 2019 Linaro Ltd
|
|
*
|
|
* Stubs for SoftMMU targets that don't actually do semihosting.
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
#include "qemu/osdep.h"
|
|
#include "qemu/option.h"
|
|
#include "qemu/error-report.h"
|
|
#include "hw/semihosting/semihost.h"
|
|
#include "sysemu/sysemu.h"
|
|
|
|
/* Empty config */
|
|
QemuOptsList qemu_semihosting_config_opts = {
|
|
.name = "",
|
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_semihosting_config_opts.head),
|
|
.desc = {
|
|
{ /* end of list */ }
|
|
},
|
|
};
|
|
|
|
/* Queries to config status default to off */
|
|
bool semihosting_enabled(void)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
SemihostingTarget semihosting_get_target(void)
|
|
{
|
|
return SEMIHOSTING_TARGET_AUTO;
|
|
}
|
|
|
|
/*
|
|
* All the rest are empty subs. We could g_assert_not_reached() but
|
|
* that adds extra weight to the final binary. Waste not want not.
|
|
*/
|
|
void qemu_semihosting_enable(void)
|
|
{
|
|
}
|
|
|
|
int qemu_semihosting_config_options(const char *optarg)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
const char *semihosting_get_arg(int i)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
int semihosting_get_argc(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
const char *semihosting_get_cmdline(void)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
void semihosting_arg_fallback(const char *file, const char *cmd)
|
|
{
|
|
}
|
|
|
|
void qemu_semihosting_connect_chardevs(void)
|
|
{
|
|
}
|
|
|
|
void qemu_semihosting_console_init(void)
|
|
{
|
|
}
|