我目前正在研究模拟CPU(实际上并不存在),并且没有针对该类CPU的工具。
我的想法是编写一个汇编程序,输出只包含.byte
行的“汇编”文件,以便我可以使用“x86 binutils”工具链来创建可执行文件(my-as
- > {{ 1}} - > x86-as
- > ld
)。
示例:
objcopy
我的问题是重定位。例如:
input.s:
instx r1, 0x12
insty r2, 0x34
instz r3, 0x5678
output.s:
.byte 0xa1, 0x12 # instx r1, 0x12
.byte 0xb2, 0x34 # insty r2, 0x34
.byte 0xc3, 0x56, 0x78 # instz r3, 0x5678
...但“符号”是在另一个目标文件中定义的符号或在链接时间之前未知地址的标签。
似乎有other developers having more or less the same problem:非标准的重新安置;所以至少我不是第一个需要这个功能的人。
所以我的问题是GNU binutils工具链(或其他GNU工具)是否已经提供了一种定义“用户定义”重定位类型的简单方法?
也许有其他目标文件格式支持此功能?
我已经知道如何实现一个额外的工具,将此功能添加到现有的“binutils”工具链中,但我希望在已经实现此功能时避免花时间实现新工具。
修改
由于似乎不存在这样的功能,但我实施了我的解决方案并将其发布在SourceForge上 - 只是为了其他人需要这样的功能。