我们正在为客户端架构开发GNU Assembler的端口.现在面临的问题是:
如果指令的立即操作数是涉及多个可重定位符号的表达式,那么它是如何在elf格式的输出文件中处理的.在这种情况下产生的搬迁信息是什么?
例如:
j label1 + label2
其中label1和label2在可重定位部分中定义,它们可能是相同的部分或不同的可重定位部分.
ELF本身并不了解说明.它知道指令中符号偏移的特定编码.在汇编程序中,您需要输出两个重定位记录,每个记录具有相应的[地址,类型,符号]三元组,以正确修补指令的该部分.链接器甚至不一定知道这两个记录指向同一条指令.
ELF重定位类型完全取决于CPU(或者更确切地说,取决于ISA),因此您可以自由定义新架构所需的任何重定位.
没有指令编码的细节,很难更具体.