【问题标题】:why does clang can't using in this way为什么clang不能这样使用
【发布时间】:2020-03-15 05:59:16
【问题描述】:
//a.c 
int main() {
 printf("Hello world\n");
}

//当前在llvm-project目录下

clang -Xclang -load  -Xclang build/lib/LLVMHello.so a.c

上面的命令没有任何作用。而下面的命令生效

clang -emit-llvm -c a.c
opt -load build/lib/LLVMHello.so -hello < a.bc

【问题讨论】:

    标签: clang llvm


    【解决方案1】:

    这是因为LLVMHello demo注册了pass by

    static RegisterPass<Hello> X("hello", "Hello World Pass");
    

    因为它只对OPT有效。

    如果你想加载它到clang,你可以将RegisterPass替换为

    static void registerHelloPass(const PassManagerBuilder &, legacy::PassManagerBase &PM) {
        PM.add(new Hello());
    }
    static RegisterStandardPasses RegisterMyPass(PassManagerBuilder::EP_EarlyAsPossible, registerHelloPass);
    

    那么你可以使用clang -Xclang -load -Xclang XXX.so。这样,您可以在 clang 或 opt 中加载它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 2021-04-20
      • 2012-03-15
      • 1970-01-01
      • 2012-04-22
      • 2017-03-05
      相关资源
      最近更新 更多