[PATCH v1 0/2] arm64: Fix building failure for Xen target

This patch series is for building Xen target with Clang.
The first patch is to fix building failure for Xen target, the second patch is to add info for a linkage known issue when use Clang as compiler.
Leo Yan (2): arm64: Remove duplicated symbols doc: Add info for building Xen target with Clang
.../include/asm/boot0-linux-kernel-header.h | 2 -- doc/build/clang.rst | 36 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-)

When build U-boot with clang with using commands:
$ make HOSTCC=clang xenguest_arm64_defconfig $ make HOSTCC=clang CROSS_COMPILE=aarch64-linux-gnu- \ CC="clang -target aarch64-linux-gnueabi" -j8
The compiler reports error:
/tmp/start-acdf31.s:330:1: error: symbol '_start' is already defined _start: ^
Because the symbol '_start' has been defined twice, one is defined in arch/arm/cpu/armv8/start.S, another is defined in the header boot0-linux-kernel-header.h.
To fix building failure, this patch removes the symbol '_start' from boot0-linux-kernel-header.h.
Signed-off-by: Leo Yan leo.yan@linaro.org --- arch/arm/include/asm/boot0-linux-kernel-header.h | 2 -- 1 file changed, 2 deletions(-)
diff --git a/arch/arm/include/asm/boot0-linux-kernel-header.h b/arch/arm/include/asm/boot0-linux-kernel-header.h index c6cd76f32a..c930fea5fd 100644 --- a/arch/arm/include/asm/boot0-linux-kernel-header.h +++ b/arch/arm/include/asm/boot0-linux-kernel-header.h @@ -31,8 +31,6 @@ .long \sym()_hi32 .endm
-.globl _start -_start: /* * DO NOT MODIFY. Image header expected by Linux boot-loaders. */

On Thu, May 04, 2023 at 03:54:58PM +0800, Leo Yan wrote:
When build U-boot with clang with using commands:
$ make HOSTCC=clang xenguest_arm64_defconfig $ make HOSTCC=clang CROSS_COMPILE=aarch64-linux-gnu- \ CC="clang -target aarch64-linux-gnueabi" -j8
The compiler reports error:
/tmp/start-acdf31.s:330:1: error: symbol '_start' is already defined _start: ^
Because the symbol '_start' has been defined twice, one is defined in arch/arm/cpu/armv8/start.S, another is defined in the header boot0-linux-kernel-header.h.
To fix building failure, this patch removes the symbol '_start' from boot0-linux-kernel-header.h.
Signed-off-by: Leo Yan leo.yan@linaro.org
Applied to u-boot/next, thanks!

When build Xen target with Clang, the linker reports failure.
This patch adds the related info in the documentation as a known issue and gives details for how to dismiss the building failure with Clang.
Signed-off-by: Leo Yan leo.yan@linaro.org --- doc/build/clang.rst | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+)
diff --git a/doc/build/clang.rst b/doc/build/clang.rst index 1d35616eb5..cc265506c2 100644 --- a/doc/build/clang.rst +++ b/doc/build/clang.rst @@ -74,3 +74,39 @@ simplified with a simple wrapper script - saved as
#!/bin/sh exec clang -target arm-freebsd-eabi --sysroot /usr/arm-freebsd "$@" + + +Known Issues +------------ + +When build U-boot for `xenguest_arm64_defconfig` target, it reports linkage +error: + +.. code-block:: bash + + aarch64-linux-gnu-ld.bfd: drivers/xen/hypervisor.o: in function `do_hypervisor_callback': + /home/leoy/Dev2/u-boot/drivers/xen/hypervisor.c:188: undefined reference to `__aarch64_swp8_acq_rel' + aarch64-linux-gnu-ld.bfd: drivers/xen/hypervisor.o: in function `synch_test_and_set_bit': + /home/leoy/Dev2/u-boot/./arch/arm/include/asm/xen/system.h:40: undefined reference to `__aarch64_ldset1_acq_rel' + aarch64-linux-gnu-ld.bfd: drivers/xen/hypervisor.o: in function `synch_test_and_clear_bit': + /home/leoy/Dev2/u-boot/./arch/arm/include/asm/xen/system.h:28: undefined reference to `__aarch64_ldclr1_acq_rel' + aarch64-linux-gnu-ld.bfd: drivers/xen/hypervisor.o: in function `synch_test_and_set_bit': + /home/leoy/Dev2/u-boot/./arch/arm/include/asm/xen/system.h:40: undefined reference to `__aarch64_ldset1_acq_rel' + aarch64-linux-gnu-ld.bfd: drivers/xen/hypervisor.o: in function `synch_test_and_clear_bit': + /home/leoy/Dev2/u-boot/./arch/arm/include/asm/xen/system.h:28: undefined reference to `__aarch64_ldclr1_acq_rel' + aarch64-linux-gnu-ld.bfd: drivers/xen/events.o: in function `synch_test_and_clear_bit': + /home/leoy/Dev2/u-boot/./arch/arm/include/asm/xen/system.h:28: undefined reference to `__aarch64_ldclr1_acq_rel' + aarch64-linux-gnu-ld.bfd: drivers/xen/events.o: in function `synch_test_and_set_bit': + /home/leoy/Dev2/u-boot/./arch/arm/include/asm/xen/system.h:40: undefined reference to `__aarch64_ldset1_acq_rel' + aarch64-linux-gnu-ld.bfd: drivers/xen/gnttab.o: in function `gnttab_end_access': + /home/leoy/Dev2/u-boot/drivers/xen/gnttab.c:109: undefined reference to `__aarch64_cas2_acq_rel' + Segmentation fault + +To fix the failure, we need to append option `-mno-outline-atomics` in Clang +command to not generate local calls to out-of-line atomic operations: + +.. code-block:: bash + + make HOSTCC=clang xenguest_arm64_defconfig + make HOSTCC=clang CROSS_COMPILE=aarch64-linux-gnu- \ + CC="clang -target aarch64-linux-gnueabi -mno-outline-atomics" -j8

On Thu, May 04, 2023 at 03:54:59PM +0800, Leo Yan wrote:
When build Xen target with Clang, the linker reports failure.
This patch adds the related info in the documentation as a known issue and gives details for how to dismiss the building failure with Clang.
Signed-off-by: Leo Yan leo.yan@linaro.org
Applied to u-boot/next, thanks!

On Thu, May 04, 2023 at 03:54:57PM +0800, Leo Yan wrote:
This patch series is for building Xen target with Clang.
The first patch is to fix building failure for Xen target, the second patch is to add info for a linkage known issue when use Clang as compiler.
Gentle ping ...
I saw my patches were rejected by EPAM, so I am afraid EPAM engineers cannot see these two patches, I will try to reach them offline.
At meantine, it would be great if anyone could review on this list.
Thanks!
Leo Yan (2): arm64: Remove duplicated symbols doc: Add info for building Xen target with Clang
.../include/asm/boot0-linux-kernel-header.h | 2 -- doc/build/clang.rst | 36 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-)
-- 2.39.2
participants (2)
-
Leo Yan
-
Tom Rini