Используя “явный” атрибут для функций в GCC

Документация GCC указывает в 6.30 Объявлениях Атрибутов Функций:

naked

Используйте этот атрибут на ARM, AVR, IP2K, портах RX и SPU, чтобы указать, что для указанной функции не нужны последовательности пролога/эпилога, сгенерированные компилятором. Это до программиста для обеспечения этих последовательностей. Единственные операторы, которые могут быть безопасно включены в явные функции, asm операторы, которые не имеют операндов. Все другие операторы, включая объявления локальных переменных, if операторов, и т.д, нужно избежать. Явные функции должны использоваться для реализации тела функции блока, позволяя компилятору создать необходимое объявление функции для ассемблера.

Я могу безопасно вызвать функции с помощью синтаксиса C от явных функций, или только при помощи asm?

10
задан Josh Lee 21 October 2010 в 17:29
поделиться

2 ответа

Если единственное, что вы делаете в голой функции, - это вызываете другую функцию, вы можете просто использовать одну инструкцию машинного кода JMP.

Функция, к которой вы перейдете, будет иметь действительный пролог, и она должна возвращаться непосредственно вызывающей стороне голой функции, поскольку JMP не помещает адрес возврата в стек.

5
ответ дан 4 December 2019 в 01:00
поделиться

Единственные операторы, которые можно безопасно включать в голые функции, - это операторы asm, не имеющие операндов. Следует избегать всех других операторов, включая объявления локальных переменных, операторов if и т. Д.

Основываясь на приведенном вами описании, я могу предположить, что даже вызовы функций не подходят для ключевого слова "naked".

0
ответ дан 4 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: