diff mbox series

[RFC,v4,14/19] qemu/target_info: Add %target_arch field to TargetInfo

Message ID 20250422145502.70770-15-philmd@linaro.org
State New
Headers show
Series single-binary: Make hw/arm/ common | expand

Commit Message

Philippe Mathieu-Daudé April 22, 2025, 2:54 p.m. UTC
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 include/qemu/target-info-impl.h   | 4 ++++
 configs/targets/aarch64-softmmu.c | 1 +
 configs/targets/arm-softmmu.c     | 1 +
 target-info-stub.c                | 1 +
 4 files changed, 7 insertions(+)

Comments

Richard Henderson April 22, 2025, 5:46 p.m. UTC | #1
On 4/22/25 07:54, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
>   include/qemu/target-info-impl.h   | 4 ++++
>   configs/targets/aarch64-softmmu.c | 1 +
>   configs/targets/arm-softmmu.c     | 1 +
>   target-info-stub.c                | 1 +
>   4 files changed, 7 insertions(+)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~
Pierrick Bouvier April 22, 2025, 6:20 p.m. UTC | #2
On 4/22/25 07:54, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   include/qemu/target-info-impl.h   | 4 ++++
>   configs/targets/aarch64-softmmu.c | 1 +
>   configs/targets/arm-softmmu.c     | 1 +
>   target-info-stub.c                | 1 +
>   4 files changed, 7 insertions(+)
> 
> diff --git a/include/qemu/target-info-impl.h b/include/qemu/target-info-impl.h
> index 4ef54c5136a..e5cd169b49a 100644
> --- a/include/qemu/target-info-impl.h
> +++ b/include/qemu/target-info-impl.h
> @@ -10,12 +10,16 @@
>   #define QEMU_TARGET_INFO_IMPL_H
>   
>   #include "qemu/target-info.h"
> +#include "qapi/qapi-types-machine.h"
>   
>   typedef struct TargetInfo {
>   
>       /* runtime equivalent of TARGET_NAME definition */
>       const char *const target_name;
>   
> +    /* related to TARGET_ARCH definition */
> +    SysEmuTarget target_arch;
> +
>       /* QOM typename machines for this binary must implement */
>       const char *const machine_typename;
>   
> diff --git a/configs/targets/aarch64-softmmu.c b/configs/targets/aarch64-softmmu.c
> index 375e6fa0b7b..ff89401ea34 100644
> --- a/configs/targets/aarch64-softmmu.c
> +++ b/configs/targets/aarch64-softmmu.c
> @@ -13,6 +13,7 @@
>   
>   static const TargetInfo target_info_aarch64_system = {
>       .target_name = "aarch64",
> +    .target_arch = SYS_EMU_TARGET_AARCH64,
>       .machine_typename = TYPE_TARGET_AARCH64_MACHINE,
>   };
>   
> diff --git a/configs/targets/arm-softmmu.c b/configs/targets/arm-softmmu.c
> index d4acdae64f3..22ec9e4faa3 100644
> --- a/configs/targets/arm-softmmu.c
> +++ b/configs/targets/arm-softmmu.c
> @@ -13,6 +13,7 @@
>   
>   static const TargetInfo target_info_arm_system = {
>       .target_name = "arm",
> +    .target_arch = SYS_EMU_TARGET_ARM,
>       .machine_typename = TYPE_TARGET_ARM_MACHINE,
>   };
>   
> diff --git a/target-info-stub.c b/target-info-stub.c
> index 218e5898e7f..e573f5c1975 100644
> --- a/target-info-stub.c
> +++ b/target-info-stub.c
> @@ -12,6 +12,7 @@
>   
>   static const TargetInfo target_info_stub = {
>       .target_name = TARGET_NAME,
> +    .target_arch = -1,

I think we should have a full ifdef ladder here, to handle all 
architectures. Setting -1 is not a safe default.

>       .machine_typename = TYPE_MACHINE,
>   };
>
Philippe Mathieu-Daudé April 22, 2025, 6:24 p.m. UTC | #3
On 22/4/25 20:20, Pierrick Bouvier wrote:
> On 4/22/25 07:54, Philippe Mathieu-Daudé wrote:
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> ---
>>   include/qemu/target-info-impl.h   | 4 ++++
>>   configs/targets/aarch64-softmmu.c | 1 +
>>   configs/targets/arm-softmmu.c     | 1 +
>>   target-info-stub.c                | 1 +
>>   4 files changed, 7 insertions(+)
>>
>> diff --git a/include/qemu/target-info-impl.h b/include/qemu/target- 
>> info-impl.h
>> index 4ef54c5136a..e5cd169b49a 100644
>> --- a/include/qemu/target-info-impl.h
>> +++ b/include/qemu/target-info-impl.h
>> @@ -10,12 +10,16 @@
>>   #define QEMU_TARGET_INFO_IMPL_H
>>   #include "qemu/target-info.h"
>> +#include "qapi/qapi-types-machine.h"
>>   typedef struct TargetInfo {
>>       /* runtime equivalent of TARGET_NAME definition */
>>       const char *const target_name;
>> +    /* related to TARGET_ARCH definition */
>> +    SysEmuTarget target_arch;
>> +
>>       /* QOM typename machines for this binary must implement */
>>       const char *const machine_typename;
>> diff --git a/configs/targets/aarch64-softmmu.c b/configs/targets/ 
>> aarch64-softmmu.c
>> index 375e6fa0b7b..ff89401ea34 100644
>> --- a/configs/targets/aarch64-softmmu.c
>> +++ b/configs/targets/aarch64-softmmu.c
>> @@ -13,6 +13,7 @@
>>   static const TargetInfo target_info_aarch64_system = {
>>       .target_name = "aarch64",
>> +    .target_arch = SYS_EMU_TARGET_AARCH64,
>>       .machine_typename = TYPE_TARGET_AARCH64_MACHINE,
>>   };
>> diff --git a/configs/targets/arm-softmmu.c b/configs/targets/arm- 
>> softmmu.c
>> index d4acdae64f3..22ec9e4faa3 100644
>> --- a/configs/targets/arm-softmmu.c
>> +++ b/configs/targets/arm-softmmu.c
>> @@ -13,6 +13,7 @@
>>   static const TargetInfo target_info_arm_system = {
>>       .target_name = "arm",
>> +    .target_arch = SYS_EMU_TARGET_ARM,
>>       .machine_typename = TYPE_TARGET_ARM_MACHINE,
>>   };
>> diff --git a/target-info-stub.c b/target-info-stub.c
>> index 218e5898e7f..e573f5c1975 100644
>> --- a/target-info-stub.c
>> +++ b/target-info-stub.c
>> @@ -12,6 +12,7 @@
>>   static const TargetInfo target_info_stub = {
>>       .target_name = TARGET_NAME,
>> +    .target_arch = -1,
> 
> I think we should have a full ifdef ladder here, to handle all 
> architectures. Setting -1 is not a safe default.

TargetInfo definition is internal to "qemu/target-info-impl.h",
otherwise its type is forward-declared as opaque.

> 
>>       .machine_typename = TYPE_MACHINE,
>>   };
>
Pierrick Bouvier April 22, 2025, 6:30 p.m. UTC | #4
On 4/22/25 11:24, Philippe Mathieu-Daudé wrote:
> On 22/4/25 20:20, Pierrick Bouvier wrote:
>> On 4/22/25 07:54, Philippe Mathieu-Daudé wrote:
>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>> ---
>>>    include/qemu/target-info-impl.h   | 4 ++++
>>>    configs/targets/aarch64-softmmu.c | 1 +
>>>    configs/targets/arm-softmmu.c     | 1 +
>>>    target-info-stub.c                | 1 +
>>>    4 files changed, 7 insertions(+)
>>>
>>> diff --git a/include/qemu/target-info-impl.h b/include/qemu/target-
>>> info-impl.h
>>> index 4ef54c5136a..e5cd169b49a 100644
>>> --- a/include/qemu/target-info-impl.h
>>> +++ b/include/qemu/target-info-impl.h
>>> @@ -10,12 +10,16 @@
>>>    #define QEMU_TARGET_INFO_IMPL_H
>>>    #include "qemu/target-info.h"
>>> +#include "qapi/qapi-types-machine.h"
>>>    typedef struct TargetInfo {
>>>        /* runtime equivalent of TARGET_NAME definition */
>>>        const char *const target_name;
>>> +    /* related to TARGET_ARCH definition */
>>> +    SysEmuTarget target_arch;
>>> +
>>>        /* QOM typename machines for this binary must implement */
>>>        const char *const machine_typename;
>>> diff --git a/configs/targets/aarch64-softmmu.c b/configs/targets/
>>> aarch64-softmmu.c
>>> index 375e6fa0b7b..ff89401ea34 100644
>>> --- a/configs/targets/aarch64-softmmu.c
>>> +++ b/configs/targets/aarch64-softmmu.c
>>> @@ -13,6 +13,7 @@
>>>    static const TargetInfo target_info_aarch64_system = {
>>>        .target_name = "aarch64",
>>> +    .target_arch = SYS_EMU_TARGET_AARCH64,
>>>        .machine_typename = TYPE_TARGET_AARCH64_MACHINE,
>>>    };
>>> diff --git a/configs/targets/arm-softmmu.c b/configs/targets/arm-
>>> softmmu.c
>>> index d4acdae64f3..22ec9e4faa3 100644
>>> --- a/configs/targets/arm-softmmu.c
>>> +++ b/configs/targets/arm-softmmu.c
>>> @@ -13,6 +13,7 @@
>>>    static const TargetInfo target_info_arm_system = {
>>>        .target_name = "arm",
>>> +    .target_arch = SYS_EMU_TARGET_ARM,
>>>        .machine_typename = TYPE_TARGET_ARM_MACHINE,
>>>    };
>>> diff --git a/target-info-stub.c b/target-info-stub.c
>>> index 218e5898e7f..e573f5c1975 100644
>>> --- a/target-info-stub.c
>>> +++ b/target-info-stub.c
>>> @@ -12,6 +12,7 @@
>>>    static const TargetInfo target_info_stub = {
>>>        .target_name = TARGET_NAME,
>>> +    .target_arch = -1,
>>
>> I think we should have a full ifdef ladder here, to handle all
>> architectures. Setting -1 is not a safe default.
> 
> TargetInfo definition is internal to "qemu/target-info-impl.h",
> otherwise its type is forward-declared as opaque.
> 

Fine, but we need to be able to access to target_arch(), which returns 
the enum value, without having to deal with -1 situation, which is not a 
proper enum value.

switch (target_arch()) {
case SYS_EMU_TARGET_ARM:
case SYS_EMU_TARGET_AARCH64:
...
default:
	break;
}

>>
>>>        .machine_typename = TYPE_MACHINE,
>>>    };
>>
>
diff mbox series

Patch

diff --git a/include/qemu/target-info-impl.h b/include/qemu/target-info-impl.h
index 4ef54c5136a..e5cd169b49a 100644
--- a/include/qemu/target-info-impl.h
+++ b/include/qemu/target-info-impl.h
@@ -10,12 +10,16 @@ 
 #define QEMU_TARGET_INFO_IMPL_H
 
 #include "qemu/target-info.h"
+#include "qapi/qapi-types-machine.h"
 
 typedef struct TargetInfo {
 
     /* runtime equivalent of TARGET_NAME definition */
     const char *const target_name;
 
+    /* related to TARGET_ARCH definition */
+    SysEmuTarget target_arch;
+
     /* QOM typename machines for this binary must implement */
     const char *const machine_typename;
 
diff --git a/configs/targets/aarch64-softmmu.c b/configs/targets/aarch64-softmmu.c
index 375e6fa0b7b..ff89401ea34 100644
--- a/configs/targets/aarch64-softmmu.c
+++ b/configs/targets/aarch64-softmmu.c
@@ -13,6 +13,7 @@ 
 
 static const TargetInfo target_info_aarch64_system = {
     .target_name = "aarch64",
+    .target_arch = SYS_EMU_TARGET_AARCH64,
     .machine_typename = TYPE_TARGET_AARCH64_MACHINE,
 };
 
diff --git a/configs/targets/arm-softmmu.c b/configs/targets/arm-softmmu.c
index d4acdae64f3..22ec9e4faa3 100644
--- a/configs/targets/arm-softmmu.c
+++ b/configs/targets/arm-softmmu.c
@@ -13,6 +13,7 @@ 
 
 static const TargetInfo target_info_arm_system = {
     .target_name = "arm",
+    .target_arch = SYS_EMU_TARGET_ARM,
     .machine_typename = TYPE_TARGET_ARM_MACHINE,
 };
 
diff --git a/target-info-stub.c b/target-info-stub.c
index 218e5898e7f..e573f5c1975 100644
--- a/target-info-stub.c
+++ b/target-info-stub.c
@@ -12,6 +12,7 @@ 
 
 static const TargetInfo target_info_stub = {
     .target_name = TARGET_NAME,
+    .target_arch = -1,
     .machine_typename = TYPE_MACHINE,
 };