LLVM源码系列
文章平均质量分 96
电影旅行敲代码
垃圾文章制造者
展开
-
[DRAFT] LLVM ThinLTO原理分析
LLVM ThinLTO Objects都包含了哪些?继续使用 Example of link time optimization 中的例子进行分析,在《LLVM full LTO 学习笔记》中我们通过 magic number 作为切入点,简单分析了 full lto 的过程。下面这个路子继续该分析$ clang -flto=thin -c a.c -o a_lto.o$ clang -flto=thin -c main.c -o main_lto.o$ hexdump a_lto.o | hea原创 2023-10-19 15:21:42 · 282 阅读 · 0 评论 -
LLVM full LTO 学习笔记
什么是LTO(略)LLVM LTO Objects都包含了哪些?使用 Example of link time optimization 中的例子,如下所示。--- a.h ---extern int foo1(void);extern void foo2(void);extern void foo4(void);--- a.c ---#include "a.h"static signed int i = 0;void foo2(void) { i = -1;}stati原创 2022-02-06 01:00:25 · 2998 阅读 · 6 评论 -
如何给llvm添加一个pass
在PLCT之前必须完成原创 2019-12-27 19:44:17 · 1633 阅读 · 0 评论 -
clang static analyzer总结
总结注:有一段时间没有接触csa,很多东西发生了变化,但本质的东西没有大的变动,这里再回顾一下。这里不会介绍太细节的东西,搞技术搞的太细节了,会导致自己“过拟合”,从而缺少接受其他知识的泛化的能力。我在这里罗列这些东西,对于他人没有什么特别有价值的东西,我能读到的源码,别人也能读到,我能看到的论文,别人也能看到。这些内容唯一的价值是帮助我理思路从源代码到程序真正运行下面几个阶段都可以做代码分...原创 2019-12-25 21:28:25 · 5858 阅读 · 3 评论 -
调试LLVM如何生成SSA
SSA原创 2019-12-16 16:40:04 · 3492 阅读 · 2 评论 -
llvm中的数据结构及内存分配策略 - DenseMap
DenseMap数据结构子篇DenseMap是在llvm中用的非常广泛的数据结构,它本身的实现是一个基于Quadratic probing(二次探查)的散列表,键值对本身是std::pair<KeyT, ValueT>。DenseMap<&a原创 2018-05-27 15:32:58 · 5171 阅读 · 2 评论 -
clang static analyzer中的数据结构及内存分配策略 - ImmutableMap & ImmutableSet篇
clang static analyzer中使用到的数据结构注:这篇博客的初衷来源于[Analyzer] Attempting to speed up static analysis clang static analyzer中使用到的数据结构大致有以下几种,ImmutableMap,ImmutableSet,FoldingSetNode,SmallVector,StringRef以及Arr...原创 2018-04-21 18:50:14 · 1618 阅读 · 0 评论 -
clang static analyzer源码分析(一)
引子clang静态代码分析是clang相对于gcc一个比较能够引起关注的点,特别是clang静态代码分析基于checker的架构和大部分的静态分析工具都不相同。clang静态代码分析使用符号执行的技术执行路径敏感的代码分析,符号执行引擎并不实际进行报错,而是使用挂载在引擎上的checker对程序状态进行检查并报错。这种方式方便用户对代码检查规则或者bug类型进行扩展,但是这种架构也有其缺陷,符号执行原创 2016-03-01 18:10:50 · 18434 阅读 · 26 评论 -
clang static analyzer源码分析(番外篇):evalCall()中的inline机制
引子我们在clang static analyzer源码分析(一)中介绍到,path-sensitive analysis的两种形式,一种是inline形式的分析,一种是非inline形式的分析。在静态分析的过程中,函数是否inline,属于过程间分析(interprocedural analysis)讨论的概念。对于两种形式来说,各有优劣,但基本上来说函数inline形式的分析得到的结果更为准确。原创 2016-10-16 22:35:56 · 4518 阅读 · 0 评论 -
clang static analyzer源码分析(番外篇):removeDead() - SVal、Symbol及Environment
引子在《clang static analyzer源码分析(番外篇):RegionStore以及evalCall()中的conservativeEvalCall》中,我们介绍了RegionStore以及cluster analysis,里面我们提到除了invalidate regions会使用到cluster analysis外,remove dead也需要cluster analysis。除此之外原创 2016-11-22 22:33:45 · 3559 阅读 · 0 评论 -
clang static analyzer源码分析(番外篇):RegionStore以及evalCall()中的conservativeEvalCall
介绍clang static analyzer对于RegionStore的实现,以及对函数inline时的conservativeEvalCall机制进行分析原创 2016-10-27 11:38:43 · 3787 阅读 · 3 评论 -
clang static analyzer源码分析(五)
引子上一篇文章我们介绍了CFG,path-sensitive analysis就是在CFG上进行的,今天这篇文章主要介绍clang static analyzer的内存模型,相关的有 MemRegion以及MemRegion等相关的类。—————————更新————————– 关于clang static analyzer-memory model的设计思想可以阅读《A Memory Model原创 2016-09-08 17:22:41 · 5031 阅读 · 3 评论 -
clang中的活跃性分析(续)
clang中活跃性分析续,这篇文章介绍了LiveVariables和RelaxedLiveVariables的区别,并给出了相关示例原创 2016-11-10 17:43:00 · 2361 阅读 · 0 评论 -
clang中的活跃性分析
引子clang和LLVM都实现了活跃性分析,只是两者的目的不同,一个用于后续静态代码分析,一个用于后续的代码生成以及代码优化。clang活跃性分析实现主要在LiveVariables.h和LiveVariables.cpp这两个文件中,和常见的活跃性分析不同,clang的活跃性分析主要用于clang static analyzer,在静态代码分析的过程中删除死的状态和符号值。 There’s a原创 2016-02-25 13:26:58 · 3239 阅读 · 0 评论 -
clang static analyzer源码分析(三)
引子在clang static analyzer源码分析(二)中我们简要介绍了ExplodedGraph以及如何调试clang static analyzer。今天这篇文章重点分析一下clang static analyzer对于path-sentitive analysis的代码架构。path-sensitive analysis的源码架构clang static analyzer关于path-s原创 2016-09-05 22:07:17 · 5655 阅读 · 0 评论 -
clang static analyzer源码分析(四)
引子在上一篇文章中,非常粗略的过了一遍clang static analyzer相关源码的头文件,这篇文章简要介绍下clang static analyzer中的与CFG相关的类。clang static analyzer中的CFG是AST层级的,也就是CFG的CFGElement还是AST树中的结点,CFG只是在AST上套了一层图结构。这一点在CFG类的注释信息中能够明确看出来。CFGElemen原创 2016-09-07 15:06:32 · 4895 阅读 · 0 评论 -
clang static analyzer源码分析(二)
clang static analyzer源码分析(二),主要介绍ExplodedGraph的概念以及对clang static analyzer进行调试原创 2016-09-05 10:12:54 · 7539 阅读 · 13 评论 -
LLVM全时优化
引子由于实验室项目原因,从本科开始接触Clang和LLVM开始到现在已经有2年时间了,期间都是针对Clang做一些边边角角的工作,没有潜下心来好好研读一下LLVM的paper。最近闲下来读了Chris Lattner那篇引用率高达2227的论文《LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation》,原创 2015-12-23 11:14:00 · 8837 阅读 · 7 评论