On 4/3/25 16:48, Philippe Mathieu-Daudé wrote:
Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org>
---
meson.build | 9 +++++++++
include/exec/poison.h | 1 +
include/qemu/target_info-impl.h | 21 +++++++++++++++++++++
include/qemu/target_info.h | 18 ++++++++++++++++++
target_info-stub.c | 23 +++++++++++++++++++++++
target_info.c | 16 ++++++++++++++++
6 files changed, 88 insertions(+)
create mode 100644 include/qemu/target_info-impl.h
create mode 100644 include/qemu/target_info.h
create mode 100644 target_info-stub.c
create mode 100644 target_info.c
diff --git a/meson.build b/meson.build
index bcb9d39a387..de9c9dacd35 100644
--- a/meson.build
+++ b/meson.build
@@ -3262,6 +3262,9 @@ host_kconfig = \
ignored = [ 'TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_ARCH' ]
+target_info = [
+]
+
To follow what is already implemented, we should use a dictionary per
target, pointing to the associated source file.
This way, it allows to move files listing directly to each architecture,
and the top meson.build only needs to add stub if it is not defined.
default_targets = 'CONFIG_DEFAULT_TARGETS' in config_host
actual_target_dirs = []
fdt_required = []
@@ -3368,6 +3371,9 @@ foreach target : target_dirs
config_target_data.set(k, v)
endif
endforeach
+ if target not in target_info
+ config_target_data.set('TARGET_INFO_STUB_NEEDED', 1)
+ endif
With the dictionary, this is not needed anymore.
config_target_data.set('QEMU_ARCH',
'QEMU_ARCH_' +
config_target['TARGET_BASE_ARCH'].to_upper())
config_target_h += {target: configure_file(output: target +
'-config-target.h',
@@ -3807,6 +3813,9 @@ endif
common_ss.add(pagevary)
specific_ss.add(files('page-target.c', 'page-vary-target.c'))
+specific_ss.add(files('target_info-stub.c'))
+common_ss.add(files('target_info.c'))
+
subdir('backends')
subdir('disas')
subdir('migration')
diff --git a/include/exec/poison.h b/include/exec/poison.h
index bc422719d80..00aedc41d82 100644
--- a/include/exec/poison.h
+++ b/include/exec/poison.h
@@ -38,6 +38,7 @@
#pragma GCC poison TARGET_BIG_ENDIAN
#pragma GCC poison TCG_GUEST_DEFAULT_MO
#pragma GCC poison TARGET_HAS_PRECISE_SMC
+#pragma GCC poison TARGET_INFO_STUB_NEEDED
#pragma GCC poison TARGET_LONG_BITS
#pragma GCC poison TARGET_FMT_lx
diff --git a/include/qemu/target_info-impl.h b/include/qemu/target_info-impl.h
new file mode 100644
index 00000000000..b340e192fce
--- /dev/null
+++ b/include/qemu/target_info-impl.h
@@ -0,0 +1,21 @@
+/*
+ * QEMU binary helpers
+ *
+ * Copyright (c) Linaro
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef QEMU_TARGET_INFO_IMPL_H
+#define QEMU_TARGET_INFO_IMPL_H
+
+#include "qemu/target_info.h"
+
+struct BinaryTargetInfo {
+
I would be in favor to rename exising TargetInfo in QMPTargetInfo, and
reuse that name here.
+ /* runtime equivalent of TARGET_INFO_STUB_NEEDED definition */
+ bool is_stub;
Why do we want to know if it's a stub at runtime?
+
+};
+
+#endif
diff --git a/include/qemu/target_info.h b/include/qemu/target_info.h
new file mode 100644
index 00000000000..fab3f3153ea
--- /dev/null
+++ b/include/qemu/target_info.h
@@ -0,0 +1,18 @@
+/*
+ * QEMU binary helpers
+ *
+ * Copyright (c) Linaro
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef QEMU_TARGET_INFO_H
+#define QEMU_TARGET_INFO_H
+
+typedef struct BinaryTargetInfo BinaryTargetInfo;
+
+const BinaryTargetInfo *target_info(void);
+
+bool target_info_is_stub(void);
+
+#endif
diff --git a/target_info-stub.c b/target_info-stub.c
new file mode 100644
index 00000000000..d683a05977d
--- /dev/null
+++ b/target_info-stub.c
@@ -0,0 +1,23 @@
+/*
+ * QEMU target info stubs
+ *
+ * Copyright (c) Linaro
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "qemu/target_info-impl.h"
+
+#ifdef TARGET_INFO_STUB_NEEDED
+
+static const BinaryTargetInfo target_info_stub = {
+ .is_stub = true,
+};
+
+const BinaryTargetInfo *target_info(void)
+{
+ return &target_info_stub;
+}
+
+#endif /* TARGET_INFO_STUB_NEEDED */
diff --git a/target_info.c b/target_info.c
new file mode 100644
index 00000000000..cb17d29b86d
--- /dev/null
+++ b/target_info.c
@@ -0,0 +1,16 @@
+/*
+ * QEMU legacy binary helpers
+ *
+ * Copyright (c) Linaro
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "qemu/target_info-impl.h"
+#include "qemu/target_info.h"
+
+bool target_info_is_stub(void)
+{
+ return target_info()->is_stub;
+}