[PATCH] ARM: fix BE8 module loading
Robin Murphy
robin.murphy at arm.com
Mon May 18 07:22:44 PDT 2015
Hi Arnd,
On 18/05/15 13:36, Arnd Bergmann wrote:
> 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,
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
> we can avoid the error by enclosing the code in an #ifdef.
>
> Signed-off-by: Arnd Bergmann <arnd at arndb.de>
> Fixes: 7d485f647c1 ("ARM: 8220/1: allow modules outside of bl range")
> ---
> Found with the randconfig builder on linux-next.
>
> diff --git a/arch/arm/kernel/module-plts.c b/arch/arm/kernel/module-plts.c
> index 71a65c49871d..097e2e201b9f 100644
> --- a/arch/arm/kernel/module-plts.c
> +++ b/arch/arm/kernel/module-plts.c
> @@ -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
>
More information about the linux-arm-kernel
mailing list