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, всегда вызывается с помощью инструкций перехода с косвенным адресом в регистре, что позволяет разместить вызываемую функцию в любом месте 32-битного адресного пространства. Функция, помеченная атрибутомmedium_call, всегда будет достаточно близка, чтобы быть вызываемой с помощью безусловной инструкции перехода и вызова, которая имеет 25-битный смещение от места вызова. Функция, помеченная атрибутомshort_call, всегда будет достаточно близка, чтобы быть вызываемой с помощью условной инструкции перехода и вызова, которая имеет 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-10.5.0/gcc/ARC-Function-Attributes.html