Тема давняя, но точку поставлю. Пришлось разобраться после очередной смены местожительства и, соответственно, вывески. Скрипты для сборки компилятора вполне рабочие. Подсовываем новые пакеты и получаем новые версии. Не давал спокойно работать скрипт линкера. Для запуска программы из ОЗУ оказалось вполне достаточно такого скрипта:
Код
OUTPUT_ARCH(arm)
ENTRY(_startup)
SECTIONS
{
. = 0x40000000;
. = ALIGN(4);
.text : { *(.text) }
PROVIDE(_etext = .);
.data : { *(.data) }
PROVIDE(_bss_start = .);
.bss : { *(.bss) }
PROVIDE(_bss_end = .);
. = . + 4096; /* define heap size */
PROVIDE(end = .); /* allocate heap */
}
PROVIDE(_top_stack = 0x44000000);
Куча размером 4096 байт появляется после строчки . = . + 4096;. Можно явно указать секцию .heap, задать ее размер, назвать как угодно, главное в конце указакть PROVIDE(end = .);. Этим и определяется размер кучи. Куча появляется в просвете между адекватными секциями и end. Секцию data в этом случае копировать не нужно.