如何在CFI指令中正确配置MIPS浮点寄存器的调用帧信息?
MIPS浮点寄存器CFI信息编写错误修正
问题场景
尝试编写MIPS架构下保存浮点寄存器的调用帧信息(CFI),汇编代码如下:
.text .cfi_startproc addiu $sp, $sp, -4 .cfi_adjust_cfa_offset 4 swc1 $f24, 4($sp) .cfi_rel_offset $f24, 0 .cfi_endproc
执行编译命令:
mipsel-linux-gnu-gcc ~/test.S -c
出现错误:
/home/yugr/test.S: Assembler messages: /home/yugr/test.S:8: Error: bad register expression
解决方案
错误原因是MIPS的.cfi_rel_offset指令不支持带$f前缀的浮点寄存器名,必须使用浮点寄存器的数字编号。
修正后的代码:
.text .cfi_startproc addiu $sp, $sp, -4 .cfi_adjust_cfa_offset 4 swc1 $f24, 4($sp) .cfi_rel_offset 24, 0 # 用寄存器编号24替代$f24 .cfi_endproc
说明
MIPS浮点寄存器的编号规则为:$f0对应编号0,$f1对应1,……,$f31对应31。直接使用数字编号即可让汇编器正确解析CFI指令。
内容的提问来源于stack exchange,提问作者yugr
相关产品推荐
相关产品推荐

