LLVM代码内容

这篇具有很好参考价值的文章主要介绍了LLVM代码内容。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. LLVM简介

LLVM库包含所有LLVM顶层项目,可以分为以下几类:

• LLVM核心库和附加内容

• 编译器和工具

• 运行时库

        LLVM是一个编译器框架。LLVM作为编译器框架,是需要各种功能模块支撑起来的。可以将clang和lld都看做是LLVM的组成部分。框架的意思是,你可以基于LLVM提供的功能开发自己的模块,并集成在LLVM系统上,增加它的功能,或者就单纯自己开发软件工具,而利用LLVM来支撑底层实现。LLVM由一些库和工具组成,正因为它的这种设计思想,使它可以很容易和IDE集成(因为IDE软件可以直接调用库来实现一些如静态检查这些功能),也很容易构建生成各种功能的工具(因为新的工具只需要调用需要的库就行)。

2. LLVM核心库和附加内容

      LLVM核心库位于llvm目录中。为主流的CPU提供了一组带有优化器和代码生成的库,还提供基于这些库的工具。LLVM静态编译器llc将LLVM中间表示(IR)编写的文件作为输入,并将其编译为位码、汇编器输出或二进制对象文件。像llvm-objdump和llvm-dwarfdump这样的工具允许检查目标文件,而像llvm-ar这样的工具允许从一组目标文件创建静态库,还包括帮助开发LLVM本身的工具,例如:bugpoint工具可以帮助找到LLVM中崩溃的最小测试用例。llvm-mc可以对机器代码进行操作:该工具可以对机器指令进行汇编和反汇编,这对添加新的指令很有帮助。

      LLVM核心库由C++编写的。此外,还提供了C接口和Go、Ocaml和Pyhton接口。

      Polly项目位于polly目录中,向LLVM添加了另一组优化。它基于一种叫做多面体模型的数学表示,使用这种方法,可以进行复杂的优化,如使用缓存局部优化的循环。MLIR项目旨在为LLVM提供多级中间表示。

      MLIR旨在为LLVM提供多级的间表示。LLVM IR已经属于底层,并包括源语言的某些信息(这些信息在编译器生成IR时丢失了)。MLIR使LLVM IR具有可扩展性,并在特定领域可以捕获该信息,可以在mlir目录中找到相应的源码。

3. 编译器和工具

      名为Clang(http://clang.llvm.org/)的C/C++/Objective-C/Object-C++编译器是LLVM项目的一部分,源码位于clang目录中。它提供了一组库,用于从C, C++,Objective-C和Objective-C++源码进行词法分析、解析、语义分析和生成LLVM IR。Clang是基于这些库的编译器驱动程序。另一个工具是clang-format,可以根据用户提供的规则格式化C/C++源码。

      Clang的目标是兼容GCC(GNU C/C++编译器)和CL(Microsoft C/C++编译器)。

      C/C++的其他工具由同名目录下的clang-tools-extra项目提供。值得注意的是clang-tidy,它是C/C++的Lint样式检器。clang-tidy使用clang库来解析源代码,并使用静态分析检查源代码。与编译器相比,工具可以捕获更多的潜在错误,但会增加运行时间。

      llgo是一个用于Go编程语言的编译器,位于llgo目录下。用Go编写的,并使用LLVM核心库的Go绑定LLVM接口。llgo的目标是与参考编译器(https://golang.org/)兼容,但目前支持的架构是64-bit x86 Linux。该项目似乎没有继续进行维护,并可能在未来删除。

      编译器创建的对象文件必须与运行时库链接在一起,以形成可执行文件。这是lld(http://lld.llvm.org/)的任务,LLVM链接器位于lld目录中。连接器支持ELF、COFF、Mach-O和WebAssembly格式。

      没有调试器的编译器工具集是不完整的!LLVM调试器名为lldb(http://lldb.llvm.org/),位于同名的目录中。该接口类似于GDB、GNU调试器,并且该工具支持C、C++和Objective-C。调试器可以扩展,因此可以添加对其他编程语言的支持。

4. 运行时库(runtime)

      除了编译器,运行时库还需要编程语言支持。所有项目都位于同一个目录中:

• compiler-rt项目提供了独立于编程语言的支持库。它包括泛型函数,例如:可在32位(i386)机上使用的64位除法、各种sanitizers、模糊库和分析库。

• libunwind库提供了基于DWARF标准的堆栈展开帮助函数。这通常用于C++等语言的异常处理。该库用C编写,函数没有绑定到特定的异常处理模型上。

• libcxxabi库在libunwind上实现了C++的异常处理,并为其提供了标准的C++函数。

• libcxx是C++标准库的实现,包括iostreams和STL。另外,pstl项目提供了并行版本的STL算法。

• libclc是OpenCL的运行时库。OpenCL是异构并行计算的标准,有助于将计算任务转移到GP上。

• libc旨在提供一个完整的C库。这个项目仍处于早期阶段。

• OpenMP项目提供对OpenMP API的支持。OpenMP可以帮助多线程编程,例如:可以基于源代码中的注释并行化循环。

      尽管这是一个很长的项目列表,但所有项目的结构都是相似的。我们将在下一个文章中查看统一的目录结构。文章来源地址https://www.toymoban.com/news/detail-807023.html

到了这里,关于LLVM代码内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【软件逆向-分析工具】反汇编和反编译工具

    目录 一、IDA 1.1、简介: 1.2、使用方法: (1)IDA打开文件 (2)IDA主窗口介绍 (3)IDA的基本使用 二、调试器 2.1、简介: 2.2、Ollydbg (1)主界面 (2)断点操作 (3)代码跟踪操作 2.3、gdb (1)简介: (2)安装 (3)基本的调试操作 三、Trace类工具 3.1、简介: 3.2、Qira 反汇

    2024年02月04日
    浏览(43)
  • 汇编十四、51单片机汇编代码规范

    (1)提高源程序的质量和可维护性,从而提高生产力。 (1)常量C;  (2)变量R;  (3)位变量B; (4)标号L; (5)子程序F;  (6)表T;  (7)中断T; (8)函数F... 举例:F_UartSendByte (1)ORG (2)END (3)EQU (4)BIT (5)DS (1)寄存器不能嵌套使用 (2)中断服务程序切换寄存器区(RS0,RS1),这样保护现场就不用保

    2024年02月07日
    浏览(72)
  • linux上适用的反汇编调试软件(对标od)

    ubuntu下类似于od软件 经过搜索,在Ubuntu上选用edb-debugger进行动态调试, 下载链接: https://github.com/eteran/edb-debugger 但是依赖反汇编引擎: https://github.com/capstone-engine/capstone 安装 先安装capstone 安装edb-debugger 软件截图

    2024年02月15日
    浏览(29)
  • C++64位游戏软件安全汇编与反汇编反调试 x64驱动开发进程保护进程隐藏驱动读写过保护 视频教程

    ├─课程1 x32dbgx64dbg驱动调试器反反调试器驱动调试环境搭载 │ 1.为什么要搭载驱动调试环境.mp4 │ 2.驱动调试环境搭载1.mp4 │ 3.三种过PG的方法.mp4 │ 4.驱动调试环境搭载2.mp4 │ 5.驱动调试与驱动进程保护对抗.mp4 │ ├─课程2 C++64位游戏软件安全汇编与反汇编反调试2021年新

    2024年02月02日
    浏览(40)
  • gdb调试时查看汇编代码

    在gdb中查看汇编代码,可以使用 display 命令或 x 命令。 以下是一个示例程序,我们以它为例来演示如何在gdb中查看汇编代码。 我们使用gcc编译生成可执行文件。 然后,我们使用gdb启动程序。 解释一下: break main :在main函数入口处设置一个断点,以便我们可以在这里开始执

    2024年02月14日
    浏览(31)
  • linux的内嵌汇编代码

    /* C语言实现MCR指令 */ #define __STRINGIFY(x) #x #define __MCR(coproc, opcode_1, src, CRn, CRm, opcode_2)                               __ASM volatile (\\\"MCR \\\" __STRINGIFY(p##coproc) \\\", \\\" __STRINGIFY(opcode_1) \\\", \\\"                     \\\"%0, \\\" __STRINGIFY(c##CRn) \\\", \\\" __STRINGIFY(c##CRm) \\\", \\\"                        

    2024年02月14日
    浏览(29)
  • 南京邮电大学汇编语言程序设计实验一(汇编语言语法练习与代码转换)

    排除语法错误:给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。要求实验者按照原样对源程序进行编辑,汇编后,根据TASM给出的信息对源程序进行修改,知道没有语法错误为止。然后进行链接,并执行相应可

    2024年02月08日
    浏览(62)
  • HTTP——十、构建Web内容的技术

    HTTP——一、了解Web及网络基础 HTTP——二、简单的HTTP协议 HTTP——三、HTTP报文内的HTTP信息 HTTP——四、返回结果的HTTP状态码 HTTP——五、与HTTP协作的Web服务器 HTTP——六、HTTP首部 HTTP——七、确保Web安全的HTTPS HTTP——八、确认访问用户身份的认证 HTTP——九、基于HTTP的功能

    2024年02月09日
    浏览(30)
  • 汇编代码生成和编译器的后端

    基于SLR(1)分析的语义分析及中间代码生成程序-CSDN博客 https://blog.csdn.net/lijj0304/article/details/135097554?spm=1001.2014.3001.5501 在前面编译器前端实现的基础上,将所生成的中间代码翻译成某种目标机的汇编代码,实现编译器后端实现的任务。然后进一步实现程序的输入是源程序,输出

    2024年01月21日
    浏览(47)
  • 从汇编代码的角度去理解C++多线程编程问题

    目录 1、多线程问题实例 2、理解该多线程问题的预备知识 2.1、二进制机器码和汇编代码

    2024年02月06日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包