Wie erzeuge ich ein Listing mit AVR-GCC?

Gast #136688
Lesenswert?
• ▲
▼
Hallo,

wie erzeuge ich mit avr-gcc (unter Linux) ein Listing, dass aussieht
wie das am Ende des Postings? Ich hab mit avr-objdump schon so ein
ähnliches Listing erzeugt, aber da fehlen die Kommentare, was die
Assemblerbefehle denn jetzt für eine C-Zeile repräsentieren.

MfG
- C. Lechner

---> schnipp! <---

   superFunc();
 148:  0e 94 f6 00   call  0x1ec

  ultraFunc(0x55);
 14c:  85 e5         ldi  r24, 0x55  ; 85
 14e:  0e 94 fb 00   call  0x1f6

  PORTD = gigaFunc();
 152:  0e 94 fd 00   call  0x1fa
 156:  82 bb         out  0x12, r24  ; 18

  PORTA = (addFunc(0xF0, 0x11) & 0xff);
 158:  61 e1         ldi  r22, 0x11  ; 17
 15a:  80 ef         ldi  r24, 0xF0  ; 240
 15c:  0e 94 ff 00   call  0x1fe
 160:  8b bb         out  0x1b, r24  ; 27
  PORTB = (addFunc(0xF0, 0x11) >> 8);
 162:  61 e1         ldi  r22, 0x11  ; 17
 164:  80 ef         ldi  r24, 0xF0  ; 240
 166:  0e 94 fc 00   call  0x1f8
 16a:  89 2f         mov  r24, r25
 16c:  99 27         eor  r25, r25
 16e:  88 bb         out  0x18, r24  ; 24
Gast #136690
Lesenswert?
• ▲
▼
Hallo,

das kommt dem, was ich zu erreichen suche schon sehr ähnlich allerdings
hat der Linker da noch nicht zugeschlagen und daher enthalten alle
Adressen immer noch 0x00. Außerdem ist mir aufgefallen, dass manchmal
die Assembler-Befehle vor der C-Zeile im Listing kommen. Ich werd mal
g00gle fragen, jetzt habe ich ja in Form der Argumente, die bei DJGPP
vorkommen, neue Suchwörter.

- C. Lechner
Gast #136691
Lesenswert?
• ▲
▼
Also ich habs jetzt auch mal probiert, da kommen schon Adressen != 0,
aber selbstverständlich sind das noch nicht die fertig aufgelösten
Adressen, sondern der Programmzähler von gas während er das einzelne
Modul assembliert.

Kann sein dass die Assemblerzeilen und der C Code durcheinandergeworfen
werden, das passiert scheinbar bei gcc, wenn man Debuginformationen und
Optimierungen eingeschaltet hat (viele Compiler lassen es auch gar
nicht erst zu, Code zu optimieren und mit Debuginfos zu versehen).
Falls du -O, -O3 oder ähnlich angegeben hast, kannst du das ja mal
weglassen, aber dann sieht der Code natürlich dann anders aus, was
vermutlich nicht Sinn der Sache ist.

Brauchst auch nicht unbedingt nach DJGPP zu suchen, lies doch einfach
die Dokumentation von gcc und der binutils:

http://www.gnu.org/software/binutils/manual/
http://gcc.gnu.org/onlinedocs/

Ansatzpunkt wären da die Optionen die auf der DJGPP Site angegeben
sind...
Gast #136692
Lesenswert?
• ▲
▼
Hallo,

Die -O3, die ich tatsächlich im Makefile hatte, hab ich wieder
rausgemacht, sollte auch nur ein Test sein. In der Entwicklungsphase
tut man ja normalerweise erst dann auf Optimierung gehen, wenn man das
Produkt fehlerfrei hat bzw. glaubt dass es so ist.

Mit den "Adressen" meinte ich die Zieladressen von call, lds etc...
Die Adressen der OP-Codes sind doch AFAIK nur relativ zum Anfang des
Moduls, oder?

Werde mal die Doku zu den binutils, speziell zum "as" lesen, weil der
das Listing ja erzeugt.

THNX
- Christoph Lechner
Gast #136693
Lesenswert?
• ▲
▼
>Mit den "Adressen" meinte ich die Zieladressen von call, lds etc...
>Die Adressen der OP-Codes sind doch AFAIK nur relativ zum Anfang des
>Moduls, oder?

Jo, das ist richtig. Hab dich da falsch verstanden mit den Adressen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.