[yocto] binutils 2.29.1 ARM Thumb kernel problem

Khem Raj raj.khem at gmail.com
Wed Apr 4 14:18:31 PDT 2018


On Mon, Apr 2, 2018 at 4:14 PM, Andre McCurdy <armccurdy at gmail.com> wrote:
> On Mon, Apr 2, 2018 at 1:15 PM, Chris Elledge
> <celledge at digitallumens.com> wrote:
>> I recently upgraded my Yocto based project to Yocto 2.4.2, and I encountered
>> a problem when building my custom kernel for an AT91 SAMA5D3X platform. I've
>> been using an ARM Thumb2 kernel for a while successfully until this release.
>> It appears that the issue stems from the change to binutils version 2.29.1.
>>
>> Here's a good description of the problem:
>> https://patchwork.kernel.org/patch/10072695/
>>
>> I tried out their test script, and it flagged the arm-poky-linux-gnueabi-
>> toolchain built by Yocto 2.4.2 as being buggy. Has anyone else encountered
>> this problem and figured out a way around it without disabling Thumb
>> compilation of the kernel?
>
> Thanks for bringing up this issue. Reading through the various bug
> reports etc it not clear what the fix should be. Upstream binutils has
> not reverted the change and the upstream kernel still appears to rely
> on the pre-2.29.1 binutils behaviour.
>
> The simplest solution for OE 2.4 would seem to be to revert the change
> in binutils (rev e645cf4, which was added very close to the 2.29.1
> release).

We should not apply this in upstream OE, but in general carrying such
a solution locally
is fine.

>
> Longer term, it looks like the kernel will have to be updated to work
> with the most recent versions of binutils. A possible approach for
> that is hinted at in the kernel patch you provided a link for, ie
> update the "badr" macro in arch/arm/include/asm/assembler.h to OR the
> sym address with 1 instead of adding 1. e.g. something like changing:
>
>   #ifdef CONFIG_THUMB2_KERNEL
>   adr\c \rd, \sym + 1
>   #else
>
> to
>
>   #ifdef CONFIG_THUMB2_KERNEL
>   adr\c \rd, \sym
>   orr\c \rd, \rd, #1
>   #else
>

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=52a86f843b6dee1de9977293da9786649b146b05

should have fixed ADR pseudo instruction so adding +1 is taken care of
in newer gas. I think doing a
orr is a safe bet to ensure that it works with all versions of gas+ld.

> The fact that it doesn't seem to have been fixed that way in the
> upstream kernel suggests that the kernel developers may be hoping to
> find a better solution though (ie one which avoids adding an extra
> instruction in the syscall fast path).
>
> So, without some more guidance from either upstream project, the best
> solution isn't clear. Perhaps you could try reverting the binutils
> change to get you up and running again in the short term and then ask
> on the ARM kernel mailing lists what the solution for Thumb2 with
> binutils >= 2.29.1 is expected to be?
> --
> _______________________________________________
> yocto mailing list
> yocto at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/yocto



More information about the yocto mailing list