From: Michal Simek <monstr@monstr.eu>
To: Mike Frysinger <vapier@gentoo.org>
Cc: uclinux-dev@uclinux.org, David Howells <dhowells@redhat.com>,
David McCullough <davidm@snapgear.com>,
Greg Ungerer <gerg@uclinux.org>, Paul Mundt <lethal@linux-sh.org>,
uclinux-dist-devel@blackfin.uclinux.org,
microblaze-uclinux@itee.uq.edu.au, linux-m32r@ml.linux-m32r.org,
Hirokazu Takata <takata@linux-m32r.org>,
linux-kernel@vger.kernel.org,
Yoshinori Sato <ysato@users.sourceforge.jp>
Subject: Re: [PATCH 1/2 v2] FLAT: split the stack & data alignments
Date: Thu, 27 May 2010 10:24:30 +0200 [thread overview]
Message-ID: <4BFE2C3E.5090704@monstr.eu> (raw)
In-Reply-To: <1274863506-14168-1-git-send-email-vapier@gentoo.org>
Mike Frysinger wrote:
> The stack and data have different alignment requirements, so don't force
> them to wear the same shoe. Increase the data alignment to match that
> which the elf2flt linker script has always been using: 0x20 bytes. Not
> only does this bring the kernel loader in line with the toolchain, but
> it also fixes a swath of gcc tests which try to force larger alignment
> values but randomly fail when the FLAT loader fails to deliver.
>
> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Solve the problem on Microblaze:
Tested-by: Michal Simek <monstr@monstr.eu>
Who will add it to mainline?
Thanks,
Michal
> ---
> v2
> - split changes & document better
>
> fs/binfmt_flat.c | 23 +++++++++++++++--------
> 1 files changed, 15 insertions(+), 8 deletions(-)
>
> diff --git a/fs/binfmt_flat.c b/fs/binfmt_flat.c
> index 49566c1..b865622 100644
> --- a/fs/binfmt_flat.c
> +++ b/fs/binfmt_flat.c
> @@ -56,15 +56,22 @@
> #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.
> - * Avoid duplicating architecture specific code by using the same
> - * macro as with SLAB allocation:
> + * User data (data section and bss) needs to be aligned.
> + * We pick 0x20 here because it is the max value elf2flt has always
> + * used in producing FLAT files, and because it seems to be large
> + * enough to make all the gcc alignment related tests happy.
> + */
> +#define FLAT_DATA_ALIGN (0x20)
> +
> +/*
> + * User data (stack) also needs to be aligned.
> + * Here we can be a bit looser than the data sections since this
> + * needs to only meet arch ABI requirements.
> */
> #ifdef ARCH_SLAB_MINALIGN
> -#define FLAT_DATA_ALIGN (ARCH_SLAB_MINALIGN)
> +#define FLAT_STACK_ALIGN (ARCH_SLAB_MINALIGN)
> #else
> -#define FLAT_DATA_ALIGN (sizeof(void *))
> +#define FLAT_STACK_ALIGN (sizeof(void *))
> #endif
>
> #define RELOC_FAILED 0xff00ff01 /* Relocation incorrect somewhere */
> @@ -129,7 +136,7 @@ static unsigned long create_flat_tables(
>
> sp = (unsigned long *)p;
> sp -= (envc + argc + 2) + 1 + (flat_argvp_envp_on_stack() ? 2 : 0);
> - sp = (unsigned long *) ((unsigned long)sp & -FLAT_DATA_ALIGN);
> + sp = (unsigned long *) ((unsigned long)sp & -FLAT_STACK_ALIGN);
> argv = sp + 1 + (flat_argvp_envp_on_stack() ? 2 : 0);
> envp = argv + (argc + 1);
>
> @@ -876,7 +883,7 @@ static int load_flat_binary(struct linux_binprm * bprm, struct pt_regs * regs)
> stack_len = TOP_OF_ARGS - bprm->p; /* the strings */
> stack_len += (bprm->argc + 1) * sizeof(char *); /* the argv array */
> stack_len += (bprm->envc + 1) * sizeof(char *); /* the envp array */
> - stack_len += FLAT_DATA_ALIGN - 1; /* reserve for upcoming alignment */
> + stack_len += FLAT_STACK_ALIGN - 1; /* reserve for upcoming alignment */
>
> res = load_flat_file(bprm, &libinfo, 0, &stack_len);
> if (IS_ERR_VALUE(res))
--
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
next prev parent reply other threads:[~2010-05-27 8:25 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-25 19:24 [PATCH] FLAT: allow arches to declare a larger alignment than the slab Mike Frysinger
2010-05-25 19:50 ` Geert Uytterhoeven
2010-05-25 21:07 ` Paul Mundt
2010-05-25 23:17 ` Mike Frysinger
2010-05-26 2:23 ` Jie Zhang
2010-05-26 6:59 ` Geert Uytterhoeven
2010-05-26 7:23 ` Mike Frysinger
2010-05-26 7:33 ` Paul Mundt
2010-05-26 7:36 ` Mike Frysinger
2010-05-26 7:36 ` Mike Frysinger
2010-05-26 7:48 ` Paul Mundt
2010-05-26 8:01 ` Mike Frysinger
2010-05-26 7:24 ` Michal Simek
2010-05-26 8:45 ` [PATCH 1/2 v2] FLAT: split the stack & data alignments Mike Frysinger
2010-05-27 8:24 ` Michal Simek [this message]
2010-05-27 18:30 ` [Uclinux-dist-devel] " Mike Frysinger
2010-05-27 23:15 ` [microblaze-uclinux] " David McCullough
2010-05-28 4:57 ` Mike Frysinger
2010-05-28 6:05 ` Mike Frysinger
2010-05-28 6:23 ` David McCullough
2010-05-28 6:40 ` Greg Ungerer
2010-05-26 8:45 ` [PATCH 2/2 v2] FLAT: tweak default stack alignment Mike Frysinger
2010-05-28 6:24 ` David McCullough
2010-05-28 6:39 ` Greg Ungerer
2010-06-06 7:12 ` [PATCH v3] " Mike Frysinger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4BFE2C3E.5090704@monstr.eu \
--to=monstr@monstr.eu \
--cc=davidm@snapgear.com \
--cc=dhowells@redhat.com \
--cc=gerg@uclinux.org \
--cc=lethal@linux-sh.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m32r@ml.linux-m32r.org \
--cc=microblaze-uclinux@itee.uq.edu.au \
--cc=takata@linux-m32r.org \
--cc=uclinux-dev@uclinux.org \
--cc=uclinux-dist-devel@blackfin.uclinux.org \
--cc=vapier@gentoo.org \
--cc=ysato@users.sourceforge.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.