Как мне управлять макетом памяти? - PullRequest
0 голосов
/ 09 ноября 2019

Я хочу надежно управлять своими скриптами компоновщика. Мне нравится идея, что некоторые из моих разделов 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...