Есть ли способ использовать глобальные символы из другого двоичного файла, не связывая его в - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь конвертировать игру для советской машины, совместимой с PDP11. Поскольку он имеет строгое ограничение памяти - 56 КБ ОЗУ, я должен загрузить некоторую часть кода во время выполнения. Это означает, что мне нужно создать несколько двоичных модулей, которые ссылаются друг на друга. Я использую ГАЗ и ЛД.

Есть ли способ сделать это, просто используя эти инструменты?

Например, один файл двоичного модуля хочет загрузить другой двоичный модуль, для этого ему нужно знать размер другого двоичного файла. Размер доступен в виде символа:

.title OtherModule

begin:
  some code
end:

.equiv SizeOfTheOtherModuleInWords, ((end - begin) / 2)

Другой пример, каждый уровень в игре загружается отдельно и содержит код, который вызывает подпрограммы из основного движка, который всегда находится в памяти.


Я нашел решение через скрипт компоновщика. Я могу использовать раздел /DISCARD/, чтобы исключить файлы из ссылок.

OUTPUT_FORMAT("binary")
OUTPUT_ARCH(pdp11)

INPUT(core.o bootstrap.o)
OUTPUT(AKU.SAV)

FileSizeCoreWords = ((FileEndCore - FileBeginCore) / 2);

SECTIONS
{
    . = 0;
.text :
    {
        bootstrap.o (.text)
    }
.data :
    {
        bootstrap.o (.data)
    }
.bss :
    {
        bootstrap.o (.bss)
    }
/DISCARD/ :
    {
        core.o
    }
}

1 Ответ

2 голосов
/ 18 июня 2019

GNU ld имеет опцию --just-symbols, которая загружает уже связанный файл и символы из.

...