diff mbox series

[RFC,PATCH-for-10.1,03/19] qemu: Factor target_system_arch() out

Message ID 20250403234914.9154-4-philmd@linaro.org (mailing list archive)
State New
Headers show
Series qemu: Introduce TargetInfo API (for single binary) | expand

Commit Message

Philippe Mathieu-Daudé April 3, 2025, 11:48 p.m. UTC
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/qemu/target_info-impl.h |  4 ++++
 include/qemu/target_info.h      |  4 ++++
 hw/core/machine-qmp-cmds.c      |  6 ++----
 target_info-stub.c              |  1 +
 target_info.c                   | 12 ++++++++++++
 5 files changed, 23 insertions(+), 4 deletions(-)

Comments

Pierrick Bouvier April 4, 2025, 4:44 p.m. UTC | #1
On 4/3/25 16:48, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   include/qemu/target_info-impl.h |  4 ++++
>   include/qemu/target_info.h      |  4 ++++
>   hw/core/machine-qmp-cmds.c      |  6 ++----
>   target_info-stub.c              |  1 +
>   target_info.c                   | 12 ++++++++++++
>   5 files changed, 23 insertions(+), 4 deletions(-)
> 
> diff --git a/include/qemu/target_info-impl.h b/include/qemu/target_info-impl.h
> index 00bb746572b..0cec211e362 100644
> --- a/include/qemu/target_info-impl.h
> +++ b/include/qemu/target_info-impl.h
> @@ -10,6 +10,7 @@
>   #define QEMU_TARGET_INFO_IMPL_H
>   
>   #include "qemu/target_info.h"
> +#include "qapi/qapi-types-machine.h"
>   
>   struct BinaryTargetInfo {
>   
> @@ -19,6 +20,9 @@ struct BinaryTargetInfo {
>       /* runtime equivalent of TARGET_NAME definition */
>       const char *const name;
>   
> +    /* related to TARGET_ARCH definition */
> +    SysEmuTarget system_arch;
> +
>   };
>   
>   #endif
> diff --git a/include/qemu/target_info.h b/include/qemu/target_info.h
> index 5b8f17a15a3..6ca36dae8a3 100644
> --- a/include/qemu/target_info.h
> +++ b/include/qemu/target_info.h
> @@ -9,6 +9,8 @@
>   #ifndef QEMU_TARGET_INFO_H
>   #define QEMU_TARGET_INFO_H
>   
> +#include "qapi/qapi-types-machine.h"
> +
>   typedef struct BinaryTargetInfo BinaryTargetInfo;
>   
>   const BinaryTargetInfo *target_info(void);
> @@ -17,4 +19,6 @@ bool target_info_is_stub(void);
>   
>   const char *target_name(void);
>   
> +SysEmuTarget target_system_arch(void);
> +
>   #endif
> diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c
> index 6701e210f54..9e2dd348c06 100644
> --- a/hw/core/machine-qmp-cmds.c
> +++ b/hw/core/machine-qmp-cmds.c
> @@ -36,8 +36,7 @@ CpuInfoFastList *qmp_query_cpus_fast(Error **errp)
>       MachineState *ms = MACHINE(qdev_get_machine());
>       MachineClass *mc = MACHINE_GET_CLASS(ms);
>       CpuInfoFastList *head = NULL, **tail = &head;
> -    SysEmuTarget target = qapi_enum_parse(&SysEmuTarget_lookup, target_name(),
> -                                          -1, &error_abort);
> +    SysEmuTarget target = target_system_arch();
>       CPUState *cpu;
>   
>       CPU_FOREACH(cpu) {
> @@ -137,8 +136,7 @@ TargetInfo *qmp_query_target(Error **errp)
>   {
>       TargetInfo *info = g_malloc0(sizeof(*info));
>   
> -    info->arch = qapi_enum_parse(&SysEmuTarget_lookup, target_name(), -1,
> -                                 &error_abort);
> +    info->arch = target_system_arch();
>   
>       return info;
>   }
> diff --git a/target_info-stub.c b/target_info-stub.c
> index db61a335908..46a240ac66a 100644
> --- a/target_info-stub.c
> +++ b/target_info-stub.c
> @@ -14,6 +14,7 @@
>   static const BinaryTargetInfo target_info_stub = {
>       .is_stub = true,
>       .name = TARGET_NAME,
> +    .system_arch = -1,
>   };
>   
>   const BinaryTargetInfo *target_info(void)
> diff --git a/target_info.c b/target_info.c
> index 6b44ea9fc0e..be4f19009b3 100644
> --- a/target_info.c
> +++ b/target_info.c
> @@ -9,6 +9,7 @@
>   #include "qemu/osdep.h"
>   #include "qemu/target_info-impl.h"
>   #include "qemu/target_info.h"
> +#include "qapi/error.h"
>   
>   bool target_info_is_stub(void)
>   {
> @@ -19,3 +20,14 @@ const char *target_name(void)
>   {
>       return target_info()->name;
>   }
> +
> +SysEmuTarget target_system_arch(void)
> +{
> +    SysEmuTarget system_arch = target_info()->system_arch;
> +
> +    if (system_arch >= SYS_EMU_TARGET__MAX) {
> +        system_arch = qapi_enum_parse(&SysEmuTarget_lookup, target_name(), -1,
> +                                      &error_abort);
> +    }
> +    return system_arch;
> +}

Maybe we could leave that out for now, and focus on representing compile 
time defines only as a first step.
diff mbox series

Patch

diff --git a/include/qemu/target_info-impl.h b/include/qemu/target_info-impl.h
index 00bb746572b..0cec211e362 100644
--- a/include/qemu/target_info-impl.h
+++ b/include/qemu/target_info-impl.h
@@ -10,6 +10,7 @@ 
 #define QEMU_TARGET_INFO_IMPL_H
 
 #include "qemu/target_info.h"
+#include "qapi/qapi-types-machine.h"
 
 struct BinaryTargetInfo {
 
@@ -19,6 +20,9 @@  struct BinaryTargetInfo {
     /* runtime equivalent of TARGET_NAME definition */
     const char *const name;
 
+    /* related to TARGET_ARCH definition */
+    SysEmuTarget system_arch;
+
 };
 
 #endif
diff --git a/include/qemu/target_info.h b/include/qemu/target_info.h
index 5b8f17a15a3..6ca36dae8a3 100644
--- a/include/qemu/target_info.h
+++ b/include/qemu/target_info.h
@@ -9,6 +9,8 @@ 
 #ifndef QEMU_TARGET_INFO_H
 #define QEMU_TARGET_INFO_H
 
+#include "qapi/qapi-types-machine.h"
+
 typedef struct BinaryTargetInfo BinaryTargetInfo;
 
 const BinaryTargetInfo *target_info(void);
@@ -17,4 +19,6 @@  bool target_info_is_stub(void);
 
 const char *target_name(void);
 
+SysEmuTarget target_system_arch(void);
+
 #endif
diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c
index 6701e210f54..9e2dd348c06 100644
--- a/hw/core/machine-qmp-cmds.c
+++ b/hw/core/machine-qmp-cmds.c
@@ -36,8 +36,7 @@  CpuInfoFastList *qmp_query_cpus_fast(Error **errp)
     MachineState *ms = MACHINE(qdev_get_machine());
     MachineClass *mc = MACHINE_GET_CLASS(ms);
     CpuInfoFastList *head = NULL, **tail = &head;
-    SysEmuTarget target = qapi_enum_parse(&SysEmuTarget_lookup, target_name(),
-                                          -1, &error_abort);
+    SysEmuTarget target = target_system_arch();
     CPUState *cpu;
 
     CPU_FOREACH(cpu) {
@@ -137,8 +136,7 @@  TargetInfo *qmp_query_target(Error **errp)
 {
     TargetInfo *info = g_malloc0(sizeof(*info));
 
-    info->arch = qapi_enum_parse(&SysEmuTarget_lookup, target_name(), -1,
-                                 &error_abort);
+    info->arch = target_system_arch();
 
     return info;
 }
diff --git a/target_info-stub.c b/target_info-stub.c
index db61a335908..46a240ac66a 100644
--- a/target_info-stub.c
+++ b/target_info-stub.c
@@ -14,6 +14,7 @@ 
 static const BinaryTargetInfo target_info_stub = {
     .is_stub = true,
     .name = TARGET_NAME,
+    .system_arch = -1,
 };
 
 const BinaryTargetInfo *target_info(void)
diff --git a/target_info.c b/target_info.c
index 6b44ea9fc0e..be4f19009b3 100644
--- a/target_info.c
+++ b/target_info.c
@@ -9,6 +9,7 @@ 
 #include "qemu/osdep.h"
 #include "qemu/target_info-impl.h"
 #include "qemu/target_info.h"
+#include "qapi/error.h"
 
 bool target_info_is_stub(void)
 {
@@ -19,3 +20,14 @@  const char *target_name(void)
 {
     return target_info()->name;
 }
+
+SysEmuTarget target_system_arch(void)
+{
+    SysEmuTarget system_arch = target_info()->system_arch;
+
+    if (system_arch >= SYS_EMU_TARGET__MAX) {
+        system_arch = qapi_enum_parse(&SysEmuTarget_lookup, target_name(), -1,
+                                      &error_abort);
+    }
+    return system_arch;
+}