Re: [PATCH 00/27] single-binary: implement dynamic filtering for machine types

Daniel Henrique Barboza <[email protected]>
Newsgroups org.nongnu.qemu-devel
Message-ID <[email protected]>

On 8/5/2026 1:20 PM, Pierrick Bouvier wrote:
> On 8/5/2026 6:30 AM, Yonggang Luo wrote:
>>
>>
>> On Fri, Jul 31, 2026 at 1:34 AM Pierrick Bouvier
>> <[email protected]
>> <mailto:[email protected]>> wrote:
>>>
>>> On 7/23/2026 5:09 PM, Pierrick Bouvier wrote:
>>>> Now that we can link a single-binary with at least two targets (arm,
>> aarch64),
>>>> we want to make sure that we expose the same set of machines (later
>> devices and
>>>> cpus) than target binaries. For that, we implemented a static
>> filtering based on
>>>> target interfaces that each machine will implement to declare which
>> targets have
>>>> this machine.
>>>>
>>>> However, we discovered that this static filtering is not enough.
>> Indeed, some
>>>> machines and devices do not depend only on target, and their
>> presence can depend
>>>> on Kconfig or host/target combination. Thus, our static approach
>> can't work, and
>>>> we need something more flexible.
>>>>
>>>> This series adds a new TYPE_TARGET_SPECIFIC, that declare a single
>> function
>>>> bool is_available(void). From there, any machine type (and later
>> devices and
>>>> cpus) can implement it to override their presence for each target.
>>>> We first replace the existing static mechanism with this, and once
>> done, we
>>>> cleanup all the old interface. One nice benefit is that we can get
>> rid of
>>>> config/targets/*.c files, which saves duplication.
>>>>
>>>> This series was tested by comparing list of machines for all qemu system
>>>> binaries, before and after this change, to make sure we don't
>> introduce a
>>>> regression.
>>>>
>>
>> I am also tracing for this. So what's the shape of the final command line?
>>
> 
> I have those commits ready, but I would like to get filtering done
> before so we can focus on command line independently.
> 
> Currently, what we have implemented is:
> ./build/qemu-system -target {arm,aarch64,microblaze}
> Or
> cp ./build/qemu-system ./build/qemu-system-{arm,aarch64,microblaze} and
> there is no need to use -target in this case.
> 
>> Maybe we can at least get arm/arm64/riscv32/risv64/riscv32-be/risv64-be
>> to be in a single binary.
>>
> 
> v0 will be arm/arm64/microblaze.
> risvc64 is a wip, it's not yet ready for integration.

I talked with Mr. Pierrick and Mr. Phil and offered a hand in the riscv side.
So far I wasn't able to do much about it - qemu-riscv has been more active than
usual and we're barely keeping up with the reviews and ongoing work we want
to push for 11.2 ... I think we'll be in better shape for v1 of this effort.

Thanks,
Daniel




> 
>> The -be is needed because gdbstub would need this to get gdb working
>> fine. so the endian mode is important. arm/arm64 have nothing about be
>> support yet, even though in spec also have
>>   
>>
>>
>>>> Pierrick Bouvier (27):
>>>>    include/qemu/target-info-qom.h: declare TYPE_TARGET_SPECIFIC interface
>>>>    hw/arm: implement TYPE_TARGET_SPECIFIC
>>>>    target-info: add target_riscv32 and target_base_riscv
>>>>    hw/riscv: implement TYPE_TARGET_SPECIFIC
>>>>    target-info: add target_config_multiprocess
>>>>    hw/remote/machine: remove unsupported arm target
>>>>    hw/remote/machine: implement TYPE_TARGET_SPECIFIC
>>>>    target-info: add target_config_xen
>>>>    hw/arm/xen-pvh: implement TYPE_TARGET_SPECIFIC
>>>>    hw/xenpv/xen_machine_pv: implement TYPE_TARGET_SPECIFIC
>>>>    target-info: add target_config_nitro
>>>>    hw/nitro/machine: implement TYPE_TARGET_SPECIFIC
>>>>    target-info-qom: implement new machine filtering per target
>>>>    target-info-qom: use TYPE_MACHINE instead of target_machine_typename
>>>>    target-info: remove target_machine_typename
>>>>    target-info-qom: add type_target_specific
>>>>    hw/arm: remove TYPE_TARGET_{AARCH64,ARM}_MACHINE
>>>>    hw/arm: remove {arm,arm_aarch64,aarch64}_machine_interfaces
>>>>    include/hw/core/boards.h: add DEFINE_MACHINE_TARGET_SPECIFIC
>>>>    hw/arm: remove DEFINE_MACHINE_{AARCH64,ARM}
>>>>    hw/arm: remove machines-qom.h
>>>>    hw/riscv: remove TYPE_TARGET_{RISCV32,RISCV64}_MACHINE
>>>>    hw/riscv: remove {riscv32,riscv32_64,riscv64}_machine_interfaces
>>>>    hw/riscv: remove DEFINE_MACHINE_{RISCV32,RISCV64}
>>>>    hw/riscv: remove machines-qom.h
>>>>    configs/targets: remove target info definitions
>>
>>>>    target-info: rename target-info-stub.c in target-info-def.c
>>
>> Does that mean  target-info-def.c would be compiled N-times. N is the
>> target list count and finally linkage into a single binary?
>> How to choose this target-info?
>>
> 
> Yes, correct.
> We choose either from -target arch, or from binary name.
> In case a single target-info is present, we don't check binary name and
> simply use it.
> 
>>
>>>>
>>>
>>> Gentle ping after a week.
>>> You're welcome to review only your architecture if time is limited, and
>>> validate the global approach.
>>>
>>> Regards,
>>> Pierrick
>>>
>>
>>
>> --
>>           此致
>> 礼
>> 罗勇刚
>> Yours
>>      sincerely,
>> Yonggang Luo
> 
> Regards,
> Pierrick
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.