
llvm
ronnie88597
十年磨一剑,剑影开龙鳞
展开
-
解决Obfuscator(llvm-9.0)编译错误'undefined reference to llvm::createLowerSwitchPass()'
解决Obfuscator(llvm-9.0)编译错误’undefined reference to llvm::createLowerSwitchPass()’我在本地编译Obfuscator(llvm-9.0)出现了如下错误:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DGg3FcSn-1586615972574)(./img/obfuscator_comp...原创 2020-04-11 22:39:55 · 1450 阅读 · 0 评论 -
multicompiler编译时需要修复的glibc中printf.h文件的bug
multicompiler编译时需要修复的glibc中printf.h文件的bugglibc的printf.h中有个bug: https://sourceware.org/bugzilla/show_bug.cgi?id=18907需要如下修改/usr/include/printf.h文件修复:--- /usr/include/printf.h.orig 2016-12-13 21:34:3...转载 2020-04-11 22:25:46 · 232 阅读 · 0 评论 -
LLVM项目的目录布局介绍
LLVM项目的目录布局介绍从git获取llvm项目的源码方式:git clone https://github.com/llvm/llvm-project.git我使用的版本分支是:llvmorg-9.0.0下载源码后,进入llvm-project目录包括如下内容:接下来将对llvm-project中每个目录的其内容做简介llvm-project/clangClang是一个基于l...原创 2020-04-11 22:08:00 · 2859 阅读 · 0 评论 -
LLVM的opt优化器的"--debug-pass"选项的用处
LLVM的opt优化器的"–debug-pass"选项的用处opt是LLVM的优化器和分析器,它接受LLVM IR或者LLVM字节码作为优化的输入文件。我们可以直接为opt指定pass在输入的代码上处理运行,pass可以是预定义的也可以是自定义的,预定义的pass可以查看http://llvm.org/docs/Passes.html 。如果需要查看opt处理中代码过程中使用了哪些优化pas...原创 2020-04-10 22:41:35 · 3451 阅读 · 0 评论 -
LLVM源码中经常碰到'LLVM_NODISCARD' ,它是什么意思?
LLVM源码中经常碰到’LLVM_NODISCARD’ ,它是什么意思?LLVM_NODISCARD以可移植的方式定义在llvm/include/llvm/Support/Compiler.h文件中。它允许使用编译器的特定功能:编译器在编译这样的代码时,如果遇到LLVM_NODISCARD修饰的函数,丢弃一个类型或返回值,编译器将会发出警告。...原创 2020-04-10 22:29:59 · 692 阅读 · 0 评论 -
LLVM工程中cmake选项`LLVM_ENABLE_RTTI`的作用
LLVM工程中cmake选项LLVM_ENABLE_RTTI的作用LLVM_ENABLE_RTTI,BOOL类型,默认是OFF。设置为ON,打开LLVM的RTTI功能。该选项一般需要配合LLVM_ENABLE_EH使用。一些编译器默认状态是禁用 RTTI 的,目的是消除性能上的开销。简介RTTIRTTI仅适用于多态类,具有至少一个虚函数。在C++中存在虚函数,也就存在了多态性,对于多态性的对...原创 2020-04-09 23:24:59 · 2276 阅读 · 0 评论 -
LLVM工程test相关的cmake选项
LLVM工程test相关的cmake选项首先如果要构建llvm-test,需要为cmake选项中增加-DLLVM_BUILD_TESTS=ON在cmake工程所在目录中,分别使用以下命令执行test:make check-all # 执行全部的testmake check-llvm # 仅执行llvm的testmake check-clang # 仅执行clang的test# 与...原创 2020-04-09 22:51:28 · 400 阅读 · 0 评论 -
LLVM中几个重要的Passes子类
LLVM中几个重要的Passes子类ModulePass它是最通用的超类。通过继承此类,可以分析整个模块。函数在模块内是无特定顺序的。要使用它时,需要编写一个继承自ModulePass并重载runOnModule函数的子类。在实现Passes子类时,一般需要重写父类的三个虚方法:doInitialization,处理不依赖于当前函数的一些初始化工作runOn{PassType},对于F...原创 2020-04-09 22:44:35 · 735 阅读 · 0 评论 -
LLVM学习之DWARF
LLVM学习之DWARFDWARF是"使用带属性的记录格式进行调试——Debug With Attributed Record Formats"的首字母缩写。DWARF和目标格式无关,它最初是与ELF(可执行和可链接格式——Executable and Linkable Format)一起设计的。发展历史DWARF的第一个版本使用了过多的存储空间且不向后兼容,而后被DWARF-2取代,DWA...原创 2020-04-09 22:13:44 · 1018 阅读 · 0 评论 -
LLVM CFG控制流图可视化
LLVM CFG控制流图可视化准备安装必要组件sudo apt-get install -y graphviz-doc libgraphviz-dev graphviz示例程序/// file 1.cint x = 10; int y = 11; int main(){ int z = 12; for (int i = 0;i < 10;i++){ ...原创 2020-04-09 21:24:38 · 8825 阅读 · 1 评论 -
解决LLVM单元测试globalvariable-attributes.ll报错
解决LLVM单元测试globalvariable-attributes.ll报错由于修改了LLVM代码,LLVM单元测试globalvariable-attributes.ll报错。下面记下我调试的过程问题定位单元测试的报错信息如下:FAIL: LLVM :: Assembler/globalvariable-attributes.ll (4858 of 32600)**********...原创 2020-03-22 22:58:44 · 434 阅读 · 0 评论 -
解决LLVM项目中CMake 报错 "if given arguments *** Unknown arguments specified"
解决LLVM项目中CMake 报错 “if given arguments *** Unknown arguments specified”报错信息如下: IN_LIST will be interpreted as an operator when the policy is set to NEW. Since the policy is not set the OLD behavio...原创 2020-03-21 19:52:02 · 8242 阅读 · 0 评论 -
解决LLVM中CMake 报错 "Found unknown source file"
解决LLVM中CMake 报错 “Found unknown source file” LLVM不会拒绝隐藏文件。 一些编辑器在与文件相同的目录中创建备份。但是LLVM不允许开发者在项目目录中存放非本项目文件(或者是没有加入到cmake工程中的文件)。如果存在这样的文件(例如:我在llvm/lib/IR目录中存放了一个Trampoline.cpp,但没有加入cmake工程中)将会有如下报错:...原创 2020-03-21 19:44:06 · 1363 阅读 · 0 评论 -
生成离线的LLVM官方HTML文档教程
LLVM生成离线官方HTML文档教程上官网,找到并下载你所要的LLVM源码。生成离线官方HTML文档需要下载一些组件,我所用的ubuntu18.04.03,其他linux发行版方法类似:使用pip安装Sphinx和recommonmark组件。这两个组件依赖的包较多,如果你嫌弃默认的pip源的下载速度太慢,可以配置阿里的pip源。具体配置方法参考网址。ubuntu系统上,pip安装Sphi...原创 2020-03-20 00:15:10 · 566 阅读 · 0 评论 -
LLVM中FileCheck开发者工具–2--入门教程
LLVM中FileCheck开发者工具–2--入门教程FileCheck使用FileCheck通常在LLVM回归测试中使用,在测试的RUN行中调用。在RUN所在的那一行,使用FileCheck的一个简单例子如下:; RUN: llvm-as < %s | llc -march=x86-64 | FileCheck %s%s代表当前的文件。FileCheck将根据指定的文件名参数(由...原创 2020-02-27 00:28:00 · 5846 阅读 · 1 评论 -
LLVM中FileCheck开发者工具--1--命令介绍
LLVM中FileCheck开发者工具–1--命令介绍命令格式:FileCheck match-filename [–check-prefix=XXX] [–strict-whitespace]描述:FileCheck命令读取两个文件,一个从标准输入流读取,另一个为命令行中的match-filename参数。该命令使用后者(match-filename指定的文件)去校验前者。FileCh...原创 2020-02-26 23:27:59 · 3402 阅读 · 0 评论 -
解决llvm-9.0开启JIT EVENT后的编译错误'undefined reference to llvm::createLowerSwitchPass()'
解决llvm-9.0开启JIT EVENT后的编译错误’undefined reference to llvm::createLowerSwitchPass()’开启JIT EVENT需要在cmake命令中增加-DLLVM_USE_OPROFILE=ON,-DLLVM_USE_INTEL_JITEVENTS=ON,-DLLVM_USE_PERF=ON三个选项,但是不幸的是,在llvm-9.0版本...原创 2020-02-25 22:25:42 · 766 阅读 · 0 评论 -
llvm常用工具的使用详解
llvm常用工具的使用详解使用clang将C源码转换为LLVM IR:clang -emit-llvm -S test.c -o test.ll使用llvm-as工具将LLVM IR转换为LLVM字节码:llvm-as test.ll -o test.bcLLVM IR的字节码形式可能是结构体被简单封装后的形式。字节码文件结构包含一个指示字节码文件偏移和大小的头文件。将...原创 2020-02-25 17:48:43 · 3865 阅读 · 1 评论