[U-Boot] How/Where does "_start" get assigned a value ?

Albert ARIBAUD albert.u.boot at aribaud.net
Sat Oct 12 22:53:40 CEST 2013


Hi Djoker,

On Wed, 9 Oct 2013 16:02:43 -0700, Djoker <thelonejoker at gmail.com>
wrote:

> On Wed, Oct 9, 2013 at 12:54 PM, Arvid Brodin <arvid.brodin at xdin.com> wrote:
> > On 2013-10-09 18:07, djoker wrote:
> >> Hi Everyone,
> >>
> >> I have a armv7 board and am looking at the "_start" symbol address, using
> >> the following command:
> >> *nm u-boot | grep -w _start*
> >>
> >> It returned the following:
> >> *67000020 T _start*
> >>
> >> I couldn't help notice that the the _start value is very "close" in vlaue to
> >> the value of CONFIG_SYS_TEXT_BASE defined in my board file:
> >> *#define CONFIG_SYS_TEXT_BASE 0x67000004*
> >>
> >> But, I have searched through the source code, but not found where _start
> >> gets assigned a value.. Could someone please help me understand this ?
> >
> > This symbol is declared in arch/<...>/start.S, as the entry point for the
> > u-boot code, if I understand things correctly.
> >
> 
> Arvid, I know that the symbol is declared under that file.
> But, how is it getting assigned a value equal to or greater than
> CONFIG_SYS_TEXT_BASE ?
> Basically, I am seeing a similar issue as below:
> 
> u-boot.10912.n7.nabble.com/U-Boot-ARM-gap-between-start-and-CONFIG-SYS-TEXT-BASE-td4134.html#none
> 
> There really was no conclusion as to why the padding of 0's happened ?

That's a 2010 issue and it contains hardly enough information to know
what happened, considering the person who asked had modified the source
code to match unusual constraints, and could just as well have caused
the padding by his own changes.

Regarding your question, it is the linker which is responsible for
assigning addresses to symbols, and it does so based on a linker script
(.lds file) and on the object files provided to it. It will align
symbols if instructed to. In most, if not all, ARM cases, _start will
be equal to CONFIG_SYS_TEXT_BASE because the .lds file specifies that
the .text section of start.o be the first section output, and _start is
the first label in that section.

HTH.

Amicalement,
-- 
Albert.


More information about the U-Boot mailing list