mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'pull-10.2-maintainer-291025-1' of https://gitlab.com/stsquad/qemu into staging
maintainer updates for 10.2 - clean-up remaining 32 bit armhf bits in ci - rationalise build-environment.yml for Debian and Ubuntu - generate a Debian ppc64 package list - rationalise gitlab-runner.yml for Debian and Ubuntu - new TCG plugin feature to track discontinuities - add missing CFI annotation to plugin callbacks - drop SBSA_REF from minimal Arm build - format string fix for gdbstub syscall response - simplify the gdbstub flen handling for semihosting # -----BEGIN PGP SIGNATURE----- # # iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmkCInQACgkQ+9DbCVqe # KkSZRwf/ReHIqQMxf8TqthskX8PLGUvsvWMkJptpu0Yc4HyU6DSjdPbU4L0tOmLU # ss2sb+dZncp1iRxHpqOhPJ+a987RHHzFbz2GQ/nV37D7BTwtq0iID4SxmdfiYOAm # VVm/WQ0HMjIYY84rzfE6U/3H+FgL+GaPbB0WYa5CtKpMOHMl4gJgoSsxljXQrmYe # BCC+Z9loVUAnKVVM5BUMP/0Agfn0CUZlUHGEn6RvmNg81dJ5DWCfO9yW1EezLZmc # PhS/txAWrpTqktPxN4h+um8ILvej5FF8nnNCsxodxD1XZImWsxawxcQAcgQQJGWu # dFLBMre7QSM1ddIOgdyZt+zuDcpUiA== # =QEqf # -----END PGP SIGNATURE----- # gpg: Signature made Wed 29 Oct 2025 03:19:32 PM CET # gpg: using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44 # gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 6685 AE99 E751 67BC AFC8 DF35 FBD0 DB09 5A9E 2A44 * tag 'pull-10.2-maintainer-291025-1' of https://gitlab.com/stsquad/qemu: (35 commits) semihosting: Fix GDB File-I/O FLEN gdbstub: Fix %s formatting configs: drop SBSA_REF from minimal specification plugins/core: add missing QEMU_DISABLE_CFI annotations tests: add test with interrupted memory accesses on rv64 tests: add test for double-traps on rv64 tests: add plugin asserting correctness of discon event's to_pc target/xtensa: call plugin trap callbacks target/tricore: call plugin trap callbacks target/sparc: call plugin trap callbacks target/sh4: call plugin trap callbacks target/s390x: call plugin trap callbacks target/rx: call plugin trap callbacks target/riscv: call plugin trap callbacks target/ppc: call plugin trap callbacks target/openrisc: call plugin trap callbacks target/mips: call plugin trap callbacks target/microblaze: call plugin trap callbacks target/m68k: call plugin trap callbacks target/loongarch: call plugin trap callbacks ... Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
@@ -107,7 +107,5 @@ ubuntu-24.04-aarch64-notcg:
|
||||
rules:
|
||||
- if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH =~ /^staging/'
|
||||
when: manual
|
||||
allow_failure: true
|
||||
- if: "$AARCH64_RUNNER_AVAILABLE"
|
||||
when: manual
|
||||
allow_failure: true
|
||||
|
||||
@@ -6,4 +6,3 @@
|
||||
#
|
||||
|
||||
CONFIG_ARM_VIRT=y
|
||||
CONFIG_SBSA_REF=y
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
contrib_plugins = ['bbv', 'cache', 'cflow', 'drcov', 'execlog', 'hotblocks',
|
||||
'hotpages', 'howvec', 'hwprofile', 'ips', 'stoptrigger',
|
||||
'uftrace']
|
||||
'traps', 'uftrace']
|
||||
if host_os != 'windows'
|
||||
# lockstep uses socket.h
|
||||
contrib_plugins += 'lockstep'
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
* Copyright (C) 2025, Julian Ganz <neither@nut.email>
|
||||
*
|
||||
* Traps - count traps
|
||||
*
|
||||
* Count the number of interrupts (asyncronous events), exceptions (synchronous
|
||||
* events) and host calls (e.g. semihosting) per cpu and report those counts on
|
||||
* exit.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <qemu-plugin.h>
|
||||
|
||||
QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
|
||||
|
||||
typedef struct {
|
||||
uint64_t interrupts;
|
||||
uint64_t exceptions;
|
||||
uint64_t hostcalls;
|
||||
} TrapCounters;
|
||||
|
||||
static struct qemu_plugin_scoreboard *traps;
|
||||
|
||||
static void vcpu_discon(qemu_plugin_id_t id, unsigned int vcpu_index,
|
||||
enum qemu_plugin_discon_type type, uint64_t from_pc,
|
||||
uint64_t to_pc)
|
||||
{
|
||||
TrapCounters *rec = qemu_plugin_scoreboard_find(traps, vcpu_index);
|
||||
switch (type) {
|
||||
case QEMU_PLUGIN_DISCON_INTERRUPT:
|
||||
rec->interrupts++;
|
||||
break;
|
||||
case QEMU_PLUGIN_DISCON_EXCEPTION:
|
||||
rec->exceptions++;
|
||||
break;
|
||||
case QEMU_PLUGIN_DISCON_HOSTCALL:
|
||||
rec->hostcalls++;
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void plugin_exit(qemu_plugin_id_t id, void *p)
|
||||
{
|
||||
g_autoptr(GString) report;
|
||||
report = g_string_new("VCPU, interrupts, exceptions, hostcalls\n");
|
||||
int max_vcpus = qemu_plugin_num_vcpus();
|
||||
int vcpu;
|
||||
|
||||
for (vcpu = 0; vcpu < max_vcpus; vcpu++) {
|
||||
TrapCounters *rec = qemu_plugin_scoreboard_find(traps, vcpu);
|
||||
g_string_append_printf(report,
|
||||
"% 4d, % 10"PRId64", % 10"PRId64", % 10"PRId64
|
||||
"\n", vcpu, rec->interrupts, rec->exceptions,
|
||||
rec->hostcalls);
|
||||
}
|
||||
|
||||
qemu_plugin_outs(report->str);
|
||||
qemu_plugin_scoreboard_free(traps);
|
||||
}
|
||||
|
||||
QEMU_PLUGIN_EXPORT
|
||||
int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
|
||||
int argc, char **argv)
|
||||
{
|
||||
if (!info->system_emulation) {
|
||||
qemu_plugin_outs("Note: interrupts are only reported in system"
|
||||
" emulation mode.");
|
||||
}
|
||||
|
||||
traps = qemu_plugin_scoreboard_new(sizeof(TrapCounters));
|
||||
|
||||
qemu_plugin_register_vcpu_discon_cb(id, QEMU_PLUGIN_DISCON_ALL,
|
||||
vcpu_discon);
|
||||
|
||||
qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1015,6 +1015,14 @@ interesting to generate them around a particular point of execution::
|
||||
# generate trace around init execution (2 seconds):
|
||||
$ uftrace dump --chrome --time-range=1753122320~1753122322 > init.json
|
||||
|
||||
Count traps
|
||||
...........
|
||||
|
||||
``contrib/plugins/traps.c``
|
||||
|
||||
This plugin counts the number of interrupts (asyncronous events), exceptions
|
||||
(synchronous events) and host calls (e.g. semihosting) per cpu.
|
||||
|
||||
Other emulation features
|
||||
------------------------
|
||||
|
||||
|
||||
@@ -168,13 +168,6 @@ If you've got access to an aarch64 host that can be used as a gitlab-CI
|
||||
runner, you can set this variable to enable the tests that require this
|
||||
kind of host. The runner should be tagged with "aarch64".
|
||||
|
||||
AARCH32_RUNNER_AVAILABLE
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
If you've got access to an armhf host or an arch64 host that can run
|
||||
aarch32 EL0 code to be used as a gitlab-CI runner, you can set this
|
||||
variable to enable the tests that require this kind of host. The
|
||||
runner should be tagged with "aarch32".
|
||||
|
||||
S390X_RUNNER_AVAILABLE
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
If you've got access to an IBM Z host that can be used as a gitlab-CI
|
||||
|
||||
+1
-1
@@ -127,7 +127,7 @@ void gdb_do_syscall(gdb_syscall_complete_cb cb, const char *fmt, ...)
|
||||
case 's':
|
||||
i64 = va_arg(va, uint64_t);
|
||||
i32 = va_arg(va, uint32_t);
|
||||
p += snprintf(p, p_end - p, "%" PRIx64 "/%x" PRIx32, i64, i32);
|
||||
p += snprintf(p, p_end - p, "%" PRIx64 "/%" PRIx32, i64, i32);
|
||||
break;
|
||||
default:
|
||||
bad_format:
|
||||
|
||||
@@ -20,6 +20,9 @@ enum qemu_plugin_event {
|
||||
QEMU_PLUGIN_EV_VCPU_SYSCALL_RET,
|
||||
QEMU_PLUGIN_EV_FLUSH,
|
||||
QEMU_PLUGIN_EV_ATEXIT,
|
||||
QEMU_PLUGIN_EV_VCPU_INTERRUPT,
|
||||
QEMU_PLUGIN_EV_VCPU_EXCEPTION,
|
||||
QEMU_PLUGIN_EV_VCPU_HOSTCALL,
|
||||
QEMU_PLUGIN_EV_MAX, /* total number of plugin events we support */
|
||||
};
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@ union qemu_plugin_cb_sig {
|
||||
qemu_plugin_udata_cb_t udata;
|
||||
qemu_plugin_vcpu_simple_cb_t vcpu_simple;
|
||||
qemu_plugin_vcpu_udata_cb_t vcpu_udata;
|
||||
qemu_plugin_vcpu_discon_cb_t vcpu_discon;
|
||||
qemu_plugin_vcpu_tb_trans_cb_t vcpu_tb_trans;
|
||||
qemu_plugin_vcpu_mem_cb_t vcpu_mem;
|
||||
qemu_plugin_vcpu_syscall_cb_t vcpu_syscall;
|
||||
@@ -160,6 +161,9 @@ void qemu_plugin_vcpu_exit_hook(CPUState *cpu);
|
||||
void qemu_plugin_tb_trans_cb(CPUState *cpu, struct qemu_plugin_tb *tb);
|
||||
void qemu_plugin_vcpu_idle_cb(CPUState *cpu);
|
||||
void qemu_plugin_vcpu_resume_cb(CPUState *cpu);
|
||||
void qemu_plugin_vcpu_interrupt_cb(CPUState *cpu, uint64_t from);
|
||||
void qemu_plugin_vcpu_exception_cb(CPUState *cpu, uint64_t from);
|
||||
void qemu_plugin_vcpu_hostcall_cb(CPUState *cpu, uint64_t from);
|
||||
void
|
||||
qemu_plugin_vcpu_syscall(CPUState *cpu, int64_t num, uint64_t a1,
|
||||
uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5,
|
||||
@@ -257,6 +261,15 @@ static inline void qemu_plugin_vcpu_idle_cb(CPUState *cpu)
|
||||
static inline void qemu_plugin_vcpu_resume_cb(CPUState *cpu)
|
||||
{ }
|
||||
|
||||
static inline void qemu_plugin_vcpu_interrupt_cb(CPUState *cpu, uint64_t from)
|
||||
{ }
|
||||
|
||||
static inline void qemu_plugin_vcpu_exception_cb(CPUState *cpu, uint64_t from)
|
||||
{ }
|
||||
|
||||
static inline void qemu_plugin_vcpu_hostcall_cb(CPUState *cpu, uint64_t from)
|
||||
{ }
|
||||
|
||||
static inline void
|
||||
qemu_plugin_vcpu_syscall(CPUState *cpu, int64_t num, uint64_t a1, uint64_t a2,
|
||||
uint64_t a3, uint64_t a4, uint64_t a5, uint64_t a6,
|
||||
|
||||
@@ -161,6 +161,50 @@ typedef void (*qemu_plugin_vcpu_simple_cb_t)(qemu_plugin_id_t id,
|
||||
typedef void (*qemu_plugin_vcpu_udata_cb_t)(unsigned int vcpu_index,
|
||||
void *userdata);
|
||||
|
||||
|
||||
/**
|
||||
* enum qemu_plugin_discon_type - type of a (potential) PC discontinuity
|
||||
*
|
||||
* @QEMU_PLUGIN_DISCON_INTERRUPT: an interrupt, defined across all architectures
|
||||
* as an asynchronous event, usually originating
|
||||
* from outside the CPU
|
||||
* @QEMU_PLUGIN_DISCON_EXCEPTION: an exception, defined across all architectures
|
||||
* as a synchronous event in response to a
|
||||
* specific instruction being executed
|
||||
* @QEMU_PLUGIN_DISCON_HOSTCALL: a host call, functionally a special kind of
|
||||
* exception that is not handled by code run by
|
||||
* the vCPU but machinery outside the vCPU
|
||||
* @QEMU_PLUGIN_DISCON_ALL: all types of disconinuity events currently covered
|
||||
*/
|
||||
enum qemu_plugin_discon_type {
|
||||
QEMU_PLUGIN_DISCON_INTERRUPT = 1 << 0,
|
||||
QEMU_PLUGIN_DISCON_EXCEPTION = 1 << 1,
|
||||
QEMU_PLUGIN_DISCON_HOSTCALL = 1 << 2,
|
||||
QEMU_PLUGIN_DISCON_ALL = -1
|
||||
};
|
||||
|
||||
/**
|
||||
* typedef qemu_plugin_vcpu_discon_cb_t - vcpu discontinuity callback
|
||||
* @id: plugin ID
|
||||
* @vcpu_index: the current vcpu context
|
||||
* @type: the type of discontinuity
|
||||
* @from_pc: the source of the discontinuity, e.g. the PC before the
|
||||
* transition
|
||||
* @to_pc: the PC pointing to the next instruction to be executed
|
||||
*
|
||||
* The exact semantics of @from_pc depends on the @type of discontinuity. For
|
||||
* interrupts, @from_pc will point to the next instruction which would have
|
||||
* been executed. For exceptions and host calls, @from_pc will point to the
|
||||
* instruction that caused the exception or issued the host call. Note that
|
||||
* in the case of exceptions, the instruction may not be retired and thus not
|
||||
* observable via general instruction exec callbacks. The same may be the case
|
||||
* for some host calls such as hypervisor call "exceptions".
|
||||
*/
|
||||
typedef void (*qemu_plugin_vcpu_discon_cb_t)(qemu_plugin_id_t id,
|
||||
unsigned int vcpu_index,
|
||||
enum qemu_plugin_discon_type type,
|
||||
uint64_t from_pc, uint64_t to_pc);
|
||||
|
||||
/**
|
||||
* qemu_plugin_uninstall() - Uninstall a plugin
|
||||
* @id: this plugin's opaque ID
|
||||
@@ -237,6 +281,22 @@ QEMU_PLUGIN_API
|
||||
void qemu_plugin_register_vcpu_resume_cb(qemu_plugin_id_t id,
|
||||
qemu_plugin_vcpu_simple_cb_t cb);
|
||||
|
||||
/**
|
||||
* qemu_plugin_register_vcpu_discon_cb() - register a discontinuity callback
|
||||
* @id: plugin ID
|
||||
* @type: types of discontinuities for which to call the callback
|
||||
* @cb: callback function
|
||||
*
|
||||
* The @cb function is called every time a vCPU receives a discontinuity event
|
||||
* of the specified type(s), after the vCPU was prepared to handle the event.
|
||||
* Preparation entails updating the PC, usually to some interrupt handler or
|
||||
* trap vector entry.
|
||||
*/
|
||||
QEMU_PLUGIN_API
|
||||
void qemu_plugin_register_vcpu_discon_cb(qemu_plugin_id_t id,
|
||||
enum qemu_plugin_discon_type type,
|
||||
qemu_plugin_vcpu_discon_cb_t cb);
|
||||
|
||||
/** struct qemu_plugin_tb - Opaque handle for a translation block */
|
||||
struct qemu_plugin_tb;
|
||||
/** struct qemu_plugin_insn - Opaque handle for a translated instruction */
|
||||
|
||||
@@ -105,6 +105,30 @@ static void plugin_vcpu_cb__simple(CPUState *cpu, enum qemu_plugin_event ev)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Disable CFI checks.
|
||||
* The callback function has been loaded from an external library so we do not
|
||||
* have type information
|
||||
*/
|
||||
QEMU_DISABLE_CFI
|
||||
static void plugin_vcpu_cb__discon(CPUState *cpu,
|
||||
enum qemu_plugin_event ev,
|
||||
enum qemu_plugin_discon_type type,
|
||||
uint64_t from)
|
||||
{
|
||||
struct qemu_plugin_cb *cb, *next;
|
||||
uint64_t to = cpu->cc->get_pc(cpu);
|
||||
|
||||
if (cpu->cpu_index < plugin.num_vcpus) {
|
||||
/* iterate safely; plugins might uninstall themselves at any time */
|
||||
QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) {
|
||||
qemu_plugin_vcpu_discon_cb_t func = cb->f.vcpu_discon;
|
||||
|
||||
func(cb->ctx->id, cpu->cpu_index, type, from, to);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Disable CFI checks.
|
||||
* The callback function has been loaded from an external library so we do not
|
||||
@@ -557,6 +581,24 @@ void qemu_plugin_vcpu_resume_cb(CPUState *cpu)
|
||||
}
|
||||
}
|
||||
|
||||
void qemu_plugin_vcpu_interrupt_cb(CPUState *cpu, uint64_t from)
|
||||
{
|
||||
plugin_vcpu_cb__discon(cpu, QEMU_PLUGIN_EV_VCPU_INTERRUPT,
|
||||
QEMU_PLUGIN_DISCON_INTERRUPT, from);
|
||||
}
|
||||
|
||||
void qemu_plugin_vcpu_exception_cb(CPUState *cpu, uint64_t from)
|
||||
{
|
||||
plugin_vcpu_cb__discon(cpu, QEMU_PLUGIN_EV_VCPU_EXCEPTION,
|
||||
QEMU_PLUGIN_DISCON_EXCEPTION, from);
|
||||
}
|
||||
|
||||
void qemu_plugin_vcpu_hostcall_cb(CPUState *cpu, uint64_t from)
|
||||
{
|
||||
plugin_vcpu_cb__discon(cpu, QEMU_PLUGIN_EV_VCPU_HOSTCALL,
|
||||
QEMU_PLUGIN_DISCON_HOSTCALL, from);
|
||||
}
|
||||
|
||||
void qemu_plugin_register_vcpu_idle_cb(qemu_plugin_id_t id,
|
||||
qemu_plugin_vcpu_simple_cb_t cb)
|
||||
{
|
||||
@@ -569,6 +611,21 @@ void qemu_plugin_register_vcpu_resume_cb(qemu_plugin_id_t id,
|
||||
plugin_register_cb(id, QEMU_PLUGIN_EV_VCPU_RESUME, cb);
|
||||
}
|
||||
|
||||
void qemu_plugin_register_vcpu_discon_cb(qemu_plugin_id_t id,
|
||||
enum qemu_plugin_discon_type type,
|
||||
qemu_plugin_vcpu_discon_cb_t cb)
|
||||
{
|
||||
if (type & QEMU_PLUGIN_DISCON_INTERRUPT) {
|
||||
plugin_register_cb(id, QEMU_PLUGIN_EV_VCPU_INTERRUPT, cb);
|
||||
}
|
||||
if (type & QEMU_PLUGIN_DISCON_EXCEPTION) {
|
||||
plugin_register_cb(id, QEMU_PLUGIN_EV_VCPU_EXCEPTION, cb);
|
||||
}
|
||||
if (type & QEMU_PLUGIN_DISCON_HOSTCALL) {
|
||||
plugin_register_cb(id, QEMU_PLUGIN_EV_VCPU_HOSTCALL, cb);
|
||||
}
|
||||
}
|
||||
|
||||
void qemu_plugin_register_flush_cb(qemu_plugin_id_t id,
|
||||
qemu_plugin_simple_cb_t cb)
|
||||
{
|
||||
@@ -611,6 +668,7 @@ void exec_inline_op(enum plugin_dyn_cb_type type,
|
||||
}
|
||||
}
|
||||
|
||||
QEMU_DISABLE_CFI
|
||||
void qemu_plugin_vcpu_mem_cb(CPUState *cpu, uint64_t vaddr,
|
||||
uint64_t value_low,
|
||||
uint64_t value_high,
|
||||
|
||||
@@ -318,6 +318,7 @@ struct qemu_plugin_reset_data {
|
||||
bool reset;
|
||||
};
|
||||
|
||||
QEMU_DISABLE_CFI
|
||||
static void plugin_reset_destroy__locked(struct qemu_plugin_reset_data *data)
|
||||
{
|
||||
struct qemu_plugin_ctx *ctx = data->ctx;
|
||||
|
||||
+19
-13
@@ -19,32 +19,38 @@
|
||||
- '((ansible_version.major == 2) and (ansible_version.minor >= 8)) or (ansible_version.major >= 3)'
|
||||
msg: "Unsuitable ansible version, please use version 2.8.0 or later"
|
||||
|
||||
- name: Add armhf foreign architecture to aarch64 hosts
|
||||
command: dpkg --add-architecture armhf
|
||||
when:
|
||||
- ansible_facts['distribution'] == 'Ubuntu'
|
||||
- ansible_facts['architecture'] == 'aarch64'
|
||||
|
||||
- name: Update apt cache / upgrade packages via apt
|
||||
apt:
|
||||
update_cache: yes
|
||||
upgrade: yes
|
||||
when:
|
||||
- ansible_facts['distribution'] == 'Ubuntu'
|
||||
- ansible_facts['distribution'] in ['Ubuntu', 'Debian']
|
||||
|
||||
# the package lists are updated by "make lcitool-refresh"
|
||||
- name: Include package lists based on OS and architecture
|
||||
include_vars:
|
||||
file: "ubuntu-2404-{{ ansible_facts['architecture'] }}.yaml"
|
||||
- name: Define package list file path for Ubuntu
|
||||
set_fact:
|
||||
package_file: "ubuntu/ubuntu-2404-{{ ansible_facts['architecture'] }}.yaml"
|
||||
when:
|
||||
- ansible_facts['distribution'] == 'Ubuntu'
|
||||
- ansible_facts['distribution_version'] == '24.04'
|
||||
|
||||
- name: Install packages for QEMU on Ubuntu 24.04
|
||||
- name: Define package list file path for Debian
|
||||
set_fact:
|
||||
package_file: "debian/debian-{{ ansible_facts['distribution_major_version'] }}-{{ ansible_facts['architecture'] }}.yaml"
|
||||
when:
|
||||
- ansible_facts['distribution'] == 'Debian'
|
||||
|
||||
- name: Include package lists based on OS and architecture
|
||||
include_vars:
|
||||
file: "{{ package_file }}"
|
||||
when:
|
||||
- package_file is exists
|
||||
|
||||
- name: Install packages for QEMU on Ubuntu/Debian
|
||||
package:
|
||||
name: "{{ packages }}"
|
||||
when:
|
||||
- ansible_facts['distribution'] == 'Ubuntu'
|
||||
- ansible_facts['distribution_version'] == '24.04'
|
||||
- package_file is exists
|
||||
- packages is defined
|
||||
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
# THIS FILE WAS AUTO-GENERATED
|
||||
#
|
||||
# $ lcitool variables --host-arch ppc64le debian-13 qemu
|
||||
#
|
||||
# https://gitlab.com/libvirt/libvirt-ci
|
||||
|
||||
packages:
|
||||
- bash
|
||||
- bc
|
||||
- bindgen
|
||||
- bison
|
||||
- bsdextrautils
|
||||
- bzip2
|
||||
- ca-certificates
|
||||
- ccache
|
||||
- clang
|
||||
- dbus
|
||||
- debianutils
|
||||
- diffutils
|
||||
- exuberant-ctags
|
||||
- findutils
|
||||
- flex
|
||||
- gcc
|
||||
- gcovr
|
||||
- gettext
|
||||
- git
|
||||
- hostname
|
||||
- libaio-dev
|
||||
- libasan8
|
||||
- libasound2-dev
|
||||
- libattr1-dev
|
||||
- libbpf-dev
|
||||
- libbrlapi-dev
|
||||
- libbz2-dev
|
||||
- libc6-dev
|
||||
- libcacard-dev
|
||||
- libcap-ng-dev
|
||||
- libcapstone-dev
|
||||
- libcbor-dev
|
||||
- libclang-rt-dev
|
||||
- libcmocka-dev
|
||||
- libcurl4-gnutls-dev
|
||||
- libdaxctl-dev
|
||||
- libdrm-dev
|
||||
- libepoxy-dev
|
||||
- libfdt-dev
|
||||
- libffi-dev
|
||||
- libfuse3-dev
|
||||
- libgbm-dev
|
||||
- libgcrypt20-dev
|
||||
- libglib2.0-dev
|
||||
- libglusterfs-dev
|
||||
- libgnutls28-dev
|
||||
- libgtk-3-dev
|
||||
- libgtk-vnc-2.0-dev
|
||||
- libibverbs-dev
|
||||
- libiscsi-dev
|
||||
- libjemalloc-dev
|
||||
- libjpeg62-turbo-dev
|
||||
- libjson-c-dev
|
||||
- liblttng-ust-dev
|
||||
- liblzo2-dev
|
||||
- libncursesw5-dev
|
||||
- libnfs-dev
|
||||
- libnuma-dev
|
||||
- libpam0g-dev
|
||||
- libpcre2-dev
|
||||
- libpipewire-0.3-dev
|
||||
- libpixman-1-dev
|
||||
- libpng-dev
|
||||
- libpulse-dev
|
||||
- librbd-dev
|
||||
- librdmacm-dev
|
||||
- libsasl2-dev
|
||||
- libsdl2-dev
|
||||
- libsdl2-image-dev
|
||||
- libseccomp-dev
|
||||
- libselinux1-dev
|
||||
- libslirp-dev
|
||||
- libsnappy-dev
|
||||
- libsndio-dev
|
||||
- libspice-protocol-dev
|
||||
- libspice-server-dev
|
||||
- libssh-dev
|
||||
- libstd-rust-dev
|
||||
- libsystemd-dev
|
||||
- libtasn1-6-dev
|
||||
- libubsan1
|
||||
- libudev-dev
|
||||
- liburing-dev
|
||||
- libusb-1.0-0-dev
|
||||
- libusbredirhost-dev
|
||||
- libvdeplug-dev
|
||||
- libvirglrenderer-dev
|
||||
- libvte-2.91-dev
|
||||
- libxdp-dev
|
||||
- libzstd-dev
|
||||
- llvm
|
||||
- locales
|
||||
- make
|
||||
- mtools
|
||||
- multipath-tools
|
||||
- ncat
|
||||
- nettle-dev
|
||||
- ninja-build
|
||||
- openssh-client
|
||||
- pkgconf
|
||||
- python3
|
||||
- python3-numpy
|
||||
- python3-opencv
|
||||
- python3-pillow
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- python3-sphinx
|
||||
- python3-sphinx-rtd-theme
|
||||
- python3-tomli
|
||||
- python3-venv
|
||||
- python3-wheel
|
||||
- python3-yaml
|
||||
- rpm2cpio
|
||||
- rustc
|
||||
- sed
|
||||
- socat
|
||||
- sparse
|
||||
- swtpm
|
||||
- systemtap-sdt-dev
|
||||
- tar
|
||||
- tesseract-ocr
|
||||
- tesseract-ocr-eng
|
||||
- vulkan-tools
|
||||
- xorriso
|
||||
- zlib1g-dev
|
||||
- zstd
|
||||
|
||||
@@ -56,12 +56,12 @@
|
||||
url: "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh"
|
||||
mode: 0755
|
||||
when:
|
||||
- ansible_facts['distribution'] == 'Ubuntu'
|
||||
- ansible_facts['distribution'] in ['Ubuntu', 'Debian']
|
||||
|
||||
- name: Run gitlab-runner repo setup script (DEB)
|
||||
shell: "/root/script.deb.sh"
|
||||
when:
|
||||
- ansible_facts['distribution'] == 'Ubuntu'
|
||||
- ansible_facts['distribution'] in ['Ubuntu', 'Debian']
|
||||
|
||||
- name: Install gitlab-runner (DEB)
|
||||
ansible.builtin.apt:
|
||||
@@ -69,7 +69,7 @@
|
||||
update_cache: yes
|
||||
state: present
|
||||
when:
|
||||
- ansible_facts['distribution'] == 'Ubuntu'
|
||||
- ansible_facts['distribution'] in ['Ubuntu', 'Debian']
|
||||
|
||||
# RPM setup
|
||||
- name: Get gitlab-runner repo setup script (RPM)
|
||||
|
||||
@@ -26,7 +26,7 @@ packages:
|
||||
- git
|
||||
- hostname
|
||||
- libaio-dev
|
||||
- libasan6
|
||||
- libasan8
|
||||
- libasound2-dev
|
||||
- libattr1-dev
|
||||
- libbpf-dev
|
||||
@@ -37,7 +37,7 @@ packages:
|
||||
- libcap-ng-dev
|
||||
- libcapstone-dev
|
||||
- libcbor-dev
|
||||
- libclang-dev
|
||||
- libclang-rt-dev
|
||||
- libcmocka-dev
|
||||
- libcurl4-gnutls-dev
|
||||
- libdaxctl-dev
|
||||
|
||||
@@ -26,7 +26,7 @@ packages:
|
||||
- git
|
||||
- hostname
|
||||
- libaio-dev
|
||||
- libasan6
|
||||
- libasan8
|
||||
- libasound2-dev
|
||||
- libattr1-dev
|
||||
- libbpf-dev
|
||||
@@ -37,7 +37,7 @@ packages:
|
||||
- libcap-ng-dev
|
||||
- libcapstone-dev
|
||||
- libcbor-dev
|
||||
- libclang-dev
|
||||
- libclang-rt-dev
|
||||
- libcmocka-dev
|
||||
- libcurl4-gnutls-dev
|
||||
- libdaxctl-dev
|
||||
|
||||
@@ -316,10 +316,7 @@ common_semi_flen_fstat_cb(CPUState *cs, uint64_t ret, int err)
|
||||
&size, 8, 0)) {
|
||||
ret = -1, err = EFAULT;
|
||||
} else {
|
||||
size = be64_to_cpu(size);
|
||||
if (ret != size) {
|
||||
ret = -1, err = EOVERFLOW;
|
||||
}
|
||||
ret = be64_to_cpu(size);
|
||||
}
|
||||
}
|
||||
common_semi_cb(cs, ret, err);
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "exec/helper-proto.h"
|
||||
#include "qemu/qemu-print.h"
|
||||
#include "system/memory.h"
|
||||
#include "qemu/plugin.h"
|
||||
|
||||
|
||||
#define CONVERT_BIT(X, SRC, DST) \
|
||||
@@ -328,6 +329,7 @@ void alpha_cpu_do_interrupt(CPUState *cs)
|
||||
{
|
||||
CPUAlphaState *env = cpu_env(cs);
|
||||
int i = cs->exception_index;
|
||||
uint64_t last_pc = env->pc;
|
||||
|
||||
if (qemu_loglevel_mask(CPU_LOG_INT)) {
|
||||
static int count;
|
||||
@@ -431,6 +433,17 @@ void alpha_cpu_do_interrupt(CPUState *cs)
|
||||
|
||||
/* Switch to PALmode. */
|
||||
env->flags |= ENV_FLAG_PAL_MODE;
|
||||
|
||||
switch (i) {
|
||||
case EXCP_SMP_INTERRUPT:
|
||||
case EXCP_CLK_INTERRUPT:
|
||||
case EXCP_DEV_INTERRUPT:
|
||||
qemu_plugin_vcpu_interrupt_cb(cs, last_pc);
|
||||
break;
|
||||
default:
|
||||
qemu_plugin_vcpu_exception_cb(cs, last_pc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool alpha_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#endif
|
||||
#include "cpregs.h"
|
||||
#include "target/arm/gtimer.h"
|
||||
#include "qemu/plugin.h"
|
||||
|
||||
#define HELPER_H "tcg/helper.h"
|
||||
#include "exec/helper-proto.h.inc"
|
||||
@@ -8783,6 +8784,24 @@ static void take_aarch32_exception(CPUARMState *env, int new_mode,
|
||||
}
|
||||
}
|
||||
|
||||
void arm_do_plugin_vcpu_discon_cb(CPUState *cs, uint64_t from)
|
||||
{
|
||||
switch (cs->exception_index) {
|
||||
case EXCP_IRQ:
|
||||
case EXCP_VIRQ:
|
||||
case EXCP_NMI:
|
||||
case EXCP_VINMI:
|
||||
case EXCP_FIQ:
|
||||
case EXCP_VFIQ:
|
||||
case EXCP_VFNMI:
|
||||
case EXCP_VSERR:
|
||||
qemu_plugin_vcpu_interrupt_cb(cs, from);
|
||||
break;
|
||||
default:
|
||||
qemu_plugin_vcpu_exception_cb(cs, from);
|
||||
}
|
||||
}
|
||||
|
||||
static void arm_cpu_do_interrupt_aarch32_hyp(CPUState *cs)
|
||||
{
|
||||
/*
|
||||
@@ -9473,6 +9492,7 @@ void arm_cpu_do_interrupt(CPUState *cs)
|
||||
ARMCPU *cpu = ARM_CPU(cs);
|
||||
CPUARMState *env = &cpu->env;
|
||||
unsigned int new_el = env->exception.target_el;
|
||||
uint64_t last_pc = cs->cc->get_pc(cs);
|
||||
|
||||
assert(!arm_feature(env, ARM_FEATURE_M));
|
||||
|
||||
@@ -9489,6 +9509,7 @@ void arm_cpu_do_interrupt(CPUState *cs)
|
||||
if (tcg_enabled() && arm_is_psci_call(cpu, cs->exception_index)) {
|
||||
arm_handle_psci_call(cpu);
|
||||
qemu_log_mask(CPU_LOG_INT, "...handled as PSCI call\n");
|
||||
qemu_plugin_vcpu_hostcall_cb(cs, last_pc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -9500,6 +9521,7 @@ void arm_cpu_do_interrupt(CPUState *cs)
|
||||
#ifdef CONFIG_TCG
|
||||
if (cs->exception_index == EXCP_SEMIHOST) {
|
||||
tcg_handle_semihosting(cs);
|
||||
qemu_plugin_vcpu_hostcall_cb(cs, last_pc);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
@@ -9525,6 +9547,8 @@ void arm_cpu_do_interrupt(CPUState *cs)
|
||||
if (!kvm_enabled()) {
|
||||
cpu_set_interrupt(cs, CPU_INTERRUPT_EXITTB);
|
||||
}
|
||||
|
||||
arm_do_plugin_vcpu_discon_cb(cs, last_pc);
|
||||
}
|
||||
#endif /* !CONFIG_USER_ONLY */
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user