【问题标题】:why must gnu binutils be configured for a spefic target. What's going on underneath为什么必须为特定目标配置 gnu binutils。下面发生了什么
【发布时间】:2020-03-11 10:46:44
【问题描述】:

我正在为 arm Cortex-A5 cpu 创建我自己的自定义 gcc 工具链,我正在尝试尽可能深入地了解每个步骤。我故意避免使用 crosstool-ng 或其他工具来协助,以便更好地了解创建工具链的过程中发生的事情。

但有一件事让我很困惑。在 binutils 的配置和构建过程中,我需要指定一个目标(--target)。此目标可以是经典的主机元组(例如:arm-none-linux-gnuabi)或特定类型,例如 i686-elf。

为什么需要这个目标?它对 binutils 生成的“as”和“ld”程序有什么特别的作用?

例如,如果我使用 arm-none-linux-gnueabi 构建它,看起来生成的“as”程序支持阳光下的所有 arm 指令集(armv4t、armv5 等)。

仅仅是为了节省生成的可执行文件的空间吗?还是有更多的事情发生?

如果我为特定指令集配置 binutils,我会明白的。为我构建一个能够理解 armv4t 指令的汇编程序。


查看 binutils 和 gas 的来源,看起来主机元组正在选择一些位于 gas/config/tc*、gas/config/te* 中的头文件。同样,这似乎是任意的,因为它是广泛的系统类别。

对不起,漫无边际:) 我想我的问题可以表述为:为什么 binutils 不是一个一体化软件包?

【问题讨论】:

    标签: gcc binutils


    【解决方案1】:

    为什么需要这个目标?

    因为有(许多)不同的目标架构。 ARM 汇编器/代码与 PowerPC 不同,与 x86 等不同。原则上,可以为所有目标设计一种工具,但这不是当时采用的方法。

    重点主要放在速度/性能上。按照今天的“标准”,可执行文件很小,但结合所有 > 40 种架构和所有工具,如asldnm 等,将会/已经相当笨重。

    此外,现代主机不仅功能更强大,这也适用于编译器/汇编程序,有时需要数亿行(预处理)C++ 进行编译。这意味着与过去相比,总体构建时间在编译方向上发生了更多变化。

    通常只有不同的核心系列可以根据选项进行切换/选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 2017-01-03
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      相关资源
      最近更新 更多