почему gnu binutils должен быть настроен для цели spefi c. Что происходит под - PullRequest
0 голосов
/ 11 марта 2020

Я возиться с созданием своего собственного набора инструментов g cc для процессора Cortex-A5, и я стараюсь максимально глубоко погрузиться в каждый шаг. Я сознательно избегал использования crosstool-ng или других инструментов, чтобы помочь мне лучше понять, что происходит в процессе создания цепочки инструментов.

Хотя одна вещь меня озадачивает. Во время настройки и сборки binutils мне нужно указать цель (--target). Эта цель может быть либо classi c host-tuple (например: arm-none- linux -gnuabi), либо типом спецификаций c, например, как i686-elf.

Почему эта цель нужна? и что конкретно он делает с сгенерированными программами "as" и "ld", созданными binutils?

Например, если я собираю его с помощью arm-none- linux -gnueabi, это выглядит как результат Программа «as» поддерживает все инструкции arm, установленные под солнцем (armv4t, armv5, et c.).

Это просто для экономии места в полученном исполняемом файле? Или что-то еще происходит?

Я бы понял, если бы я настроил binutils для определенного набора команд c, например. Создайте мне ассемблер, который понимает инструкции armv4t.


Рассматривая источник binutils и gas, вы увидите, что хост-кортеж выбирает некоторые заголовочные файлы, расположенные в gas / config / t c * газ / конфиг / тэ *. Опять же, это кажется произвольным, поскольку это широкие категории систем.

Извините за бессвязные слова :) Я предполагаю, что мой квест можно сформулировать так: Почему binutils не является пакетом "все в одном"?

1 Ответ

0 голосов
/ 11 марта 2020

Зачем нужна эта цель?

Поскольку существует (много) различных целевых архитектур. ARM ассемблер / код отличается от PowerP C отличается от x86 et c. В принципе, было бы возможно спроектировать один инструмент для всех целей, но это был не тот подход, который применялся в то время.

Основное внимание было уделено скорости / производительности. Исполняемые файлы невелики по сегодняшним «стандартам», но объединяют все> 40 архитектур и все инструменты, такие как as, ld, nm et c. было бы / было довольно неуклюжим.

Более того, современные хост-машины не только намного более мощные, что также применимо к компилятору / собранным программам, иногда к миллионам строк (предварительно обработанных) C ++ для компиляции. Это означает, что общее время сборки значительно сместилось в сторону компиляции по сравнению с прежними временами.

Только разные базовые семейства обычно переключаются / выбираются для опций.

...