crt0.o и crt1.o — Каково различие?

Недавно я пытался отладить некоторую работу низкого уровня, и я не мог найти crt0.S для компилятора (avr-gcc), но я действительно находил a crt1.S (и то же с соответствием .o файлы).

Каково различие между этими двумя файлами? crt1 что-то совершенно другое или что? Они оба, кажется, имеют отношение к чему-то для 'начальной загрузки' (установка stack frame и такой), но почему различие?

34
задан Jonathan Leffler 10 June 2018 в 07:03
поделиться

1 ответ

Оба crt0 / crt1 делают одно и то же, в основном делают то, что необходимо перед вызовом main () (например, инициализируют стек, устанавливают irqs и т. Д.). Вы должны установить связь с одним или другим, но не с обоими. На самом деле это не библиотеки, а действительно встроенный код сборки.

Насколько я понимаю, crt бывает двух видов

  • crt1 используется в системах, которые поддерживают конструкторы и деструкторы (функции, вызываемые до и после main и exit). В этом случае main обрабатывается как обычный вызов функции.
  • crt0 используется в системах, которые не поддерживают конструкторы / деструкторы.
35
ответ дан 27 November 2019 в 17:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: