Я хочу надежно управлять своими скриптами компоновщика. Мне нравится идея, что некоторые из моих разделов bss и data находятся рядом с источником кода. Например, я хочу около 4 или 5 разделов (загрузочная программа, ядро, ОС и т. Д.). Начинать управлять длиной вручную становится утомительно.
MEMORY
{
boot : ORIGIN = 0x20000000, LENGTH = 0x0010
table : ORIGIN = 0x20000011, LENGTH = 0xE1C
os : ORIGIN = 0x20000E1D, LENGTH = 0x00B0
}
SECTIONS
{
.text : { *(.text) } > boot
.table : { *(.rodata) } > table
.os : { *(.os) } > os
}
Это должно относиться к тому, что я пытаюсь выполнить с помощью своего вопроса. Каждый раз, когда я вносил какие-либо изменения в код, мне нужно было создать файл .o, а затем перечислить разборку, чтобы получить последнее значение инструкции и добавить 4 байта, а затем изменить все длины в моем файле memmap. это довольно утомительно.
Вы можете увидеть тот, который я работаю ниже, но дает мне меньше контроля.
MEMORY
{
os : ORIGIN = 0x20000000, LENGTH = 0x00B0
table : ORIGIN = 0x20001000, LENGTH = 0xE1C
}
SECTIONS
{
.text : { *(.text) } > os
.table : { *(.rodata) } > table
}
Проблема здесь в том, что я действительно хотел бы управлять макетомТаким образом, таблица находится близко к загрузочному сектору, затем начинается секция os, затем ее bss или rodata можно управлять и близко к секции os. Я хочу сделать это, потому что было бы неплохо иметь отдельные сценарии компоновщика для разных аппаратных устройств, и я могу управлять их компоновкой, просто заменяя другой файл.
Есть ли лучшая стратегия для управления компоновкой памяти?
Ниже приведены основы кода.
boot.s
.section .text
.extern _vizoros
_boot:
# Few other things before jal.
j _vizoros
table.s
.section .rodata
.align 4
.string "wot","sar","eon","lig","beg","not","yes","act"
# 2700 total bytes of unique three letter words.
os.s
.section .text
.balign 4
.globl _vizoros
_vizoros:
# os begins.