Как связаны компиляция и ABI? - PullRequest
3 голосов
/ 27 марта 2011

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

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

Об ABI, цитата из Википедия :

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

Спасибо и всего наилучшего!

Ответы [ 3 ]

4 голосов
/ 27 марта 2011

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

2 голосов
/ 27 марта 2011

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

0 голосов
/ 10 апреля 2013

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

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

...