![]() |
1
6
我不能说我100%理解您的问题,但值得注意的是,LLVM IR不能代表平台ABI的所有细微之处。因此,在Clang工具链中,前端负责执行ABI降低,例如将对象按值正确传递给函数等。
看看
|
![]() |
2
4
我最终侵入了Clang的CodeGen内部,为我调用了C ABI(C++ABI支持已经完成)。因此,我不必重新实现(和重新测试)他们的代码,只需重新使用他们的工作。官方的CodeGen API是不公开的,也不会被任何人使用,但在这种情况下,我设法使它发挥了作用。事实证明,这并不像看起来那么可怕——像LValue/RValue/ReturnValueSlot这样的许多类只是llvm::Value*上的包装器,附加了一些额外的可选语义。 更多的问题将是从C ABI到我自己的ABI创建蹦床。CodeGenFunction接口似乎不太适合这样做。但我想我能做到。 |
![]() |
Sam Kellett · 为C++库提供C API和严格别名 7 年前 |
![]() |
Wietlol · LLVM IR本机方法 7 年前 |
![]() |
mikasa · llvm-将参数传递给传递 7 年前 |
![]() |
James Allingham · llvm JIT将库添加到模块 7 年前 |