[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen master] xen/arm32: avoid EFI stub wchar_t size linker warning



commit a4d4c541f58b378bc9d499dcb554eb9fe22312c8
Author:     Wei Chen <wei.chen@xxxxxxx>
AuthorDate: Tue Jul 5 13:12:15 2022 +0200
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Tue Jul 5 13:12:15 2022 +0200

    xen/arm32: avoid EFI stub wchar_t size linker warning
    
    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.
    
    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."
    
    Reported-and-Suggested-by: Jan Beulich <jbeulich@xxxxxxxx>
    Tested-by: Jan Beulich <jbeulich@xxxxxxxx>
    Signed-off-by: Wei Chen <wei.chen@xxxxxxx>
    Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
    Acked-by: Julien Grall <jgrall@xxxxxxxxxx>
---
 xen/arch/arm/efi/Makefile | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/xen/arch/arm/efi/Makefile b/xen/arch/arm/efi/Makefile
index dffe72e589..bd954a3b2d 100644
--- a/xen/arch/arm/efi/Makefile
+++ b/xen/arch/arm/efi/Makefile
@@ -9,4 +9,7 @@ else
 # will not be cleaned in "make clean".
 EFIOBJ-y += stub.o
 obj-y += stub.o
+
+$(obj)/stub.o: CFLAGS-y += -fno-short-wchar
+
 endif
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.