plugins/loader: compile loader only once

There is very little in loader that is different between builds save
for a tiny user/system mode difference in the plugin_info structure.
Create two new files, user and system to hold mode specific helpers
and move loader into common_ss.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20250304222439.2035603-26-alex.bennee@linaro.org>
This commit is contained in:
Alex Bennée 2025-03-04 22:24:32 +00:00
parent 5dd09b8157
commit 8c15f6e435
5 changed files with 57 additions and 12 deletions

View file

@ -31,9 +31,6 @@
#include "qemu/memalign.h"
#include "hw/core/cpu.h"
#include "exec/tb-flush.h"
#ifndef CONFIG_USER_ONLY
#include "hw/boards.h"
#endif
#include "plugin.h"
@ -300,14 +297,8 @@ int qemu_plugin_load_list(QemuPluginList *head, Error **errp)
info->target_name = target_name();
info->version.min = QEMU_PLUGIN_MIN_VERSION;
info->version.cur = QEMU_PLUGIN_VERSION;
#ifndef CONFIG_USER_ONLY
MachineState *ms = MACHINE(qdev_get_machine());
info->system_emulation = true;
info->system.smp_vcpus = ms->smp.cpus;
info->system.max_vcpus = ms->smp.max_cpus;
#else
info->system_emulation = false;
#endif
qemu_plugin_fillin_mode_info(info);
QTAILQ_FOREACH_SAFE(desc, head, entry, next) {
int err;

View file

@ -57,8 +57,13 @@ if host_os == 'windows'
command: dlltool_cmd
)
endif
user_ss.add(files('user.c'))
system_ss.add(files('system.c'))
common_ss.add(files('loader.c'))
specific_ss.add(files(
'loader.c',
'core.c',
'api.c',
))

View file

@ -119,4 +119,10 @@ struct qemu_plugin_scoreboard *plugin_scoreboard_new(size_t element_size);
void plugin_scoreboard_free(struct qemu_plugin_scoreboard *score);
/**
* qemu_plugin_fillin_mode_info() - populate mode specific info
* info: pointer to qemu_info_t structure
*/
void qemu_plugin_fillin_mode_info(qemu_info_t *info);
#endif /* PLUGIN_H */

24
plugins/system.c Normal file
View file

@ -0,0 +1,24 @@
/*
* QEMU Plugin system-emulation helpers
*
* Helpers that are specific to system emulation.
*
* Copyright (C) 2017, Emilio G. Cota <cota@braap.org>
* Copyright (C) 2019-2025, Linaro
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "qemu/osdep.h"
#include "qemu/plugin.h"
#include "hw/boards.h"
#include "plugin.h"
void qemu_plugin_fillin_mode_info(qemu_info_t *info)
{
MachineState *ms = MACHINE(qdev_get_machine());
info->system_emulation = true;
info->system.smp_vcpus = ms->smp.cpus;
info->system.max_vcpus = ms->smp.max_cpus;
}

19
plugins/user.c Normal file
View file

@ -0,0 +1,19 @@
/*
* QEMU Plugin user-mode helpers
*
* Helpers that are specific to user-mode.
*
* Copyright (C) 2017, Emilio G. Cota <cota@braap.org>
* Copyright (C) 2019-2025, Linaro
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "qemu/osdep.h"
#include "qemu/plugin.h"
#include "plugin.h"
void qemu_plugin_fillin_mode_info(qemu_info_t *info)
{
info->system_emulation = false;
}