舊指令

Linux 核心的 arm64 埠提供基礎設施來支援模擬架構中已棄用或過時的指令。 基礎設施程式碼使用未定義指令鉤子來支援模擬。 在可用時,它還允許在硬體中開啟指令執行。

可以透過寫入 sysctl 節點 (/proc/sys/abi) 來控制模擬模式。 以下解釋了不同的執行行為和 sysctl 節點的相應值 -

  • 未定義

    值:0

    生成未定義的指令中止。 架構中已過時的指令的預設值,例如 SWP

  • 模擬

    值:1

    使用軟體模擬。 為了幫助軟體遷移,在此模式下,除了發出速率限制警告外,還會跟蹤模擬指令的使用情況。 這是已棄用指令的預設值,例如 CP15 屏障

  • 硬體執行

    值:2

    雖然標記為已棄用,但某些實現可能支援啟用/停用硬體對這些指令執行的支援。 使用硬體執行通常提供更好的效能,但會失去收集有關已棄用指令使用情況的執行時統計資訊的能力。

預設模式取決於指令在架構中的狀態。 棄用的指令應預設為模擬,而過時的指令必須預設為未定義。

注意:在所有情況下都可能無法進行指令模擬。 有關更多資訊,請參閱各個指令說明。

支援的舊指令

  • SWP{B}

節點:

/proc/sys/abi/swp

狀態:

已過時

預設:

未定義 (0)

  • CP15 屏障

節點:

/proc/sys/abi/cp15_barrier

狀態:

已棄用

預設:

模擬 (1)

  • SETEND

節點:

/proc/sys/abi/setend

狀態:

已棄用

預設:

模擬 (1)*

注意:系統上的所有 CPU 都必須在 EL0 級別支援混合位元組序,才能啟用此功能。 如果在此功能啟用後熱插拔了一個不支援混合位元組序的新 CPU,則應用程式中可能會出現意外結果。