Portál AbcLinuxu, 13. května 2025 22:21

Dotaz: Jak použít atribut naked?

Luboš Doležel (Doli) avatar 15.5.2005 15:20 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Jak použít atribut naked?
Přečteno: 218×
Odpovědět | Admin
Ahoj,

snažím se vyzkoušet použití atributu naked na funkci. Jestli jsem tenhle atribut pochopil správně, tak by funkce měla být bez typického Céčkovského začátku a konce (prolog a epilog?).
void func(void) __attribute__((naked)) {}
mi vyhodí chybu "error: attributes are not allowed on a function-definition". Není to náhodou blbost? Tenhle atribut by přece měl být právě na definici funkce.

Tak jsem teda zkusil udělat deklaraci:
void func(void) __attribute__((naked));
a z toho je "warning: 'naked' attribute directive ignored". Myslíte si že je to chyba v GCC nebo ve mě?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.5.2005 15:30 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Jak použít atribut naked?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Kompiluješ na ARM? Pokud kompiluješ na Intelu, tak kompilátoru holt nezbude než ten atribut ignorovat, když tam nemá smysl...
Luboš Doležel (Doli) avatar 15.5.2005 15:35 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Jak použít atribut naked?
Na Intelu má IMHO taky smysl, na Intelu tam bude něco jako instrukce enter a leave, ne? Respektive
push	ebp
mov	ebp, esp
Každopádně __declspec(naked) na MSVC jde, tak jsem předpokládal, že to bude brát i GCC.
15.5.2005 15:39 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Jak použít atribut naked?
`naked'
     Use this attribute on the ARM, AVR, C4x and IP2K ports to indicate
     that the specified function does not need prologue/epilogue
     sequences generated by the compiler.  It is up to the programmer
     to provide these sequences.
Co přesně dělá __declspec(naked) u MSVC na Intelu?
Luboš Doležel (Doli) avatar 15.5.2005 15:45 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Jak použít atribut naked?
For functions declared with the naked attribute,
the compiler generates code without prolog and epilog code.
You can use this feature to write your own prolog/epilog
code sequences using inline assembler code.
15.5.2005 16:31 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Jak použít atribut naked?
Chceš se předpokládám zbavit tohoto (+- podle typu intelího pocesoru):
pushl	%ebp
movl	%esp, %ebp
leave
ret
To lze jednak inlinováním ;-) a jednak -fomit-frame-pointer (pokud ho ta funkce nepotřebuje).
Luboš Doležel (Doli) avatar 15.5.2005 15:36 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Jak použít atribut naked?
Mě je jasný, že nějakým naked a asm kódem program moc neurychlím - jenom jsem si chtěl vyzkoušet atribut...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.