0

我将 LLVM-C API 用于编译器项目,需要将目标代码从 IR 发送到内存缓冲区。我知道 JIT 可以做到这一点,但是生成的代码将使用不同的参数执行多次,因此静态编译一次而不是每次 JIT 编译更有意义。

我想要的是一个目标代码缓冲区,然后我可以设置可执行文件,可能通过使用mmap(但如果有更简单的方法,请告诉我),然后运行。

我发现这个函数LLVMTargetMachineEmitToMemoryBuffer似乎可以完成我需要的第一部分,但它需要一个现有的 LLVM 内存缓冲区类型才能写入。据我所知,我想要LLVMCreateMemoryBufferWithRange这个,它需要一个指针char和一个大小。但是现在我需要知道要提前写入多少字节LLVMTargetMachineEmitToMemoryBuffer才能为它提供正确的缓冲区,因为它从任意 IR 生成目标代码可能是任意大的,所以我觉得我在这里采取了错误的方法,但我我不确定该怎么做。

如何使用 LLVM 的 API 实现这一点?

4

0 回答 0