nios2: crt0: split into __start and __text_start

__start is the CPU's reset vector. In a typical Nios II configuration,
the exception vector is 0x20 bytes after the reset vector, severely
constraining the amount of code that can go in here.

Split this into __start and __text_start. The only thing that __start
really need to do is init the instruction cache and jump into
__text_start.

JIRA IDs placed in comments for missing items.

Change-Id: I3c6b8ed65e8fcf6b6a735b80cf007d0180599230
Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
This commit is contained in:
Andrew Boie 2016-05-09 16:53:11 -07:00 committed by Anas Nashif
commit 191f1df574

View file

@ -19,25 +19,61 @@
/* exports */
GTEXT(__start)
GTEXT(__text_start)
/* imports */
GTEXT(_PrepC)
GTEXT(_interrupt_stack)
/* Allow use of r1/at (the assembler temporary register) in this
* code, normally reserved for internal assembler use
*/
.set noat
SECTION_FUNC(TEXT_START, __start)
/*
* Reset vector entry point into the system. Placed into special 'reset'
* section so that the linker puts this at ALT_CPU_RESET_ADDR defined in
* system.h
*
* This code can be at most 0x20 bytes, since the exception vector for Nios II
* is usually configured to be 0x20 past the reset vector.
*/
SECTION_FUNC(reset, __start)
/* TODO initialize instruction cache, if present */
/* TODO initialize instruction cache, if present
* ZEP-275
*/
/* TODO if shadow register sets enabled, ensure we are in set 0 */
/* Done all we need to do here, jump to __text_start */
movhi r1, %hi(__text_start)
ori r1, r1, %lo(__text_start)
jmp r1
/* TODO initialize data cache, if present */
/* Remainder of asm-land initialization code before we can jump into
* the C domain
*/
SECTION_FUNC(TEXT, __text_start)
/* TODO setup stack pointer */
/* TODO if shadow register sets enabled, ensure we are in set 0
* ZEP-258
*/
/* TODO setup global pointer, if used */
/* TODO initialize data cache, if present
* ZEP-275
*/
/* Set up the initial stack pointer
* ZEP-269
*/
/* TODO Setup the global pointer
* ZEP-272
*/
/* TODO if shadow register sets enabled, interate through them to set
* up. Need to clear r0, write gp, set the execption stack pointer */
* up. Need to clear r0, write gp, set the execption stack pointer
* ZEP-258
*/
/* Jump into C domain. _PrepC zeroes BSS, copies rw data into RAM,
* and then enters nanokernel _Cstart */