Документация GCC указывает в 6.30 Объявлениях Атрибутов Функций:
naked
Используйте этот атрибут на ARM, AVR, IP2K, портах RX и SPU, чтобы указать, что для указанной функции не нужны последовательности пролога/эпилога, сгенерированные компилятором. Это до программиста для обеспечения этих последовательностей. Единственные операторы, которые могут быть безопасно включены в явные функции,
asm
операторы, которые не имеют операндов. Все другие операторы, включая объявления локальных переменных,if
операторов, и т.д, нужно избежать. Явные функции должны использоваться для реализации тела функции блока, позволяя компилятору создать необходимое объявление функции для ассемблера.
Я могу безопасно вызвать функции с помощью синтаксиса C от явных функций, или только при помощи asm?
Если единственное, что вы делаете в голой функции, - это вызываете другую функцию, вы можете просто использовать одну инструкцию машинного кода JMP.
Функция, к которой вы перейдете, будет иметь действительный пролог, и она должна возвращаться непосредственно вызывающей стороне голой функции, поскольку JMP не помещает адрес возврата в стек.
Единственные операторы, которые можно безопасно включать в голые функции, - это операторы asm, не имеющие операндов. Следует избегать всех других операторов, включая объявления локальных переменных, операторов if и т. Д.
Основываясь на приведенном вами описании, я могу предположить, что даже вызовы функций не подходят для ключевого слова "naked".