Hallo, ich frage mich, ob der AVR-Gcc direkt den C oder C++ Code in das Binärprogramm übersetzt oder der Code erst in Assembler übersetzt wird um dann von dort aus mit einem schon vorher vorhandenen Compiler Kompiliert wird. Wenn zweiteres zutrifft, ist es möglich den Assembler-Code abzufangen? LG
Gerrit B schrieb: > Hallo, > > ich frage mich, ob der AVR-Gcc direkt den C oder C++ Code in das > Binärprogramm übersetzt oder der Code erst in Assembler übersetzt wird > um dann von dort aus mit einem schon vorher vorhandenen *Compiler > Kompiliert* wird. Assembler assembliert, ist ja keine Hochsprache. >ist es möglich den Assembler-Code abzufangen? -save-temps http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html
> ich frage mich, ob der AVR-Gcc direkt den C oder C++ Code in das > Binärprogramm übersetzt Das wäre übrigens sowieso falsch: Der GCC erzeugt Objekte welche dann vom Linker zusammengesetzt werden.
Gerrit B schrieb: > ich frage mich, ob der AVR-Gcc direkt den C oder C++ Code in das > Binärprogramm übersetzt oder der Code erst in Assembler übersetzt wird > um dann von dort aus mit einem schon vorher vorhandenen Compiler > Kompiliert wird. > > Wenn zweiteres zutrifft, ist es möglich den Assembler-Code abzufangen? Genaugenommen ist avr-gcc kein Compiler, sondern lediglich ein Treiber-Programm, das abhängig von den übergebenen Kommandozeilen-Argumenten andere Programme aufruft: cc1: Der "eigentliche" C-Compiler, ein Text->Text-Transformator, der präprozessierten C-Code in Assembler umwandelt. cc1plus: Ditto, für C++. Hier enden die Tools von GCC. Die folgenden gehören nicht zum Projekt "GNU Compiler Collection (GCC)", sondern zu "GNU binutils": as: Assembler -> angegebene Object-Format, hier elf32-avr. ld: Linkt Objekte und Bibliotheken zum fertigen Programm (auch elf32-avr) Welche Subtools mit welchen Optionen aufgerufen werden sieht man mit -v Compilieren entspricht dem "main.c" -> "main.s" in der angehängten Grafik [1]. main.s ist ausgegraut, weil es ebenso wie die präprozessierte Quelle main.i (in der Grafik nicht gezeigt) nur temporär erstellt und nach Gebrauch wieder automatisch entfernt wird. Damit diese Entfernen unterbleibt, gibt man -save-temps an oder compiliert nur ohne zu assemblieren, d.h. man gibt -S an. Um die Assembler-Ausgabe mit weiteren Informationen anzureichern, gibt es -fverbose-asm, dp, -dP und noch weitere Optionen, die aber eher für GCC-Entwickler gedacht sind. Es gibt nur wenige Fälle, in denen der Compiler kein Text sondern Binärcode erzeugt. Solch ein Fall sind Präcompiled Header (PCH), die gcc erstellt, wenn man eine h-Datei "compiliert". Resultat ist eine .h.gch Und es gibt auch Fälle, wo die Eingabe des Compilers kein Text ist. Beispiele sindPCH oder lto. lto wird dabei wie eine eigene Sprache behandelt. [1] http://www.mikrocontroller.net/articles/Datei:Gcc-flow.svg
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
