[PATCH v2 7/9] ARM: Thumb-2: Restore sensible zImage header layout for CONFIG_THUMB2_KERNEL

Nicolas Pitre nico at fluxnic.net
Mon Nov 22 13:28:51 EST 2010


On Mon, 22 Nov 2010, Dave Martin wrote:

> The code which makes up the zImage header intends to leave a
> 32-byte gap followed by a branch to the real entry point, a
> magic number, and a word containing the absolute entry point
> address.
> 
> This gets messed up with with CONFIG_THUMB2_KERNEL, because the
> size of the initial padding NOPs changes.
> 
> Instead, the header can be made fully compatible by restoring
> it to ARM.
> 
> In the Thumb-2 case, we can replace the initial NOPs with a
> sequence which switches to Thumb and jumps to the real entry
> point.
> 
> As a consequence, the zImage entry point is now always ARM, so
> no special magic is needed any more for the uImage rules in the
> Thumb-2 case.
> 
> Applies on v2.6.37-rc3.

Ideally you should keep that line above outside of the actual commit log 
text, as no one will care on what version it applies to once it is 
merged.  It is best to put that below the --- line, or omit it entirely 
if using 'git send-email'.

> Signed-off-by: Dave Martin <dave.martin at linaro.org>
> Acked-by: Catalin Marinas <catalin.marinas at arm.com>
> Acked-by: Nicolas Pitre <nicolas.pitre at linaro.org>

Looking at it again there is a problem with the patch as is...

> --- a/arch/arm/boot/compressed/head.S
> +++ b/arch/arm/boot/compressed/head.S
> @@ -125,16 +125,21 @@ wait:		mrc	p14, 0, pc, c0, c1, 0
>   * sort out different calling conventions
>   */
>  		.align
> +		.arm				@ Always enter in ARM state
>  start:
>  		.type	start,#function
> -		.rept	8
> + THUMB(		adr	r12, BSYM(1f)	)
> + THUMB(		bx	r12		)
> + THUMB(		.rept	6		)
> + ARM(		.rept	8		)
>  		mov	r0, r0
>  		.endr
>  
> -		b	1f
> +		nop				@ Pad magic number to 0x24

Why is this branch removed?  With an ARM mode kernel this means we'll 
attempt to execute the magic number that follows.

>  		.word	0x016f2818		@ Magic numbers to help the loader
>  		.word	start			@ absolute load/run zImage address
>  		.word	_edata			@ zImage end address
> + THUMB(		.thumb			)
>  1:		mov	r7, r1			@ save architecture ID
>  		mov	r8, r2			@ save atags pointer
>  

Nicolas



More information about the linux-arm-kernel mailing list