Внимательно смотрел скрипт линкера для порта Cortex-M3 и сравнивал его с generic-m.ld от CodeSourcery arm-2011.09.
Возникли вопросы:
1. Где инициализируется стек? Вижу выравнивание
Код
/* higher address of the user mode stack */
PROVIDE ( _estack = ALIGN(ORIGIN(RAM) + LENGTH(RAM) - 8 ,8) );
,PROVIDE ( _estack = ALIGN(ORIGIN(RAM) + LENGTH(RAM) - 8 ,8) );
но не нашел загрузку регистров в файлах инициализации.
2. Что это за стек и где используется?
Код
/*
* This is the user stack section
* This is just to check that there is enough RAM left for the User mode stack
* It should generate an error if it's full.
*/
._usrstack :
{
. = ALIGN(4);
_susrstack = .;
. = . + _Minimum_Stack_Size;
. = ALIGN(4);
_eusrstack = .;
} >RAM
* This is the user stack section
* This is just to check that there is enough RAM left for the User mode stack
* It should generate an error if it's full.
*/
._usrstack :
{
. = ALIGN(4);
_susrstack = .;
. = . + _Minimum_Stack_Size;
. = ALIGN(4);
_eusrstack = .;
} >RAM
Ссылку на символ usrstack не нашел.
3. Правильно ли понимаю, что куча располагается после секции bss с выравниванием на двойное слово?
Код
PROVIDE( _heap = _ebss );
PROVIDE ( _eheap = ALIGN(ORIGIN(RAM) + LENGTH(RAM) - 8 ,8) );
PROVIDE ( _eheap = ALIGN(ORIGIN(RAM) + LENGTH(RAM) - 8 ,8) );
Возможно, возникнут еще вопросы.
Спасибо.