-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'remotes/stsquad/tags/pull-testing-next-…
…280519-2' into staging Various testing updates - semihosting re-factor (used in system tests) - aarch64 and alpha system tests - editorconfig tweak for .S - some docker image updates - iotests clean-up (without make check inclusion) # gpg: Signature made Tue 28 May 2019 17:26:34 BST # gpg: using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44 # gpg: Good signature from "Alex Bennée (Master Work Key) <[email protected]>" [full] # Primary key fingerprint: 6685 AE99 E751 67BC AFC8 DF35 FBD0 DB09 5A9E 2A44 * remotes/stsquad/tags/pull-testing-next-280519-2: (27 commits) tests/qemu-iotests: re-format output to for make check-block tests/qemu-iotests/group: Re-use the "auto" group for tests that can always run Makefile.target: support per-target coverage reports Makefile: include per-target build directories in coverage report Makefile: fix coverage-report reference to BUILD_DIR .travis.yml: enable aarch64-softmmu and alpha-softmmu tcg tests tests/tcg/alpha: add system boot.S tests/tcg/multiarch: expand system memory test to cover more tests/tcg/minilib: support %c format char tests/tcg/multiarch: move the system memory test tests/tcg/aarch64: add system boot.S editorconfig: add settings for .s/.S files tests/tcg/multiarch: add hello world system test tests/tcg/multiarch: add support for multiarch system tests tests/docker: Test more components on the Fedora default image tests/docker: add ubuntu 18.04 MAINTAINERS: update for semihostings new home target/mips: convert UHI_plog to use common semihosting code target/mips: only build mips-semi for softmmu target/arm: correct return values for WRITE/READ in arm-semi ... Signed-off-by: Peter Maydell <[email protected]>
- Loading branch information
Showing
58 changed files
with
2,178 additions
and
580 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -470,6 +470,7 @@ M: Richard Henderson <[email protected]> | |
S: Maintained | ||
F: hw/alpha/ | ||
F: hw/isa/smc37c669-superio.c | ||
F: tests/tcg/alpha/system/ | ||
|
||
ARM Machines | ||
------------ | ||
|
@@ -2563,6 +2564,13 @@ F: docs/pvrdma.txt | |
F: contrib/rdmacm-mux/* | ||
F: qapi/rdma.json | ||
|
||
Semihosting | ||
M: Alex Bennée <[email protected]> | ||
L: [email protected] | ||
S: Maintained | ||
F: hw/semihosting/ | ||
F: include/hw/semihosting/ | ||
|
||
Build and test automation | ||
------------------------- | ||
Build and test automation | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -39,3 +39,4 @@ CONFIG_MICROBIT=y | |
CONFIG_FSL_IMX25=y | ||
CONFIG_FSL_IMX7=y | ||
CONFIG_FSL_IMX6UL=y | ||
CONFIG_SEMIHOSTING=y |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,7 @@ | ||
# Default configuration for m68k-softmmu | ||
|
||
CONFIG_SEMIHOSTING=y | ||
|
||
# Boards: | ||
# | ||
CONFIG_AN5206=y | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,7 @@ | ||
# Default configuration for nios2-softmmu | ||
|
||
CONFIG_SEMIHOSTING=y | ||
|
||
# Boards: | ||
# | ||
CONFIG_NIOS2_10M50=y | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,7 @@ | ||
# Default configuration for Xtensa | ||
|
||
CONFIG_SEMIHOSTING=y | ||
|
||
# Boards: | ||
# | ||
CONFIG_XTENSA_SIM=y | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
|
||
config SEMIHOSTING | ||
bool |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
obj-$(CONFIG_SEMIHOSTING) += config.o | ||
obj-$(CONFIG_SEMIHOSTING) += console.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,186 @@ | ||
/* | ||
* Semihosting configuration | ||
* | ||
* Copyright (c) 2015 Imagination Technologies | ||
* Copyright (c) 2019 Linaro Ltd | ||
* | ||
* This controls the configuration of semihosting for all guest | ||
* targets that support it. Architecture specific handling is handled | ||
* in target/HW/HW-semi.c | ||
* | ||
* Semihosting is sightly strange in that it is also supported by some | ||
* linux-user targets. However in that use case no configuration of | ||
* the outputs and command lines is supported. | ||
* | ||
* The config module is common to all softmmu targets however as vl.c | ||
* needs to link against the helpers. | ||
* | ||
* SPDX-License-Identifier: GPL-2.0-or-later | ||
*/ | ||
|
||
#include "qemu/osdep.h" | ||
#include "qemu/option.h" | ||
#include "qemu/config-file.h" | ||
#include "qemu/error-report.h" | ||
#include "hw/semihosting/semihost.h" | ||
#include "chardev/char.h" | ||
|
||
QemuOptsList qemu_semihosting_config_opts = { | ||
.name = "semihosting-config", | ||
.implied_opt_name = "enable", | ||
.head = QTAILQ_HEAD_INITIALIZER(qemu_semihosting_config_opts.head), | ||
.desc = { | ||
{ | ||
.name = "enable", | ||
.type = QEMU_OPT_BOOL, | ||
}, { | ||
.name = "target", | ||
.type = QEMU_OPT_STRING, | ||
}, { | ||
.name = "chardev", | ||
.type = QEMU_OPT_STRING, | ||
}, { | ||
.name = "arg", | ||
.type = QEMU_OPT_STRING, | ||
}, | ||
{ /* end of list */ } | ||
}, | ||
}; | ||
|
||
typedef struct SemihostingConfig { | ||
bool enabled; | ||
SemihostingTarget target; | ||
Chardev *chardev; | ||
const char **argv; | ||
int argc; | ||
const char *cmdline; /* concatenated argv */ | ||
} SemihostingConfig; | ||
|
||
static SemihostingConfig semihosting; | ||
static const char *semihost_chardev; | ||
|
||
bool semihosting_enabled(void) | ||
{ | ||
return semihosting.enabled; | ||
} | ||
|
||
SemihostingTarget semihosting_get_target(void) | ||
{ | ||
return semihosting.target; | ||
} | ||
|
||
const char *semihosting_get_arg(int i) | ||
{ | ||
if (i >= semihosting.argc) { | ||
return NULL; | ||
} | ||
return semihosting.argv[i]; | ||
} | ||
|
||
int semihosting_get_argc(void) | ||
{ | ||
return semihosting.argc; | ||
} | ||
|
||
const char *semihosting_get_cmdline(void) | ||
{ | ||
if (semihosting.cmdline == NULL && semihosting.argc > 0) { | ||
semihosting.cmdline = g_strjoinv(" ", (gchar **)semihosting.argv); | ||
} | ||
return semihosting.cmdline; | ||
} | ||
|
||
static int add_semihosting_arg(void *opaque, | ||
const char *name, const char *val, | ||
Error **errp) | ||
{ | ||
SemihostingConfig *s = opaque; | ||
if (strcmp(name, "arg") == 0) { | ||
s->argc++; | ||
/* one extra element as g_strjoinv() expects NULL-terminated array */ | ||
s->argv = g_realloc(s->argv, (s->argc + 1) * sizeof(void *)); | ||
s->argv[s->argc - 1] = val; | ||
s->argv[s->argc] = NULL; | ||
} | ||
return 0; | ||
} | ||
|
||
/* Use strings passed via -kernel/-append to initialize semihosting.argv[] */ | ||
void semihosting_arg_fallback(const char *file, const char *cmd) | ||
{ | ||
char *cmd_token; | ||
|
||
/* argv[0] */ | ||
add_semihosting_arg(&semihosting, "arg", file, NULL); | ||
|
||
/* split -append and initialize argv[1..n] */ | ||
cmd_token = strtok(g_strdup(cmd), " "); | ||
while (cmd_token) { | ||
add_semihosting_arg(&semihosting, "arg", cmd_token, NULL); | ||
cmd_token = strtok(NULL, " "); | ||
} | ||
} | ||
|
||
Chardev *semihosting_get_chardev(void) | ||
{ | ||
return semihosting.chardev; | ||
} | ||
|
||
void qemu_semihosting_enable(void) | ||
{ | ||
semihosting.enabled = true; | ||
semihosting.target = SEMIHOSTING_TARGET_AUTO; | ||
} | ||
|
||
int qemu_semihosting_config_options(const char *optarg) | ||
{ | ||
QemuOptsList *opt_list = qemu_find_opts("semihosting-config"); | ||
QemuOpts *opts = qemu_opts_parse_noisily(opt_list, optarg, false); | ||
|
||
semihosting.enabled = true; | ||
|
||
if (opts != NULL) { | ||
semihosting.enabled = qemu_opt_get_bool(opts, "enable", | ||
true); | ||
const char *target = qemu_opt_get(opts, "target"); | ||
/* setup of chardev is deferred until they are initialised */ | ||
semihost_chardev = qemu_opt_get(opts, "chardev"); | ||
if (target != NULL) { | ||
if (strcmp("native", target) == 0) { | ||
semihosting.target = SEMIHOSTING_TARGET_NATIVE; | ||
} else if (strcmp("gdb", target) == 0) { | ||
semihosting.target = SEMIHOSTING_TARGET_GDB; | ||
} else if (strcmp("auto", target) == 0) { | ||
semihosting.target = SEMIHOSTING_TARGET_AUTO; | ||
} else { | ||
error_report("unsupported semihosting-config %s", | ||
optarg); | ||
return 1; | ||
} | ||
} else { | ||
semihosting.target = SEMIHOSTING_TARGET_AUTO; | ||
} | ||
/* Set semihosting argument count and vector */ | ||
qemu_opt_foreach(opts, add_semihosting_arg, | ||
&semihosting, NULL); | ||
} else { | ||
error_report("unsupported semihosting-config %s", optarg); | ||
return 1; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
void qemu_semihosting_connect_chardevs(void) | ||
{ | ||
/* We had to defer this until chardevs were created */ | ||
if (semihost_chardev) { | ||
Chardev *chr = qemu_chr_find(semihost_chardev); | ||
if (chr == NULL) { | ||
error_report("semihosting chardev '%s' not found", | ||
semihost_chardev); | ||
exit(1); | ||
} | ||
semihosting.chardev = chr; | ||
} | ||
} |
Oops, something went wrong.