Después de ingresar _start, ¿está alineado rsp?
Cuando los programas ingresan a la _start
rutina al inicio del programa, ¿el puntero de la pila está alineado con un límite de 16 bytes o debe alinearse manualmente? Quiero decir, ¿está alineado incluso antes del prólogo ( push rbp; mov rbp, rsp
) en _start
?
Sé que en x86-64 al inicio del programa RSP
está alineado a 8 bytes, pero ahora sé si está alineado a 16 bytes. Para algunas tareas, es posible que necesite esa alineación para ejecutar correctamente las instrucciones SSE que requieren alineación en un límite de 16 bytes.
La ABI x86-64 dice explícitamente (3.4.1 Estado de registro y pila inicial):
%rsp
El puntero de la pila contiene la dirección del byte con la dirección más baja que forma parte de la pila. Se garantiza que estará alineado con 16 bytes en la entrada del proceso.
Dado que _start
es el primer símbolo que se llama cuando se ingresa un proceso, puede estar completamente seguro de que está alineado en 16 bytes cuando el sistema operativo llama _start
a su ejecutable.