Однако я не до конца понимаю, как это технически достигается.
Для процессоров Cortex-A73 и Cortex-A75 кажется правдоподобным сделать следующее: в AArch64 переключиться на AArch32, затем выполните BPIALL.
Мне интересно, возможен ли аналогичный подход на моем процессоре Neoverse-N3. А именно: могу ли я как-то переключиться в 32-битный режим, выполнить BPIALL и вернуться в 64-битный режим?
Также я встречал термин SMCCC_ARCH_WORKAROUND_1 (https://trustedfirmware-a.readthedocs.i ... tfv-6.html), который, насколько я понимаю, реализует смягчение последствий, которое фактически лишает законной силы BPU. Однако мне неясно, как следует выполнять этот вызов или как проверить, реализовано ли это в прошивке моего процессора.
Наконец, на той же странице обсуждается Spectre-BHB:
Чтобы защититься от атак через уровни исключений или состояния безопасности, Arm рекомендует отбрасывать историю ветвей при входе в исключение на более высокий уровень исключения. Способ зависит от микроархитектуры процессора:
- Cortex-A65, Cortex-A65AE и Neoverse E1: Отключите и повторно включите MMU на самом высоком реализованном уровне исключений.
- Cortex-A73 и Cortex-A75:
В AArch32: аннулируйте предиктор ветвления с помощью инструкции BPIALL. - В AArch64: переключитесь в AArch32, затем выполните BPIALL с помощью кода Secure EL1.
Для Neoverse-N3 они указывают K=38. Означает ли это, что любой процессор Neoverse-N3 должен отслеживать 38 записей истории ветвей? Насколько я понимаю, реализация истории ветвей зависит от микроархитектуры ЦП, поэтому я не знаю, как интерпретировать это число.
Буду признателен за любые разъяснения по этим вопросам.
Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/799 ... on-aarch64
Мобильная версия