[PATCH] ARM: vfp: force non-conditional encoding for external Thumb2 tail call
Nick Desaulniers
ndesaulniers at google.com
Fri Sep 18 15:42:11 EDT 2020
On Wed, Sep 16, 2020 at 11:19 PM Ard Biesheuvel <ardb at kernel.org> wrote:
>
> Nick reports that the following error is produced in some cases when
> using GCC+ld.bfd to build the ARM defconfig with Thumb2 enabled:
>
> arch/arm/vfp/vfphw.o: in function `vfp_support_entry':
> (.text+0xa): relocation truncated to fit: R_ARM_THM_JUMP19 against
> symbol `vfp_kmode_exception' defined in .text.unlikely section in
> arch/arm/vfp/vfpmodule.o
>
> $ arm-linux-gnueabihf-ld --version
> GNU ld (GNU Binutils for Debian) 2.34
FWIW this was my compiler version, too:
$ arm-linux-gnueabihf-gcc --version
arm-linux-gnueabihf-gcc (Debian 9.3.0-8) 9.3.0
>
> Generally, the linker should be able to fix up out of range branches by
> emitting veneers, but apparently, it fails to do so in this particular
> case, i.e., a conditional 'tail call' to vfp_kmode_exception(), which
> is not defined in the same object file.
>
> So let's force the use of a non-conditional encoding of the B instruction,
> which has more space for an immediate offset.
>
> Cc: <stable at vger.kernel.org>
> Reported-by: Nick Desaulniers <ndesaulniers at google.com>
> Tested-by: Nick Desaulniers <ndesaulniers at google.com>
> Signed-off-by: Ard Biesheuvel <ardb at kernel.org>
> ---
> arch/arm/vfp/vfphw.S | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/arch/arm/vfp/vfphw.S b/arch/arm/vfp/vfphw.S
> index 4fcff9f59947..f1468702fbc9 100644
> --- a/arch/arm/vfp/vfphw.S
> +++ b/arch/arm/vfp/vfphw.S
> @@ -82,6 +82,7 @@ ENTRY(vfp_support_entry)
> ldr r3, [sp, #S_PSR] @ Neither lazy restore nor FP exceptions
> and r3, r3, #MODE_MASK @ are supported in kernel mode
> teq r3, #USR_MODE
> +THUMB( it ne )
> bne vfp_kmode_exception @ Returns through lr
>
> VFPFMRX r1, FPEXC @ Is the VFP enabled?
> --
> 2.17.1
>
--
Thanks,
~Nick Desaulniers
More information about the linux-arm-kernel
mailing list