为什么必须为特定目标配置 gnu binutils。下面发生了什么

why must gnu binutils be configured for a spefic target. What's going on underneath

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

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

为什么需要这个目标?它对由 binutils 构建的生成的 "as" 和 "ld" 程序有何具体作用?

例如,如果我用 arm-none-linux-gnueabi 构建它,看起来生成的 "as" 程序支持 sun 下的每个 arm 指令集(armv4t , armv5, e.t.c.).

是否只是为了在生成的可执行文件中保存 space?或者还有其他事情要发生?

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


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

抱歉乱七八糟 :) 我想我的问题可以表述为:为什么 binutils 不是一个一体化的软件包?

Why is this target needed?

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

重点主要放在速度/性能上。与今天的 'standards' 相比,可执行文件很小,但将所有 > 40 种体系结构和所有工具(如 asldnm 等结合起来会/已经非常笨重。

此外,现代主机不仅功能更强大,而且还适用于编译器/汇编程序,有时需要编译无数行(预处理的)C++。这意味着整体构建时间比过去更倾向于编译。

通常只能根据选项切换/选择不同的内核系列。