2011-10-29 9 views

Odpowiedz

0

Uważam, że nie ma takiego odpowiednika w ostatnim GCC pod Linuxem. Kompilator emituje prologi i epilogi, jeśli jest to właściwe, i powinieneś pozostawić to decyzji. Może być całkiem niezła w prologach lub epilogach całkiem małe, a czasem nawet nieistniejące.

Można zakodować funkcję w zespole. Możesz też umieścić instrukcje asm w swojej funkcji.

I nie powiedziałeś, dlaczego chcesz to zrobić. Jaki jest twój cel i dlaczego dokładnie o to pytasz?

+0

Mylisz się, ja sam kiedyś użyłem czegoś takiego, ale teraz nie pamiętam. – MetallicPriest

+3

Zrobiłeś to z GCC? Strona, do której odwołuje się SigTerm, jest zgodna z tym, co powiedziałem: jeśli nie chcesz prologu ani epilogu z GCC i Linux (na maszynach docelowych x86 lub AMD64), użyj asm. –

+0

Cóż, tak naprawdę jest, ale tylko dla niektórych (wbudowanych) architektur, jak sugerujesz się w komentarzu. – ninjalj

7

W niektórych architekturach gcc obsługuje atrybut o nazwie "nagi"; najnowszy gcc docs Mam tę listę architektur: ARM, AVR, MCORE, RX i SPU.

Jeśli używasz jednej z tych architektur (gcc daje ostrzeżenie, jeśli starają się go używać i nie jest obsługiwany), atrybut może być używany tak:

__attribute__ ((naked)) int fun() 
{ 
} 

Ostatnio na liście deweloperów gcc pojawiła się dyskusja na temat dodawania "nagiego" atrybutu jako bardziej ogólnej funkcji i próbowania obsługiwać go na więcej architekturach, ale oczywiście to nie pomaga :).]