On 10/6/2026 12:32 PM, Pierrick Bouvier wrote:
> On 10/6/2026 11:46 AM, Yonggang Luo wrote:
>> where I do not see it
>>
> 
> I wonder if list is down, I don't see any new thread on it...
>

It seems to be down for now.

   ----- Transcript of session follows -----
<[email protected]>... Deferred: eggs.gnu.org.: No route to host
Warning: message still undelivered after 4 hours
Will keep trying until message is 5 days old

I'll wait and resend the series when it's back.

>>
>>          此致
>> 礼
>> 罗勇刚
>> Yours
>>     sincerely,
>> Yonggang Luo
>>
>> Pierrick Bouvier <[email protected]
>> <mailto:[email protected]>> 于 2026年10月7日周三 02:30写道:
>>
>>     On 10/6/2026 10:31 AM, Pierrick Bouvier wrote:
>>     > On 10/6/2026 6:56 AM, Daniel P. Berrangé wrote:
>>     >> On Mon, Oct 05, 2026 at 11:52:48AM -0700, Pierrick Bouvier wrote:
>>     >>> On 10/5/2026 11:45 AM, Yonggang Luo wrote:
>>     >>>> On Tue, Oct 6, 2026 at 2:06 AM Pierrick Bouvier
>>     >>>> <[email protected]
>>     <mailto:[email protected]>> wrote:
>>     >>>>>
>>     >>>>> On 10/5/2026 10:04 AM, Yonggang Luo wrote:
>>     >>>>>> On Tue, Oct 6, 2026 at 12:25 AM Pierrick Bouvier
>>     >>>>>> <[email protected]
>>     <mailto:[email protected]>> wrote:
>>     >>>>>>>>>
>>     >>>>>>>>> Ok, but I'm not sure it answers the why.
>>     >>>>>>>>> Could you explain the benefits?
>>     >>>>>>>>
>>     >>>>>>>> Which part? keeping target_arch as SYS_EMU_TARGET__MAX for
>>     user-binary because
>>     >>>>>>>> The following original code would return -1 for some user-
>>     binary
>>     >>>>>>>> +    SysEmuTarget arch = target_info()->target_arch;
>>     >>>>>>>> +
>>     >>>>>>>> +    if (arch == SYS_EMU_TARGET__MAX) {
>>     >>>>>>>> +        arch = qapi_enum_parse(&SysEmuTarget_lookup,
>>     target_name(), -1,
>>     >>>>>>>> +                               &error_abort);
>>     >>>>>>>> +    }
>>     >>>>>>>> +    return arch;
>>     >>>>>>>> So basically assigning any value for the user binary is valid.
>>     >>>>>>>> SYS_EMU_TARGET__MAX is more explicit as it's related to
>>     type SysEmuTarget.
>>     >>>>>>>> -1 is another option but easy to confuse.
>>     >>>>>>>>
>>     >>>>>>>>
>>     >>>>>>>> For why commit e934c624f32f6f44f427d73a2e6a67e983a02ae6.
>>     >>>>>>>> "target-info: Statically initialize target_arch"
>>     >>>>>>>> doing that, I am not sure.
>>     >>>>>>>>
>>     >>>>>>>
>>     >>>>>>> I guess there is a (good or bad) reason for which sub
>>     variants of
>>     >>>>>>> targets are not reflected in SYS_EMU_TARGET enum. We should
>>     double check
>>     >>>>>>> that before doing any change, as it might have other
>>     consequences.
>>     >>>>>>
>>     >>>>>>
>>     >>>>>> You’re right to ask, and I need to correct my earlier suggestion:
>>     >>>>>> leaving user-mode target_arch
>>     >>>>>>  as SYS_EMU_TARGET__MAX is not safe. target_aarch64() is used
>>     by ARM
>>     >>>>>> code shared with user-mode builds,
>>     >>>>>> including cpu-max-v8.c, where its result indexes a two-entry
>>     array.
>>     >>>>>> For aarch64-linux-user, the sentinel could therefore cause an
>>     >>>>>> out-of-bounds access during type registration.
>>     >>>>>>
>>     >>>>>> I checked the distinction: softmmu needs the full system-target
>>     >>>>>> identity, including variants such as mipsel;
>>     >>>>>> user-mode variants such as aarch64_be use their base TARGET_ARCH
>>     >>>>>> (aarch64) for this enum. I’ll keep the full TARGET_SYS_EMU
>>     >>>>>>  value for softmmu and use TARGET_ARCH for user-mode builds,
>>     rather
>>     >>>>>> than leave the field at SYS_EMU_TARGET__MAX.
>>     >>>>>>
>>     >>>>>
>>     >>>>> That's technical details, but not an answer to the initial
>>     question of
>>     >>>>> why we need to change anything for user binaries, compared to
>>     what exists.
>>     >>>>
>>     >>>> The first two patches revert the current static initialization
>>     so the
>>     >>>> token can be replaced. They are not a user-mode behavior change.
>>     >>>>
>>     >>>> Compared with current QEMU, user-mode still uses TARGET_ARCH.
>>     >>>> qemu-mipsel already reports mips, and it still will. Names such as
>>     >>>> aarch64_be are not SysEmuTarget values, so user-mode cannot use the
>>     >>>> full target name for this field; keeping TARGET_ARCH preserves
>>     today's
>>     >>>> value and avoids the runtime parse.
>>     >>>>
>>     >>>
>>     >>> Why should we need to expose this precise information?
>>     >>> So far, if those targets were not exposed (and aliased to 32/64 bit
>>     >>> variant), it's probably we didn't need it.
>>     >>
>>     >> Current git master is exhibiting a regression compared to previous
>>     >> releases.
>>     >>
>>     >> For example on 10.1.0:
>>     >>
>>     >> $ for i in /usr/bin/qemu-system-* ; do echo -n "$i: " ; echo -e
>>     '{"execute":"qmp_capabilities"}\r\n{"execute":"query-
>>     target"}\r\n{"execute":"quit"}\r\n' | $i -qmp stdio -display none -M
>>     none | jq .return.arch | grep -v null ; done
>>     >> /usr/bin/qemu-system-aarch64: "aarch64"
>>     >> /usr/bin/qemu-system-alpha: "alpha"
>>     >> /usr/bin/qemu-system-arm: "arm"
>>     >> /usr/bin/qemu-system-avr: "avr"
>>     >> /usr/bin/qemu-system-hppa: "hppa"
>>     >> /usr/bin/qemu-system-i386: "i386"
>>     >> /usr/bin/qemu-system-loongarch64: "loongarch64"
>>     >> /usr/bin/qemu-system-m68k: "m68k"
>>     >> /usr/bin/qemu-system-microblaze: "microblaze"
>>     >> /usr/bin/qemu-system-microblazeel: "microblazeel"
>>     >> /usr/bin/qemu-system-mips: "mips"
>>     >> /usr/bin/qemu-system-mips64: "mips64"
>>     >> /usr/bin/qemu-system-mips64el: "mips64el"
>>     >> /usr/bin/qemu-system-mipsel: "mipsel"
>>     >> /usr/bin/qemu-system-or1k: "or1k"
>>     >> /usr/bin/qemu-system-ppc: "ppc"
>>     >> /usr/bin/qemu-system-ppc64: "ppc64"
>>     >> /usr/bin/qemu-system-riscv32: "riscv32"
>>     >> /usr/bin/qemu-system-riscv64: "riscv64"
>>     >> /usr/bin/qemu-system-rx: "rx"
>>     >> /usr/bin/qemu-system-s390x: "s390x"
>>     >> /usr/bin/qemu-system-sh4: "sh4"
>>     >> /usr/bin/qemu-system-sh4eb: "sh4eb"
>>     >> /usr/bin/qemu-system-sparc: "sparc"
>>     >> /usr/bin/qemu-system-sparc64: "sparc64"
>>     >> /usr/bin/qemu-system-tricore: "tricore"
>>     >> /usr/bin/qemu-system-x86_64: "x86_64"
>>     >> /usr/bin/qemu-system-xtensa: "xtensa"
>>     >> /usr/bin/qemu-system-xtensaeb: "xtensaeb"
>>     >>
>>     >>
>>     >> but on git master:
>>     >>
>>     >> $ for i in $(find ./build -type f -name 'qemu-system-*') ; do
>>     echo -n "$i: " ; echo -e
>>     '{"execute":"qmp_capabilities"}\r\n{"execute":"query-
>>     target"}\r\n{"execute":"quit"}\r\n' | $i -qmp stdio -display none -M
>>     none | jq .return.arch | grep -v null ; done
>>     >> ./build/qemu-system-hexagon: "hexagon"
>>     >> ./build/qemu-system-x86_64: "x86_64"
>>     >> ./build/qemu-system-s390x: "s390x"
>>     >> ./build/qemu-system-m68k: "m68k"
>>     >> ./build/qemu-system-xtensa: "xtensa"
>>     >> ./build/qemu-system-xtensaeb: "xtensa"
>>     >> ./build/qemu-system-rx: "rx"
>>     >> ./build/qemu-system-loongarch64: "loongarch64"
>>     >> ./build/qemu-system-riscv32: "riscv32"
>>     >> ./build/qemu-system-hppa: "hppa"
>>     >> ./build/qemu-system-ppc64: "ppc64"
>>     >> ./build/qemu-system-microblaze: "microblaze"
>>     >> ./build/qemu-system-sparc: "sparc"
>>     >> ./build/qemu-system-riscv64: "riscv64"
>>     >> ./build/qemu-system-i386: "i386"
>>     >> ./build/qemu-system-mipsel: "mips"
>>     >> ./build/qemu-system-sh4: "sh4"
>>     >> ./build/qemu-system-mips64el: "mips64"
>>     >> ./build/qemu-system-mips64: "mips64"
>>     >> ./build/qemu-system-sparc64: "sparc64"
>>     >> ./build/qemu-system-arm: "arm"
>>     >> ./build/qemu-system-tricore: "tricore"
>>     >> ./build/qemu-system-mips: "mips"
>>     >> ./build/qemu-system-or1k: "or1k"
>>     >> ./build/qemu-system-sh4eb: "sh4"
>>     >> ./build/qemu-system-aarch64: "aarch64"
>>     >> ./build/qemu-system-ppc: "ppc"
>>     >> ./build/qemu-system-avr: "avr"
>>     >> ./build/qemu-system-alpha: "alpha"
>>     >>
>>     >>
>>     >> so we need to fix that behaviour change for query-target.
>>     >>
>>     >> If we want to be able to expose only the "base" target,
>>     >> then query-target's  QemuTargetInfo struct could be
>>     >> extended with a 2nd field that presents the base.
>>     >>
>>     >>
>>     >> With regards,
>>     >> Daniel
>>     >
>>     > Thanks for finding this Daniel.
>>     > SYS_EMU_TARGET already has the correct variants, the regression was to
>>     > use TARGET_ARCH instead of TARGET_NAME in target-info-stub.c.
>>     >
>>     > I think Richard used this one just because TARGET_NAME is a string, so
>>     > it can't be concatenated with C preprocessor.
>>     >
>>     > I'll fix that part.
>>     >
>>
>>     Please take a look to the following series that solves this regression,
>>     and also allows to detect endianness variants through target_arch():
>>
>>     [email protected]
>>     <mailto:[email protected]>
>>     "[PATCH 0/2] target-info: expose full target variant"
>>
>>     Regards,
>>     Pierrick
>>
> 


Reply via email to