[U-Boot] [PATCH] examples/standalone: Use gcc's -fno-toplevel-reorder
Peter Tyser
ptyser at xes-inc.com
Mon Sep 13 06:48:03 CEST 2010
Hi Andrew,
On Sun, 2010-09-12 at 21:00 -0500, Andrew Dyer wrote:
> On Sun, Sep 12, 2010 at 17:38, Peter Tyser <ptyser at xes-inc.com> wrote:
> > Using -fno-toplevel-reorder causes gcc to not reorder functions. This
> > ensures that an application's entry point will be the first function in
> > the application's source file.
> >
> > This change, along with commit 620bbba524fbaa26971a5004793010b169824f1b
> > should cause a standalone application's entry point to be at the base of
> > the compiled binary. Previously, the entry point could change depending
> > on gcc version and flags.
> >
> > Note -fno-toplevel-reorder is only available in gcc version 4.2 or
> > greater.
> >
> > Signed-off-by: Peter Tyser <ptyser at xes-inc.com>
> > ---
> > I didn't have a version of gcc < 4.2. The change is pretty trivial so
> > it should work, but it'd be appreciated if someone with an old toolchain
> > installed could give the patch a shot.
> >
>
> Since I was writing a standalone test program today, I manually tested
> against an older u-boot and arm gcc 4.4.1. Worked fine. You can add
> my tested-by if you feel that's sufficient.
> I wonder if this is the right way to fix this. It seems a bit subtle.
> I thought of two other possible workarounds - have the Makefile use
> mkimage as part of the output so the entry point is embedded in the
> mkimage file, or redo the programs to have a main() as entry and write
> a crt0.S equivalent and have the entry location for that fixed in a
> linker file.
Thanks for testing. I agree this isn't the most elegant solution, but
its one big advantage is simplicity in my mind. Creating/maintaining a
crt0.S and/or link script for each CPU architecture seems like overkill
for a simple (deprecated?) application interface to me. I was under the
impression the preferred application interface going forward was the one
enabled by CONFIG_API in examples/api. It uses the crt0 solution, but
only supports ppc and arm right now.
Using a uImage format for apps seems like a fine solution too. Do
others have a preference?
I agree we should be using main() as the entry point either way. I'll
add that to the TODO list. If we did go with -fno-toplevel-reorder I
could add the following to each application to make it clear what's
going on:
/* Define main() protoype first to ensure its the first function in the image */
int main(int argc, char * const argv[]);
Best,
Peter
More information about the U-Boot
mailing list