Message ID | 20190508185951.41148-1-chris.brandt@renesas.com |
---|---|
State | New |
Headers | show |
Series | ARM: 8680/1: boot/compressed: fix inappropriate Thumb2 mnemonic for __nop | expand |
On Wed, May 08, 2019 at 01:59:51PM -0500, Chris Brandt wrote: >From: Ard Biesheuvel <ard.biesheuvel@linaro.org> > >[ Upstream commit 60ce2858514ed9ccaf00dc7e9f4dc219537e9855 ] > >Commit 06a4b6d009a1 ("ARM: 8677/1: boot/compressed: fix decompressor >header layout for v7-M") fixed an issue in the layout of the header >of the compressed kernel image that was caused by the assembler >emitting narrow opcodes for 'mov r0, r0', and for this reason, the >mnemonic was updated to use the W() macro, which will append the .w >suffix (which forces a wide encoding) if required, i.e., when building >the kernel in Thumb2 mode. > >However, this failed to take into account that on Thumb2 kernels built >for CPUs that are also ARM capable, the entry point is entered in ARM >mode, and so the instructions emitted here will be ARM instructions >that only exist in a wide encoding to begin with, which is why the >assembler rejects the .w suffix here and aborts the build with the >following message: > > head.S: Assembler messages: > head.S:132: Error: width suffixes are invalid in ARM mode -- `mov.w r0,r0' > >So replace the W(mov) with separate ARM and Thumb2 instructions, where >the latter will only be used for THUMB2_ONLY builds. > >Fixes: 06a4b6d009a1 ("ARM: 8677/1: boot/compressed: fix decompressor ...") >Reported-by: Arnd Bergmann <arnd@arndb.de> >Acked-by: Arnd Bergmann <arnd@arndb.de> >Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> >Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> >Signed-off-by: Chris Brandt <chris.brandt@renesas.com> >--- > >For the 4.9.x tree, commit 7b5407843691 was applied, but that caused >an issue for CONFIG_THUMB2 builds as you can see in the commit >message above. > >Therefore, this upstream fix (that came 2 weeks later) is also required >in the 4.9.x tree to make it build again. I've queued 60ce2858514 for 4.9, thanks! -- Thanks, Sasha
diff --git a/arch/arm/boot/compressed/efi-header.S b/arch/arm/boot/compressed/efi-header.S index 3f7d1b74c5e0..a17ca8d78656 100644 --- a/arch/arm/boot/compressed/efi-header.S +++ b/arch/arm/boot/compressed/efi-header.S @@ -17,7 +17,8 @@ @ there. .inst 'M' | ('Z' << 8) | (0x1310 << 16) @ tstne r0, #0x4d000 #else - W(mov) r0, r0 + AR_CLASS( mov r0, r0 ) + M_CLASS( nop.w ) #endif .endm