我最近碰到了一个有关EFI的问题,就是使用自制转换器转换ELF文件到EFI文件时,在运行到如图所示时
会报如下错误:
请问我没有关闭浮点指令,为什么还会出现这个异常?
(这是转换之前的原来的elf文件的汇编代码,不知道哪里出了问题导致抛出浮点指令禁用异常,我是用fpc进行编译的)
https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#extended-component-unit-enable
启动时或复位后EUEN::FPE未设置
EUEN::FPE
Sunny 所以说必须得一条汇编指令手动设置,龙芯的UEFI是不是开始的时候不会设置FPU?
是的,就你的虚拟机来看最开始未设置FPU,就li.w+csrwr
Sunny
龙芯的EDK2代码是这么写的:
li.w $t0, 0x1
csrxchg $t0, $t0, 0x2
jirl $zero, $ra, 0
但是我不知道如果直接搬到我的EFI文件里面,会不会直接出错
没问题的。如果你需要pascal的话,让这个函数早点调用也行。
program test; procedure test; assembler; nostackframe; asm li.w $t0, 1 csrwr $t0, 2 end; begin test; end.
Sunny 我直接去扒了下EDK2 for loongarch的汇编代码,然后自己修改了下,打开龙芯FPU成功并且运行成功了
本站文章除其作者特殊声明外,一律采用CC BY-NC-SA 4.0许可协议进行授权。进行转载或二次创作时务必以相同协议进行共享,严禁用于商业用途。