From: Michal Simek on 26 May 2010 03:30 Mike Frysinger wrote: > From: Jie Zhang <jie.zhang(a)analog.com> > > The recent commit 1f0ce8b3dd667dca7 which moved the ARCH_SLAB_MINALIGN > default into the global header inadvertently broke FLAT for a bunch of > systems. Blackfin systems now fail on any FLAT exec with: > Unable to read code+data+bss, errno 14 > When your /init is a FLAT binary, obviously this can be annoying ;). > > This stems from the alignment usage in the FLAT loader. The behavior > before was that FLAT would default to ARCH_SLAB_MINALIGN only if it was > defined, and this was only defined by arches when they wanted a larger > alignment value. Otherwise it'd default to pointer alignment. Arguably, > this is kind of hokey that the FLAT is semi-abusing defines it shouldn't. > > But let's ignore that and let arches declare a larger FLAT alignment > specifically anyways as some arches are OK with the default slab alignment > but need stricter FLAT alignments for shared FLAT libraries. > > The nommu arches might want to check to see if they need to declare this > in their headers as well ... Microblaze noMMU contains this fault too. I registered it yesterday. I will use the same fix as you when you find out the correct solution. :-) Michal > > Signed-off-by: Jie Zhang <jie.zhang(a)analog.com> > Signed-off-by: Mike Frysinger <vapier(a)gentoo.org> > --- > arch/blackfin/include/asm/flat.h | 2 ++ > fs/binfmt_flat.c | 11 ++++++++--- > 2 files changed, 10 insertions(+), 3 deletions(-) > > diff --git a/arch/blackfin/include/asm/flat.h b/arch/blackfin/include/asm/flat.h > index c1314c5..cf2a73e 100644 > --- a/arch/blackfin/include/asm/flat.h > +++ b/arch/blackfin/include/asm/flat.h > @@ -11,6 +11,8 @@ > > #include <asm/unaligned.h> > > +#define ARCH_FLAT_DATA_ALIGN 0x20 > + > #define flat_argvp_envp_on_stack() 0 > #define flat_old_ram_flag(flags) (flags) > > diff --git a/fs/binfmt_flat.c b/fs/binfmt_flat.c > index 49566c1..6906170 100644 > --- a/fs/binfmt_flat.c > +++ b/fs/binfmt_flat.c > @@ -56,12 +56,17 @@ > #endif > > /* > - * User data (stack, data section and bss) needs to be aligned > - * for the same reasons as SLAB memory is, and to the same amount. > + * User data (stack, data section and bss) needs to be aligned. > + * If ARCH_FLAT_DATA_ALIGN is defined, use it. > + */ > +#ifdef ARCH_FLAT_DATA_ALIGN > +#define FLAT_DATA_ALIGN (ARCH_FLAT_DATA_ALIGN) > +/* Otherwise user data nees to be aligned for the same reasons > + * as SLAB memory is aligned, and to the same amount. > * Avoid duplicating architecture specific code by using the same > * macro as with SLAB allocation: > */ > -#ifdef ARCH_SLAB_MINALIGN > +#elif defined(ARCH_SLAB_MINALIGN) > #define FLAT_DATA_ALIGN (ARCH_SLAB_MINALIGN) > #else > #define FLAT_DATA_ALIGN (sizeof(void *)) -- Michal Simek, Ing. (M.Eng) w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/ Microblaze U-BOOT custodian -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|
Pages: 1 Prev: [PATCH 5/5] Hiberation: Fix speed display Next: [PATCH] A little bug in scrup, vt.c |