Le 30/12/2025 à 08:06, Thomas Weißschuh a écrit :
The generic CC_CAN_LINK detection does not handle different byte orders.
This may lead to userprogs which are not actually runnable on the target
kernel.
Isn't the kernel supposed to handle any userland endianess ? Macro
SET_ENDIAN() is there for that as far as I understand.
And if you want to be complete, I think you should also check whether
the ELF ABI is v1 or v2.
Christophe
Use architecture-specific logic supporting byte orders instead.
Signed-off-by: Thomas Weißschuh <[email protected]>
---
arch/powerpc/Kconfig | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 9537a61ebae0..6bb2f90e97ea 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -127,6 +127,7 @@ config PPC
select ARCH_DMA_DEFAULT_COHERENT if !NOT_COHERENT_CACHE
select ARCH_ENABLE_MEMORY_HOTPLUG
select ARCH_ENABLE_MEMORY_HOTREMOVE
+ select ARCH_HAS_CC_CAN_LINK
select ARCH_HAS_COPY_MC if PPC64
select ARCH_HAS_CURRENT_STACK_POINTER
select ARCH_HAS_DEBUG_VIRTUAL
@@ -1342,6 +1343,20 @@ endif
config PPC_LIB_RHEAP
bool
+config ARCH_CC_CAN_LINK
+ bool
+ default $(cc_can_link_user,$(m64-flag) -mlittle-endian) if 64BIT &&
CPU_LITTLE_ENDIAN
+ default $(cc_can_link_user,$(m64-flag) -mbig-endian) if 64BIT &&
CPU_BIG_ENDIAN
+ default $(cc_can_link_user,$(m32-flag) -mlittle-endian) if
CPU_LITTLE_ENDIAN
+ default $(cc_can_link_user,$(m32-flag) -mbig-endian) if CPU_BIG_ENDIAN
+
+config ARCH_USERFLAGS
+ string
+ default "$(m64-flag) -mlittle-endian" if 64BIT && CPU_LITTLE_ENDIAN
+ default "$(m64-flag) -mbig-endian" if 64BIT && CPU_BIG_ENDIAN
+ default "$(m32-flag) -mlittle-endian" if CPU_LITTLE_ENDIAN
+ default "$(m32-flag) -mbig-endian" if CPU_BIG_ENDIAN
+
source "arch/powerpc/kvm/Kconfig"
source "kernel/livepatch/Kconfig"
---
base-commit: 8f0b4cce4481fb22653697cced8d0d04027cb1e8
change-id: 20251222-cc-can-link-powerpc-5ddd2469fd5b
Best regards,