Las llamadas a funciones se detectan en el conjunto mediante el prólogo de función común.
Con i386 es
55 push %ebp
89 e5 mov %esp, %ebp
...
c9 leave # optional
c3 ret
con AMD64/x86_64 es similar (sólo el prefijo de cuatro 48
):
55 push %rbp
48 89 e5 mov %rsp,%rbp
..
c9 leaveq # optional
c3 retq
Así que cuando detectan que el interior de su objdump -S bla.o
o gcc bla.c -g -fsave-temps -fverbose-asm
de salida de su función principal y para la barra también, la barra no está en línea. También cuando main tiene una llamada o salta a la barra, no está en línea.
En su caso podría ver si la barra tiene vars locales, que necesita espacio en la pila local. Si la barra está en línea, el ajuste de la pila (por ejemplo, sub $0x8,%esp
) se realiza inmediatamente después del prólogo principal, main podría acceder a esa var. Si no es privado, a la barra.
-S implica -d. No necesita especificar ambos. :-P –
Oh, correcto. Aunque me gusta ser prolijo. Uno podría preguntarse si -D o -d es el predeterminado. Esto hace que sea seguro para el cerebro muerto: p –