Руководство по Ada (Ada 2022)
H.3.1 Предикат Reviewable
Этот предикат указывает реализации предоставить информацию, которая облегчит анализ и обзор объектного кода программы, в частности, для определения времени выполнения и использования памяти, а также для установления соответствия между исходной и объектной программами.
Синтаксис
Форма предиката pragma Reviewable следующая:
pragma Reviewable;
Правила после компиляции
Предикат Reviewable является конфигурационным предикатом. Он применяется ко всем compilation_unit входящим в партицию.
Требования к реализации
Реализация должна предоставлять следующую информацию для любой единицы компиляции, к которой применяется такой предикат:
- Места, где остаются проверки, генерируемые компилятором;
- Определение любого конструкта с проверкой, определенной языком, которая распознается до выполнения как неизбежно приведет к ошибке при выполнении (даже если генерация проверок во время выполнения была подавлена);
- Для каждого считывания скалярного объекта идентификация считывания как «известно инициализированного» или «возможно неинициализированного», независимо от того, применяется ли предикат Normalize_Scalars;
- Места, где неявно вызываются служебные программы во время выполнения;
- Список объектного кода, включая:
Машинные команды с относительными смещениями;
Место хранения каждого объекта данных в течение его жизненного цикла;
Соответствие исходной программе, включая идентификацию кода, сгенерированного для каждого объявления и каждого оператора.
- Определение каждого конструкта, для которого реализация обнаруживает возможность ошибочного выполнения;
- Для каждой подпрограммы, блока, задачи или другого конструкта, реализованного путем резервирования и последующего освобождения области в стеке во время выполнения, определение длины фиксированной части области и указание того, резервируется ли переменная часть в стеке или в динамически управляемой области памяти.
Реализация должна предоставлять следующую информацию для любой партиции, к которой применяется предикат:
- Список объектного кода всей партиции, включая код инициализации и завершения, а также компоненты системы во время выполнения, а также идентификацию инструкций и данных, которые будут перемещены во время загрузки;
- Описание модели во время выполнения, относящейся к партиции.
Реализация должна предоставить информацию о потоках управления и данных как внутри каждой единицы компиляции, так и между единицами компиляции партиции.
Рекомендации для реализации
Реализация должна предоставлять указанную выше информацию как в удобочитаемом, так и в машиночитаемом формате и должна документировать последний, чтобы облегчить дальнейшую обработку автоматизированными инструментами.
Списки объектного кода должны предоставляться как в символическом, так и в соответствующем числовом формате (например, шестнадцатеричном или восьмеричном).
ПРИМЕЧАНИЕ Порядок обработки библиотечных единиц будет документирован даже в отсутствие предиката pragma Reviewable (см. 10.2).