[PATCH] arm: boot/compressed: fix inappropriate Thumb2 mnemonic for __nop

Russell King - ARM Linux linux at armlinux.org.uk
Thu Jun 8 09:29:39 PDT 2017


Gah, it's rather unfortunate that this has been discovered only a
few days after the other decompressor fix was merged and hit Linus'
tree...

On Thu, Jun 08, 2017 at 12:58:47PM +0000, Ard Biesheuvel wrote:
> 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 CPU_THUMBONLY builds.
> 
> Fixes: 06a4b6d009a1 ("ARM: 8677/1: boot/compressed: fix decompressor ...")
> Reported-by: Arnd Bergmann <arnd at arndb.de>
> Acked-by: Arnd Bergmann <arnd at arndb.de>
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel at linaro.org>
> ---
> 
> Apologies for the breakage: apparently, the combination CONFIG_THUMB2_KERNEL=y,
> CONFIG_CPU_THUMBONLY=n and CONFIG_EFI_STUB=y was not among the configurations
> I tested before sending out the original patch.
> 
>  arch/arm/boot/compressed/efi-header.S | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> 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
>  
> -- 
> 2.9.3
> 

-- 
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.



More information about the linux-arm-kernel mailing list