crt0.o et crt1.O-Quelle est la différence?

Récemment, j'ai essayé de déboguer un travail de bas niveau et je n'ai pas pu trouver le crt0.S pour le compilateur ( avr-gcc ) mais j'ai trouvé un crt1.S (et la même chose avec les fichiers .o correspondants).

Quelle est la différence entre ces deux fichiers? Est-ce que crt1 quelque chose de complètement différent ou quoi? Ils semblent tous deux avoir à voir avec quelque chose pour ' bootstrapping '(mettre en place stack frame et autres), mais pourquoi la distinction?

32
demandé sur Jonathan Leffler 2010-04-26 01:13:27

1 réponses

Les deux crt0 / crt1 font la même chose, font essentiellement ce qui est nécessaire avant d'appeler main () (comme initialiser la pile, définir irqs,etc.). Vous devriez avoir un lien avec l'un ou l'autre mais pas les deux. Ce ne sont pas vraiment des bibliothèques mais vraiment du code d'assemblage en ligne.

Pour autant que je comprends, crt vient en deux "saveurs"

  • crt1 est utilisé sur les systèmes qui prennent en charge les constructeurs et les destructeurs (fonctions appelées avant et après main et exit). Dans ce cas principal est traité comme un normal appel de fonction.
  • crt0 est utilisé sur les systèmes qui ne prennent pas en charge les constructeurs/destructeurs.
32
répondu kriss 2018-06-10 07:25:51