如何在LLVM中完全集成LLVM传递(仪器部分+运行时库部分)?

时间:2018-12-06 12:48:54

标签: clang llvm integration clang++

我想对clang做些事情,现在我写了一个通行证,可以检测源代码(在源代码中插入一些函数调用),就像:

int main(){
     ...
     func1(para1, para2 ...);//func1 is inserted by pass, which is defined in my runtime library.
     ...
     return 0;
}

我已经完成了以上所有操作,通常,如果我们想运行通行证, 我们只需执行以下操作:

  1. clang++ -S -emit-llvm xx.cpp -o xx.ll
  2. opt -load xx.so -xx xx.ll -o xx.ll
  3. ... -o xx.o
  4. ... xx.o -L/runtime_library_path -lxx(.a or .so) -o xxx

但是现在,我想通过将 flag 传递给clang来完成上述所有步骤。 例如:clang++ -useMypassAndrtlib xx.cpp,然后它将在编译期间运行我的过程,并在链接期间链接我的运行时库。

到目前为止,我已经实现了一半的目标。
我可以通过将标志传递到clang来运行通行证,但是我仍然需要对我的rt-lib进行隐式链接。
例如:clang++ -useMyPass xx.cpp -L/runtime_library_path -lmyrtlib -o xxx

那我应该怎么做才能将我的pass(包括rt-lib部分)完全集成到LLVM中?

我应该修改哪个源文件?修改什么? 我只想使用“ clang ++ -useMyPassAndrtlib xx.cpp ”来运行我的密码并自动使用我的rt-lib。

0 个答案:

没有答案