如何将LLVMPass long opt命令更改为简单命令

Zee*_*der 1 llvm llvm-clang

我正在研究LLVM混淆项目.我已经写了一个llvm传递(让我们说流动扁平化传递),我使用以下命令在源(test.c)上运行它:

clang -emit-llvm test.c -c -o test.bc 
opt -load ../../.. LLVMFlattening.so -fla <test.bc>/dev/null
Run Code Online (Sandbox Code Playgroud)

但我已经看到,在O-LLVM项目中,他们使用以下方法实现了相同的目标:

clang -emit-llvm test.c -c -o test.bc -mllvm -fla
Run Code Online (Sandbox Code Playgroud)

有人能告诉我这里的-mllvm是什么,以及如何将其改为简单的命令?

Kun*_*ing 6

-mllvm手段Additional arguments to forward to LLVM's option processing.因此-mllvm -fla将传递-fla给LLVM的选项处理.

Clang和LLVM可以单独运行.如果你想让clang运行llvm,还有一些你想让我知道的选项.-mllvm是你需要的.

不可否认,LLVM没有打开所有转换过程.使用-fla,LLVM将fla通过调用函数打开通过命令行参数注册的传递RegisterPass<typename passName>.

在命令行中,opt的-load选项用于加载插件.如果要按预期使用简单命令行.您的传递需要链接到opt二进制文件.这可以通过以下两种方式完成:

  1. (不修改现有的LLVM源代码树):通过添加CMakeLists.txt链接中提到的添加您的唯一通道的源
  2. 直接将您的传递源代码文件夹复制到<LLVM root>/lib/Transform目录中.并修改<LLVM root>/lib/Transform/CMakeLists.txt,添加add_subdirectory(<pass name>)行就像其他人一样.