[U-Boot] [PATCH 3/3] powerpc, 8xx: adapt a few linker scripts so it will build.

Joakim Tjernlund joakim.tjernlund at transmode.se
Mon Apr 25 01:28:42 CEST 2011


Wolfgang Denk <wd at denx.de> wrote on 2011/04/24 22:48:09:
>
> Dear Joakim Tjernlund,
>
> In message <1303633774-22961-4-git-send-email-Joakim.Tjernlund at transmode.se> you wrote:
> > Seems like recent linker/fpic changes broke a few 8xx boards.
> > This makes them build again.
> >
> > Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund at transmode.se>
> > ---
> >  board/LEOX/elpt860/u-boot.lds |    2 +-
> >  board/etx094/u-boot.lds       |    2 +-
> >  board/svm_sc8xx/u-boot.lds    |    2 +-
> >  board/tqc/tqm8xx/u-boot.lds   |    2 ++
> >  4 files changed, 5 insertions(+), 3 deletions(-)
>
> Sorry, but isn't this just papering over the original problem?
> In the reverted commit you claimed:
>
>     -msingle-pic-base is a new gcc option for ppc and
>     it reduces the size of my u-boot with 6-8 KB.
>     While at it, add -fno-jump-tables too to save a
>     few more bytes.
>
> This promises to reduce the overall code size, but instead the
> observation is that it is growing, which is the reson for the build
> problem on some boards.

Well, your gcc is different from mine and I know nothing about it as
you won't say anything about it.
This is what I get:

With -msingle-pic-base:

## 4.4.5 has been patched to support msingle-pic-base
CROSS_COMPILE=powerpc-4.4.5_softfloat-linux-gnu- ./MAKEALL  TQM855L TQM860L
Configuring for TQM855L board...
   text	   data	    bss	    dec	    hex	filename
 267022	   5284	  27200	 299506	  491f2	./u-boot
Configuring for TQM860L board...
   text	   data	    bss	    dec	    hex	filename
 267043	   5284	  27200	 299527	  49207	./u-boot

##powerpc-softfloat-linux-gnu- is 3.4.6
CROSS_COMPILE=powerpc-softfloat-linux-gnu- ./MAKEALL  TQM855L TQM860L
Configuring for TQM855L board...
u-boot.lds:90 cannot move location counter backwards (from 00000000400081d4 to 0000000040008000)
make: *** [u-boot] Error 1
powerpc-softfloat-linux-gnu-size: './u-boot': No such file
Configuring for TQM860L board...
u-boot.lds:90 cannot move location counter backwards (from 00000000400081e0 to 0000000040008000)
make: *** [u-boot] Error 1
powerpc-softfloat-linux-gnu-size: './u-boot': No such file

Reverted -msingle-pic-base:

CROSS_COMPILE=powerpc-4.4.5_softfloat-linux-gnu- ./MAKEALL  TQM855L TQM860L
Configuring for TQM855L board...
u-boot.lds:75 cannot move location counter backwards (from 40008180 to 40008000)
make: *** [u-boot] Error 1
powerpc-4.4.5_softfloat-linux-gnu-size: './u-boot': No such file
Configuring for TQM860L board...
u-boot.lds:75 cannot move location counter backwards (from 40008190 to 40008000)
make: *** [u-boot] Error 1
powerpc-4.4.5_softfloat-linux-gnu-size: './u-boot': No such file

CROSS_COMPILE=powerpc-softfloat-linux-gnu- ./MAKEALL  TQM855L TQM860L
Configuring for TQM855L board...
u-boot.lds:90 cannot move location counter backwards (from 00000000400081d4 to 0000000040008000)
make: *** [u-boot] Error 1
powerpc-softfloat-linux-gnu-size: './u-boot': No such file
Configuring for TQM860L board...
u-boot.lds:90 cannot move location counter backwards (from 00000000400081e0 to 0000000040008000)
make: *** [u-boot] Error 1
powerpc-softfloat-linux-gnu-size: './u-boot': No such file

So I strongly suspect that as soon as you move your gcc version upwards, it will break
these boards too.

> For example TQM860L (top of tree, with 8c4734e reverted (i. e. your
> old 39768f7 reapplied) and this patch here applied, I see:
>
>    text    data     bss     dec     hex filename
>  258663   14676   27228  300567   49617 ./u-boot
>
> and
>
>                 0x00008000                . = DEFINED (env_offset)?env_offset:.
>  *fill*         0x40007d28      0x2d8 00
>  common/env_embedded.o(.ppcenv*)
>  .ppcenv        0x40008000     0x8000 common/env_embedded.o
>
> Without these two changes we have:
>
>    text    data     bss     dec     hex filename
>  257955   14744   27228  299927   49397 ./u-boot
>
> and
>
>  670                 0x00008000                . = DEFINED (env_offset)?env_offset:.
>  671  *fill*         0x40007fb4       0x4c 00
>  672  common/env_embedded.o(.ppcenv*)
>  673  .ppcenv        0x40008000     0x8000 common/env_embedded.o
>
>
> The gap before the embedded environment which is just 76 bytes
> without your patches now grows to 728 bytes (i. e. by a factor of
> nearly 10), and the total image sie grows, too.

Of course, I had for these boards move something from the small space
before the environment as some gcc's produce larger code so the targeted
space was too small, something had to give.

>
>
> I will not apply either of these commits - neither the reverted one,
> nor this additional one, as both of them grow the memory footprint
> instead of redusing it as you promised in the commit message.

You should read the commit msg again. It requires a gcc which
supports -msingle-pic-base.
I still don't know why it broke with your gcc but I suspect
it is due to -fno-jump-tables(which is in the msingle-pic-base patch).
Seems like that option in your case makes the code bigger.

 Jocke



More information about the U-Boot mailing list