[U-Boot] [PATCH 2/4] Merge all mpc85xx platforms to use a single ld script

Trent Piepho tpiepho at freescale.com
Tue Oct 14 22:54:02 CEST 2008


On Tue, 14 Oct 2008, Wolfgang Denk wrote:
> In message <1223941151-13969-2-git-send-email-tpiepho at freescale.com> you wrote:
>>
>> B) The U-Boot image is over 4MB in size.  The image size for this is from
>> TEXT_BASE to the end of the reset vector.  It's not the size of the U-Boot
>> code as there could be a huge gap between the end of the code and the reset
>> vector.  The BSS section does not count for this size, as it goes after the
>> reset vector (and it not actually present in the image).  This should be
>> the same as the size of the u-boot.bin file.
>
> Where is bss then, if you try to locate it beyond the end of physical
> memory? To the best of my understanding there are two  possibilities:
> tool  chains  running  on  a  32 bit host will simply wrapr addresses
> around, i. e. start placing bss at physical address 0, which  is  not
> wrong.  I  don't remember eacty what you get on 64 bit hosts, but the
> result is not correct either.
>
>
> Have you actually tested this code? Didn't you run into such problems?

It's locate the same place it is now!  I'm telling you, these patches don't
change the resulting u-boot binaries.  How could the same binary stop working
because a better build process was used to make it?

And yes I tested the code.

The u-boot image doesn't contain bss.  The code is linked to expect bss at a
certain location, relative to the rest of the code (because it's compiled
PIC).  But in the image, and when u-boot is executing from flash, bss doesn't
exist.  There was a bug in Timur's speed setting patch to the FSL I2C code
because of that: it tried to write to bss while running out of flash.  When
u-boot gets moved from flash to ram, the bss section is created at the new
location.

For instance, suppose u-boot is linked at 0xfff8_0000 and bss placed at
0x0000_0000.  That how most 85xx platforms work now.  After ram is enabled,
u-boot is moved to ram at say 0x0010_0000.  The bss segment will be created
(space in ram set aside and zeroed) at 0x0018_0000.  All the PIC code in
u-boot that uses variables in bss will use this region starting at
0x0018_0000, because the relative position of 0x0018_0000 vs 0x0010_0000 is
the same as 0xfff8_0000 vs 0x0000_0000.  Yes, the calculations in the
relocation code handle the wrap around correctly.  If they didn't nothing
would work now.


More information about the U-Boot mailing list