[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2] Xen: fix EFI stub wchar_t size warning of arm32 building
On 05.07.2022 09:18, Wei Chen wrote: > Hi Jan, > >> -----Original Message----- >> From: Jan Beulich <jbeulich@xxxxxxxx> >> Sent: 2022年7月5日 14:35 >> To: Wei Chen <Wei.Chen@xxxxxxx> >> Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>; Julien Grall >> <julien@xxxxxxx>; Bertrand Marquis <Bertrand.Marquis@xxxxxxx>; Volodymyr >> Babchuk <Volodymyr_Babchuk@xxxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx >> Subject: Re: [PATCH v2] Xen: fix EFI stub wchar_t size warning of arm32 >> building >> >> On 05.07.2022 05:54, Wei Chen wrote: >>> Xen uses "-fshort-wchar" in CFLAGS for EFI common code. Arm32 >>> is using stub.c of EFI common code for EFI stub functions. But >>> "-fshort-wchar" CFLAG will cause a warning when build stub.c >>> for Arm32: >>> "arm-linux-gnueabihf-ld: warning: arch/arm/efi/built_in.o uses >>> 2-byte wchar_t yet the output is to use 4-byte wchar_t; use of >>> wchar_t values across objects may fail" >>> >>> This is because the "-fshort-wchar" flag causes GCC to generate >>> code that is not binary compatible with code generated without >>> that flag. Why this warning hasn't been triggered in Arm64 is >>> because Arm64 does not use wchar type directly in any code for >>> parameters, variables and return values. And in EFI code, wchar >>> has been replaced by CHAR16 (the UEFI "abstraction" of wchar_t). >>> CHAR16 has been specified as unsigned short type in typedef, the >>> "-fshort-wchar" flag will not affect CHAR16. So Arm64 object >>> files are exactly the same with "-fshort-wchar" and without >>> "-fshort-wchar". >>> >>> We are also not using wchar in Arm32 codes, but Arm32 will embed >>> ABI information in ".ARM.attributes" section. This section stores >>> some object file attributes, like ABI version, CPU arch and etc. >>> And wchar size is described in this section by "Tag_ABI_PCS_wchar_t" >>> too. Tag_ABI_PCS_wchar_t is 2 for object files with "-fshort-wchar", >>> but for object files without "-fshort-wchar" is 4. Arm32 GCC >>> ld will check this tag, and throw above warning when it finds >>> the object files have different Tag_ABI_PCS_wchar_t values. >>> >>> As gnu-efi-3.0 use the GCC option "-fshort-wchar" to force wchar >>> to use short integers (2 bytes) instead of integers (4 bytes). >>> So keep "-fshort-wchar" for Xen EFI code is reasonable. In this >>> patch, we add "-fno-short-wchar" to override "-fshort-wchar" for Arm >>> architecutres without EFI enabled to remove above warning. >>> >>> Reported-and-Suggested-by: Jan Beulich <jbeulich@xxxxxxxx> >>> Signed-off-by: Wei Chen <wei.chen@xxxxxxx> >> >> Tested-by: Jan Beulich <jbeulich@xxxxxxxx> >> > > Thanks for testing! > >> As to the description: Why the reference to gnu-efi? I don't think >> it matters how they build their code? All that's important is what >> we do, I suppose. >> > > How about: > "Xen need to keep "-fshort-wchar" in EFI code to force wchar to use > short integers (2 bytes) instead of integers (4 bytes), but this is > unnecessary for code out of EFI. So in this patch, we add > "-fno-short-wchar" to override "-fshort-wchar" for Arm architectures > without EFI enabled to remove above warning." Reads better to me, thanks. Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |