A.2. binutils 的更改

Red Hat Developer Toolset 11.0 与 binutils 2.36 一起发布。

自以前的 Red Hat Developer Toolset 发行版本以来,添加了或修改了以下功能:

assembler

  • 在 Intel 构架中,支持 AMX、AVX VNI、HRESET、key Locker、TDX 和 UINTR 指令。
  • 当设置 ELF 部分的 link order 属性时,您可以使用数字部分索引而不是符号名称。
  • 以下 ARM 内核受支持:Cortex-A78、Cortex-A78AE、Cortex-A78C、Cortex-X1、Cortex-R82、Neoverse V1 和 Neoverse N2。
  • 在 64 位 ARM 架构中,支持 Armv8-R 和 Armv8.7-A ISA 扩展。
  • 添加了 .nop 指令,它会生成一个可在任何目标上运行的单个 no-operation 指令。
  • 支持 SHF_GNU_RETAIN 标志。它指定这个部分不应被链路器收集。这个标志可以被应用到 .section 指令中的 R 标志。

linker

  • 添加了一个新的 libdep 插件。它记录链接静态库中的依赖项,并在执行最终链接时使用它们。
  • 添加了一个新的 --error-handling-script=<NAME > 命令行选项。当遇到未定义符号或缺少库时,它会运行一个帮助程序脚本。
  • 现在,链接器会在 .ctf 部分中分离类型。您可以使用新的 --ctf-share-types 命令行选项来指定链接者如何进行此操作。这个选项的默认值是 shared -unconflicted,生成最紧凑的输出。
  • 默认情况下,linker 省略 .ctf 部分中的变量部分,节省空间。对于自己模拟符号表的项目来说,这种行为可能不相同,它们没有反映在 ELF 符号表中。
  • 支持 SHF_GNU_RETAIN ELF 部分标记。此标志指定部分不应被 linker 收集的垃圾回收。

其他二进制工具

  • nm: 添加了一个新的命令行选项 --ifunc-chars=CHARS,用于指定一个或两个字符的字符串。显示全局 ifunc 符号时,第一个字符用作类型字符。如果显示本地 ifunc 符号,则使用第二个字符。
  • ar :之前未使用的 l 修饰符可用于指定静态库的依赖项。此 l 选项的参数(或其较长的格式为 --record-libdeps)保存在存档的 __.LIBDEP 成员中,其链接者可以在链接时读取。
  • readelf: 使用 --lto-syms 命令行选项,可以显示 LTO 符号表部分的内容。
  • readelf 接受 -C 命令行选项,该选项启用符号名称。另外,增加了 --demangle=<style >、--no-demangle--recurse-limit--no-recurse-limit 选项。
  • 为了缓解 CVE-2021-42574,在 binutils 中添加了一个新命令行选项,其中包含 RHSA-2021:4730 公告。

    显示名称或字符串(readelfString、nn 和 objdump)的工具现在有一个新的 --unicode (-U)命令行选项,用于控制 Unicode 字符的处理方式。可以为选项设置以下值:

    • --Unicode=default 可正常对待 BiDi 字符。当 --unicode 选项没有被使用时,这是默认的 behaviour。
    • --Unicode=locale 会根据当前的区域设置显示 BiDi 字符。
    • --Unicode=hex 显示为十六进制值。
    • --Unicode=escape 将 BiDi 字符显示为 Unicode 转义序列。
    • --Unicode=highlight 会显示 BiDi 字符,如果输出设备支持,则 Unicode 转义序列以红色突出显示。