Hi, Why do we specify in linker scripts the entry point using ENTRY(symbol) when for example the ARM architecture always starts its reset code at address 0x0000000? I have a snippet of a linker script as following (taken from barebox bootloader sources) OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(exception_vectors) SECTIONS { . = TEXT_BASE; PRE_IMAGE . = ALIGN(4); .text : { _stext = .; _text = .; *(.text_entry*) ... With the code for reset handler in .text_entry section: void __naked __section(.text_entry) exception_vectors(void) { __asm__ __volatile__ ( "b reset\n" /* reset */ ... Now, since TEXT_BASE is different from 0x00000000, how can reset be at location 0x00000000 where it is expected to be? (i.e. if TEXT_BASE is 0x80000000, then reset is at 0x80000000 according to the linker script whereas the first instruction to be executed by the CPU should be located at 0x00000000). Is there memory aliasing in this case or the ENTRY is used for this purpose? Thank you, -- Carlo
ARM reset code
The Barebox code is relocatable. You can link it to address 0x8000000, but it also can run at 0x00000000.