[英]Undefined TLBI instruction for armv8 processor in 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
指令則導致未定義的指令錯誤。
Linux內核僅行使所有ARM功能的子集。
例如,Linux v4.18 ARMv7之所以中斷,是因為它開始使用CSDB,因此我們現在將該指令標記為已忽略: https : //github.com/gem5/gem5/commit/33b311d8d8b8d527d500d62a35b50be63e41b556只是發出警告,因為該指令是實現定義的,可以是NOP。
值得注意的是,有幾條尚未實現的ARMv8.x指令。
因此,我建議以下內容:
grep src/arch/arm/isa/
下的.isa
文件,並搜索您正在使用的確切tlbi
編碼。
這些文件負責指令的解碼,因此,如果實現了指令,則必須在其中查找。
tlbi
下已經有命中,但是請確保您的確切指令字節在正確的位置。
GDB如有必要,請調試debug gem5,並記住可能存在解碼錯誤,並且字節實際上應該是另一條指令。
實際上使用--debug-flags=Exec
進行Linux內核啟動跟蹤,並查看它是否包含上述指令。
提供可以重現該問題的匯編行,以及用於匯編該問題的GNU GAS版本,以便其他人可以重現該問題。
如果您發現缺少編碼,並且能夠完全實現它,或者如果它是一個實現定義的NOP(如CSDB),則只需發出警告就忽略它,請在Gerrit和CC me上發送補丁。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.