У меня есть скрипт компоновщика следующим образом:
MEMORY { ROM: ORIGIN = 0x00000000 LENGTH = 128K }
MEMORY { RAM: ORIGIN = 0xA0000000 LENGTH = 128K }
.text :
{
*(.text.init)
*(.text.entry)
*(.text.exception)
*(.text .text.*)
*(.rdata)
*(.rodata .rodata.*)
_etext = .;
} > ROM
.data : AT (ADDR(.text) + SIZEOF(.text))
{
_data = .;
*(vector_table)
*(.data .data.*)
*(.sdata* .sdata.*)
_edata = .;
} > RAM
Теперь, когда я компилирую и проверяю дамп объекта, мои разделы соответствуют ожидаемым.Мои данные присутствуют в ПЗУ со смещением 0x5910 - 0x5a80, но глобальные символы связаны с 0xa0000000.Теперь мой сценарий запуска может перемещаться с 0x5910 на 0xA0000000.Это должно быть хорошо в большинстве случаев.
Но у нас есть последний скрипт, который читает все эльфы и создает один большой двоичный файл для нескольких процессоров.По какой-то причине бинарный файл читает только исполняемый (Text) раздел всех эльфов (другая архитектура).Из-за этого только текстовая секция копируется в финальную корзину.Но для этого эльфа я хочу, чтобы и текст, и данные были скопированы в финальную корзину.
1) Один из вариантов - изменить финальный скрипт, чтобы скопировать оба этих раздела для этого конкретного эльфа.Но это наименее предпочтительно, так как я не хочу касаться этого сценария.
2) Или я подумал, есть ли способ увеличить размер текстового раздела в сценарии компоновщика, чтобы включить также раздел .data.Таким образом, мне не нужно изменять окончательный сценарий.Есть мысли?