gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:34:17 27 4
gpt4 key购买 nike

我正在从事 LLVM 混淆项目。我写了一个 llvm pass(可以说是流扁平化 pass),我使用以下命令在源代码(test.c)上运行:

clang -emit-llvm test.c -c -o test.bc 
opt -load ../../.. LLVMFlattening.so -fla <test.bc>/dev/null

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

clang -emit-llvm test.c -c -o test.bc -mllvm -fla

谁能告诉我这里的 -mllvm 是什么以及它是如何变成一个简单命令的?

最佳答案

-mllvm表示 Additional arguments to forward to LLVM's option processing .因此-mllvm -fla会通过 -fla到 LLVM 的选项处理。

Clang 和 LLVM 可以分开运行。如果你想让 clang 运行 llvm,并且还有一些你想让 llvm 知道的选项。 -mllvm正是您所需要的。

默认情况下,LLVM 不会打开所有转换过程。与 -fla ,LLVM 将打开使用命令行参数注册的通行证 fla通过调用函数 RegisterPass<typename passName> .

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

  1. (不修改现有的 LLVM 源代码树):通过添加 CMakeLists.txt 添加您唯一的 pass 源代码在此link中提到
  2. 直接复制你的通行证源代码文件夹到<LLVM root>/lib/Transform目录。并修改<LLVM root>/lib/Transform/CMakeLists.txt , 添加 add_subdirectory(<pass name>)和其他人一样行。

关于llvm - 如何将 LLVMPass long opt 命令更改为简单命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29946629/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com