AVR-Gcc Kompiliervorgehensweise

Gast #2790266
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
Gast #2790268
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
Gast #2790272
> 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.
Persönliche Seite #2790330
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
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.