6.33.4 Атрибуты функций ARC
Эти атрибуты функций поддерживаются бэкендом ARC:
-
interrupt -
Используйте этот атрибут, чтобы указать, что указанная функция является обработчиком прерываний. Компилятор генерирует последовательности входа и выхода из функции, подходящие для использования в обработчике прерываний, когда этот атрибут присутствует.
В ARC вы должны указать тип прерывания, которое должно обрабатываться в параметре атрибута прерывания, например:
void f () __attribute__ ((interrupt ("ilink1")));Допустимые значения для этого параметра:
ilink1иilink2для архитектуры ARCv1, иilinkиfirqдля архитектуры ARCv2. -
long_call medium_callshort_call-
Эти атрибуты определяют, как вызывается конкретная функция. Эти атрибуты переопределяют параметры командной строки -mlong-calls и -mmedium-calls (см. Параметры ARC) и
#pragma long_callsнастройки.Для ARC функция, помеченная атрибутом
long_call, всегда вызывается с помощью инструкций register-indirect 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-13.3.0/gcc/ARC-Function-Attributes.html