Les appels de fonction sont détectés dans l'ensemble par le prologue de fonction commune.
Avec i386 il est
55 push %ebp
89 e5 mov %esp, %ebp
...
c9 leave # optional
c3 ret
avec amd64/x86_64 est similaire (juste le préfixe quad 48
):
55 push %rbp
48 89 e5 mov %rsp,%rbp
..
c9 leaveq # optional
c3 retq
Alors, quand vous constatez que l'intérieur de votre objdump -S bla.o
ou gcc bla.c -g -fsave-temps -fverbose-asm
sortie de votre fonction principale et pour la barre également, la barre n'est pas inline. En outre, lorsque le principal a un appel ou un saut à la barre, il n'est pas inséré.
Dans votre cas, vous pouvez voir si la barre a des variables locales, ce qui nécessite de l'espace sur la pile locale. Si la barre est en ligne, l'ajustement de la pile (par exemple sub $0x8,%esp
) est effectué juste après le prologue principal, principal peut accéder à cette variable. Sinon, il est privé à la barre.
-S implique -d. Vous n'avez pas besoin de spécifier les deux. :-P –
Oh, c'est vrai. Tho j'aime être verbeux. On pourrait se demander si -D ou -d est la valeur par défaut. Cela rend le cerveau mort sûr: p –