Создание объектного кода в памяти с помощью C API LLVM

Я использую LLVM-C API для проекта компилятора, и мне нужно передать объектный код из IR в буфер в памяти. Я знаю, что JIT может это сделать, но результирующий код будет выполняться много раз с разными аргументами, поэтому статическая компиляция один раз, а не JIT-компиляция каждый раз, имеет больше смысла.

Мне нужен буфер объектного кода, который я затем могу установить исполняемым, вероятно, с помощью mmap(но дайте мне знать, если есть более простой подход), а затем запустите.

Я нашел функцию, которая, похоже, делает первую часть того, что мне нужно, но для записи в нее требуется существующий тип буфера памяти LLVM. Из того, что я могу сказать, я хочу LLVMCreateMemoryBufferWithRangeдля этого, который принимает указатель на charи размер. Но теперь мне нужно знать, сколько байт LLVMTargetMachineEmitToMemoryBufferбудет писать заранее, чтобы предоставить ему правильный буфер, который, поскольку он генерирует объектный код из произвольного IR, может быть сколь угодно большим, поэтому я чувствую, что использую здесь неправильный подход, но я не уверен, как еще это сделать .

Как я могу добиться этого с помощью API LLVM?

0 ответов

Другие вопросы по тегам