2011-03-27 5 views
3

Как связаны компиляция и ABI?Как связаны компиляция и ABI?

Является ли единственная работа компилятора для создания прикладного двоичного интерфейса (ABI) для ОС и/или других приложений?

О ABI, цитата из Wikipedia:

Abis покрывают детали, такие как тип данных, размера и выравнивание; вызывающее соглашение , которое контролирует передачу аргументов функций и возвращенных значений; система номеров и как приложение должно выполнять системные вызовы в операционной системе ; и в случае полной операционной системы ABI, двоичный формат объектных файлов , библиотеки программ и т. д.

Спасибо и приветствую!

ответ

4

ABI описывает функции базовой ОС и содержит некоторые правила о том, как должна компилироваться программа. Задача компилятора - не «строить» ABI, а соответствовать ABI, поскольку он создает исполняемый код.

+0

Спасибо! Итак, ABI - это какая-то спецификация, относящаяся к ОС, а не к чему-либо еще, включая процессор и его набор команд, компилятор, язык, на котором написан исходный код, и программа/исполняемый файл? – Tim

+0

Да. Он исправлен для ОС. Индивидуальная программа вообще не способствует этому - она ​​только подчиняется ей. –

+0

Спасибо. Я просто добавил к своим предыдущим комментариям «не (принадлежат) ко всему остальному, включая процессор и его набор команд, компилятор, язык, на котором написан исходный код, и программа/исполняемый файл?». – Tim

2

Ну, компилятор не может полностью следовать за ABI. Он должен был испускать действительный машинный код, но, например, он не может следовать вызовам вызовов для вызовов внутренних функций. Но, конечно, на границе между скомпилированным кодом и ОС компилятор должен следовать за ABI.

+0

Спасибо! Если компилятор полностью не выполняет ABI системы, будет ли код, скомпилированный им в системе, быть запущенным в системе? – Tim

+0

Зависит от того, что вы имеете в виду, говоря «полностью». Если скомпилированное приложение вообще не соответствует соглашениям о вызовах даже при вызове функций библиотеки, то вызов такой функции вызовет некоторую ошибку. Другое дело, если приложение не соответствует формату исполняемого файла/библиотеки. Это означает, что приложение не будет запускаться, потому что загрузчик не загружает такой компонент. Другими словами, если скомпилированное приложение не следует за ABI в тех местах, где оно взаимодействует с ОС, это вызовет проблемы. Он может быть запущен, но не работает. Или работает, но не совсем. – xappymah

0

Компилятор должен вывести файл объекта из источника. Это зависит от архитектуры, такой как доступность режима адресации, доступные регистры и такие, которые уточняются в ABI. Кроме того, ОС тесно связана с архитектурой по соображениям производительности, поэтому, если вы не пишете прошивку, соглашение о вызове ОС для системных вызовов и любые такие важные данные являются частью пакета ABI.

Компилятор заменяет исходный текст высокого уровня на кодовые коды и данные машинного уровня. Выход должен соответствовать требованиям в зависимости от цепочки инструментов. Например, привязка линковщика к Windows потребует объектного файла в формате PE для поддержки библиотек Windows и дополнительных форматов, если компилятор в цепочке инструментов выводит в один из этих других форматов, например ELF.