
LLVM
文章平均质量分 72
按照从理论到实战的过程,总结一些LLVM学习以及实战的内容。可以配置LLVM编译,也可以利用LLVM编译可执行文件,
Aria_J
这个作者很懒,什么都没留下…
展开
-
LLVM实战之使用DragonEgg
DragonEgg是一个GCC插件,它使得GCC能够使用LLVM优化器和代码生成器来取代GCC自己的优化器和代码生成器。前提需要GCC 4.5及以上版本,目标机器为x86-32/x86-64以及ARM处理器。当然,也需要下载DragonEgg源码并构建dragonegg.so动态链接库文件。原创 2024-04-21 19:00:00 · 422 阅读 · 0 评论 -
LLVM实战之执行LLVM bitcode
本文介绍如何执行之前得到的LLVM bitcode文件。前提是安装lli工具,用它来执行LLVM bitcode。原创 2024-04-15 19:02:45 · 430 阅读 · 0 评论 -
LLVM实战之C语言前端(Clang)
本文将展示Clang前端的不同用途。前提是安装Clang工具。原创 2024-04-17 08:30:00 · 486 阅读 · 0 评论 -
LLVM实战之将.ll文件转换成bitcode文件
本文将介绍如何从LLVM 的.ll文件来生成bitcode。LLVM bitcode(也称为字节码——bytecode)由两部分组成:位流(bitstream,可类比字节流),以及将LLVM IR编码成位流的编码格式。同样,这一步骤的前提是安装llvm-as工具,并添加到PATH环境变量中。原创 2024-02-05 19:00:00 · 841 阅读 · 0 评论 -
LLVM实战之C源码编译
本文将展示使用Clang(C语言前端),把C语言源码转换成LLVM IR。当然首先需要安装Clang并且把它添加到PATH环境中。原创 2024-02-03 22:27:52 · 785 阅读 · 0 评论 -
LLVM编译器的结构
前端通常执行以下任务:1)词法分析器(,简称Lexer从左到右逐行扫描源文件的字符,识别出各个单词并确定单词的类型,同时删除注释、空格等之类字符判断源字符串是否符合格式要求,然后把识别出的单词转化成统计的token形式。(2) 语法分析器从token序列中识别出各类短语,拼接成语法分析树,主要检查token组成的句子结构是不是符合语法结构。(3) 语义分析器。原创 2024-01-27 20:31:54 · 1088 阅读 · 0 评论 -
LLVM的编译链工具
通常我们在命令行上调用的clang工具,是Clang驱动程序,因为LLVM本质上只是一个编译器框架,所以需要一个驱动程序把整个编译器的功能串起来,clang能够监控整个编译器的流程,即能够调用到Clang和LLVM的各种库,最终实现编译的功能。来指定输出是汇编文件还是目标文件,若生成是目标文件,llc会调用LLVM中的汇编输出的代码库来工作(注意这个汇编器和gcc的汇编器也不同,它输入的是MI,是一种后端的中间表示)。clang能够调用起来整个编译器的流程,也就是上边其他工具调用的库,它很多都同样会调用。原创 2024-01-19 19:00:00 · 1355 阅读 · 0 评论 -
LLVM的项目结构
LIT测试本身位于test目录下的子目录中,对于lib的目录结构的遵循不是很严格。LLVM的每个功能都有明确的API定义,并放在自己的库中。如果有必要,还会套娃,例如:在llvm/lib目录中有Target目录,该目录包含特定于目标的更加底层的操作。这两个目录中,每个应用程序都有自己的子目录。值得注意的是,提供运行时库的项目将源代码放在src目录中,并使用lib目录作为库导出定义。如果需要额外的CMake模块或支持文件,可以将它们存储在cmake子目录中,而现成的模块则放在cmake/modules中。原创 2024-01-17 19:00:00 · 510 阅读 · 0 评论 -
LLVM代码内容
LLVM库包含所有LLVM顶层项目,可以分为以下几类:• LLVM核心库和附加内容• 编译器和工具• 运行时库LLVM是一个编译器框架。LLVM作为编译器框架,是需要各种功能模块支撑起来的。可以将clang和lld都看做是LLVM的组成部分。框架的意思是,你可以基于LLVM提供的功能开发自己的模块,并集成在LLVM系统上,增加它的功能,或者就单纯自己开发软件工具,而利用LLVM来支撑底层实现。原创 2024-01-14 19:00:00 · 1040 阅读 · 0 评论 -
LLVM的安装步骤实战
讲述了如何在各种系统中安装LLVM编译器原创 2024-01-11 20:00:00 · 2300 阅读 · 1 评论