AArch64 Linux 中的標記虛擬地址¶
作者:Will Deacon <will.deacon@arm.com>
日期:2013 年 6 月 12 日
本文件簡要描述了 AArch64 轉換系統中的標記虛擬地址的規定及其在 AArch64 Linux 中的潛在用途。
核心配置轉換表,以便透過 TTBR0(即使用者空間對映)進行的轉換忽略虛擬地址的最高位元組(位 63:56)。 這為應用程式使用釋放了該位元組。
將標記地址傳遞給核心¶
核心對使用者空間記憶體地址的所有解釋都假定地址標記為 0x00,除非應用程式顯式啟用 AArch64 標記地址 ABI(AArch64 標記地址 ABI)。
這包括但不限於以下位置找到的地址
系統呼叫的指標引數,包括傳遞給系統呼叫的結構中的指標,
堆疊指標 (sp),例如,在解釋它以傳遞訊號時,
幀指標 (x29) 和幀記錄,例如,在解釋它們以生成回溯或呼叫圖時。
當用戶空間應用程式未啟用 AArch64 標記地址 ABI 時,在任何這些位置使用非零地址標記可能會導致返回錯誤程式碼,引發(致命)訊號或其他故障模式。
由於這些原因,當停用 AArch64 標記地址 ABI 時,禁止透過系統呼叫將非零地址標記傳遞給核心,並且強烈建議不要對 sp 使用非零地址標記。
維護使用非零地址標記的幀指標和幀記錄的程式可能會受到除錯和分析可見性受損或不準確的影響。
其他注意事項¶
使用標記指標時應特別小心,因為 C 編譯器很可能不會對僅在最高位元組中不同的兩個虛擬地址進行雜湊處理。