LLVM 15.0 的到来对不同的后端进行了改进,提供了更大的支持等等

LLVM 15 实现了支持改进

LLVM 15.0 还包括对 C/C++ 的许多有趣的更新。

经过六个月的开发, LLVM 15.0 项目发布宣布,其中 进行了许多重大更改, 并增加了对新处理器、架构等的支持。

对于那些不熟悉 LLVM 的人,你应该知道这个 是 GCC 兼容的编译器 (编译器、优化器和代码生成器)将程序编译成类似 RISC 的虚拟指令中间位码(具有多级优化系统的低级虚拟机)。

生成的伪代码可以在程序执行时由 JIT 编译器转换为机器指令。

LLVM 15.0的主要新功能

在展示的这个新版本中,强调了 支持 Cortex-M85 处理器,以及对于 Armv9-A、Armv9.1-A 和 Armv9.2-A 架构,Armv8.1-M PACBTI-M 扩展。

另一个引人注目的变化是 添加了一个实验性的 DirectX 后端支持DXIL格式 (DirectX 中间语言)用于 DirectX 着色器。 后端通过“-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX”构建选项启用。

libc++ 继续实现新功能 C++20 和 C++2b 标准,包括完成“格式”库实现和建议的“范围”库实验版本。

对于与 Clang 15.0 相关的部分更改,提到了 添加了对类 C 语言 HLSL 的实验性支持 (高级着色语言),用于编写从 DirectX 9 开始的着色器,以及将 HLSL 着色器转换为与 DirectX 12 兼容的 DXIL(DirectX 中间语言)二进制格式,以及 Vulkan 使用的 SPIR 格式 -V。 在将来, 计划实施对 DXBC 格式的支持 (DirectX 字节码)用于 DirectX 9-11。 该实现由 Microsoft 提供,基于 2017 年发布的 DirectX Shader Compiler,基于 LLVM 3.7 构建。

还提到它继续 努力支持未来的 C2X 和 C++23 标准。 为 C 语言实现:noreturn 属性、false 和 true 关键字、给定位深度的整数的 _BitInt(N) 类型、*_WIDTH 宏、UTF-8 字符的 u8 前缀。

除此之外 已为 C++ 实现:模块合并, 函数成员的ABI隔离,模块中非局部变量的有序动态初始化, 多维索引运算符、auto(x)、非文字变量、goto 和声明为 constexpr 的函数中的标签、分隔的转义序列、命名的转义字符。

对于基于架构的系统 x86,添加了“-fzero-call-used-regs”标志, 它在从函数返回控制之前提供函数中使用的所有 CPU 寄存器的归零。 这个选项 防止数据泄露 功能,并将适合在漏洞利用中创建 ROP(面向返回的编程)设备的块数量减少约 20%。

已实现内存位置随机化 C 代码的结构,这使得在利用漏洞的情况下从结构中提取数据变得复杂。 使用 randomize_layout 和 no_randomize_layout 属性打开和关闭随机化,并且需要使用“-frandomize-layout-seed”或“-frandomize-layout-seed-file”标志设置种子以确保可重复构建。

其他变化 脱颖而出:

  • 与 OpenCL 和 OpenMP 支持相关的扩展功能。 添加了对 OpenCL 扩展 cl_khr_subgroup_rotate 的支持。
  • 改进了 x86、PowerPC 和 RISC-V 架构的后端。
    改进的 LLD 链接器和 LLDB 调试器功能。
  • 添加了“-fstrict-flex-arrays=”标志» 使用它可以控制结构中软数组元素的限制(软数组成员,结构末尾不定大小的数组)。
  • 添加了“-warray-parameter”选项以警告覆盖函数与固定和可变长度数组相关的参数声明不匹配。
  • 改进了与 MSVC 的兼容性。
  • 添加了对 MSVC 中提供的“#pragma 函数”和“#pragma alloc_text”的支持。
  • 添加了对与 MSVC 兼容的 /JMC 和 /JMC 标志的支持。
  • 添加了“-m[no-]rdpru”标志来控制 RDPRU 指令的使用,支持 AMD Zen2 处理器。
  • 添加了“-mfunction-return=thunk-extern”标志以防止 RETBLEED 漏洞,该漏洞通过添加一系列指令来阻止间接跳转的推测执行机制的参与。

最后 如果您有兴趣了解更多信息, 您可以在中查看详细信息 以下链接。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责资料:AB Internet Networks 2008 SL
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。