

Una interfaz binaria de aplicación ( ABI ) es una interfaz expuesta por un software que se define para el acceso al código máquina dentro del proceso . A menudo, el software que expone la interfaz es una biblioteca y el consumidor es un programa .
Una ABI se encuentra en un nivel de abstracción relativamente bajo . La compatibilidad de la interfaz depende del hardware de destino y de la cadena de herramientas de compilación de software . En cambio, una interfaz de programación de aplicaciones (API) define el acceso al código fuente , que es un formato de nivel relativamente alto, independiente del hardware y legible por humanos . Una API define una interfaz a nivel de código fuente, antes de la compilación, mientras que una ABI define una interfaz para el código compilado.
La compatibilidad de la API suele ser una preocupación en el diseño del sistema y de la cadena de herramientas. Sin embargo, un programador puede tener que lidiar directamente con la ABI al escribir un programa en varios lenguajes o al usar varios compiladores para el mismo lenguaje.
Una ABI completa permite que un programa compatible con una ABI se ejecute sin modificaciones en múltiples sistemas operativos que la proporcionen. El sistema de destino debe proporcionar las bibliotecas necesarias (que implementan la ABI), y puede haber otros requisitos previos.
Descripción
Los aspectos de interfaz que abarca una ABI incluyen:
- Conjunto de instrucciones del procesador , con detalles como la estructura del archivo de registros, los tipos de acceso a la memoria , etc.
- Tamaño, disposición y alineación de los tipos de datos básicos a los que el procesador puede acceder directamente.
- Convención de llamada , que controla cómo se pasan los argumentos de las funciones y cómo se recuperan los valores de retorno; por ejemplo, controla lo siguiente:
- Cómo se organiza la pila de llamadas
- Si todos los parámetros se pasan en la pila de llamadas o si algunos se pasan en los registros.
- ¿Qué registros se utilizan para qué parámetros de función?
- ¿Qué registros debe conservar la función llamada (restaurar su valor si ha cambiado)?
- Si el primer parámetro de función que se pasa en la pila de llamadas se coloca primero o último
- Si quien llama o quien es llamado es responsable de limpiar la pila de llamadas después de la llamada a la función.
- Deformación de nombres [ 1 ]
- Propagación de excepciones [ 2 ]
- Cómo debe una aplicación realizar llamadas al sistema operativo y, si la ABI especifica llamadas directas al sistema en lugar de llamadas a procedimientos a stubs de llamadas al sistema , los números de llamadas al sistema.
- En el caso de un ABI de sistema operativo completo, el formato binario de los archivos objeto , bibliotecas de programas, etc.
Las ABI incluyen el estándar de compatibilidad binaria de Intel (iBCS) [ 3 ] y las ABI de System V Release 4 para varios conjuntos de instrucciones.
ABI integrada
Una ABI integrada ( EABI ), utilizada en un sistema operativo integrado , especifica aspectos como formatos de archivo , tipos de datos, uso de registros, organización del marco de pila y paso de parámetros de función de un programa de software integrado .
Cada compilador y ensamblador que admite una EABI crea código objeto compatible con el código generado por otros compiladores y ensambladores similares. Esto permite a los desarrolladores enlazar bibliotecas generadas por un compilador con código objeto generado por otro.
Por lo general, una EABI se optimiza para el rendimiento en función de los recursos limitados del sistema embebido de destino. Por lo tanto, una EABI puede omitir abstracciones entre el kernel y el espacio de usuario que suelen encontrarse en los sistemas operativos de escritorio . Por ejemplo, se puede evitar el enlace dinámico para permitir ejecutables más pequeños y una carga más rápida; el uso de registros fijos permite pilas y llamadas al kernel más compactas; y la ejecución de la aplicación en modo privilegiado permite el acceso directo a operaciones de hardware personalizadas sin la indirección de llamar a un controlador de dispositivo. [ 4 ] La elección de la EABI puede afectar al rendimiento. [ 5 ] [ 6 ]
Entre las EABI más utilizadas se encuentran las de PowerPC , [ 4 ] Arm , [ 7 ] y MIPS . [ 8 ] Las implementaciones de software específicas, como la biblioteca C, pueden imponer limitaciones adicionales para formar ABI más concretas; un ejemplo es la OABI de GNU y la EABI para ARM, ambas subconjuntos de la EABI de ARM. [ 9 ]
Véase también
- Compatibilidad con código binario : capacidad de un sistema informático para ejecutar código de un sistema diferente.
- Código de bytes : conjunto de instrucciones diseñado para ser ejecutado por un intérprete de software.
- Comparación de software de virtualización de aplicaciones
- Símbolo de depuración : información para facilitar la depuración del código. Páginas que muestran descripciones breves de los destinos de redirección.
- Interfaz de funciones externas : interfaz para llamar a funciones desde otros lenguajes de programación.
- Enlace de lenguaje : biblioteca de software que permite utilizar otra biblioteca codificada en otro lenguaje de programación.
- Nativo (informática) – Software que opera directamente en un contexto determinado.
- Puntero opaco : tipo de dato opaco que almacena una dirección de memoria.
- Entorno PowerOpen : estándar abierto de la alianza AIM.
- Tabla de símbolos : estructura de datos utilizada por un traductor de lenguaje, como un compilador o un intérprete.
- SWIG – Herramienta de programación de código abierto
- Microsoft Visual C++ – Producto de entorno de desarrollo integrado
Referencias
- ↑ "ABI de C++ de Itanium" .(compatible con múltiples arquitecturas)
- ↑ "ABI de Itanium C++: Manejo de excepciones" .(compatible con múltiples arquitecturas)
- ↑ "Estándar de compatibilidad binaria de Intel (iBCS)" .
- 1 2 "Resumen de EABI". Interfaz binaria de aplicaciones integradas PowerPC: implementación de 32 bits (PDF) (Edición versión 1.0 ). Freescale Semiconductor, Inc. 1 de octubre de 1995. págs. 28–30 .
- ↑ "Debian ARM acelera mediante el puerto EABI" . Linuxdevices.com. 16 de octubre de 2016. Archivado del original el 21 de enero de 2007. Consultado el 11 de octubre de 2007 .
- ↑ Andrés Calderón y Nelson Castillo (14 de marzo de 2007). "Por qué importa la EABI de ARM" . Linuxdevices.com. Archivado del original el 31 de marzo de 2007. Consultado el 11 de octubre de 2007 .
- ↑ "ABI para la arquitectura Arm" . Developer.arm.com . Consultado el 4 de febrero de 2020 .
- ↑ Eric Christopher (11 de junio de 2003). "Documentación de mips eabi" . binutils@sources.redhat.com (Lista de correo) . Consultado el 19 de junio de 2020 .
- ↑ "ArmEabiPort" . Wiki de Debian .
Estrictamente hablando, tanto las ABI de ARM antiguas como las nuevas son subconjuntos de la especificación ARM EABI, pero en el uso cotidiano el término "EABI" se usa para referirse a la nueva descrita aquí y "OABI" o "old-ABI" para referirse a la antigua.
Enlaces externos
- Políticas/Problemas de compatibilidad binaria con C++ : un compendio de reglas prácticas de desarrollo para no romper la compatibilidad binaria entre versiones de bibliotecas.
- Guía de llamadas a funciones ABI de OS X
- Puerto EABI ARM de Debian
- μClib: ABI integrada de Motorola de 8/16 bits
- Interfaz binaria de aplicación AMD64 (x86-64) en Wayback Machine (archivado el 28/05/2008)
- Interfaz binaria de aplicación (ABI) para la arquitectura ARM
- Documentación MIPS EABI
- Compiladores de Sun Studio 10 y la ABI AMD64 en Wayback Machine (archivado el 14/01/2015) : un resumen y comparación de algunas ABI populares.
- Manual de estándares de interfaz binaria para aplicaciones M•CORE de los procesadores Freescale M·CORE
- Interfaces de programación de aplicaciones
- Tecnología de sistemas operativos