Подтвердить что ты не робот

Каковы цели ARM ABI и EABI?

Чем больше я смотрю на этот PDF, тем меньше я понимаю, что это значит. Также мне хотелось бы высказать некоторые замечания по этому поводу 1 и 2.

4b9b3361

Ответ 1

ABI (Application Binary Interface) - это стандарт, который определяет сопоставление между низкоуровневыми концепциями на языках высокого уровня и возможностями конкретного машинного кода платформы аппаратного/ОС. Это включает в себя такие вещи, как:

  • как типы данных C/С++/Fortran/... размещаются в памяти (размеры/выравнивание данных)
  • как вложенные вызовы функций работают (где и как хранится информация о том, как вернуться к вызывающему функции, где в регистре CPU и/или аргументы функции памяти передаются)
  • Как работает запуск/инициализация программы (какой формат данных имеет "исполняемый файл", как загружается код/​​данные, как работают библиотеки DLL...)

Ответы на них:

  • зависит от языка (следовательно, у вас есть C ABI, С++ ABI, Fortran ABI, Pascal ABI... даже спецификация байт-кода Java, хотя таргетинг на "виртуальный" процессор вместо реального оборудования - это ABI)
  • зависит от операционной системы (MS Windows и Linux на одном и том же оборудовании используют другой ABI),
  • аппаратные/процессорные (ARI и x86 ABI разные).
  • эволюция (длительное) время (существующие ABI часто обновлялись/обновлялись, чтобы можно было использовать новые возможности процессора, например, указать, как регистры SSE x86 будут использоваться приложениями, конечно же, возможно только после того, как у процессоров были эти регистры, поэтому существующие ABI необходимо было уточнить).

Без какой-либо этой стандартизации (машинный) код, созданный разными компиляторами, не мог использовать библиотеки того же типа (как вы узнаете, каким образом библиотечный код ожидает передачи аргументов функции или структуры данных?).

Каждая платформа (комбинация определенного оборудования, программного обеспечения операционной системы и кода, написанного на определенных языках программирования/скомпилированных с конкретными компиляторами) определяет целый набор ABI, чтобы сделать вещи взаимоисключаемыми. Терминология в этой области не ясна, иногда люди просто говорят об "ABI", иногда называли ее "дополнением к платформе" или упоминали язык программирования и говорили, например, "С++ ABI". Имейте в виду, что нет такой вещи.

Документы, на которые вы ссылались в своем вопросе, являются конкретными примерами этого (языковые/операционные системы/аппаратные ABI).

Даже на конкретной платформе нет необходимости иметь один и только один ABI (набор), потому что разные подобные соглашения могут иметь разные преимущества (и, следовательно, обеспечивают лучшую производительность/меньший код/​​лучшее использование памяти /... - в зависимости от программа) и системные дизайнеры обычно стараются быть гибкими/допустимыми.
Например, на 32-битной Microsoft Windows существует множество ABI (fastcall, stdcall, pascal,...) для функции, вызывающей соглашения.

Во всяком случае, общий поиск stackoverflow для "ABI" (включая ссылки под "Связанной" боковой панелью) дает так много результатов для исследования этого вопроса, что я закрываю свой ответ на этом этапе.

Ответ 2

ARM ABI следует отсылать, когда используется порт ядра ОС на ARM.

EABI - это когда процессор загружается для загрузки приложения без промежуточного ядра. (Что-то вроде бы было ROM-BASIC, когда DOS приходила), т.е. е. сама прошивка - это самостоятельное приложение, не имеющий никакого монитора для конкретного монитора или что-то еще.

Первая ссылка - это подробная подчасти, связанная с процедурами-вызовами ARM ABI. Поскольку модель программистов продвигается с каждой версией ARM CPU, такие темы важны и охватываются ABI.

Вторая ссылка касается спецификации двоичного формата для объектных файлов, сгенерированных компилятором под названием ELF, который указан торговой маркой SCO поставщика ОС. Возможно, SCO - это компания Santa Cruz, которая делает свой собственный стиль Unix, а также Linux, однако эта история отходит от вопроса. Вы должны быть заинтересованы в этом, если вы намереваетесь внедрить компоновщик, поддерживающий таргетинг ELF с помощью ARM.

Если вы непосредственно не связаны с деталями реализации цепочки инструментов построения для ARM, EABI должен быть немного обеспокоен, и, если вы не учитываете специфические аспекты OS такой ARM ABI с инструментальной цепью, также должны быть немного обеспокоены.