gem5中用于armv8处理器的未定义TLBI指令

时间:2018-11-12 21:38:34

标签: arm64 bare-metal gem5

在裸机模式下为aarch64运行gem5 fs仿真时遇到了gem5错误。特别是,当我的自定义启动代码尝试使用汇编指令tlbi ALLE3使TLB无效时,模拟器报告了以下消息:

system.cpu T0 : @core0+72    :   msr   tlbi_alle3, xzr    : IntAlu :
Undefined Instruction: Invoking Fault (AArch64 target EL) : Undefined Instruction cpsr:0x3c5 PC:0x2186c elr:0x2186c newVec: 0xa00

此外,我使用“ tlbi ALLE1”进行了测试,但最终出现了相同的错误。供您参考,我使用TimingSimpleCPU配置了CPU类型。根据该消息,传递的tlbi指令似乎在ARM64处理器模型中未实现。但是,由于我知道gem5在fs模式下成功为aarch64引导了Linux,所以我想知道这种情况如何处理tlbi指令。换句话说,如果tlbi指令实际上是gem5中未实现的指令,我认为引导Linux也应该遇到相同的错误。我能知道是否有人在gem5中遇到过tlbi的未定义指令错误吗? 感谢您的预先答复/评论。

Update1 :进一步的调查显示,tlbi VMALLE3没有引起任何错误,而tlbi ALLE3指令则导致了未定义的指令错误。

1 个答案:

答案 0 :(得分:0)

Linux内核仅行使所有ARM功能的一部分。

例如,Linux v4.18 ARMv7之所以中断,是因为它开始使用CSDB,因此我们现在将该指令标记为已忽略:https://github.com/gem5/gem5/commit/33b311d8d8b8d527d500d62a35b50be63e41b556只是发出警告,因为该指令是实现定义的并且可以成为NOP。

值得注意的是,有几条ARMv8.x指令尚未实现。

所以我建议以下内容:

  • grep [24206, 17242] 下的.isa文件,并搜索您正在使用的确切src/arch/arm/isa/编码。

    这些文件负责指令的解码,因此,如果执行了指令,则必须查看该文件。

    tlbi下已经有匹配项,但是请确保您的确切指令字节在正确的位置。

    如有必要,GDB逐步调试gem5,并记住可能存在解码错误,并且字节实际上应该是另一条指令。

  • 实际上使用tlbi进行Linux内核启动跟踪,并查看其中是否包含上述指令。

  • 提供了一个可以重现该问题的汇编行,以及一个用于组装该问题的GNU GAS版本,以便其他人可以重现该问题。

如果您发现缺少编码,并且能够完全实现它,或者如果它是一个实现定义的NOP(如CSDB),只需警告就忽略它,请在Gerrit和CC me上发送补丁。