commit 46b320cbc3e5839bd91d1b7142fc837f1cda0f1b from: Aleksey Ryndin date: Wed Oct 04 07:17:54 2023 UTC Append squat/reports/aarch64_exception_model.gmi (WiP) commit - 8a34432aaf4dc1a65d173a747929d9c04a354811 commit + 46b320cbc3e5839bd91d1b7142fc837f1cda0f1b blob - 0c84e3ae651cb69fdd4e317fac9643c89901ab3e blob + d51f2322cc5418fcf00f6f84c7e2b28121e21bb7 --- capsule/squat/reports/aarch64_exception_model.gmi +++ capsule/squat/reports/aarch64_exception_model.gmi @@ -104,14 +104,6 @@ Arm архитектура не имеет строг 🛈 В более ранних версиях arm прерывания FIQ имели более высокий приоритет относительно IRQ. В AArch64 FIQ и IRQ имеют одинаковый приоритет. -## Маскирование (Masking) - -Физические и виртуальные асинхронные исключения могут быть временно замаскированы. При этом исключения будут оставаться в ожидании начала обработки до момент, пока маска не будет снята. - -Синхронные исключения не могут быть замаскированы, так как они непосредственно связаны с текущей инструкцией и не могут быть отложены или проигнорированы. - -В расширениях 2021 года, Armv8.8-A и Armv9.3-A, добавлена поддержка немаскируемых прерываний (Non-maskable interrupt, NMI). Если эта возможность включена, то такое прерывание может быть доставлено процессору несмотря на маски. - ## Обработка исключений При обработка исключений в AArch64 используется специальная терминология: @@ -145,3 +137,31 @@ Arm архитектура не имеет строг Для синхронных исключений и SError помимо прочего заполняется и регистр синдрома исключения (Exception Syndrome Register, ESR). В него записывается причина исключения. ### Маршрутизация и контроллер прерываний + +Каждое исключение имеет свой принимающий уровень исключений (EL), который определяется одним из условий: +* Тип исключения явно указывает на принимающий уровень исключений. Например: инструкция SVC всегда порождает исключение, принимаемое на уровне EL1. +* Исключение маршрутизируется в соответствии с конфигурацией системных регистров. Маршрутизация задается независимо для IRQ, FIQ и SError. + +Настройка маршрутизации осуществляется двумя регистрами: +* Регистр конфигурации гипервизора (Hypervisor Configuration Register): HCR_EL2.Определяет какие исключения будет принимать EL2. При сбросе значение регистра не определено и должно +* Регистр конфигурации монитора безопасности (Secure Configuration Register): SCR_EL3. Определяет какие исключения будет принимать EL3. Имеет более высокий приоритет относительно HCR_EL2. + +Исключения, маршрутизация которых не задана ни в SCR_EL3, ни в HCR_EL2 будут приниматься в EL1. + +При сбросе значение регистров HCR_EL2 и SCR_EL3 не определено и должно быть задано явным образом. + +Для более детальных маршрутизации, управления и приоритизации используется контроллер прерываний arm (Generic Interrupt Controller, GIC). Он позволяет существенно снизить накладные расходы при виртуализации. Технические детали можно найти в техническом руководстве. + +🛈 Нельзя перенаправлять исключение на нереализованный уровень исключений. Такое поведение является неопределенным (UNDEFINED). Так же нельзя возвращаться из исключения на отключенный или нереализованный уровень исключений. Попытка выполнения инструкции возврата приведет к возникновению ошибки. + +### Маскирование (Masking) + +Физические и виртуальные асинхронные исключения могут быть временно замаскированы. При этом исключения будут оставаться в ожидании начала обработки до момент, пока маска не будет снята. + +Синхронные исключения не могут быть замаскированы, так как они непосредственно связаны с текущей инструкцией и не могут быть отложены или проигнорированы. + +Исключения, принимаемые на более высоком уровне исключений, не могут быть замаскированы с более низкого уровня исключений. Исключения принимаемые на более низком уровне исключений, замаскированы всегда, пока исполняется более высокий уровень исключений. Это, в числе прочего, согласуется с тем, что нельзя понизить привилегии, принимая возникшее исключение. + +В расширениях 2021 года, Armv8.8-A и Armv9.3-A, добавлена поддержка немаскируемых прерываний (Non-maskable interrupt, NMI). Если эта возможность включена, то такое прерывание может быть доставлено процессору несмотря на маски. + +### Таблицы векторов (vector tables) AArch64