[please ignore if it is already reported]
The stable-rc 5.10 arm64 allmodconfig builds failed with gcc-12. List of build warnings and errors with gcc-12 are listed below.
aarch64-linux-gnu-ld: Unexpected GOT/PLT entries detected! aarch64-linux-gnu-ld: Unexpected run-time procedure linkages detected! aarch64-linux-gnu-ld: arch/arm64/kvm/hyp/nvhe/kvm_nvhe.o: in function `__kvm_nvhe___kvm_tlb_flush_vmid_ipa': (.hyp.text+0x1a4c): undefined reference to `__kvm_nvhe_memset'
steps to reproduce: # To install tuxmake on your system globally: # sudo pip3 install -U tuxmake # # See https://docs.tuxmake.org/ for complete documentation. # Original tuxmake command with fragments listed below. # tuxmake --runtime podman --target-arch arm64 --toolchain gcc-12 --kconfig allmodconfig CROSS_COMPILE_COMPAT=arm-linux-gnueabihf-
build log: --------- make --silent --keep-going --jobs=8 O=/home/tuxbuild/.cache/tuxmake/builds/1/build CROSS_COMPILE_COMPAT=arm-linux-gnueabihf- ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- 'CC=sccache aarch64-linux-gnu-gcc' 'HOSTCC=sccache gcc' allmodconfig
make --silent --keep-going --jobs=8 O=/home/tuxbuild/.cache/tuxmake/builds/1/build CROSS_COMPILE_COMPAT=arm-linux-gnueabihf- ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- 'CC=sccache aarch64-linux-gnu-gcc' 'HOSTCC=sccache gcc' /builds/linux/drivers/acpi/acpica/utdebug.c: In function 'acpi_ut_init_stack_ptr_trace': /builds/linux/drivers/acpi/acpica/utdebug.c:40:38: warning: storing the address of local variable 'current_sp' in 'acpi_gbl_entry_stack_pointer' [-Wdangling-pointer=] 40 | acpi_gbl_entry_stack_pointer = ¤t_sp; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ /builds/linux/drivers/acpi/acpica/utdebug.c:38:19: note: 'current_sp' declared here 38 | acpi_size current_sp; | ^~~~~~~~~~ In file included from /builds/linux/include/acpi/acpi.h:31, from /builds/linux/drivers/acpi/acpica/utdebug.c:12: /builds/linux/drivers/acpi/acpica/acglobal.h:196:26: note: 'acpi_gbl_entry_stack_pointer' declared here 196 | ACPI_GLOBAL(acpi_size *, acpi_gbl_entry_stack_pointer); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ /builds/linux/include/acpi/acpixf.h:45:21: note: in definition of macro 'ACPI_GLOBAL' 45 | extern type name | ^~~~ /builds/linux/fs/xfs/libxfs/xfs_attr_remote.c: In function '__xfs_attr3_rmt_read_verify': /builds/linux/fs/xfs/libxfs/xfs_attr_remote.c:140:35: warning: storing the address of local variable '__here' in '*failaddr' [-Wdangling-pointer=] 140 | *failaddr = __this_address; In file included from /builds/linux/fs/xfs/xfs.h:22, from /builds/linux/fs/xfs/libxfs/xfs_attr_remote.c:7: /builds/linux/fs/xfs/xfs_linux.h:133:46: note: '__here' declared here 133 | #define __this_address ({ __label__ __here; __here: barrier(); &&__here; }) | ^~~~~~ /builds/linux/fs/xfs/libxfs/xfs_attr_remote.c:140:37: note: in expansion of macro '__this_address' 140 | *failaddr = __this_address; | ^~~~~~~~~~~~~~ /builds/linux/fs/xfs/xfs_linux.h:133:46: note: 'failaddr' declared here 133 | #define __this_address ({ __label__ __here; __here: barrier(); &&__here; }) | ^~~~~~ /builds/linux/fs/xfs/libxfs/xfs_attr_remote.c:140:37: note: in expansion of macro '__this_address' 140 | *failaddr = __this_address; | ^~~~~~~~~~~~~~ /builds/linux/drivers/acpi/thermal.c: In function 'acpi_thermal_resume': /builds/linux/drivers/acpi/thermal.c:1123:21: warning: the comparison will always evaluate as 'true' for the address of 'active' will never be NULL [-Waddress] 1123 | if (!(&tz->trips.active[i])) | ^ /builds/linux/drivers/acpi/thermal.c:154:36: note: 'active' declared here 154 | struct acpi_thermal_active active[ACPI_THERMAL_MAX_ACTIVE]; | ^~~~~~ In file included from /builds/linux/include/linux/preempt.h:11, from /builds/linux/include/linux/percpu.h:6, from /builds/linux/include/linux/context_tracking_state.h:5, from /builds/linux/include/linux/hardirq.h:5, from /builds/linux/include/linux/interrupt.h:11, from /builds/linux/drivers/scsi/lpfc/lpfc_bsg.c:23: In function '__list_add', inlined from 'list_add_tail' at /builds/linux/include/linux/list.h:100:2, inlined from 'diag_cmd_data_free.isra' at /builds/linux/drivers/scsi/lpfc/lpfc_bsg.c:891:2: /builds/linux/include/linux/list.h:70:20: warning: storing the address of local variable 'head' in '*&mlist_1(D)->dma.list.prev' [-Wdangling-pointer=] 70 | next->prev = new; | ~~~~~~~~~~~^~~~~ /builds/linux/drivers/scsi/lpfc/lpfc_bsg.c: In function 'diag_cmd_data_free.isra': /builds/linux/drivers/scsi/lpfc/lpfc_bsg.c:883:26: note: 'head' declared here 883 | struct list_head head, *curr, *next; | ^~~~ /builds/linux/drivers/scsi/lpfc/lpfc_bsg.c:883:26: note: 'mlist' declared here In file included from /builds/linux/include/linux/smp.h:12, from /builds/linux/arch/arm64/include/asm/arch_timer.h:18, from /builds/linux/arch/arm64/include/asm/timex.h:8, from /builds/linux/include/linux/timex.h:67, from /builds/linux/include/linux/time32.h:13, from /builds/linux/include/linux/time.h:73, from /builds/linux/include/linux/skbuff.h:15, from /builds/linux/include/linux/if_ether.h:19, from /builds/linux/include/linux/etherdevice.h:20, from /builds/linux/drivers/net/wireless/ath/ath6kl/core.h:21, from /builds/linux/drivers/net/wireless/ath/ath6kl/htc_mbox.c:18: In function '__list_add', inlined from 'list_add' at /builds/linux/include/linux/list.h:86:2, inlined from 'ath6kl_htc_mbox_tx' at /builds/linux/drivers/net/wireless/ath/ath6kl/htc_mbox.c:1142:3: /builds/linux/include/linux/list.h:72:19: warning: storing the address of local variable 'queue' in '*&packet_15(D)->list.prev' [-Wdangling-pointer=] 72 | new->prev = prev; | ~~~~~~~~~~^~~~~~ /builds/linux/drivers/net/wireless/ath/ath6kl/htc_mbox.c: In function 'ath6kl_htc_mbox_tx': /builds/linux/drivers/net/wireless/ath/ath6kl/htc_mbox.c:1125:26: note: 'queue' declared here 1125 | struct list_head queue; | ^~~~~ /builds/linux/drivers/net/wireless/ath/ath6kl/htc_mbox.c:1125:26: note: 'packet' declared here In function '__list_add', inlined from 'list_add_tail' at /builds/linux/include/linux/list.h:100:2, inlined from 'htc_tx_comp_handler' at /builds/linux/drivers/net/wireless/ath/ath6kl/htc_mbox.c:462:2: /builds/linux/include/linux/list.h:72:19: warning: storing the address of local variable 'container' in '*&packet_5(D)->list.prev' [-Wdangling-pointer=] 72 | new->prev = prev; | ~~~~~~~~~~^~~~~~ /builds/linux/drivers/net/wireless/ath/ath6kl/htc_mbox.c: In function 'htc_tx_comp_handler': /builds/linux/drivers/net/wireless/ath/ath6kl/htc_mbox.c:455:26: note: 'container' declared here 455 | struct list_head container; | ^~~~~~~~~ /builds/linux/drivers/net/wireless/ath/ath6kl/htc_mbox.c:455:26: note: 'packet' declared here /builds/linux/drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.c: In function 'rtl92d_phy_reload_iqk_setting': /builds/linux/drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.c:2389:39: warning: the comparison will always evaluate as 'true' for the address of 'value' will never be NULL [-Waddress] 2389 | value[0] != NULL) | ^~ In file included from /builds/linux/drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.c:4: /builds/linux/drivers/net/wireless/realtek/rtlwifi/rtl8192de/../wifi.h:1293:14: note: 'value' declared here 1293 | long value[1][IQK_MATRIX_REG_NUM]; | ^~~~~ /builds/linux/drivers/net/ethernet/sun/cassini.c: In function 'cas_init_rx_dma': /builds/linux/drivers/net/ethernet/sun/cassini.c:1328:29: warning: comparison between two arrays [-Warray-compare] 1328 | if (CAS_HP_FIRMWARE == cas_prog_null) | ^~ /builds/linux/drivers/net/ethernet/sun/cassini.c:1328:29: note: use '&cas_prog_workaroundtab[0] == &cas_prog_null[0]' to compare the addresses /builds/linux/drivers/net/ethernet/sun/cassini.c: In function 'cas_reset': /builds/linux/drivers/net/ethernet/sun/cassini.c:3796:34: warning: comparison between two arrays [-Warray-compare] 3796 | (CAS_HP_ALT_FIRMWARE == cas_prog_null)) { | ^~ /builds/linux/drivers/net/ethernet/sun/cassini.c:3796:34: note: use '&cas_prog_null[0] == &cas_prog_null[0]' to compare the addresses aarch64-linux-gnu-ld: Unexpected GOT/PLT entries detected! aarch64-linux-gnu-ld: Unexpected run-time procedure linkages detected! aarch64-linux-gnu-ld: arch/arm64/kvm/hyp/nvhe/kvm_nvhe.o: in function `__kvm_nvhe___kvm_tlb_flush_vmid_ipa': (.hyp.text+0x1a4c): undefined reference to `__kvm_nvhe_memset' aarch64-linux-gnu-ld: arch/arm64/kvm/hyp/nvhe/kvm_nvhe.o: in function `__kvm_nvhe___kvm_tlb_flush_vmid': (.hyp.text+0x1b20): undefined reference to `__kvm_nvhe_memset' aarch64-linux-gnu-ld: arch/arm64/kvm/hyp/nvhe/kvm_nvhe.o: in function `__kvm_nvhe___kvm_flush_cpu_context': (.hyp.text+0x1b80): undefined reference to `__kvm_nvhe_memset' make[1]: *** [/builds/linux/Makefile:1194: vmlinux] Error 1
Build link, - https://builds.tuxbuild.com/2IHivEkKmuryHjt6Xv8xUn9RLy5/
Build comparison link, - https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-5.10.y-sanity/build...
-- Linaro LKFT https://lkft.linaro.org
On Thu, 01 Dec 2022 09:39:57 +0000, Naresh Kamboju naresh.kamboju@linaro.org wrote:
[please ignore if it is already reported]
The stable-rc 5.10 arm64 allmodconfig builds failed with gcc-12. List of build warnings and errors with gcc-12 are listed below.
aarch64-linux-gnu-ld: Unexpected GOT/PLT entries detected! aarch64-linux-gnu-ld: Unexpected run-time procedure linkages detected! aarch64-linux-gnu-ld: arch/arm64/kvm/hyp/nvhe/kvm_nvhe.o: in function `__kvm_nvhe___kvm_tlb_flush_vmid_ipa': (.hyp.text+0x1a4c): undefined reference to `__kvm_nvhe_memset'
Stupid gcc. Can you try the following patch and check if this works for you?
Thanks,
M.
From 4e775885654bd667a519df5ca5aaf702ce438f5e Mon Sep 17 00:00:00 2001 From: Will Deacon will@kernel.org Date: Fri, 19 Mar 2021 10:01:10 +0000 Subject: [PATCH] KVM: arm64: Link position-independent string routines into .hyp.text
Commit 7b4a7b5e6fefd15f708f959dd43e188444e252ec upstream.
Pull clear_page(), copy_page(), memcpy() and memset() into the nVHE hyp code and ensure that we always execute the '__pi_' entry point on the offchance that it changes in future.
[ qperret: Commit title nits and added linker script alias ]
Signed-off-by: Will Deacon will@kernel.org Signed-off-by: Quentin Perret qperret@google.com Signed-off-by: Marc Zyngier maz@kernel.org Link: https://lore.kernel.org/r/20210319100146.1149909-3-qperret@google.com --- arch/arm64/include/asm/hyp_image.h | 3 +++ arch/arm64/kernel/image-vars.h | 11 +++++++++++ arch/arm64/kvm/hyp/nvhe/Makefile | 4 ++++ 3 files changed, 18 insertions(+)
diff --git a/arch/arm64/include/asm/hyp_image.h b/arch/arm64/include/asm/hyp_image.h index daa1a1da539e..e06842756051 100644 --- a/arch/arm64/include/asm/hyp_image.h +++ b/arch/arm64/include/asm/hyp_image.h @@ -31,6 +31,9 @@ */ #define KVM_NVHE_ALIAS(sym) kvm_nvhe_sym(sym) = sym;
+/* Defines a linker script alias for KVM nVHE hyp symbols */ +#define KVM_NVHE_ALIAS_HYP(first, sec) kvm_nvhe_sym(first) = kvm_nvhe_sym(sec); + #endif /* LINKER_SCRIPT */
#endif /* __ARM64_HYP_IMAGE_H__ */ diff --git a/arch/arm64/kernel/image-vars.h b/arch/arm64/kernel/image-vars.h index c615b285ff5b..48e43b29a2d5 100644 --- a/arch/arm64/kernel/image-vars.h +++ b/arch/arm64/kernel/image-vars.h @@ -103,6 +103,17 @@ KVM_NVHE_ALIAS(gic_nonsecure_priorities); KVM_NVHE_ALIAS(__start___kvm_ex_table); KVM_NVHE_ALIAS(__stop___kvm_ex_table);
+/* Position-independent library routines */ +KVM_NVHE_ALIAS_HYP(clear_page, __pi_clear_page); +KVM_NVHE_ALIAS_HYP(copy_page, __pi_copy_page); +KVM_NVHE_ALIAS_HYP(memcpy, __pi_memcpy); +KVM_NVHE_ALIAS_HYP(memset, __pi_memset); + +#ifdef CONFIG_KASAN +KVM_NVHE_ALIAS_HYP(__memcpy, __pi_memcpy); +KVM_NVHE_ALIAS_HYP(__memset, __pi_memset); +#endif + #endif /* CONFIG_KVM */
#endif /* __ARM64_KERNEL_IMAGE_VARS_H */ diff --git a/arch/arm64/kvm/hyp/nvhe/Makefile b/arch/arm64/kvm/hyp/nvhe/Makefile index ddde15fe85f2..230bba1a6716 100644 --- a/arch/arm64/kvm/hyp/nvhe/Makefile +++ b/arch/arm64/kvm/hyp/nvhe/Makefile @@ -6,9 +6,13 @@ asflags-y := -D__KVM_NVHE_HYPERVISOR__ ccflags-y := -D__KVM_NVHE_HYPERVISOR__
+lib-objs := clear_page.o copy_page.o memcpy.o memset.o +lib-objs := $(addprefix ../../../lib/, $(lib-objs)) + obj-y := timer-sr.o sysreg-sr.o debug-sr.o switch.o tlb.o hyp-init.o host.o hyp-main.o obj-y += ../vgic-v3-sr.o ../aarch32.o ../vgic-v2-cpuif-proxy.o ../entry.o \ ../fpsimd.o ../hyp-entry.o +obj-y += $(lib-objs)
## ## Build rules for compiling nVHE hyp code
On Thu, 1 Dec 2022 at 11:36, Marc Zyngier maz@kernel.org wrote:
On Thu, 01 Dec 2022 09:39:57 +0000, Naresh Kamboju naresh.kamboju@linaro.org wrote:
[please ignore if it is already reported]
The stable-rc 5.10 arm64 allmodconfig builds failed with gcc-12. List of build warnings and errors with gcc-12 are listed below.
aarch64-linux-gnu-ld: Unexpected GOT/PLT entries detected! aarch64-linux-gnu-ld: Unexpected run-time procedure linkages detected! aarch64-linux-gnu-ld: arch/arm64/kvm/hyp/nvhe/kvm_nvhe.o: in function `__kvm_nvhe___kvm_tlb_flush_vmid_ipa': (.hyp.text+0x1a4c): undefined reference to `__kvm_nvhe_memset'
Stupid gcc. Can you try the following patch and check if this works for you?
The patch didn't apply smodly, was a few minor issues. But it solved the build error.
Cheers, Anders
Thanks,
M.
From 4e775885654bd667a519df5ca5aaf702ce438f5e Mon Sep 17 00:00:00 2001 From: Will Deacon will@kernel.org Date: Fri, 19 Mar 2021 10:01:10 +0000 Subject: [PATCH] KVM: arm64: Link position-independent string routines into .hyp.text
Commit 7b4a7b5e6fefd15f708f959dd43e188444e252ec upstream.
Pull clear_page(), copy_page(), memcpy() and memset() into the nVHE hyp code and ensure that we always execute the '__pi_' entry point on the offchance that it changes in future.
[ qperret: Commit title nits and added linker script alias ]
Signed-off-by: Will Deacon will@kernel.org Signed-off-by: Quentin Perret qperret@google.com Signed-off-by: Marc Zyngier maz@kernel.org Link: https://lore.kernel.org/r/20210319100146.1149909-3-qperret@google.com
arch/arm64/include/asm/hyp_image.h | 3 +++ arch/arm64/kernel/image-vars.h | 11 +++++++++++ arch/arm64/kvm/hyp/nvhe/Makefile | 4 ++++ 3 files changed, 18 insertions(+)
diff --git a/arch/arm64/include/asm/hyp_image.h b/arch/arm64/include/asm/hyp_image.h index daa1a1da539e..e06842756051 100644 --- a/arch/arm64/include/asm/hyp_image.h +++ b/arch/arm64/include/asm/hyp_image.h @@ -31,6 +31,9 @@ */ #define KVM_NVHE_ALIAS(sym) kvm_nvhe_sym(sym) = sym;
+/* Defines a linker script alias for KVM nVHE hyp symbols */ +#define KVM_NVHE_ALIAS_HYP(first, sec) kvm_nvhe_sym(first) = kvm_nvhe_sym(sec);
#endif /* LINKER_SCRIPT */
#endif /* __ARM64_HYP_IMAGE_H__ */ diff --git a/arch/arm64/kernel/image-vars.h b/arch/arm64/kernel/image-vars.h index c615b285ff5b..48e43b29a2d5 100644 --- a/arch/arm64/kernel/image-vars.h +++ b/arch/arm64/kernel/image-vars.h @@ -103,6 +103,17 @@ KVM_NVHE_ALIAS(gic_nonsecure_priorities); KVM_NVHE_ALIAS(__start___kvm_ex_table); KVM_NVHE_ALIAS(__stop___kvm_ex_table);
+/* Position-independent library routines */ +KVM_NVHE_ALIAS_HYP(clear_page, __pi_clear_page); +KVM_NVHE_ALIAS_HYP(copy_page, __pi_copy_page); +KVM_NVHE_ALIAS_HYP(memcpy, __pi_memcpy); +KVM_NVHE_ALIAS_HYP(memset, __pi_memset);
+#ifdef CONFIG_KASAN +KVM_NVHE_ALIAS_HYP(__memcpy, __pi_memcpy); +KVM_NVHE_ALIAS_HYP(__memset, __pi_memset); +#endif
#endif /* CONFIG_KVM */
#endif /* __ARM64_KERNEL_IMAGE_VARS_H */ diff --git a/arch/arm64/kvm/hyp/nvhe/Makefile b/arch/arm64/kvm/hyp/nvhe/Makefile index ddde15fe85f2..230bba1a6716 100644 --- a/arch/arm64/kvm/hyp/nvhe/Makefile +++ b/arch/arm64/kvm/hyp/nvhe/Makefile @@ -6,9 +6,13 @@ asflags-y := -D__KVM_NVHE_HYPERVISOR__ ccflags-y := -D__KVM_NVHE_HYPERVISOR__
+lib-objs := clear_page.o copy_page.o memcpy.o memset.o +lib-objs := $(addprefix ../../../lib/, $(lib-objs))
obj-y := timer-sr.o sysreg-sr.o debug-sr.o switch.o tlb.o hyp-init.o host.o hyp-main.o obj-y += ../vgic-v3-sr.o ../aarch32.o ../vgic-v2-cpuif-proxy.o ../entry.o \ ../fpsimd.o ../hyp-entry.o +obj-y += $(lib-objs)
##
## Build rules for compiling nVHE hyp code
2.34.1
-- Without deviation from the norm, progress is not possible.