Closed Xinlong-Wu closed 2 years ago
issue使用的qemu版本为plct-zce-dev分支的最新代码 在用指令qemu-riscv32 -cpu rv32,x-zce=true,d=false a.out 运行含有lwgp指令的程序时报错 Segmentation fault。 局部objdump结果如下
plct-zce-dev
qemu-riscv32 -cpu rv32,x-zce=true,d=false a.out
000111ce <main>: 111ce: 01 11 c.addi sp, -32 111d0: 06 ce c.swsp ra, 28(sp) 111d2: 22 cc c.swsp s0, 24(sp) 111d4: 00 10 c.addi4spn s0, sp, 32 111d6: 01 45 c.li a0, 0 111d8: 23 26 a4 fe sw a0, -20(s0) 111dc: 23 2a a4 fe sw a0, -12(s0) 111e0: 23 28 a4 fe sw a0, -16(s0) 111e4: 07 b5 4f 00 lwgp a0, -2044(gp) 111e8: 23 24 a4 fe sw a0, -24(s0) 111ec: c1 37 c.jal 0x111ac <test_global> 111ee: 83 25 84 fe lw a1, -24(s0) 111f2: 2a 86 c.mv a2, a0 111f4: 03 25 c4 fe lw a0, -20(s0) 111f8: b2 95 c.add a1, a2 111fa: 23 28 b4 fe sw a1, -16(s0) 111fe: 62 44 c.lwsp s0, 24(sp) 11200: f2 40 c.lwsp ra, 28(sp) 11202: 05 61 c.addi16sp sp, 32 11204: 82 80 c.jr ra
但是仅仅将lwgp的代码转换为lw代码就可正常运行, 以下是可正常运行文件的objdump部分结果
000111ce <main>: 111ce: 01 11 c.addi sp, -32 111d0: 06 ce c.swsp ra, 28(sp) 111d2: 22 cc c.swsp s0, 24(sp) 111d4: 00 10 c.addi4spn s0, sp, 32 111d6: 01 45 c.li a0, 0 111d8: 23 26 a4 fe sw a0, -20(s0) 111dc: 23 2a a4 fe sw a0, -12(s0) 111e0: 23 28 a4 fe sw a0, -16(s0) 111e4: 03 a5 41 80 lw a0, -2044(gp) 111e8: 23 24 a4 fe sw a0, -24(s0) 111ec: c1 37 c.jal 0x111ac <test_global> 111ee: 83 25 84 fe lw a1, -24(s0) 111f2: 2a 86 c.mv a2, a0 111f4: 03 25 c4 fe lw a0, -20(s0) 111f8: b2 95 c.add a1, a2 111fa: 23 28 b4 fe sw a1, -16(s0) 111fe: 62 44 c.lwsp s0, 24(sp) 11200: f2 40 c.lwsp ra, 28(sp) 11202: 05 61 c.addi16sp sp, 32 11204: 82 80 c.jr ra
为确保控制变量,我将两个文件全部的反汇编指令使用diff比较,比较发现,仅lw被替换成lwgp(且offset没有改变)。 为了节省篇幅,我将相关文件添加到链接 https://www.wulongxin.com/Project/PLCT/Zce/
我将又将两个可执行文件以16进制全部dump出来然后对比,发现确实是除了lw和lwgp其它都相同。 其中,.o和llvm-*是可执行文件,其余为文本文件
.o
llvm-*
issue使用的qemu版本为
plct-zce-dev
分支的最新代码 在用指令qemu-riscv32 -cpu rv32,x-zce=true,d=false a.out
运行含有lwgp指令的程序时报错 Segmentation fault。 局部objdump结果如下但是仅仅将lwgp的代码转换为lw代码就可正常运行, 以下是可正常运行文件的objdump部分结果
为确保控制变量,我将两个文件全部的反汇编指令使用diff比较,比较发现,仅lw被替换成lwgp(且offset没有改变)。 为了节省篇幅,我将相关文件添加到链接 https://www.wulongxin.com/Project/PLCT/Zce/
我将又将两个可执行文件以16进制全部dump出来然后对比,发现确实是除了lw和lwgp其它都相同。 其中,
.o
和llvm-*
是可执行文件,其余为文本文件