crt0.o и crt1.o - какая разница? - PullRequest
       40

crt0.o и crt1.o - какая разница?

34 голосов
/ 26 апреля 2010

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

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

1 Ответ

35 голосов
/ 27 апреля 2010

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

Насколько я понимаю, ЭЛТ выпускается в двух "вкусах"

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