[PATCH] ARM: Fix relocation if image end past uncompressed kernel end
Shawn Guo
shawn.guo at freescale.com
Fri Apr 22 01:19:14 EDT 2011
On Thu, Apr 21, 2011 at 11:23:22PM -0400, Nicolas Pitre wrote:
> On Thu, 21 Apr 2011, Nicolas Pitre wrote:
>
> > On Thu, 21 Apr 2011, Nicolas Pitre wrote:
> >
> > > On Thu, 21 Apr 2011, Tony Lindgren wrote:
> > >
> > > > Otherwise we end up overwriting ourselves. This fixes booting
> > > > on n900 after commit 6d7d0ae51574943bf571d269da3243257a2d15db
> > > > (ARM: 6750/1: improvements to compressed/head.S).
> > > >
> > > > Signed-off-by: Tony Lindgren <tony at atomide.com>
> > >
> > > I don't understand why this is needed. The copy loop is explicitly
> > > copying from the end going backward exactly to cope with this
> > > possibility.
> >
> > I think your patch is 1) unneeded (see the copy loop code and the
> > comment before it), and 2) simply hiding the real bug.
> >
> > I just need to modify the code in compressed/misc.c slightly for the
> > lzma decompressor to start or stop working randomly. It seems that this
> > code might be sensitive to slight displacement in memory caused by
> > modifications to totally unrelated code. I'm still trying to track this
> > down.
>
> I found the bugger. The problem was a bad stack alignment.
>
> ----- >8
>
> From: Nicolas Pitre <nicolas.pitre at linaro.org>
>
> ARM: zImage: make sure the stack is 64-bit aligned
>
> With ARMv5+ and EABI, the compiler expects a 64-bit aligned stack so
> instructions like STRD and LDRD can be used. Without this, mysterious
> boot failures were seen semi randomly with the LZMA decompressor.
>
> While at it, let's align .bss as well.
>
> Signed-off-by: Nicolas Pitre <nicolas.pitre at linaro.org>
>
> diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
> index 58ac434..79b5c62 100644
> --- a/arch/arm/boot/compressed/Makefile
> +++ b/arch/arm/boot/compressed/Makefile
> @@ -74,7 +74,7 @@ ZTEXTADDR := $(CONFIG_ZBOOT_ROM_TEXT)
> ZBSSADDR := $(CONFIG_ZBOOT_ROM_BSS)
> else
> ZTEXTADDR := 0
> -ZBSSADDR := ALIGN(4)
> +ZBSSADDR := ALIGN(8)
> endif
>
> SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/
> diff --git a/arch/arm/boot/compressed/vmlinux.lds.in b/arch/arm/boot/compressed/vmlinux.lds.in
> index 5309909..ea80abe 100644
> --- a/arch/arm/boot/compressed/vmlinux.lds.in
> +++ b/arch/arm/boot/compressed/vmlinux.lds.in
> @@ -54,6 +54,7 @@ SECTIONS
> .bss : { *(.bss) }
> _end = .;
>
> + . = ALIGN(8); /* the stack must be 64-bit aligned */
> .stack : { *(.stack) }
>
> .stab 0 : { *(.stab) }
>
So this is the [PATCH 1/3] in the same set with following two?
[PATCH 2/3] ARM: zImage: don't ignore error returned from decompress()
[PATCH 3/3] ARM: zImage: the page table memory must be considered before relocation
--
Regards,
Shawn
More information about the linux-arm-kernel
mailing list