
Hi Djoker,
On Wed, 9 Oct 2013 16:02:43 -0700, Djoker thelonejoker@gmail.com wrote:
On Wed, Oct 9, 2013 at 12:54 PM, Arvid Brodin arvid.brodin@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,