2015-08-15 22 views
0

1) Возможно ли, используя IRBuilder, генерировать системные вызовы, не зависящие от операционной системы? Я прочитал: http://llvm.lyngvig.org/Articles/Mapping-High-Level-Constructs-to-LLVM-IR#59 Похоже, что когда я создаю LLVM IR и хочу сгенерировать системный вызов для вывода на терминал, тогда я должен настроить LLVM IR на Linux/Windows/Mac. Или у LLVM есть интерфейс для системных вызовов?OS-независимые системные вызовы LLVM IR

2) Имеет ли этот инструмент http://llvm.org/docs/CommandGuide/llc.html способность делать то, что я хочу в 1)?

+0

Я также благодарен за советы по поводу ссылок, системных вызовов и всего этого. –

ответ

2

Абсолютно нет. LLVM - это бэкэнд компилятора; он не касается системных вызовов. Системные вызовы обычно используются внутри библиотеки C платформы, которая реализует их со смесью низкоуровневой C и целевой сборки. Системные вызовы зависят от ОС и целевых (ЦП).

Что касается дополнительных материалов по изучению этого материала - у вас есть мое сочувствие. Это не хорошо документированная область, потому что 99,9% программистов никогда не должны работать на этом уровне. Я предлагаю вам начать собирать некоторые базовые ассемблерные программы и идти оттуда.

+0

Спасибо! Итак, каково решение, когда я хочу написать LLVM IR для моего игрушечного языка, который должен печатать «Hello world» как на Linux, так и на Windows-терминале? –

+1

@OndrejSmid: вы можете вызвать стандартную библиотечную функцию C, такую ​​как 'puts', и связать файл объекта, созданный с вашего IR с библиотекой C. Если вы хотите избежать библиотеки C, вам придется реализовать свои собственные обертки для системных вызовов –

Смежные вопросы