ARM: fix BE8 module loading
PATCH 1/1 ARM: fix BE8 module loading
The new veneer support for loadable modules on ARM uses the __opcode_to_mem_thumb32() function to count R_ARM_THM_CALL and R_ARM_THM_JUMP24 relocations.
However, this function is not defined for big-endian kernels on ARMv5 or before, causing a compile-time error:
arch/arm/kernel/module-plts.c: In function 'count_plts':arch/arm/kernel/module-plts.c:124:9: error: implicit declaration of function '__opcode_to_mem_thumb32' [-Werror=implicit-function-declaration]
__opcode_to_mem_thumb32(0x07ff2fff)))
^As we know that this part of the function is only needed for Thumb2 kernels, and that those can never happen with BE8, we can avoid the error by enclosing the code in an #ifdef.
---
Found with the randconfig builder on linux-next.
arch/arm/kernel/module-plts.c +2 -0
@@ -118,11 +118,13 @@ static unsigned int count_plts(Elf32_Addr base, const Elf32_Rel *rel, int num) __opcode_to_mem_arm(0x00ffffff))) ret++;break ; +#ifdef CONFIG_THUMB2_KERNEL case R_ARM_THM_CALL :case R_ARM_THM_JUMP24 :if (!duplicate_rel (base, rel, i,__opcode_to_mem_thumb32 (0x07ff2fff ))) ret++; +#endif }return ret; }
PATCH 1/1 ARM: fix BE8 module loading
Quoted 12 lines · Arnd Bergmann
The new veneer support for loadable modules on ARM uses the
__opcode_to_mem_thumb32()function to countR_ARM_THM_CALLandR_ARM_THM_JUMP24relocations.However, this function is not defined for big-endian kernels on ARMv5 or before, causing a compile-time error:
arch/arm/kernel/module-plts.c: In function 'count_plts':arch/arm/kernel/module-plts.c:124:9: error: implicit declaration of function '__opcode_to_mem_thumb32' [-Werror=implicit-function-declaration]__opcode_to_mem_thumb32(0x07ff2fff))) ^
Quoted 9 lines
As we know that this part of the function is only needed for Thumb2 kernels, and that those can never happen with BE8, we can avoid the error by enclosing the code in an #ifdef.
Signed-off-by Arnd Bergmann <[email protected]>Fixes 7d485f647c1 ("ARM: 8220/1: allow modules outside of bl range")---
Found with the randconfig builder on linux-next.
Quoted 19 lines
arch/arm/kernel/module-plts.c +2
-0@@ -118,11 +118,13 @@ static unsigned int count_plts(Elf32_Addr base, const Elf32_Rel *rel, int num) __opcode_to_mem_arm(0x00ffffff))) ret++;break ; +#ifdef CONFIG_THUMB2_KERNEL case R_ARM_THM_CALL :case R_ARM_THM_JUMP24 :if (!duplicate_rel (base, rel, i,__opcode_to_mem_thumb32 (0x07ff2fff ))) ret++; +#endif }return ret; }
PATCH 1/1 ARM: fix BE8 module loading
In reply to Arnd BergmannHi Arnd,
Quoted 7 lines · Arnd Bergmann
The new veneer support for loadable modules on ARM uses the
__opcode_to_mem_thumb32()function to countR_ARM_THM_CALLandR_ARM_THM_JUMP24relocations.However, this function is not defined for big-endian kernels on ARMv5 or before, causing a compile-time error:
Quoted 7 lines
arch/arm/kernel/module-plts.c: In function 'count_plts':arch/arm/kernel/module-plts.c:124:9: error: implicit declaration of function '__opcode_to_mem_thumb32' [-Werror=implicit-function-declaration]__opcode_to_mem_thumb32(0x07ff2fff))) ^As we know that this part of the function is only needed for Thumb2 kernels, and that those can never happen with BE8,
Do you mean BE-32 here (and in the title)? That's the obsolete wacky word-invariant one, BE-8 is the sensible* one that modern CPUs support.
Robin.
*as sensible as big-endian could ever be, at any rate :P
Quoted 32 lines
we can avoid the error by enclosing the code in an #ifdef.
Signed-off-by Arnd Bergmann <[email protected]>Fixes 7d485f647c1 ("ARM: 8220/1: allow modules outside of bl range")---
Found with the randconfig builder on linux-next.arch/arm/kernel/module-plts.c +2
-0@@ -118,11 +118,13 @@ static unsigned int count_plts(Elf32_Addr base, const Elf32_Rel *rel, int num) __opcode_to_mem_arm(0x00ffffff))) ret++;break ; +#ifdef CONFIG_THUMB2_KERNEL case R_ARM_THM_CALL :case R_ARM_THM_JUMP24 :if (!duplicate_rel (base, rel, i,__opcode_to_mem_thumb32 (0x07ff2fff ))) ret++; +#endif }return ret; }_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH 1/1 ARM: fix BE8 module loading
Quoted 8 lines · On Monday 18 May 2015 15:22:44 Robin Murphy wrote:
Do you mean BE-32 here (and in the title)? That's the obsolete wacky word-invariant one, BE-8 is the sensible* one that modern CPUs support.
Robin.
*as sensible as big-endian could ever be, at any rate
You are absolutely right, I've fixed up the changelog accordingly now.
Arnd