我正在为Timber语言编写LLVM代码生成器,当前的编译器会发出C代码.我的问题是我需要从生成的LLVM文件中调用C函数,例如编译器有一个实时垃圾收集器,我需要调用函数来通知何时在堆上分配新对象.我不知道如何将这些函数与生成的LLVM文件链接起来.
代码生成是通过生成.ll文件然后手动编译它们来完成的.
我试图从LLVM调用外部函数,但我没有运气.在示例中,我发现只调用C标准函数,如"puts"和"printf",但我想调用一个>自制函数.我被卡住了.
我试图LLVM从库中内联函数.
我有一个LLVM bitcode文件(手动生成),我链接在一起llvm-link,我也有一个库(用C编写)编译成bitcode clang并存档llvm-ar.我设法将所有内容链接在一起并执行,但我无法设法LLVM从库中内联函数.关于如何做到这一点的任何线索?
有人知道这个错误是什么意思吗?当我尝试反汇编由 LLVMWriteBitcodeToFile 编写的文件时出现错误。当我使用 LLVMDumpModule 转储模块并手动组装和反汇编文件时,不会发生错误。我试图编译的模块(来自 LLVMDumpModule)看起来像:
; ModuleID = 'Test'
define i32 @a(i32) {
entry:
%icmp = icmp eq i32 %0, 1 ; <i1> [#uses=1]
br i1 %icmp, label %_L2, label %_L3
_L1: ; preds = %_L3
ret i32 %0
call void @RAISE(i32 1)
unreachable
_L2: ; preds = %entry
ret i32 1
_L3: ; preds = %entry
br label %_L1
}
declare void @RAISE(i32)
Run Code Online (Sandbox Code Playgroud)
有什么线索吗?