Создание объектного кода в памяти с помощью C API LLVM
Я использую LLVM-C API для проекта компилятора, и мне нужно передать объектный код из IR в буфер в памяти. Я знаю, что JIT может это сделать, но результирующий код будет выполняться много раз с разными аргументами, поэтому статическая компиляция один раз, а не JIT-компиляция каждый раз, имеет больше смысла.
Мне нужен буфер объектного кода, который я затем могу установить исполняемым, вероятно, с помощью
mmap
(но дайте мне знать, если есть более простой подход), а затем запустите.
Я нашел функцию, которая, похоже, делает первую часть того, что мне нужно, но для записи в нее требуется существующий тип буфера памяти LLVM. Из того, что я могу сказать, я хочу
LLVMCreateMemoryBufferWithRange
для этого, который принимает указатель на
char
и размер. Но теперь мне нужно знать, сколько байт
LLVMTargetMachineEmitToMemoryBuffer
будет писать заранее, чтобы предоставить ему правильный буфер, который, поскольку он генерирует объектный код из произвольного IR, может быть сколь угодно большим, поэтому я чувствую, что использую здесь неправильный подход, но я не уверен, как еще это сделать .
Как я могу добиться этого с помощью API LLVM?