Forum: Compiler & IDEs AST / GCC-Dump Literatur


von Jan Wegner (Gast)


Lesenswert?

Serus, Moin und Hallo!
Wir entwickeln mittels WinAVR/GCC für ATMEGA16. Ich suche nach
Literatur, in der ich mich in den Aufbau der GCC-Dumps einarbeiten
kann, also was steht in .original, in .gimple etc. und wie sind die
Dateien aufgebaut. Wo steht das genau? Dank Euch! J

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Was genau ist ein Dump für dich?

Mit ".original, in .gimple etc." kann ich nichts anfangen
(obwohl ich mir einbilde, den GCC einigermaßen zu kennen).

von Jan Wegner (Gast)


Lesenswert?

Sowas z.B., also der abstrakte Sytaxbaum, den man auch mit GCC erzeugen
kann:

;; Function main (main)
;; enabled by -tree-original

@1      bind_expr        type: @2       vars: @3       body: @4
@2      void_type        name: @5       algn: 8
@3      var_decl         name: @6       type: @7       scpe: @8
                         srcp: main.c:15               size: @9
                         algn: 8        used: 1
@4      statement_list   0   : @10      1   : @11      2   : @12
                         3   : @13      4   : @14      5   : @15
                         6   : @16      7   : @17
@5      type_decl        name: @18      type: @2       srcp:
<built-in>:0
@6      identifier_node  strg: a        lngt: 1
@7      integer_type     name: @19      size: @9       algn: 8
                         prec: 16       min : @20      max : @21
@8      function_decl    name: @22      type: @23      srcp: main.c:14

                         extern
@9      integer_cst      type: @24      low : 16
@10     decl_expr        type: @2
@11     decl_expr        type: @2
@12     decl_expr        type: @2
@13     modify_expr      type: @7       op 0: @3       op 1: @25
@14     modify_expr      type: @7       op 0: @26      op 1: @27
@15     call_expr        type: @7       fn  : @28      args: @29
@16     call_expr        type: @7       fn  : @30      args: @31
@17     return_expr      type: @2
@18     identifier_node  strg: void     lngt: 4
@19     type_decl        name: @32      type: @7       srcp:
<built-in>:0
@20     integer_cst      type: @7       high: -1       low : -32768

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ach du Schreck...  Willst du den GCC weiterentwickeln?

Es gibt eine GNU-info-Datei namens "gccint", da sollte sowas
drin stehen.  Kann man sich sicher auch als Buch ausdrucken,
wenn man will.

Ansonsten der alte Spruch: "All documentation files usually
end up in .c." ;-)

von Jan Wegner (Gast)


Lesenswert?

:-). Danke, den Spruch muß ich mir merken. Es geht um Syntaxanalyse bei
selbst verfaßten Programmen!

von möchtegernprogrammierer (Gast)


Lesenswert?

grab schaufel Ich hol die Leiche mal hoch, habe nämlich exakt das 
gleiche Problem: Ich suche Informationen um das Ergebnis von 
-fdump-translation-unit zu verstehen. Gibt es da mittlerweile mehr Doku? 
In den Internals kann ich nichts finden, falsch gesucht?

von möchtegernprogrammierer (Gast)


Lesenswert?

Ich glaube ich hab das Passende gefunden: \gcc\doc\c-tree.texi
Ist ein recht merkwürdiges Format was sich angeblich mit 
http://gnuwin32.sourceforge.net/packages/texinfo.htm umwandeln lässt, 
nur bei mir funktioniert das nicht richtig... anyway.

von möchtegernprogrammierer (Gast)


Lesenswert?

Nur fürs Protokoll weil der Beitrag bei Google recht weit oben kommt: 
c-tree.lexi ist eigentlich unlesbar, erstmal weil ständig 
Formatierungsanweisungen (@irgendwas) den Lesefluss unterbrechen und 
zweitens weil sich das ganze nicht auf den Aufbau der Dumpdatei sondern 
auf den Quellcode vom GCC und dessen Datenstrukturen konzentriert.

Google hat mir noch 
http://search.cpan.org/~awin/GCC-TranslationUnit-1.00/ ausgespuckt, wer 
Perl kann ist da vielleicht gut beraten.

So, vielleicht hilft es ja Jemandem irgendwann mal.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

möchtegernprogrammierer schrieb:
> grab schaufel Ich hol die Leiche mal hoch, habe nämlich exakt das
> gleiche Problem: Ich suche Informationen um das Ergebnis von
> -fdump-translation-unit zu verstehen.

Das ist doch selbsterklärend:

>> @3      var_decl         name: @6       type: @7       scpe: @8
>>                          srcp: main.c:15               size: @9

In main.c wird in Zeile 15 eine Variable mit Name @6 vom Typ @7 
deklariert/definiert. Scope ist @8, Größe der Variable ist @9.

>> @6      identifier_node  strg: a        lngt: 1

Die Variable heißt also "a".

>> @7      integer_type     name: @19      size: @9       algn: 8
>>                          prec: 16       min : @20      max : @21

Typ ist ein skalarer Integer-Typ.  Ebenso wie a hat der Typ das 
Alignment 8 Bits.

>> @8      function_decl    name: @22      type: @23      srcp: main.c:14
>>                          extern

Scope der Variablendefinition, die Variable ist also lokal.

Etc.

> Gibt es da mittlerweile mehr Doku?

Diese Dunps brauchen keine Doku, sie dienen den GCC-Entwicklern, und die 
wissen, wie sie zu lesen sind.

Für Analysezwecke sind die Dumps ungeeignet, da sie nicht alle 
Informationen enthalten.  Die Dumps sind zudem nicht spezifiziert.

Wenn du statische Codeanalyse betreiben willst, dann ist ein Plugin das 
Mittel der Wahl.

> In den Internals kann ich nichts finden, falsch gesucht?

Die Internals sind nur als weichen Einstieg für GCC-Neulinge gedacht. 
Auskunft gibt die Quelle und wenn du da nix findst, frag in 
gcc-help@gcc.gnu.org.

möchtegernprogrammierer schrieb:

> Ich glaube ich hab das Passende gefunden: \gcc\doc\c-tree.texi
> Ist ein recht merkwürdiges Format was sich angeblich mit

Es ist TexInfo.  Es ist nicht "merkwürdig", es ist Text.  Lies ihn 
einfach ;-)

Ubrigens landet alles in ./gcc/doc in der GCC-Dokumentation, du kannst 
also einfach die lesen wenn dir texi nicht gefällt:

http://gcc.gnu.org/onlinedocs

von möchtegernprogrammierer (Gast)


Lesenswert?

Johann L. schrieb:
> Das ist doch selbsterklärend:
Für dich als GCC-Mitentwickler sicherlich! :-)

> Für Analysezwecke sind die Dumps ungeeignet, da sie nicht alle
> Informationen enthalten.
Schade.

> Die Dumps sind zudem nicht spezifiziert.
Das ist wohl wahr. :-)

> Wenn du statische Codeanalyse betreiben willst, dann ist ein Plugin das
> Mittel der Wahl.
Naja, eigentlich will ich nur mal ein bisschen rumspielen und gucken 
was so geht. Aber wie das so ist, man liest und liest und liest und die 
Zeit vergeht... Meine Hochachtung all denen die fähig sind diese 
Monsterdinger (Compiler) zu schreiben und zu warten...

> Ubrigens landet alles in ./gcc/doc in der GCC-Dokumentation, du kannst
> also einfach die lesen wenn dir texi nicht gefällt:
> http://gcc.gnu.org/onlinedocs
Ah prima, das dürfte sich leichter lesen lassen.

Danke!

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
Noch kein Account? Hier anmelden.