web-dev-qa-db-fra.com

À quoi servent les ARM ABI et EABI?

Plus je regarde ça PDF moins je comprends ce que cela signifie. J'aimerais aussi quelques commentaires sur ces autres 1 et 2 .

32
Micro

Un ABI (Application Binary Interface) est une norme qui définit un mappage entre des concepts de bas niveau dans des langages de haut niveau et les capacités du code machine d'une plate-forme matérielle/OS spécifique. Cela inclut des choses comme:

  • comment C/C++/Fortran/... types de données sont disposés en mémoire (tailles/alignements des données)
  • comment imbriqué appels de fonction travail (où et comment les informations sur la façon de retourner à l'appelant d'une fonction sont stockées, où dans les registres du processeur et/ou en mémoire les arguments des fonctions sont passés)
  • comment démarrage/initialisation du programme fonctionne (quel format de données possède un "exécutable", comment le code/les données sont chargés à partir de là, comment les DLL fonctionnent ...)

Les réponses à ces questions sont:

  • spécifique au langage (donc vous avez un C ABI, C++ ABI, Fortran ABI, Pascal ABI, ... même le Java bytecode spec, bien que ciblant un processeur "virtuel" au lieu de matériel réel, est un ABI),
  • spécifique au système d'exploitation (MS Windows et Linux sur le même matériel utilisent un ABI différent),
  • spécifique au matériel/CPU (les ABI ARM et x86 sont différents).
  • évoluant dans le temps (long) (les ABI existants ont souvent été mis à jour/révisés afin que de nouvelles fonctionnalités du processeur puissent être utilisées, comme, par exemple, spécifier comment les registres x86 SSE doivent être utilisés par les applications n'était bien sûr possible qu'une fois que les CPU avaient ces regs, les ABI existants devaient donc être clarifiés).

Sans une sorte de normalisation, le code (machine) créé par différents compilateurs ne pourrait pas utiliser le même type de bibliothèques (comment sauriez-vous de quelle manière le code de bibliothèque s'attend à ce que les arguments de fonction ou les structures de données soient transmis?).

Chaque plate-forme (une combinaison de matériel spécifique, de logiciel de système d'exploitation et de code écrit dans des langages de programmation spécifiques/compilé avec des compilateurs spécifiques) définit un ensemble complet d'ABI pour rendre les choses interopérables. La terminologie dans ce domaine n'est pas claire, parfois les gens parlent simplement de "l'ABI", d'autres fois on l'appelle le "supplément de plate-forme", ou on mentionne le langage de programmation et dit par ex. "le C++ ABI". Gardez à l'esprit, il n'y a rien de tel.

Les documents auxquels vous avez lié dans votre question en sont tous des exemples spécifiques (ABI spécifiques à la langue/au système d'exploitation/au matériel).

Même sur une plate-forme spécifique, il n'est pas nécessaire d'avoir un et un seul ABI (set) car différentes conventions de ce type peuvent avoir des avantages différents (et donc fournir de meilleurs performances/code plus petit/meilleure utilisation de la mémoire/... - selon le programme) et les concepteurs de systèmes essaient généralement d'être flexibles/autorisés.
Sur Microsoft Windows 32 bits, par exemple, il existe une multitude d'ABI (fastcall, stdcall, Pascal, ...) pour la fonction appelant les parties de convention.

Quoi qu'il en soit, une recherche générique de stackoverflow pour "ABI" (inclus les liens sous la barre latérale "Connexes") donne tellement de pistes pour rechercher cette question que je ferme ma réponse à ce stade.

67
FrankH.

ARM ABI doit être référencé lorsqu'un port du noyau du système d'exploitation sur ARM est utilisé.

EABI correspond au démarrage du processeur pour charger une application sans noyau intermédiaire. (Quelque chose comme ça était ROM-BASIC quand DOS est apparu), i. e. le firmware lui-même est l'application autonome, pas de moniteur spécifique à la carte ou quoi que ce soit.

Le premier lien est vers une sous-partie détaillée liée aux appels de procédure de l'AB ARM. Au fur et à mesure que le modèle des programmeurs avance avec chaque version de ARM CPU, ces sujets sont importants et couverts par ABI.

Le deuxième lien concerne la spécification du format binaire pour les fichiers objets générés par le compilateur appelé ELF qui est spécifié par la marque SCO d'un fournisseur de système d'exploitation. Peut-être SCO est l'organisation de Santa Cruz qui crée ses propres versions d'Unix ainsi que de Linux, mais cette histoire s'écarte de la question. Vous devriez être intéressé si vous avez l'intention d'implémenter un éditeur de liens prenant en charge le ciblage ELF BRAS.

Sauf si vous êtes directement concerné par les détails d'implémentation de la chaîne d'outils de construction pour ARM, EABI devrait être peu préoccupant, et à moins que vous ne teniez compte des aspects spécifiques au système d'exploitation de cette chaîne d'outils ARM ABI devrait également être peu préoccupant.

21
Chawathe Vipul