我试图转换一个游戏苏联PDP 11兼容机。因为它有严格的内存限制-56 K的RAM,我必须在运行时加载代码的一部分。这意味着我需要建立几个二进制模块,其中相互交叉引用符号。我使用的是GAS和LD。
是否有一种方法可以简单地使用这些工具来实现这一点?
例如,一个二进制模块文件想要加载另一个二进制模块,为此,它必须知道另一个二进制模块的大小。大小以如下符号提供:
.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条答案
按热度按时间ujv3wf0j1#
GNU ld有一个选项
--just-symbols
,它从一个已经链接的文件中加载符号。