On 11/6/2026 11:52 AM, Yonggang Luo wrote:
> On Sat, Nov 7, 2026 at 1:47 AM Pierrick Bouvier
> <[email protected]> wrote:
>>
>> On 11/6/2026 9:46 AM, Yonggang Luo wrote:
>>> On Sat, Nov 7, 2026 at 1:44 AM Pierrick Bouvier
>>> <[email protected]> wrote:
>>>>
>>>> On 11/5/2026 11:03 AM, Yonggang Luo wrote:
>>>>> Return the QEMU_ARCH_* mask of the selected target. System mode
>>>>> returns QEMU_ARCH_ALL until a target is selected. User mode returns
>>>>> that target's bit. Tools return 0.
>>>>>
>>>>> Signed-off-by: Yonggang Luo <[email protected]>
>>>>> ---
>>>>>  include/qemu/target-info-init.h | 15 ++++++++++-----
>>>>>  include/qemu/target-info.h      |  9 +++++++++
>>>>>  stubs/meson.build               |  1 +
>>>>>  stubs/target-mask-selected.c    | 13 +++++++++++++
>>>>>  target-info-def.c               |  3 +++
>>>>>  target-info-qom.c               | 10 ++++++++++
>>>>>  6 files changed, 46 insertions(+), 5 deletions(-)
>>>>>  create mode 100644 stubs/target-mask-selected.c
>>>>>
>>>>> diff --git a/include/qemu/target-info-init.h 
>>>>> b/include/qemu/target-info-init.h
>>>>> index b7024c9fae..8492986832 100644
>>>>> --- a/include/qemu/target-info-init.h
>>>>> +++ b/include/qemu/target-info-init.h
>>>>> @@ -24,12 +24,17 @@ module_init(do_qemu_init_target_info, 
>>>>> MODULE_INIT_TARGET_INFO)
>>>>>
>>>>>  /*
>>>>>   * User mode does not support multiple targets in the same binary, so 
>>>>> just
>>>>> - * define target_info().
>>>>> + * define target_info() and target_mask_selected(). The target is always
>>>>> + * selected.
>>>>>   */
>>>>> -#define target_info_init(ti_var)        \
>>>>> -const TargetInfo *target_info(void)     \
>>>>> -{                                       \
>>>>> -    return &ti_var;                     \
>>>>> +#define target_info_init(ti_var)                           \
>>>>> +const TargetInfo *target_info(void)                        \
>>>>> +{                                                          \
>>>>> +    return &ti_var;                                        \
>>>>> +}                                                          \
>>>>> +uint64_t target_mask_selected(void)                        \
>>>>> +{                                                          \
>>>>> +    return QEMU_ARCH_BIT((ti_var).target_arch);            \
>>>>>  }
>>>>>
>>>>>  #else /* CONFIG_USER_ONLY */
>>>>> diff --git a/include/qemu/target-info.h b/include/qemu/target-info.h
>>>>> index 2cd4cc5671..5673d10eba 100644
>>>>> --- a/include/qemu/target-info.h
>>>>> +++ b/include/qemu/target-info.h
>>>>> @@ -134,4 +134,13 @@ bool target_base_riscv(void);
>>>>>   */
>>>>>  bool target_riscv64(void);
>>>>>
>>>>> +/**
>>>>> + * target_mask_selected:
>>>>> + *
>>>>> + * Returns the QEMU_ARCH_* mask of the selected target. System mode
>>>>> + * returns QEMU_ARCH_ALL until a target is selected. User mode returns
>>>>> + * that target's bit. Tools return 0.
>>>>> + */
>>>>> +uint64_t target_mask_selected(void);
>>>>> +
>>>>>  #endif
>>>>> diff --git a/stubs/meson.build b/stubs/meson.build
>>>>> index 744fb759a2..49cede8582 100644
>>>>> --- a/stubs/meson.build
>>>>> +++ b/stubs/meson.build
>>>>> @@ -12,6 +12,7 @@ stub_ss.add(files('monitor-hmp.c'))
>>>>>  stub_ss.add(files('qapi-event-emit.c'))
>>>>>  stub_ss.add(files('replay-mode.c'))
>>>>>  stub_ss.add(files('trace-control.c'))
>>>>> +stub_ss.add(files('target-mask-selected.c'))
>>>>>
>>>>
>>>> For which configs is the stub required?
>>>> target-info-def will always be present.
>>>
>>> For tools
>>>
>>
>> Can you post the exact link error that exposes the absence of this symbol?
> 
> There is very much, I extract part of them:
> 
> 
> [61/389] Linking target tests/fp/fp-test
> FAILED: [code=1] tests/fp/fp-test
> gcc -m64  -o tests/fp/fp-test
> libevent-loop-base.a.p/event-loop-base.c.o
> libqom.a.p/qom_container.c.o libqom.a.p/qom_object.c.o
> libqom.a.p/qom_object_interfaces.c.o libqom.a.p/qom_qom-qobject.c.o
> libqom.a.p/qom_compat-properties.c.o tests/fp/fp-test.p/fp-test.c.o
> tests/fp/fp-test.p/.._.._fpu_softfloat.c.o -Wl,--as-needed
> -Wl,--no-undefined -pie -fstack-protector-strong -Wl,-z,relro
> -Wl,-z,now -Wl,--start-group libqemuutil.a
> subprojects/libvhost-user/libvhost-user-glib.a
> subprojects/libvhost-user/libvhost-user.a
> subprojects/berkeley-softfloat-3/libsoftfloat.a
> subprojects/berkeley-testfloat-3/libtestfloat.a
> subprojects/berkeley-testfloat-3/libslowfloat.a -lnuma
> /usr/lib/x86_64-linux-gnu/liburing.so
> /usr/lib/x86_64-linux-gnu/libgio-2.0.so
> /usr/lib/x86_64-linux-gnu/libgobject-2.0.so
> /usr/lib/x86_64-linux-gnu/libglib-2.0.so -Wl,--export-dynamic
> /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so -pthread -lm
> /usr/lib/x86_64-linux-gnu/libpixman-1.so
> /usr/lib/x86_64-linux-gnu/libepoxy.so -Wl,--end-group
> /usr/bin/x86_64-linux-gnu-ld.bfd: libqom.a.p/qom_object.c.o: in
> function `type_register_internal':
> /build/release-amd64/../../qom/object.c:243:(.text+0x1c2): undefined
> reference to `target_mask_selected'
> /usr/bin/x86_64-linux-gnu-ld.bfd: libqom.a.p/qom_object.c.o: in
> function `target_mask_filter':
> /build/release-amd64/../../qom/object.c:120:(.text+0x1df): undefined
> reference to `target_mask_selected'
> /usr/bin/x86_64-linux-gnu-ld.bfd:
> /build/release-amd64/../../qom/object.c:120:(.text+0x37a): undefined
> reference to`target_mask_selected'
> /usr/bin/x86_64-linux-gnu-ld.bfd:
> /build/release-amd64/../../qom/object.c:120:(.text+0x1ebf): undefined
> reference to `target_mask_selected'
> collect2: error: ld returned 1 exit status
> [62/389] Linking target tests/bench/benchmark-crypto-akcipher
> FAILED: [code=1] tests/bench/benchmark-crypto-akcipher
> gcc -m64  -o tests/bench/benchmark-crypto-akcipher
> libevent-loop-base.a.p/event-loop-base.c.o
> libqom.a.p/qom_container.c.o libqom.a.p/qom_object.c.o
> libqom.a.p/qom_object_interfaces.c.o libqom.a.p/qom_qom-qobject.c.o
> libqom.a.p/qom_compat-properties.c.o libcrypto.a.p/crypto_afsplit.c.o
> libcrypto.a.p/crypto_akcipher.c.o libcrypto.a.p/crypto_block-luks.c.o
> libcrypto.a.p/crypto_block-qcow.c.o libcrypto.a.p/crypto_block.c.o
> libcrypto.a.p/crypto_cipher.c.o libcrypto.a.p/crypto_der.c.o
> libcrypto.a.p/crypto_hash.c.o libcrypto.a.p/crypto_hmac.c.o
> libcrypto.a.p/crypto_ivgen-essiv.c.o
> libcrypto.a.p/crypto_ivgen-plain.c.o
> libcrypto.a.p/crypto_ivgen-plain64.c.o libcrypto.a.p/crypto_ivgen.c.o
> libcrypto.a.p/crypto_pbkdf.c.o libcrypto.a.p/crypto_secret_common.c.o
> libcrypto.a.p/crypto_secret.c.o libcrypto.a.p/crypto_tlscreds.c.o
> libcrypto.a.p/crypto_tlscredsanon.c.o
> libcrypto.a.p/crypto_tlscredspsk.c.o
> libcrypto.a.p/crypto_tlscredsx509.c.o
> libcrypto.a.p/crypto_tlssession.c.o libcrypto.a.p/crypto_rsakey.c.o
> libcrypto.a.p/crypto_x509-utils.c.o
> libcrypto.a.p/crypto_hash-nettle.c.o
> libcrypto.a.p/crypto_hmac-nettle.c.o
> libcrypto.a.p/crypto_pbkdf-nettle.c.o
> libcrypto.a.p/crypto_secret_keyring.c.o libauthz.a.p/authz_base.c.o
> libauthz.a.p/authz_list.c.o libauthz.a.p/authz_listfile.c.o
> libauthz.a.p/authz_simple.c.o
> tests/bench/benchmark-crypto-akcipher.p/benchmark-crypto-akcipher.c.o
> -Wl,--as-needed -Wl,--no-undefined -pie -fstack-protector-strong
> -Wl,-z,relro -Wl,-z,now -Wl,--start-group libqemuutil.a
> subprojects/libvhost-user/libvhost-user-glib.a
> subprojects/libvhost-user/libvhost-user.a
> /usr/lib/x86_64-linux-gnu/libnettle.so
> /usr/lib/x86_64-linux-gnu/libgmp.so
> /usr/lib/x86_64-linux-gnu/libhogweed.so -lnuma
> /usr/lib/x86_64-linux-gnu/liburing.so
> /usr/lib/x86_64-linux-gnu/libgio-2.0.so
> /usr/lib/x86_64-linux-gnu/libgobject-2.0.so
> /usr/lib/x86_64-linux-gnu/libglib-2.0.so -Wl,--export-dynamic
> /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so -pthread -lm
> /usr/lib/x86_64-linux-gnu/libpixman-1.so
> /usr/lib/x86_64-linux-gnu/libepoxy.so -Wl,--end-group
> /usr/bin/x86_64-linux-gnu-ld.bfd: libqom.a.p/qom_object.c.o: in
> function `type_register_internal':
> /build/release-amd64/../../qom/object.c:243:(.text+0x1c2): undefined
> reference to `target_mask_selected'
> /usr/bin/x86_64-linux-gnu-ld.bfd: libqom.a.p/qom_object.c.o: in
> function `target_mask_filter':
> /build/release-amd64/../../qom/object.c:120:(.text+0x1df): undefined
> reference to `target_mask_selected'
> /usr/bin/x86_64-linux-gnu-ld.bfd:
> /build/release-amd64/../../qom/object.c:120:(.text+0x37a): undefined
> reference to`target_mask_selected'
> /usr/bin/x86_64-linux-gnu-ld.bfd:
> /build/release-amd64/../../qom/object.c:120:(.text+0x1ebf): undefined
> reference to `target_mask_selected'
> collect2: error: ld returned 1 exit status
> [63/389] Linking target tests/bench/benchmark-crypto-hash
> FAILED: [code=1] tests/bench/benchmark-crypto-hash
> gcc -m64  -o tests/bench/benchmark-crypto-hash
> libevent-loop-base.a.p/event-loop-base.c.o
> libqom.a.p/qom_container.c.o libqom.a.p/qom_object.c.o
> libqom.a.p/qom_object_interfaces.c.o libqom.a.p/qom_qom-qobject.c.o
> libqom.a.p/qom_compat-properties.c.o libcrypto.a.p/crypto_afsplit.c.o
> libcrypto.a.p/crypto_akcipher.c.o libcrypto.a.p/crypto_block-luks.c.o
> libcrypto.a.p/crypto_block-qcow.c.o libcrypto.a.p/crypto_block.c.o
> libcrypto.a.p/crypto_cipher.c.o libcrypto.a.p/crypto_der.c.o
> libcrypto.a.p/crypto_hash.c.o libcrypto.a.p/crypto_hmac.c.o
> libcrypto.a.p/crypto_ivgen-essiv.c.o
> libcrypto.a.p/crypto_ivgen-plain.c.o
> libcrypto.a.p/crypto_ivgen-plain64.c.o libcrypto.a.p/crypto_ivgen.c.o
> libcrypto.a.p/crypto_pbkdf.c.o libcrypto.a.p/crypto_secret_common.c.o
> libcrypto.a.p/crypto_secret.c.o libcrypto.a.p/crypto_tlscreds.c.o
> libcrypto.a.p/crypto_tlscredsanon.c.o
> libcrypto.a.p/crypto_tlscredspsk.c.o
> libcrypto.a.p/crypto_tlscredsx509.c.o
> libcrypto.a.p/crypto_tlssession.c.o libcrypto.a.p/crypto_rsakey.c.o
> libcrypto.a.p/crypto_x509-utils.c.o
> libcrypto.a.p/crypto_hash-nettle.c.o
> libcrypto.a.p/crypto_hmac-nettle.c.o
> libcrypto.a.p/crypto_pbkdf-nettle.c.o
> libcrypto.a.p/crypto_secret_keyring.c.o libauthz.a.p/authz_base.c.o
> libauthz.a.p/authz_list.c.o libauthz.a.p/authz_listfile.c.o
> libauthz.a.p/authz_simple.c.o
> tests/bench/benchmark-crypto-hash.p/benchmark-crypto-hash.c.o
> -Wl,--as-needed -Wl,--no-undefined -pie -fstack-protector-strong
> -Wl,-z,relro -Wl,-z,now -Wl,--start-group libqemuutil.a
> subprojects/libvhost-user/libvhost-user-glib.a
> subprojects/libvhost-user/libvhost-user.a
> /usr/lib/x86_64-linux-gnu/libnettle.so
> /usr/lib/x86_64-linux-gnu/libgmp.so
> /usr/lib/x86_64-linux-gnu/libhogweed.so -lnuma
> /usr/lib/x86_64-linux-gnu/liburing.so
> /usr/lib/x86_64-linux-gnu/libgio-2.0.so
> /usr/lib/x86_64-linux-gnu/libgobject-2.0.so
> /usr/lib/x86_64-linux-gnu/libglib-2.0.so -Wl,--export-dynamic
> /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so -pthread -lm
> /usr/lib/x86_64-linux-gnu/libpixman-1.so
> /usr/lib/x86_64-linux-gnu/libepoxy.so -Wl,--end-group
> /usr/bin/x86_64-linux-gnu-ld.bfd: libqom.a.p/qom_object.c.o: in
> function `type_register_internal':
> /build/release-amd64/../../qom/object.c:243:(.text+0x1c2): undefined
> reference to `target_mask_selected'
> /usr/bin/x86_64-linux-gnu-ld.bfd: libqom.a.p/qom_object.c.o: in
> function `target_mask_filter':
> /build/release-amd64/../../qom/object.c:120:(.text+0x1df): undefined
> reference to `target_mask_selected'
> /usr/bin/x86_64-linux-gnu-ld.bfd:
> /build/release-amd64/../../qom/object.c:120:(.text+0x37a): undefined
> reference to`target_mask_selected'
> /usr/bin/x86_64-linux-gnu-ld.bfd:
> /build/release-amd64/../../qom/object.c:120:(.text+0x1ebf): undefined
> reference to `target_mask_selected'
> collect2: error: ld returned 1 exit status
> [64/389] Linking target tools/qemu-vnc/qemu-vnc
> FAILED: [code=1] tools/qemu-vnc/qemu-vnc
> gcc -m64  -o tools/qemu-vnc/qemu-vnc
> tools/qemu-vnc/qemu-vnc.p/meson-generated_.._.._.._ui_dbus-display1.c.o
> tools/qemu-vnc/qemu-vnc.p/meson-generated_.._qemu-vnc1.c.o
> libio.a.p/io_channel-buffer.c.o libio.a.p/io_channel-command.c.o
> libio.a.p/io_channel-file.c.o libio.a.p/io_channel-null.c.o
> libio.a.p/io_channel-socket.c.o libio.a.p/io_channel-tls.c.o
> libio.a.p/io_channel-util.c.o libio.a.p/io_channel-watch.c.o
> libio.a.p/io_channel-websock.c.o libio.a.p/io_channel.c.o
> libio.a.p/io_dns-resolver.c.o libio.a.p/io_net-listener.c.o
> libio.a.p/io_task.c.o libcrypto.a.p/crypto_afsplit.c.o
> libcrypto.a.p/crypto_akcipher.c.o libcrypto.a.p/crypto_block-luks.c.o
> libcrypto.a.p/crypto_block-qcow.c.o libcrypto.a.p/crypto_block.c.o
> libcrypto.a.p/crypto_cipher.c.o libcrypto.a.p/crypto_der.c.o
> libcrypto.a.p/crypto_hash.c.o libcrypto.a.p/crypto_hmac.c.o
> libcrypto.a.p/crypto_ivgen-essiv.c.o
> libcrypto.a.p/crypto_ivgen-plain.c.o
> libcrypto.a.p/crypto_ivgen-plain64.c.o libcrypto.a.p/crypto_ivgen.c.o
> libcrypto.a.p/crypto_pbkdf.c.o libcrypto.a.p/crypto_secret_common.c.o
> libcrypto.a.p/crypto_secret.c.o libcrypto.a.p/crypto_tlscreds.c.o
> libcrypto.a.p/crypto_tlscredsanon.c.o
> libcrypto.a.p/crypto_tlscredspsk.c.o
> libcrypto.a.p/crypto_tlscredsx509.c.o
> libcrypto.a.p/crypto_tlssession.c.o libcrypto.a.p/crypto_rsakey.c.o
> libcrypto.a.p/crypto_x509-utils.c.o
> libcrypto.a.p/crypto_hash-nettle.c.o
> libcrypto.a.p/crypto_hmac-nettle.c.o
> libcrypto.a.p/crypto_pbkdf-nettle.c.o
> libcrypto.a.p/crypto_secret_keyring.c.o libauthz.a.p/authz_base.c.o
> libauthz.a.p/authz_list.c.o libauthz.a.p/authz_listfile.c.o
> libauthz.a.p/authz_simple.c.o libqom.a.p/qom_container.c.o
> libqom.a.p/qom_object.c.o libqom.a.p/qom_object_interfaces.c.o
> libqom.a.p/qom_qom-qobject.c.o libqom.a.p/qom_compat-properties.c.o
> libevent-loop-base.a.p/event-loop-base.c.o
> ui/libqemuui.a.p/clipboard.c.o ui/libqemuui.a.p/console.c.o
> ui/libqemuui.a.p/cursor.c.o ui/libqemuui.a.p/dmabuf.c.o
> ui/libqemuui.a.p/display-surface.c.o ui/libqemuui.a.p/input-keymap.c.o
> ui/libqemuui.a.p/kbd-state.c.o ui/libqemuui.a.p/keymaps.c.o
> ui/libqemuui.a.p/qemu-pixman.c.o ui/libqemuui.a.p/spice-module.c.o
> ui/libqemuui.a.p/vgafont.c.o ui/libqemuui.a.p/cp437.c.o
> ui/libqemuui.a.p/vt100.c.o tools/qemu-vnc/qemu-vnc.p/qemu-vnc.c.o
> tools/qemu-vnc/qemu-vnc.p/display.c.o
> tools/qemu-vnc/qemu-vnc.p/input.c.o
> tools/qemu-vnc/qemu-vnc.p/audio.c.o
> tools/qemu-vnc/qemu-vnc.p/chardev.c.o
> tools/qemu-vnc/qemu-vnc.p/clipboard.c.o
> tools/qemu-vnc/qemu-vnc.p/console.c.o
> tools/qemu-vnc/qemu-vnc.p/dbus.c.o tools/qemu-vnc/qemu-vnc.p/stubs.c.o
> tools/qemu-vnc/qemu-vnc.p/utils.c.o
> tools/qemu-vnc/qemu-vnc.p/.._.._ui_vnc.c.o
> tools/qemu-vnc/qemu-vnc.p/.._.._ui_vnc-enc-zlib.c.o
> tools/qemu-vnc/qemu-vnc.p/.._.._ui_vnc-enc-hextile.c.o
> tools/qemu-vnc/qemu-vnc.p/.._.._ui_vnc-enc-tight.c.o
> tools/qemu-vnc/qemu-vnc.p/.._.._ui_vnc-palette.c.o
> tools/qemu-vnc/qemu-vnc.p/.._.._ui_vnc-enc-zrle.c.o
> tools/qemu-vnc/qemu-vnc.p/.._.._ui_vnc-auth-vencrypt.c.o
> tools/qemu-vnc/qemu-vnc.p/.._.._ui_vnc-ws.c.o
> tools/qemu-vnc/qemu-vnc.p/.._.._ui_vnc-jobs.c.o
> tools/qemu-vnc/qemu-vnc.p/.._.._ui_vnc-clipboard.c.o
> tools/qemu-vnc/qemu-vnc.p/.._.._ui_vnc-auth-sasl.c.o -Wl,--as-needed
> -Wl,--no-undefined -pie -fstack-protector-strong -Wl,-z,relro
> -Wl,-z,now -Wl,--start-group libqemuutil.a
> subprojects/libvhost-user/libvhost-user-glib.a
> subprojects/libvhost-user/libvhost-user.a
> /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/x86_64-linux-gnu/libjpeg.so
> /usr/lib/x86_64-linux-gnu/libpng16.so -lsasl2
> /usr/lib/x86_64-linux-gnu/libnettle.so
> /usr/lib/x86_64-linux-gnu/libgmp.so
> /usr/lib/x86_64-linux-gnu/libhogweed.so
> /usr/lib/x86_64-linux-gnu/libgio-2.0.so/usr/lib/x86_64-linux-gnu/libgobject-2.0.so
> /usr/lib/x86_64-linux-gnu/libglib-2.0.so
> /usr/lib/x86_64-linux-gnu/libpixman-1.so -lnuma
> /usr/lib/x86_64-linux-gnu/liburing.so -Wl,--export-dynamic
> /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so -pthread -lm
> /usr/lib/x86_64-linux-gnu/libepoxy.so -Wl,--end-group
> /usr/bin/x86_64-linux-gnu-ld.bfd: libqom.a.p/qom_object.c.o: in
> function `type_register_internal':
> /build/release-amd64/../../qom/object.c:243:(.text+0x1c2): undefined
> reference to `target_mask_selected'
> /usr/bin/x86_64-linux-gnu-ld.bfd: libqom.a.p/qom_object.c.o: in
> function `target_mask_filter':
> /build/release-amd64/../../qom/object.c:120:(.text+0x1df): undefined
> reference to `target_mask_selected'
> /usr/bin/x86_64-linux-gnu-ld.bfd:
> /build/release-amd64/../../qom/object.c:120:(.text+0x37a): undefined
> reference to`target_mask_selected'
> /usr/bin/x86_64-linux-gnu-ld.bfd:
> /build/release-amd64/../../qom/object.c:120:(.text+0x1ebf): undefined
> reference to `target_mask_selected'
> collect2: error: ld returned 1 exit status
> [65/389] Generating block.syms with a custom command (wrapped by meson
> to capture output)
> [66/389] Generating qemu.syms with a custom command (wrapped by meson
> to capture output)
>

Thanks, that's indeed coming with patch 4. In case we don't pursuit with
buckets approach, stub can be removed from this patch.

> 
>>
>>>>
>>>>>  if have_block
>>>>>    stub_ss.add(files('bdrv-next-monitor-owned.c'))
>>>>> diff --git a/stubs/target-mask-selected.c b/stubs/target-mask-selected.c
>>>>> new file mode 100644
>>>>> index 0000000000..510a515851
>>>>> --- /dev/null
>>>>> +++ b/stubs/target-mask-selected.c
>>>>> @@ -0,0 +1,13 @@
>>>>> +/*
>>>>> + * Tools have no selected target.
>>>>> + *
>>>>> + * SPDX-License-Identifier: GPL-2.0-or-later
>>>>> + */
>>>>> +
>>>>> +#include "qemu/osdep.h"
>>>>> +#include "qemu/target-info.h"
>>>>> +
>>>>> +uint64_t target_mask_selected(void)
>>>>> +{
>>>>> +    return 0;
>>>>> +}
>>>>> diff --git a/target-info-def.c b/target-info-def.c
>>>>> index bcf9cfe1e4..a992019626 100644
>>>>> --- a/target-info-def.c
>>>>> +++ b/target-info-def.c
>>>>> @@ -9,6 +9,9 @@
>>>>>  #include "qemu/osdep.h"
>>>>>  #include "qemu/target-info.h"
>>>>>  #include "qemu/target-info-def.h"
>>>>> +#ifdef CONFIG_USER_ONLY
>>>>> +#include "qemu/base-arch-defs.h"
>>>>> +#endif
>>>>>  #include "qemu/target-info-init.h"
>>>>>  #include "hw/core/boards.h"
>>>>>  #include "cpu.h"
>>>>> diff --git a/target-info-qom.c b/target-info-qom.c
>>>>> index aeeedb7e81..fb4c9835e5 100644
>>>>> --- a/target-info-qom.c
>>>>> +++ b/target-info-qom.c
>>>>> @@ -9,6 +9,8 @@
>>>>>  #include "qemu/osdep.h"
>>>>>  #include "qapi/error.h"
>>>>>  #include "qom/object.h"
>>>>> +#include "qemu/base-arch-defs.h"
>>>>> +#include "qemu/target-info.h"
>>>>>  #include "qemu/target-info-def.h"
>>>>>  #include "qemu/target-info-init.h"
>>>>>  #include "qemu/target-info-qom.h"
>>>>> @@ -40,6 +42,14 @@ const TargetInfo *target_info(void)
>>>>>      return target_info_ptr;
>>>>>  }
>>>>>
>>>>> +uint64_t target_mask_selected(void)
>>>>> +{
>>>>> +    if (!target_info_ptr) {
>>>>> +        return QEMU_ARCH_ALL;
>>>>> +    }
>>>>> +    return QEMU_ARCH_BIT(target_info_ptr->target_arch);
>>>>> +}
>>>>> +
>>>>>  void target_info_qom_set_target(void)
>>>>>  {
>>>>>      g_autoptr(GSList) targets = object_class_get_list(TYPE_TARGET_INFO, 
>>>>> false);
>>>>
>>>
>>>
>>
> 
> 


Reply via email to