小编Ste*_*enG的帖子

LLVM JIT:通过JIT代码将C++异常传递回主机应用程序

我正在开发一个项目,我使用clang生成一些LLVM IR,然后JIT编译并在我的宿主应用程序中运行它.JIT代码调用宿主应用程序中的一些函数,这些函数可能会抛出异常.我希望通过JIT代码抛出异常并回到主机应用程序中.AFAIK这应该与LLVM一起使用,但不幸的是我的测试应用程序总是崩溃"在抛出'int'实例后调用终止".让我举一些简单的例子.

我使用clang 3.5将以下简单程序编译成LLVM IR:

extern void test() ;

extern "C" void exec(void*) {
        test();
}
Run Code Online (Sandbox Code Playgroud)

./clang -O0 -S -emit-llvm test.cpp -c
Run Code Online (Sandbox Code Playgroud)

结果是test.ll.

; ModuleID = 'test.cpp'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

; Function Attrs: uwtable
define void @exec(i8*) #0 {
  %2 = alloca i8*, align 8
  store i8* %0, i8** %2, align 8
  call void @_Z4testv()
  ret void
}

declare void @_Z4testv() #1

attributes #0 = { uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" …
Run Code Online (Sandbox Code Playgroud)

c++ jit llvm

10
推荐指数
1
解决办法
827
查看次数

标签 统计

c++ ×1

jit ×1

llvm ×1