Interface binária do aplicativo


Em software de computador , uma interface binária de aplicativo ( ABI ) é uma interface entre dois módulos de programa binário. Frequentemente, um desses módulos é uma biblioteca ou recurso de sistema operacional , e o outro é um programa que está sendo executado por um usuário.
Uma ABI define como estruturas de dados ou rotinas computacionais são acessadas em código de máquina , que é um formato de baixo nível, dependente de hardware. Em contraste, uma interface de programação de aplicativos (API) define esse acesso em código-fonte , que é um formato relativamente de alto nível, independente de hardware, frequentemente legível por humanos . Um aspecto comum de uma ABI é a convenção de chamada , que determina como os dados são fornecidos como entrada para, ou lidos como saída de, rotinas computacionais. Exemplos disso são as convenções de chamada x86 .
Aderir a uma ABI (que pode ou não ser oficialmente padronizada) é geralmente o trabalho de um compilador , sistema operacional ou autor de biblioteca. No entanto, um programador de aplicativo pode ter que lidar com uma ABI diretamente ao escrever um programa em uma mistura de linguagens de programação, ou mesmo compilar um programa escrito na mesma linguagem com compiladores diferentes.
Descrição
Os detalhes cobertos por uma ABI incluem o seguinte:
- Conjunto de instruções do processador, com detalhes como estrutura do arquivo de registro, organização da pilha, tipos de acesso à memória, etc.
- Tamanhos, layouts e alinhamentos de tipos de dados básicos que o processador pode acessar diretamente
- Convenção de chamada , que controla como os argumentos das funções são passados e os valores de retorno recuperados; por exemplo, ela controla o seguinte:
- Se todos os parâmetros são passados na pilha ou alguns são passados em registradores
- Quais registradores são usados para quais parâmetros de função
- Se o primeiro parâmetro de função passado na pilha é empurrado primeiro ou por último
- Se o chamador ou o chamado é responsável por limpar a pilha após a chamada da função
- Como um aplicativo deve fazer chamadas de sistema para o sistema operacional e se a ABI especifica chamadas de sistema diretas em vez de chamadas de procedimento para stubs de chamada de sistema , os números de chamada de sistema
- No caso de um sistema operacional completo, ABI, o formato binário de arquivos de objeto , bibliotecas de programas, etc.
ABIs completos
Uma ABI completa, como o Intel Binary Compatibility Standard (iBCS), [1] permite que um programa de um sistema operacional que suporte essa ABI seja executado sem modificações em qualquer outro sistema, desde que as bibliotecas compartilhadas necessárias estejam presentes e pré-requisitos semelhantes sejam atendidos.
As ABIs também podem padronizar detalhes como a confusão de nomes C++ , [2] propagação de exceções [3] e convenção de chamada entre compiladores na mesma plataforma, mas não exigem compatibilidade entre plataformas.
ABIs incorporados
Uma interface binária de aplicativo embarcado (EABI) especifica convenções padrão para formatos de arquivo , tipos de dados, uso de registradores, organização de quadros de pilha e passagem de parâmetros de função de um programa de software embarcado , para uso com um sistema operacional embarcado .
Compiladores que suportam o EABI criam código objeto que é compatível com código gerado por outros compiladores, permitindo que desenvolvedores vinculem bibliotecas geradas com um compilador com código objeto gerado com outro compilador. Desenvolvedores que escrevem seu próprio código de linguagem assembly também podem interagir com assembly gerado por um compilador compatível.
Os EABIs são projetados para otimizar o desempenho dentro dos recursos limitados de um sistema embarcado. Portanto, os EABIs omitem a maioria das abstrações que são feitas entre o kernel e o código do usuário em sistemas operacionais complexos. Por exemplo, a vinculação dinâmica pode ser evitada para permitir executáveis menores e carregamento mais rápido, o uso de registro fixo permite pilhas e chamadas de kernel mais compactas, e a execução do aplicativo em modo privilegiado permite acesso direto à operação de hardware personalizada sem a indireção de chamar um driver de dispositivo. [4] A escolha do EABI pode afetar o desempenho. [5] [6]
Os EABIs amplamente utilizados incluem PowerPC , [4] Arm EABI [7] e MIPS EABI. [8] Implementações de software específicas como a biblioteca C podem impor limitações adicionais para formar ABIs mais concretas; um exemplo é o GNU OABI e o EABI para ARM, ambos subconjuntos do ARM EABI. [9]
Veja também
Referências
- ^ Padrão de compatibilidade binária Intel (iBCS)
- ^ "Itanium C++ ABI".(compatível com múltiplas arquiteturas)
- ^ "Itanium C++ ABI: Tratamento de exceções".(compatível com múltiplas arquiteturas)
- ^ ab "Resumo do EABI". PowerPC Embedded Application Binary Interface: Implementação de 32 bits (PDF) (versão 1.0 ed.). Freescale Semiconductor, Inc. 1 de outubro de 1995. pp. 28–30.
- ^ "Debian ARM acelera via porta EABI". Linuxdevices.com. 16 de outubro de 2016. Arquivado do original em 21 de janeiro de 2007. Recuperado em 11 de outubro de 2007 .
- ^ Andrés Calderón e Nelson Castillo (14 de março de 2007). "Por que o EABI da ARM importa". Linuxdevices.com. Arquivado do original em 31 de março de 2007. Recuperado em 11 de outubro de 2007 .
- ^ "ABI para a Arquitetura Arm". Developer.arm.com . Recuperado em 4 de fevereiro de 2020 .
- ^ Eric Christopher (11 de junho de 2003). "mips eabi documentation". binutils@sources.redhat.com (Lista de discussão) . Recuperado em 19 de junho de 2020 .
- ^ "ArmEabiPort". Debian Wiki .
A rigor, tanto o antigo quanto o novo ARM ABIs são subconjuntos da especificação ARM EABI, mas no uso diário o termo "EABI" é usado para significar o novo descrito aqui e "OABI" ou "old-ABI" para significar o antigo.
Links externos
- Políticas/Problemas de compatibilidade binária com C++ – um compêndio de regras de desenvolvimento para não quebrar a compatibilidade binária entre lançamentos de bibliotecas
- Guia de chamada de função ABI do OS X
- Porta Debian ARM EABI
- μClib: Motorola 8/16 bits ABI incorporado
- Interface binária de aplicação AMD64 (x86-64) na Wayback Machine (arquivado em 28/05/2008)
- Interface binária de aplicação (ABI) para a arquitetura ARM
- Documentação MIPS EABI
- Compiladores Sun Studio 10 e AMD64 ABI no Wayback Machine (arquivado em 2015-01-14) – um resumo e comparação de alguns ABIs populares
- Manual de padrões de interface binária de aplicativos M•CORE para os processadores Freescale M·CORE