* [PATCH] system: Convert qemu_arch_available() to TargetInfo API
@ 2026-01-07 18:10 Philippe Mathieu-Daudé
2026-01-08 0:36 ` Pierrick Bouvier
0 siblings, 1 reply; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-07 18:10 UTC (permalink / raw)
To: qemu-devel
Cc: Philippe Mathieu-Daudé, Marc-André Lureau,
Paolo Bonzini, Pierrick Bouvier, Daniel P. Berrangé,
Manos Pitsidianakis
Get the base arch_mask from the current SysEmuTarget,
making qemu_arch_available() target-agnostic.
We don't need the per-target QEMU_ARCH definition anymore,
remove it.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
meson.build | 2 --
system/arch_init.c | 30 ------------------------------
target-info.c | 41 +++++++++++++++++++++++++++++++++++++++++
system/meson.build | 1 -
4 files changed, 41 insertions(+), 33 deletions(-)
delete mode 100644 system/arch_init.c
diff --git a/meson.build b/meson.build
index 734c801cc77..435dc6e3c8e 100644
--- a/meson.build
+++ b/meson.build
@@ -3419,8 +3419,6 @@ foreach target : target_dirs
config_target_data.set(k, v)
endif
endforeach
- 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',
configuration: config_target_data)}
diff --git a/system/arch_init.c b/system/arch_init.c
deleted file mode 100644
index e85736884c9..00000000000
--- a/system/arch_init.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * QEMU System Emulator
- *
- * Copyright (c) 2003-2008 Fabrice Bellard
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-#include "qemu/osdep.h"
-#include "system/arch_init.h"
-
-bool qemu_arch_available(unsigned qemu_arch_mask)
-{
- return qemu_arch_mask & QEMU_ARCH;
-}
diff --git a/target-info.c b/target-info.c
index 24696ff4111..4d38767d214 100644
--- a/target-info.c
+++ b/target-info.c
@@ -11,6 +11,7 @@
#include "qemu/target-info-qapi.h"
#include "qemu/target-info-impl.h"
#include "qapi/error.h"
+#include "system/arch_init.h"
const char *target_name(void)
{
@@ -33,6 +34,46 @@ SysEmuTarget target_arch(void)
return arch;
}
+bool qemu_arch_available(unsigned qemu_arch_mask)
+{
+ static const unsigned base_arch_mask[SYS_EMU_TARGET__MAX] = {
+ [SYS_EMU_TARGET_AARCH64] = QEMU_ARCH_ARM,
+ [SYS_EMU_TARGET_ALPHA] = QEMU_ARCH_ALPHA,
+ [SYS_EMU_TARGET_ARM] = QEMU_ARCH_ARM,
+ [SYS_EMU_TARGET_AVR] = QEMU_ARCH_AVR,
+ /*
+ [SYS_EMU_TARGET_HEXAGON] = QEMU_ARCH_HEXAGON,
+ */
+ [SYS_EMU_TARGET_HPPA] = QEMU_ARCH_HPPA,
+ [SYS_EMU_TARGET_I386] = QEMU_ARCH_I386,
+ [SYS_EMU_TARGET_LOONGARCH64] = QEMU_ARCH_LOONGARCH,
+ [SYS_EMU_TARGET_M68K] = QEMU_ARCH_M68K,
+ [SYS_EMU_TARGET_MICROBLAZE] = QEMU_ARCH_MICROBLAZE,
+ [SYS_EMU_TARGET_MICROBLAZEEL] = QEMU_ARCH_MICROBLAZE,
+ [SYS_EMU_TARGET_MIPS] = QEMU_ARCH_MIPS,
+ [SYS_EMU_TARGET_MIPS64] = QEMU_ARCH_MIPS,
+ [SYS_EMU_TARGET_MIPS64EL] = QEMU_ARCH_MIPS,
+ [SYS_EMU_TARGET_MIPSEL] = QEMU_ARCH_MIPS,
+ [SYS_EMU_TARGET_OR1K] = QEMU_ARCH_OPENRISC,
+ [SYS_EMU_TARGET_PPC] = QEMU_ARCH_PPC,
+ [SYS_EMU_TARGET_PPC64] = QEMU_ARCH_PPC,
+ [SYS_EMU_TARGET_RISCV32] = QEMU_ARCH_RISCV,
+ [SYS_EMU_TARGET_RISCV64] = QEMU_ARCH_RISCV,
+ [SYS_EMU_TARGET_RX] = QEMU_ARCH_RX,
+ [SYS_EMU_TARGET_S390X] = QEMU_ARCH_S390X,
+ [SYS_EMU_TARGET_SH4] = QEMU_ARCH_SH4,
+ [SYS_EMU_TARGET_SH4EB] = QEMU_ARCH_SH4,
+ [SYS_EMU_TARGET_SPARC] = QEMU_ARCH_SPARC,
+ [SYS_EMU_TARGET_SPARC64] = QEMU_ARCH_SPARC,
+ [SYS_EMU_TARGET_TRICORE] = QEMU_ARCH_TRICORE,
+ [SYS_EMU_TARGET_X86_64] = QEMU_ARCH_I386,
+ [SYS_EMU_TARGET_XTENSA] = QEMU_ARCH_XTENSA,
+ [SYS_EMU_TARGET_XTENSAEB] = QEMU_ARCH_XTENSA,
+ };
+
+ return qemu_arch_mask & base_arch_mask[target_arch()];
+}
+
const char *target_cpu_type(void)
{
return target_info()->cpu_type;
diff --git a/system/meson.build b/system/meson.build
index 4b69ef0f5fb..66e16db55ce 100644
--- a/system/meson.build
+++ b/system/meson.build
@@ -1,5 +1,4 @@
specific_ss.add(when: 'CONFIG_SYSTEM_ONLY', if_true: [files(
- 'arch_init.c',
'globals-target.c',
)])
--
2.52.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] system: Convert qemu_arch_available() to TargetInfo API
2026-01-07 18:10 [PATCH] system: Convert qemu_arch_available() to TargetInfo API Philippe Mathieu-Daudé
@ 2026-01-08 0:36 ` Pierrick Bouvier
2026-01-08 16:32 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 5+ messages in thread
From: Pierrick Bouvier @ 2026-01-08 0:36 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Marc-André Lureau, Paolo Bonzini, Daniel P. Berrangé,
Manos Pitsidianakis
On 1/7/26 10:10 AM, Philippe Mathieu-Daudé wrote:
> Get the base arch_mask from the current SysEmuTarget,
> making qemu_arch_available() target-agnostic.
>
> We don't need the per-target QEMU_ARCH definition anymore,
> remove it.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> meson.build | 2 --
> system/arch_init.c | 30 ------------------------------
> target-info.c | 41 +++++++++++++++++++++++++++++++++++++++++
> system/meson.build | 1 -
> 4 files changed, 41 insertions(+), 33 deletions(-)
> delete mode 100644 system/arch_init.c
>
> diff --git a/meson.build b/meson.build
> index 734c801cc77..435dc6e3c8e 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -3419,8 +3419,6 @@ foreach target : target_dirs
> config_target_data.set(k, v)
> endif
> endforeach
> - 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',
> configuration: config_target_data)}
>
> diff --git a/system/arch_init.c b/system/arch_init.c
> deleted file mode 100644
> index e85736884c9..00000000000
> --- a/system/arch_init.c
> +++ /dev/null
> @@ -1,30 +0,0 @@
> -/*
> - * QEMU System Emulator
> - *
> - * Copyright (c) 2003-2008 Fabrice Bellard
> - *
> - * Permission is hereby granted, free of charge, to any person obtaining a copy
> - * of this software and associated documentation files (the "Software"), to deal
> - * in the Software without restriction, including without limitation the rights
> - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> - * copies of the Software, and to permit persons to whom the Software is
> - * furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice shall be included in
> - * all copies or substantial portions of the Software.
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> - * THE SOFTWARE.
> - */
> -#include "qemu/osdep.h"
> -#include "system/arch_init.h"
> -
> -bool qemu_arch_available(unsigned qemu_arch_mask)
> -{
> - return qemu_arch_mask & QEMU_ARCH;
> -}
> diff --git a/target-info.c b/target-info.c
> index 24696ff4111..4d38767d214 100644
> --- a/target-info.c
> +++ b/target-info.c
> @@ -11,6 +11,7 @@
> #include "qemu/target-info-qapi.h"
> #include "qemu/target-info-impl.h"
> #include "qapi/error.h"
> +#include "system/arch_init.h"
>
> const char *target_name(void)
> {
> @@ -33,6 +34,46 @@ SysEmuTarget target_arch(void)
> return arch;
> }
>
> +bool qemu_arch_available(unsigned qemu_arch_mask)
> +{
> + static const unsigned base_arch_mask[SYS_EMU_TARGET__MAX] = {
> + [SYS_EMU_TARGET_AARCH64] = QEMU_ARCH_ARM,
> + [SYS_EMU_TARGET_ALPHA] = QEMU_ARCH_ALPHA,
> + [SYS_EMU_TARGET_ARM] = QEMU_ARCH_ARM,
> + [SYS_EMU_TARGET_AVR] = QEMU_ARCH_AVR,
> + /*
> + [SYS_EMU_TARGET_HEXAGON] = QEMU_ARCH_HEXAGON,
> + */
> + [SYS_EMU_TARGET_HPPA] = QEMU_ARCH_HPPA,
> + [SYS_EMU_TARGET_I386] = QEMU_ARCH_I386,
> + [SYS_EMU_TARGET_LOONGARCH64] = QEMU_ARCH_LOONGARCH,
> + [SYS_EMU_TARGET_M68K] = QEMU_ARCH_M68K,
> + [SYS_EMU_TARGET_MICROBLAZE] = QEMU_ARCH_MICROBLAZE,
> + [SYS_EMU_TARGET_MICROBLAZEEL] = QEMU_ARCH_MICROBLAZE,
> + [SYS_EMU_TARGET_MIPS] = QEMU_ARCH_MIPS,
> + [SYS_EMU_TARGET_MIPS64] = QEMU_ARCH_MIPS,
> + [SYS_EMU_TARGET_MIPS64EL] = QEMU_ARCH_MIPS,
> + [SYS_EMU_TARGET_MIPSEL] = QEMU_ARCH_MIPS,
> + [SYS_EMU_TARGET_OR1K] = QEMU_ARCH_OPENRISC,
> + [SYS_EMU_TARGET_PPC] = QEMU_ARCH_PPC,
> + [SYS_EMU_TARGET_PPC64] = QEMU_ARCH_PPC,
> + [SYS_EMU_TARGET_RISCV32] = QEMU_ARCH_RISCV,
> + [SYS_EMU_TARGET_RISCV64] = QEMU_ARCH_RISCV,
> + [SYS_EMU_TARGET_RX] = QEMU_ARCH_RX,
> + [SYS_EMU_TARGET_S390X] = QEMU_ARCH_S390X,
> + [SYS_EMU_TARGET_SH4] = QEMU_ARCH_SH4,
> + [SYS_EMU_TARGET_SH4EB] = QEMU_ARCH_SH4,
> + [SYS_EMU_TARGET_SPARC] = QEMU_ARCH_SPARC,
> + [SYS_EMU_TARGET_SPARC64] = QEMU_ARCH_SPARC,
> + [SYS_EMU_TARGET_TRICORE] = QEMU_ARCH_TRICORE,
> + [SYS_EMU_TARGET_X86_64] = QEMU_ARCH_I386,
> + [SYS_EMU_TARGET_XTENSA] = QEMU_ARCH_XTENSA,
> + [SYS_EMU_TARGET_XTENSAEB] = QEMU_ARCH_XTENSA,
> + };
> +
Just a remark: is that worth having the "static const" array approach
when we could have a proper switch than can be checked for
exhaustiveness with compiler warnings instead?
Beyond that,
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] system: Convert qemu_arch_available() to TargetInfo API
2026-01-08 0:36 ` Pierrick Bouvier
@ 2026-01-08 16:32 ` Philippe Mathieu-Daudé
2026-01-08 18:53 ` Pierrick Bouvier
0 siblings, 1 reply; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-01-08 16:32 UTC (permalink / raw)
To: Pierrick Bouvier, qemu-devel
Cc: Marc-André Lureau, Paolo Bonzini, Daniel P. Berrangé,
Manos Pitsidianakis, Markus Armbruster
On 8/1/26 01:36, Pierrick Bouvier wrote:
> On 1/7/26 10:10 AM, Philippe Mathieu-Daudé wrote:
>> Get the base arch_mask from the current SysEmuTarget,
>> making qemu_arch_available() target-agnostic.
>>
>> We don't need the per-target QEMU_ARCH definition anymore,
>> remove it.
>>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> ---
>> meson.build | 2 --
>> system/arch_init.c | 30 ------------------------------
>> target-info.c | 41 +++++++++++++++++++++++++++++++++++++++++
>> system/meson.build | 1 -
>> 4 files changed, 41 insertions(+), 33 deletions(-)
>> delete mode 100644 system/arch_init.c
>>
>> diff --git a/meson.build b/meson.build
>> index 734c801cc77..435dc6e3c8e 100644
>> --- a/meson.build
>> +++ b/meson.build
>> @@ -3419,8 +3419,6 @@ foreach target : target_dirs
>> config_target_data.set(k, v)
>> endif
>> endforeach
>> - 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',
>> configuration:
>> config_target_data)}
>> diff --git a/system/arch_init.c b/system/arch_init.c
>> deleted file mode 100644
>> index e85736884c9..00000000000
>> --- a/system/arch_init.c
>> +++ /dev/null
>> @@ -1,30 +0,0 @@
>> -/*
>> - * QEMU System Emulator
>> - *
>> - * Copyright (c) 2003-2008 Fabrice Bellard
>> - *
>> - * Permission is hereby granted, free of charge, to any person
>> obtaining a copy
>> - * of this software and associated documentation files (the
>> "Software"), to deal
>> - * in the Software without restriction, including without limitation
>> the rights
>> - * to use, copy, modify, merge, publish, distribute, sublicense, and/
>> or sell
>> - * copies of the Software, and to permit persons to whom the Software is
>> - * furnished to do so, subject to the following conditions:
>> - *
>> - * The above copyright notice and this permission notice shall be
>> included in
>> - * all copies or substantial portions of the Software.
>> - *
>> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>> EXPRESS OR
>> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>> MERCHANTABILITY,
>> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
>> SHALL
>> - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
>> OR OTHER
>> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
>> ARISING FROM,
>> - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
>> DEALINGS IN
>> - * THE SOFTWARE.
>> - */
>> -#include "qemu/osdep.h"
>> -#include "system/arch_init.h"
>> -
>> -bool qemu_arch_available(unsigned qemu_arch_mask)
>> -{
>> - return qemu_arch_mask & QEMU_ARCH;
>> -}
>> diff --git a/target-info.c b/target-info.c
>> index 24696ff4111..4d38767d214 100644
>> --- a/target-info.c
>> +++ b/target-info.c
>> @@ -11,6 +11,7 @@
>> #include "qemu/target-info-qapi.h"
>> #include "qemu/target-info-impl.h"
>> #include "qapi/error.h"
>> +#include "system/arch_init.h"
>> const char *target_name(void)
>> {
>> @@ -33,6 +34,46 @@ SysEmuTarget target_arch(void)
>> return arch;
>> }
>> +bool qemu_arch_available(unsigned qemu_arch_mask)
>> +{
>> + static const unsigned base_arch_mask[SYS_EMU_TARGET__MAX] = {
>> + [SYS_EMU_TARGET_AARCH64] = QEMU_ARCH_ARM,
>> + [SYS_EMU_TARGET_ALPHA] = QEMU_ARCH_ALPHA,
>> + [SYS_EMU_TARGET_ARM] = QEMU_ARCH_ARM,
>> + [SYS_EMU_TARGET_AVR] = QEMU_ARCH_AVR,
>> + /*
>> + [SYS_EMU_TARGET_HEXAGON] = QEMU_ARCH_HEXAGON,
>> + */
>> + [SYS_EMU_TARGET_HPPA] = QEMU_ARCH_HPPA,
>> + [SYS_EMU_TARGET_I386] = QEMU_ARCH_I386,
>> + [SYS_EMU_TARGET_LOONGARCH64] = QEMU_ARCH_LOONGARCH,
>> + [SYS_EMU_TARGET_M68K] = QEMU_ARCH_M68K,
>> + [SYS_EMU_TARGET_MICROBLAZE] = QEMU_ARCH_MICROBLAZE,
>> + [SYS_EMU_TARGET_MICROBLAZEEL] = QEMU_ARCH_MICROBLAZE,
>> + [SYS_EMU_TARGET_MIPS] = QEMU_ARCH_MIPS,
>> + [SYS_EMU_TARGET_MIPS64] = QEMU_ARCH_MIPS,
>> + [SYS_EMU_TARGET_MIPS64EL] = QEMU_ARCH_MIPS,
>> + [SYS_EMU_TARGET_MIPSEL] = QEMU_ARCH_MIPS,
>> + [SYS_EMU_TARGET_OR1K] = QEMU_ARCH_OPENRISC,
>> + [SYS_EMU_TARGET_PPC] = QEMU_ARCH_PPC,
>> + [SYS_EMU_TARGET_PPC64] = QEMU_ARCH_PPC,
>> + [SYS_EMU_TARGET_RISCV32] = QEMU_ARCH_RISCV,
>> + [SYS_EMU_TARGET_RISCV64] = QEMU_ARCH_RISCV,
>> + [SYS_EMU_TARGET_RX] = QEMU_ARCH_RX,
>> + [SYS_EMU_TARGET_S390X] = QEMU_ARCH_S390X,
>> + [SYS_EMU_TARGET_SH4] = QEMU_ARCH_SH4,
>> + [SYS_EMU_TARGET_SH4EB] = QEMU_ARCH_SH4,
>> + [SYS_EMU_TARGET_SPARC] = QEMU_ARCH_SPARC,
>> + [SYS_EMU_TARGET_SPARC64] = QEMU_ARCH_SPARC,
>> + [SYS_EMU_TARGET_TRICORE] = QEMU_ARCH_TRICORE,
>> + [SYS_EMU_TARGET_X86_64] = QEMU_ARCH_I386,
>> + [SYS_EMU_TARGET_XTENSA] = QEMU_ARCH_XTENSA,
>> + [SYS_EMU_TARGET_XTENSAEB] = QEMU_ARCH_XTENSA,
>> + };
>> +
>
> Just a remark: is that worth having the "static const" array approach
> when we could have a proper switch than can be checked for
> exhaustiveness with compiler warnings instead?
I thought 40 LoC would be simpler to review than 80, and it was
simpler to generate the template in bash.
Besides, we don't use compiler warnings for enum (such -Wswitch)
due to QAPI:
https://lore.kernel.org/qemu-devel/20230315112811.22355-1-philmd@linaro.org/
>
> Beyond that,
> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] system: Convert qemu_arch_available() to TargetInfo API
2026-01-08 16:32 ` Philippe Mathieu-Daudé
@ 2026-01-08 18:53 ` Pierrick Bouvier
2026-01-09 6:09 ` Markus Armbruster
0 siblings, 1 reply; 5+ messages in thread
From: Pierrick Bouvier @ 2026-01-08 18:53 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: Marc-André Lureau, Paolo Bonzini, Daniel P. Berrangé,
Manos Pitsidianakis, Markus Armbruster
On 1/8/26 8:32 AM, Philippe Mathieu-Daudé wrote:
> On 8/1/26 01:36, Pierrick Bouvier wrote:
>> On 1/7/26 10:10 AM, Philippe Mathieu-Daudé wrote:
>>> Get the base arch_mask from the current SysEmuTarget,
>>> making qemu_arch_available() target-agnostic.
>>>
>>> We don't need the per-target QEMU_ARCH definition anymore,
>>> remove it.
>>>
>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>> ---
>>> meson.build | 2 --
>>> system/arch_init.c | 30 ------------------------------
>>> target-info.c | 41 +++++++++++++++++++++++++++++++++++++++++
>>> system/meson.build | 1 -
>>> 4 files changed, 41 insertions(+), 33 deletions(-)
>>> delete mode 100644 system/arch_init.c
>>>
>>> diff --git a/meson.build b/meson.build
>>> index 734c801cc77..435dc6e3c8e 100644
>>> --- a/meson.build
>>> +++ b/meson.build
>>> @@ -3419,8 +3419,6 @@ foreach target : target_dirs
>>> config_target_data.set(k, v)
>>> endif
>>> endforeach
>>> - 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',
>>> configuration:
>>> config_target_data)}
>>> diff --git a/system/arch_init.c b/system/arch_init.c
>>> deleted file mode 100644
>>> index e85736884c9..00000000000
>>> --- a/system/arch_init.c
>>> +++ /dev/null
>>> @@ -1,30 +0,0 @@
>>> -/*
>>> - * QEMU System Emulator
>>> - *
>>> - * Copyright (c) 2003-2008 Fabrice Bellard
>>> - *
>>> - * Permission is hereby granted, free of charge, to any person
>>> obtaining a copy
>>> - * of this software and associated documentation files (the
>>> "Software"), to deal
>>> - * in the Software without restriction, including without limitation
>>> the rights
>>> - * to use, copy, modify, merge, publish, distribute, sublicense, and/
>>> or sell
>>> - * copies of the Software, and to permit persons to whom the Software is
>>> - * furnished to do so, subject to the following conditions:
>>> - *
>>> - * The above copyright notice and this permission notice shall be
>>> included in
>>> - * all copies or substantial portions of the Software.
>>> - *
>>> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>>> EXPRESS OR
>>> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>>> MERCHANTABILITY,
>>> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
>>> SHALL
>>> - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
>>> OR OTHER
>>> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
>>> ARISING FROM,
>>> - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
>>> DEALINGS IN
>>> - * THE SOFTWARE.
>>> - */
>>> -#include "qemu/osdep.h"
>>> -#include "system/arch_init.h"
>>> -
>>> -bool qemu_arch_available(unsigned qemu_arch_mask)
>>> -{
>>> - return qemu_arch_mask & QEMU_ARCH;
>>> -}
>>> diff --git a/target-info.c b/target-info.c
>>> index 24696ff4111..4d38767d214 100644
>>> --- a/target-info.c
>>> +++ b/target-info.c
>>> @@ -11,6 +11,7 @@
>>> #include "qemu/target-info-qapi.h"
>>> #include "qemu/target-info-impl.h"
>>> #include "qapi/error.h"
>>> +#include "system/arch_init.h"
>>> const char *target_name(void)
>>> {
>>> @@ -33,6 +34,46 @@ SysEmuTarget target_arch(void)
>>> return arch;
>>> }
>>> +bool qemu_arch_available(unsigned qemu_arch_mask)
>>> +{
>>> + static const unsigned base_arch_mask[SYS_EMU_TARGET__MAX] = {
>>> + [SYS_EMU_TARGET_AARCH64] = QEMU_ARCH_ARM,
>>> + [SYS_EMU_TARGET_ALPHA] = QEMU_ARCH_ALPHA,
>>> + [SYS_EMU_TARGET_ARM] = QEMU_ARCH_ARM,
>>> + [SYS_EMU_TARGET_AVR] = QEMU_ARCH_AVR,
>>> + /*
>>> + [SYS_EMU_TARGET_HEXAGON] = QEMU_ARCH_HEXAGON,
>>> + */
>>> + [SYS_EMU_TARGET_HPPA] = QEMU_ARCH_HPPA,
>>> + [SYS_EMU_TARGET_I386] = QEMU_ARCH_I386,
>>> + [SYS_EMU_TARGET_LOONGARCH64] = QEMU_ARCH_LOONGARCH,
>>> + [SYS_EMU_TARGET_M68K] = QEMU_ARCH_M68K,
>>> + [SYS_EMU_TARGET_MICROBLAZE] = QEMU_ARCH_MICROBLAZE,
>>> + [SYS_EMU_TARGET_MICROBLAZEEL] = QEMU_ARCH_MICROBLAZE,
>>> + [SYS_EMU_TARGET_MIPS] = QEMU_ARCH_MIPS,
>>> + [SYS_EMU_TARGET_MIPS64] = QEMU_ARCH_MIPS,
>>> + [SYS_EMU_TARGET_MIPS64EL] = QEMU_ARCH_MIPS,
>>> + [SYS_EMU_TARGET_MIPSEL] = QEMU_ARCH_MIPS,
>>> + [SYS_EMU_TARGET_OR1K] = QEMU_ARCH_OPENRISC,
>>> + [SYS_EMU_TARGET_PPC] = QEMU_ARCH_PPC,
>>> + [SYS_EMU_TARGET_PPC64] = QEMU_ARCH_PPC,
>>> + [SYS_EMU_TARGET_RISCV32] = QEMU_ARCH_RISCV,
>>> + [SYS_EMU_TARGET_RISCV64] = QEMU_ARCH_RISCV,
>>> + [SYS_EMU_TARGET_RX] = QEMU_ARCH_RX,
>>> + [SYS_EMU_TARGET_S390X] = QEMU_ARCH_S390X,
>>> + [SYS_EMU_TARGET_SH4] = QEMU_ARCH_SH4,
>>> + [SYS_EMU_TARGET_SH4EB] = QEMU_ARCH_SH4,
>>> + [SYS_EMU_TARGET_SPARC] = QEMU_ARCH_SPARC,
>>> + [SYS_EMU_TARGET_SPARC64] = QEMU_ARCH_SPARC,
>>> + [SYS_EMU_TARGET_TRICORE] = QEMU_ARCH_TRICORE,
>>> + [SYS_EMU_TARGET_X86_64] = QEMU_ARCH_I386,
>>> + [SYS_EMU_TARGET_XTENSA] = QEMU_ARCH_XTENSA,
>>> + [SYS_EMU_TARGET_XTENSAEB] = QEMU_ARCH_XTENSA,
>>> + };
>>> +
>>
>> Just a remark: is that worth having the "static const" array approach
>> when we could have a proper switch than can be checked for
>> exhaustiveness with compiler warnings instead?
>
> I thought 40 LoC would be simpler to review than 80, and it was
> simpler to generate the template in bash.
>
> Besides, we don't use compiler warnings for enum (such -Wswitch)
> due to QAPI:
> https://lore.kernel.org/qemu-devel/20230315112811.22355-1-philmd@linaro.org/
>
Reading the thread above, the only mention I find is the 3rd commit that
precisely change definition because -Wswitch is enabled with clang.
And it's not only a clang thing, gcc has it in Wall also [1].
I don't mind the array approach, but maybe just add a *static* assert
making sure (SYS_EMU_TARGET__MAX-1 == SYS_EMU_TARGET_XTENSAEB) so this
file will break as soon as there is a new target added. It's simple and
the next developer who won't have to debug this will thank you.
[1] https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/Warning-Options.html
>>
>> Beyond that,
>> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
>
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] system: Convert qemu_arch_available() to TargetInfo API
2026-01-08 18:53 ` Pierrick Bouvier
@ 2026-01-09 6:09 ` Markus Armbruster
0 siblings, 0 replies; 5+ messages in thread
From: Markus Armbruster @ 2026-01-09 6:09 UTC (permalink / raw)
To: Pierrick Bouvier
Cc: Philippe Mathieu-Daudé, qemu-devel, Marc-André Lureau,
Paolo Bonzini, Daniel P. Berrangé, Manos Pitsidianakis
Pierrick Bouvier <pierrick.bouvier@linaro.org> writes:
> On 1/8/26 8:32 AM, Philippe Mathieu-Daudé wrote:
>> On 8/1/26 01:36, Pierrick Bouvier wrote:
>>> On 1/7/26 10:10 AM, Philippe Mathieu-Daudé wrote:
>>>> Get the base arch_mask from the current SysEmuTarget,
>>>> making qemu_arch_available() target-agnostic.
>>>>
>>>> We don't need the per-target QEMU_ARCH definition anymore,
>>>> remove it.
>>>>
>>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
[...]
>>>> @@ -33,6 +34,46 @@ SysEmuTarget target_arch(void)
>>>> return arch;
>>>> }
>>>> +bool qemu_arch_available(unsigned qemu_arch_mask)
>>>> +{
>>>> + static const unsigned base_arch_mask[SYS_EMU_TARGET__MAX] = {
>>>> + [SYS_EMU_TARGET_AARCH64] = QEMU_ARCH_ARM,
>>>> + [SYS_EMU_TARGET_ALPHA] = QEMU_ARCH_ALPHA,
>>>> + [SYS_EMU_TARGET_ARM] = QEMU_ARCH_ARM,
>>>> + [SYS_EMU_TARGET_AVR] = QEMU_ARCH_AVR,
>>>> + /*
>>>> + [SYS_EMU_TARGET_HEXAGON] = QEMU_ARCH_HEXAGON,
>>>> + */
>>>> + [SYS_EMU_TARGET_HPPA] = QEMU_ARCH_HPPA,
>>>> + [SYS_EMU_TARGET_I386] = QEMU_ARCH_I386,
>>>> + [SYS_EMU_TARGET_LOONGARCH64] = QEMU_ARCH_LOONGARCH,
>>>> + [SYS_EMU_TARGET_M68K] = QEMU_ARCH_M68K,
>>>> + [SYS_EMU_TARGET_MICROBLAZE] = QEMU_ARCH_MICROBLAZE,
>>>> + [SYS_EMU_TARGET_MICROBLAZEEL] = QEMU_ARCH_MICROBLAZE,
>>>> + [SYS_EMU_TARGET_MIPS] = QEMU_ARCH_MIPS,
>>>> + [SYS_EMU_TARGET_MIPS64] = QEMU_ARCH_MIPS,
>>>> + [SYS_EMU_TARGET_MIPS64EL] = QEMU_ARCH_MIPS,
>>>> + [SYS_EMU_TARGET_MIPSEL] = QEMU_ARCH_MIPS,
>>>> + [SYS_EMU_TARGET_OR1K] = QEMU_ARCH_OPENRISC,
>>>> + [SYS_EMU_TARGET_PPC] = QEMU_ARCH_PPC,
>>>> + [SYS_EMU_TARGET_PPC64] = QEMU_ARCH_PPC,
>>>> + [SYS_EMU_TARGET_RISCV32] = QEMU_ARCH_RISCV,
>>>> + [SYS_EMU_TARGET_RISCV64] = QEMU_ARCH_RISCV,
>>>> + [SYS_EMU_TARGET_RX] = QEMU_ARCH_RX,
>>>> + [SYS_EMU_TARGET_S390X] = QEMU_ARCH_S390X,
>>>> + [SYS_EMU_TARGET_SH4] = QEMU_ARCH_SH4,
>>>> + [SYS_EMU_TARGET_SH4EB] = QEMU_ARCH_SH4,
>>>> + [SYS_EMU_TARGET_SPARC] = QEMU_ARCH_SPARC,
>>>> + [SYS_EMU_TARGET_SPARC64] = QEMU_ARCH_SPARC,
>>>> + [SYS_EMU_TARGET_TRICORE] = QEMU_ARCH_TRICORE,
>>>> + [SYS_EMU_TARGET_X86_64] = QEMU_ARCH_I386,
>>>> + [SYS_EMU_TARGET_XTENSA] = QEMU_ARCH_XTENSA,
>>>> + [SYS_EMU_TARGET_XTENSAEB] = QEMU_ARCH_XTENSA,
>>>> + };
>>>> +
>>>
>>> Just a remark: is that worth having the "static const" array approach
>>> when we could have a proper switch than can be checked for
>>> exhaustiveness with compiler warnings instead?
>>
>> I thought 40 LoC would be simpler to review than 80, and it was
>> simpler to generate the template in bash.
I find the array solution much easier to grasp at a glance. The
initializer shows the mapping concisely. With a switch, there's noise
around the mapping, and the fact that all all switch cases do nothing
but assign a constant to the same variable is not obvious at a glance.
>> Besides, we don't use compiler warnings for enum (such -Wswitch)
>> due to QAPI:
>> https://lore.kernel.org/qemu-devel/20230315112811.22355-1-philmd@linaro.org/
>>
>
> Reading the thread above, the only mention I find is the 3rd commit that precisely change definition because -Wswitch is enabled with clang.
>
> And it's not only a clang thing, gcc has it in Wall also [1].
>
> I don't mind the array approach, but maybe just add a *static* assert making sure (SYS_EMU_TARGET__MAX-1 == SYS_EMU_TARGET_XTENSAEB) so this file will break as soon as there is a new target added. It's simple and the next developer who won't have to debug this will thank you.
Won't help when new enum values are added in the middle. We keep them
alphabetically sorted...
We could use a simple run-time assertion:
arch_mask = qemu_arch_mask & base_arch_mask[target_arch()];
assert(arch_mask);
return arch_mask;
Works because the QEMU_ARCH_FOO are all non-zero.
Pick your poison.
> [1] https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/Warning-Options.html
>
>>>
>>> Beyond that,
>>> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-01-09 6:10 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-07 18:10 [PATCH] system: Convert qemu_arch_available() to TargetInfo API Philippe Mathieu-Daudé
2026-01-08 0:36 ` Pierrick Bouvier
2026-01-08 16:32 ` Philippe Mathieu-Daudé
2026-01-08 18:53 ` Pierrick Bouvier
2026-01-09 6:09 ` Markus Armbruster
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.