6.33.4 Атрибуты функций ARC ¶
Эти атрибуты функций поддерживаются бэкендом ARC:
interrupt-
Используйте этот атрибут, чтобы указать, что указанная функция является обработчиком прерывания. Компилятор генерирует последовательности входа и выхода из функции, подходящие для использования в обработчике прерываний, если этот атрибут присутствует.
В ARC вам необходимо указать тип прерывания, которое должно быть обработано, в параметре атрибута прерывания, например:
void f () __attribute__ ((interrupt ("ilink1")));Допустимые значения для этого параметра:
ilink1иilink2для архитектуры ARCv1, иilinkиfirqдля архитектуры ARCv2. long_callmedium_callshort_call-
Эти атрибуты определяют, как вызывается конкретная функция. Эти атрибуты переопределяют переключатели командной строки -mlong-calls и -mmedium-calls (см. Опции ARC) и настройки
#pragma long_calls.Для ARC функция, помеченная атрибутом
long_call, всегда вызывается с использованием инструкций косвенного перехода jump-and-link через регистры, что позволяет поместить вызываемую функцию в любом месте 32-битного адресного пространства. Функция, помеченная атрибутомmedium_call, всегда находится достаточно близко, чтобы вызываться с помощью инструкции безусловного перехода branch-and-link, которая имеет смещение в 25 бит от места вызова. Функция, помеченная атрибутомshort_call, всегда находится достаточно близко, чтобы вызываться с помощью инструкции условного перехода branch-and-link, которая имеет смещение в 21 бит от места вызова. jli_always-
Принудительно заставляет вызывать конкретную функцию с помощью инструкции
jli. Инструкцияjliиспользует таблицу, хранящуюся в разделе.jlitab, которая содержит расположение функций, адресованные с помощью этой инструкции. jli_fixed-
Аналогично предыдущему, но расположение функции в таблице
jliизвестно и указано в качестве параметра атрибута. secure_call-
Этот атрибут позволяет помечать функции защищенного кода, которые вызываемы из обычного режима. Расположение функции защищенного вызова в таблице
sjliнеобходимо передать в качестве аргумента. naked-
Этот атрибут позволяет компилятору создать необходимое объявление функции, при этом позволяя телу функции быть ассемблерным кодом. Указанная функция не будет иметь генерируемых компилятором последовательностей пролога/эпилога. В функциях naked безопасно включать только базовые
asmинструкции (см. Базовый ассемблер — ассемблерные инструкции без операндов). Использование расширенныхasmинструкций или комбинации базовыхasmи C-кода может показаться работающим, но их надёжность не гарантирована и не поддерживается.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/ARC-Function-Attributes.html