crt0.o und crt1.o – Was ist der Unterschied?

Lesezeit: 2 Minuten

Benutzeravatar von Earlz
Earlz

Kürzlich habe ich versucht, einige Low-Level-Arbeiten zu debuggen, und ich konnte die nicht finden crt0.S für den Compiler (avr-gcc), aber ich habe eine gefunden crt1.S (und das gleiche mit dem entsprechenden .o Dateien).

Was ist der Unterschied zwischen diesen beiden Dateien? Ist crt1 etwas ganz anderes oder was? Beide scheinen etwas mit “Bootstrapping” zu tun zu haben (Einrichten stack frame und so), aber warum die Unterscheidung?

Benutzeravatar von kriss
kriss

Sowohl crt0/crt1 tun dasselbe, tun im Grunde das, was vor dem Aufruf von main() erforderlich ist (wie Stack initialisieren, IRQs setzen usw.). Sie sollten mit dem einen oder anderen verlinken, aber nicht mit beiden. Sie sind nicht wirklich Bibliotheken, sondern wirklich Inline-Assembler-Code.

Soweit ich weiß, gibt es crt in zwei “Geschmacksrichtungen”.

  • crt1 wird auf Systemen verwendet, die Konstruktoren und Destruktoren unterstützen (Funktionen, die vor und nach main und exit aufgerufen werden). In diesem Fall wird main wie ein normaler Funktionsaufruf behandelt.
  • crt0 wird auf Systemen verwendet, die keine Konstruktoren/Destruktoren unterstützen.

  • Was genau sind diese Konstruktoren/Destruktoren? Bezieht sich das auf C++ oder etwas anderes? In meiner Antwort hier Es funktionierte ohne crtbeginT.o und crtend.o das sind die Konstruktoren und Destruktoren.

    – Z-Boson

    22. Oktober 2014 um 17:59 Uhr


  • Ich habe es in meiner Antwort geschrieben. Nicht, es ist nicht (direkt) mit C++ verwandt. Es sind Funktionen, die vor main und nach dem Ende des Programms aufgerufen werden müssen. Es hängt mit dem Betriebssystem zusammen, auf dem das Programm ausgeführt wird. Aber ich bin nicht die beste Person, um darüber zu erzählen (ich habe solche Funktionen nie geschrieben, andere haben es getan), und es würde wahrscheinlich eine eigene Antwort verdienen.

    – kriss

    25. Oktober 2014 um 8:56 Uhr

  • @kriss, danke für die Antwort. Ich habe es erst jetzt gesehen, weil du @zboson nicht verwendet hast. Der Destruktor wird wirklich nach Exit aufgerufen?

    – Z-Boson

    14. November 2014 um 10:48 Uhr

1398560cookie-checkcrt0.o und crt1.o – Was ist der Unterschied?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy