Управление размером текстового раздела вручную - PullRequest
0 голосов
/ 11 марта 2019

У меня есть скрипт компоновщика следующим образом:

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.Таким образом, мне не нужно изменять окончательный сценарий.Есть мысли?

...