Gem5 ARM fs仿真时如何解决undefined instruction error
How to resolve undefined instruction error during Gem5 ARM fs simulation
我目前正在尝试 运行 在 Gem5 上为 arm64 编译的程序。我正在使用 sve/beta1 branch of Gem5, linux kernel 4.15 并且该程序使用 glibc(它是静态链接的)。
对于 运行 Gem5,我正在使用以下命令:
./build/ARM/gem5.opt configs/example/arm/fs_bigLITTLE.py --arm-sve-vl=8 --cpu-type=atomic --big-cpus=2 --little-cpus=2 --kernel=/dist/m5/system/binaries/linux4_15 --dtb=/dist/m5/system/binaries/armv8_gem5_v1_big_little_2_2.dtb --disk=/dist/m5/system/disks/linaro-minimal-aarch64.img
我成功启动了 linux 发行版,二进制文件也启动了。但是,过了一会儿,我收到以下错误消息:
[13602.881469] Program_Binary[1059]: undefined instruction: pc=000000006e018621
[13602.881484] Code: d503201f d11b43ff a9007bfd 910003fd (d50320ff)
我不完全确定是哪条指令导致的,但我认为它是根据 ARM 参考手册是 msr 指令的指令 (d11b43ff)。有人知道我该如何解决这个问题吗?
总的来说,只有一种解决方案:去执行缺失的指令。
较新的 gem5 实际上会在错误消息上打印未实现指令的二进制操作码,然后您可以使用反汇编程序确定它是哪条指令:Using objdump for ARM architecture: Disassembling to ARM 在此之前,您只需找到操作码objdump
首先基于 PC 地址。
在这种特殊情况下,由于您在一个分支上,您应该首先生成一个使用该指令的最小(se.py 如果可能,因为简单)示例并查看它是否已在 master 中修复。
如在:How to compile and run an executable in gem5 syscall emulation mode with se.py? 中提到的,但是在过去几个月的提交 260b0fc5381a47c681e7ead8e4f13aad45069665 中有一个 MRS glibc pre-main 修复尚未进入 sve/beta1。你能试着挑选它看看会发生什么吗?
将 public/gem5 分支的提交 260b0fc、33b311d、6efe7e1 和 fcc379d 的更改应用到 sve/beta1 分支修复了 FS 和 SE 模拟的这个问题。
我目前正在尝试 运行 在 Gem5 上为 arm64 编译的程序。我正在使用 sve/beta1 branch of Gem5, linux kernel 4.15 并且该程序使用 glibc(它是静态链接的)。 对于 运行 Gem5,我正在使用以下命令:
./build/ARM/gem5.opt configs/example/arm/fs_bigLITTLE.py --arm-sve-vl=8 --cpu-type=atomic --big-cpus=2 --little-cpus=2 --kernel=/dist/m5/system/binaries/linux4_15 --dtb=/dist/m5/system/binaries/armv8_gem5_v1_big_little_2_2.dtb --disk=/dist/m5/system/disks/linaro-minimal-aarch64.img
我成功启动了 linux 发行版,二进制文件也启动了。但是,过了一会儿,我收到以下错误消息:
[13602.881469] Program_Binary[1059]: undefined instruction: pc=000000006e018621 [13602.881484] Code: d503201f d11b43ff a9007bfd 910003fd (d50320ff)
我不完全确定是哪条指令导致的,但我认为它是根据 ARM 参考手册是 msr 指令的指令 (d11b43ff)。有人知道我该如何解决这个问题吗?
总的来说,只有一种解决方案:去执行缺失的指令。
较新的 gem5 实际上会在错误消息上打印未实现指令的二进制操作码,然后您可以使用反汇编程序确定它是哪条指令:Using objdump for ARM architecture: Disassembling to ARM 在此之前,您只需找到操作码objdump
首先基于 PC 地址。
在这种特殊情况下,由于您在一个分支上,您应该首先生成一个使用该指令的最小(se.py 如果可能,因为简单)示例并查看它是否已在 master 中修复。
如在:How to compile and run an executable in gem5 syscall emulation mode with se.py? 中提到的,但是在过去几个月的提交 260b0fc5381a47c681e7ead8e4f13aad45069665 中有一个 MRS glibc pre-main 修复尚未进入 sve/beta1。你能试着挑选它看看会发生什么吗?
将 public/gem5 分支的提交 260b0fc、33b311d、6efe7e1 和 fcc379d 的更改应用到 sve/beta1 分支修复了 FS 和 SE 模拟的这个问题。