¿Dónde se documenta el sistema ABI del sistema V x86-64?

El x86-64 System V ABI (usado en todo excepto en Windows) solía vivir en http://x86-64.org/documentation/abi.pdf , pero ese sitio ya no está en Internet.

¿Hay un nuevo hogar autorizado para el documento?

El System V x86-64 psABI se mantiene en GitHub. La página github de HJ Lu tiene una wiki con enlaces a las versiones actuales de los documentos x86-64 e i386 SystemV psABI, y a los foros donde se discuten las actualizaciones.

Consulte la wiki de la etiqueta x86 para obtener enlaces directos a las últimas versiones. (Esta respuesta puede estar desactualizada).

A partir de ahora, la versión actual para x86-64 es r252 (Borrador 0.99.8 abril de 2016) , y la versión actual para i386 es 1.1 (incluye AVX512). Extraoficialmente, se requieren args estrechos de extensión de signo a 32 bits , porque el clang depende de ello. Es de esperar que una futura revisión de ABI lo documente.

El x32 ABI (punteros de 32 bits en modo largo) es parte del documento x86-64 ABI. Ver Capítulo 10: Modelo de Progtwigción ILP32.


Tenga en cuenta que los documentos psABI específicos del procesador están diseñados como un complemento de la gABI del sistema V menos actualizada, alojada en el sitio web de SCO.


Relacionado: ¿Cuáles son las convenciones de llamadas para las llamadas al sistema UNIX y Linux en i386 y x86-64? Describe la convención de llamadas de sistema para x86-64 SysV (así como i386 Linux vs. FreeBSD).

También resume las convenciones de llamada de función para args enteros. Las llamadas al sistema no toman args vectoriales FP o SSE / AVX, o structs por valor, por lo que la convención de llamadas a funciones es más complicada.


Agner Fog tiene una guía de convenciones de llamadas (que cubre Windows vs. Sys V, y las diversas convenciones para 32 bits, y consejos / trucos para escribir funciones que puede usar en cualquier plataforma). Este es un PDF separado de sus guías de optimización y microarchitecture y tablas de instrucciones (que son lecturas esenciales si le importa el rendimiento).

Wikipedia tiene un artículo de convenciones de llamadas x86 que describe varias convenciones, pero en su mayoría no con suficiente detalle como para usarlas para nada más que simples números enteros. (p. ej., no hay descripción de las reglas de empaquetado de estructuras).