]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
qemu: Convert target_name() to TargetInfo API
authorPhilippe Mathieu-Daudé <philmd@linaro.org>
Sun, 23 Mar 2025 11:47:37 +0000 (12:47 +0100)
committerPhilippe Mathieu-Daudé <philmd@linaro.org>
Fri, 25 Apr 2025 15:09:58 +0000 (17:09 +0200)
Have target_name() be a target-agnostic method, dispatching
to a per-target TargetInfo singleton structure.
By default a stub singleton is used. No logical change
expected.

Inspired-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250424222112.36194-3-philmd@linaro.org>

MAINTAINERS
cpu-target.c
hw/core/machine-qmp-cmds.c
include/hw/core/cpu.h
include/qemu/target-info-impl.h [new file with mode: 0644]
include/qemu/target-info.h
meson.build
plugins/loader.c
system/vl.c
target-info-stub.c
target-info.c [new file with mode: 0644]

index 59d971281997c5ddc50cfb64ff4b041d423cb270..f8fee87c704589b972f838e9df85a59633831884 100644 (file)
@@ -496,7 +496,6 @@ F: include/exec/cpu*.h
 F: include/exec/exec-all.h
 F: include/exec/target_long.h
 F: include/qemu/accel.h
-F: include/qemu/target-info*.h
 F: include/system/accel-*.h
 F: include/system/cpus.h
 F: include/accel/accel-cpu*.h
@@ -505,7 +504,6 @@ F: accel/Makefile.objs
 F: accel/stubs/Makefile.objs
 F: cpu-common.c
 F: cpu-target.c
-F: target-info*.c
 F: system/cpus.c
 
 Apple Silicon HVF CPUs
@@ -1928,6 +1926,13 @@ F: tests/functional/test_empty_cpu_model.py
 F: tests/unit/test-smp-parse.c
 T: git https://gitlab.com/ehabkost/qemu.git machine-next
 
+TargetInfo API
+M: Pierrick Bouvier <pierrick.bouvier@linaro.org>
+M: Philippe Mathieu-Daudé <philmd@linaro.org>
+S: Supported
+F: include/qemu/target-info*.h
+F: target-info*.c
+
 Xtensa Machines
 ---------------
 sim
index b5645ff0dbb07f3c5ab3625d92bab4f11f911a65..1c90a30759352b529697fd5780a6470b08b17bf7 100644 (file)
@@ -91,8 +91,3 @@ bool target_big_endian(void)
 {
     return TARGET_BIG_ENDIAN;
 }
-
-const char *target_name(void)
-{
-    return TARGET_NAME;
-}
index a5e635152dc06ed861c9e215442ac87c11600d30..d82043e1c6874a7fcaa805b76ba74697e94b066d 100644 (file)
@@ -19,6 +19,7 @@
 #include "qapi/qobject-input-visitor.h"
 #include "qapi/type-helpers.h"
 #include "qemu/uuid.h"
+#include "qemu/target-info.h"
 #include "qom/qom-qobject.h"
 #include "system/hostmem.h"
 #include "system/hw_accel.h"
index 2a02d4f07898898c9a166bc6ec8bf9ae2a80cfdf..12b2ff1f7d234a6c5dae09c8062e00ba3a68c6fc 100644 (file)
@@ -1121,8 +1121,6 @@ bool cpu_exec_realizefn(CPUState *cpu, Error **errp);
 void cpu_exec_unrealizefn(CPUState *cpu);
 void cpu_exec_reset_hold(CPUState *cpu);
 
-const char *target_name(void);
-
 #ifdef COMPILING_PER_TARGET
 
 extern const VMStateDescription vmstate_cpu_common;
diff --git a/include/qemu/target-info-impl.h b/include/qemu/target-info-impl.h
new file mode 100644 (file)
index 0000000..d30805f
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * QEMU TargetInfo structure definition
+ *
+ *  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"
+
+typedef struct TargetInfo {
+    /* runtime equivalent of TARGET_NAME definition */
+    const char *target_name;
+} TargetInfo;
+
+/**
+ * target_info:
+ *
+ * Returns: The TargetInfo structure definition for this target binary.
+ */
+const TargetInfo *target_info(void);
+
+#endif
index b4cc4888cac9d282c2cb201fb37f2fa826186df9..58d41368974e07ca27fad82ca56f7ec5e97f8bab 100644 (file)
@@ -9,6 +9,13 @@
 #ifndef QEMU_TARGET_INFO_H
 #define QEMU_TARGET_INFO_H
 
+/**
+ * target_name:
+ *
+ * Returns: Canonical target name (i.e. "i386").
+ */
+const char *target_name(void);
+
 /**
  * target_cpu_type:
  *
index 185c2fb0d1bda8d096b644fe586209f38bf81592..8ae70dbe45ad995d60a3e81fac730ae3341d50f4 100644 (file)
@@ -3795,6 +3795,7 @@ endif
 common_ss.add(pagevary)
 specific_ss.add(files('page-target.c', 'page-vary-target.c'))
 
+common_ss.add(files('target-info.c'))
 specific_ss.add(files('target-info-stub.c'))
 
 subdir('backends')
index 0d6e082e1704662dab90610fd4e1db81be3b02c9..8f0d75c9049fe4b131f6d94bed38755501bfb5df 100644 (file)
@@ -29,7 +29,7 @@
 #include "qemu/xxhash.h"
 #include "qemu/plugin.h"
 #include "qemu/memalign.h"
-#include "hw/core/cpu.h"
+#include "qemu/target-info.h"
 #include "exec/tb-flush.h"
 
 #include "plugin.h"
index 4ab2001df75954a6c1a08a6e7999bb127de36246..520956f4a19551d5d659240fbaff7e32a7cb3467 100644 (file)
@@ -40,6 +40,7 @@
 #include "qemu/help_option.h"
 #include "qemu/hw-version.h"
 #include "qemu/uuid.h"
+#include "qemu/target-info.h"
 #include "system/reset.h"
 #include "system/runstate.h"
 #include "system/runstate-action.h"
@@ -79,7 +80,6 @@
 #include "hw/block/block.h"
 #include "hw/i386/x86.h"
 #include "hw/i386/pc.h"
-#include "hw/core/cpu.h"
 #include "migration/cpr.h"
 #include "migration/misc.h"
 #include "migration/snapshot.h"
index e5d2195e896cb7d87d829d45b45a8f10075bbf8e..773a10188c882dac84580795f3c53569846f11b0 100644 (file)
@@ -8,8 +8,18 @@
 
 #include "qemu/osdep.h"
 #include "qemu/target-info.h"
+#include "qemu/target-info-impl.h"
 #include "cpu.h"
 
+static const TargetInfo target_info_stub = {
+    .target_name = TARGET_NAME,
+};
+
+const TargetInfo *target_info(void)
+{
+    return &target_info_stub;
+}
+
 const char *target_cpu_type(void)
 {
     return CPU_RESOLVING_TYPE;
diff --git a/target-info.c b/target-info.c
new file mode 100644 (file)
index 0000000..84b1893
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * QEMU target info helpers
+ *
+ *  Copyright (c) Linaro
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "qemu/target-info.h"
+#include "qemu/target-info-impl.h"
+
+const char *target_name(void)
+{
+    return target_info()->target_name;
+}