Qual é o significado da instrução data32 data32 nopw% cs: 0x0 (% rax,% rax, 1) no gcc inline asm?
Durante a execução de alguns testes para a otimização -O2 dos compiladores gcc, observei a seguinte instrução no código desmontado de uma função:
data32 data32 data32 data32 nopw %cs:0x0(%rax,%rax,1)
O que essa instrução faz?
Para ser mais detalhado, eu estava tentando entender como o compilador otimiza recursões inúteis, como a abaixo, com a otimização de O2:
int foo(void)
{
return foo();
}
int main (void)
{
return foo();
}
O código acima causa excesso de pilha quando compilado sem otimização, mas funciona para o código otimizado do O2.
Eu acho que com o O2 ele removeu completamente a pilha da função foo, mas por que odata32 data32 data32 data32 nopw %cs:0x0(%rax,%rax,1)
necessário?
0000000000400480 <foo>:
foo():
400480: eb fe jmp 400480 <foo>
400482: 66 66 66 66 66 2e 0f data32 data32 data32 data32 nopw %cs:0x0(%rax,%rax,1)
400489: 1f 84 00 00 00 00 00
0000000000400490 <main>:
main():
400490: eb fe jmp 400490 <main>