En el software de computadora , una interfaz binaria de aplicación ( ABI ) es una interfaz entre dos módulos de programa binario. A menudo, uno de estos módulos es una biblioteca o una instalación del sistema operativo , y el otro es un programa que está ejecutando un usuario.
Una ABI define cómo se accede a las estructuras de datos o rutinas computacionales en código de máquina , que es un formato de bajo nivel que depende del hardware. Por el contrario, una API define este acceso en el código fuente , que es un formato relativamente alto, independiente del hardware y, a menudo , legible por humanos . Un aspecto común de una ABI es la convención de llamada , que determina cómo se proporcionan los datos como entrada o se leen como salida de las rutinas computacionales. Ejemplos de esto son las convenciones de llamadas x86 .
Adherirse a una ABI (que puede estar o no estandarizada oficialmente) suele ser el trabajo de un compilador , sistema operativo o autor de la biblioteca. Sin embargo, un programador de aplicaciones puede tener que lidiar con una ABI directamente al escribir un programa en una combinación de lenguajes de programación, o incluso al compilar un programa escrito en el mismo lenguaje con diferentes compiladores.
Descripción
Los ABI cubren detalles como:
- un conjunto de instrucciones del procesador (con detalles como la estructura del archivo de registro, la organización de la pila, los tipos de acceso a la memoria, ...)
- los tamaños, diseños y alineaciones de los tipos de datos básicos a los que el procesador puede acceder directamente
- la convención de llamada , que controla cómo se pasan los argumentos de las funciones y se recuperan los valores de retorno. Por ejemplo, controla:
- si todos los parámetros se pasan a la pila o algunos se pasan a los registros;
- qué registros se utilizan para qué parámetros de función;
- y si el primer parámetro de función pasado en la pila se inserta primero o último.
- cómo una aplicación debe realizar llamadas de sistema al sistema operativo, y si la ABI especifica llamadas directas al sistema en lugar de llamadas de procedimiento a los talones de llamadas del sistema, los números de llamada del sistema.
- y en el caso de un sistema operativo completo ABI, el formato binario de archivos objeto , bibliotecas de programas, etc.
ABI completas
Una ABI completa, como el Estándar de compatibilidad binaria de Intel (iBCS), [1] permite que un programa de un sistema operativo que admita esa ABI se ejecute sin modificaciones en cualquier otro sistema, siempre que estén presentes las bibliotecas compartidas necesarias y requisitos previos similares. cumplido.
Otro [ ¿cuál? ] Las ABI estandarizan detalles como la manipulación de nombres de C ++ , [2] la propagación de excepciones , [3] y la convención de llamada entre compiladores en la misma plataforma, pero no requieren compatibilidad multiplataforma.
ABI integradas
Una interfaz binaria de aplicación integrada (EABI) especifica convenciones estándar para formatos de archivo , tipos de datos, uso de registros, organización de marcos de pila y paso de parámetros de función de un programa de software integrado , para su uso con un sistema operativo integrado .
Los compiladores que admiten EABI crean código objeto que es compatible con el código generado por otros compiladores similares, lo que permite a los desarrolladores vincular bibliotecas generadas con un compilador con código objeto generado con otro compilador. Los desarrolladores que escriben su propio código en lenguaje ensamblador también pueden interactuar con ensamblado generado por un compilador compatible.
Los EABI están diseñados para optimizar el rendimiento dentro de los recursos limitados de un sistema integrado. Por lo tanto, los EABI omiten la mayoría de las abstracciones que se realizan entre el kernel y el código de usuario en sistemas operativos complejos. 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 ejecutar la aplicación en modo privilegiado permite el acceso directo a la operación de hardware personalizado sin la indirecta de llamar a un controlador de dispositivo. [4] La elección de EABI puede afectar el rendimiento. [5] [6]
Los EABI ampliamente utilizados incluyen PowerPC , [4] Arm EABI [7] y MIPS EABI. [8] Las implementaciones de software específicas como la biblioteca C pueden imponer limitaciones adicionales para formar ABI más concretas; un ejemplo es GNU OABI y EABI para ARM, los cuales son subconjuntos de ARM EABI. [9]
Ver también
- Compatibilidad de código binario
- Bytecode
- Comparación de máquinas virtuales de aplicaciones
- Símbolo de depuración
- Interfaz de función externa
- Enlace de idioma
- Puntero opaco
- Entorno PowerOpen
- Tabla de símbolos
- TRAGO
- Detalles de la inestabilidad ABI de Visual C ++
Referencias
- ^ Estándar de compatibilidad binaria de Intel (iBCS)
- ^ "Itanium C ++ ABI" . (compatible con múltiples arquitecturas)
- ^ "Itanium C ++ ABI: manejo de excepciones" . (compatible con múltiples arquitecturas)
- ^ a b "Resumen EABI". Interfaz binaria de aplicación integrada de PowerPC: implementación de 32 bits (PDF) (versión 1.0 ed.). Freescale Semiconductor, Inc. 1 de octubre de 1995. págs. 28–30.
- ^ "Debian ARM acelera a través del puerto EABI" . Linuxdevices.com. 16 de octubre de 2016. Archivado desde el 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é es importante el EABI de ARM" . Linuxdevices.com. Archivado desde el original el 31 de marzo de 2007 . Consultado el 11 de octubre de 2007 .
- ^ "ABI para la arquitectura del brazo" . Developer.arm.com . Consultado el 4 de febrero de 2020 .
- ^ Eric Christopher (11 de junio de 2003). "documentación de mips eabi" . [email protected] (lista de correo) . Consultado el 19 de junio de 2020 .
- ^ "ArmEabiPort" . Wiki de Debian .
Estrictamente hablando, tanto el antiguo como el nuevo ARM ABI son subconjuntos de la especificación ARM EABI, pero en el uso diario el término "EABI" se usa para referirse al nuevo descrito aquí y "OABI" o "antiguo-ABI" para referirse al antiguo uno.
enlaces externos
- Políticas / Problemas de compatibilidad binaria con C ++ : un compendio de reglas generales de desarrollo para no romper la compatibilidad binaria entre versiones de bibliotecas
- Guía de llamadas a funciones de OS X ABI
- Puerto Debian ARM EABI
- μClib: ABI integrado de Motorola de 8/16 bits
- Interfaz binaria de aplicación AMD64 (x86-64) en Wayback Machine (archivado 2008-05-28)
- Interfaz binaria de aplicación (ABI) para la arquitectura ARM
- Documentación de MIPS EABI
- Los compiladores Sun Studio 10 y la ABI AMD64 en Wayback Machine (archivado el 14 de enero de 2015): resumen y comparación de algunas ABI populares
- Aplicaciones M • normas básicas de la interfaz binaria Manual para el Freescale M · NÚCLEO procesadores