Symboltabelle/MAP-File erzeugen?

Gast #2901475
Lesenswert?
• ▲
▼
Hi,

ich komme grad mit dem GCC für ARM Cortex-M in Berührung. Funktioniert 
soweit auch, die Applikation wächst und wächst :)

Ich würde nun gern eine Symboltabelle erzeugen, in der ich mal sehen 
kann, wo bzw. wie welche Variable abgelegt werden.
Der Linker erzeugt durch
1
-Map="${BuildArtifactFileBaseName}.map"
zwar ein Mapfile, aber da steht alles mögliche drin, nur nicht das was 
ich suche: ich hab mir ein kleines Testprogramm geschrieben, in dem in 
der main-Funktion einfach ein paar lokale Variablen mit verschiedenen 
Werten gefüttert und dann über die serielle Schnittstelle ausgegeben 
werden. Die Variablen tauchen aber im Mapfile nicht auf.

Ich hab mir die Doku angeschaut, ich vermute mal, dass entweder objdump 
oder nm das richtige Werkzeug ist, aber soweit ich die Doku momentan 
verstanden habe, akzeptieren beide ja nur einzelne Object-Dateien, also 
nicht das komplette Programm, d.h. ich würde jede Menge einzelne 
Mapfiles bekommen, das möchte ich aber nicht, sondern eben eine 
komplette Projekt-Mapdatei.

Kann man denn solche Symbol-Mapdateien erstellen lassen?

Ralf
#2901511
Lesenswert?
• ▲
▼
Ralf schrieb:
> Ich hab mir die Doku angeschaut, ich vermute mal, dass entweder objdump
> oder nm das richtige Werkzeug ist, aber soweit ich die Doku momentan
> verstanden habe, akzeptieren beide ja nur einzelne Object-Dateien, also
> nicht das komplette Programm

Auch das "komplette Programm" ist eine Objekt-Datei. Du kannst die 
Kommandos einfach auf die ELF-Datei loslassen.
Gast #2901525
Lesenswert?
• ▲
▼
Hi Stefan,

> Auch das "komplette Programm" ist eine Objekt-Datei. Du kannst die
> Kommandos einfach auf die ELF-Datei loslassen.
Ah, okay. Dann werd ich mal zusehen, dass ich ne ELF-Datei bekomme, die 
spuckt der Linker bisher auch nicht aus ;)

Und dann werd ich mir die Doku zu objdump/nm im Detail zu Gemüte führen.

Ralf
Gast #2901537
Lesenswert?
• ▲
▼
Ralf schrieb:
> in dem in
> der main-Funktion einfach ein paar lokale Variablen mit verschiedenen
> Werten gefüttert und dann über die serielle Schnittstelle ausgegeben
> werden. Die Variablen tauchen aber im Mapfile nicht auf.

IMHO werden lokale Variable auf dem Stack angelegt und haben keine feste 
Adresse.

MfG Klaus
Gast #2901574
Lesenswert?
• ▲
▼
Hi Klaus,

> IMHO werden lokale Variable auf dem Stack angelegt und haben keine feste
> Adresse.
Hmmm... okay, schade. Ich wollte ein wenig mit den Datentypen spielen 
(uint8_t, uint16_t, etc.) und schauen wie sie abgelegt werden (mit/ohne 
"Leerstellen" im Speicher), um ein Gefühl dafür zu bekommen, ob man eben 
Variablentypen so anlegt, dass der benötigte Bereich reinpasst oder man 
strikt 32-Bit-Variablen nehmen sollte, egal ob's eine 8-Bit-Variable 
auch getan hätte.

Ralf
Gast #2901718
Lesenswert?
• ▲
▼
Ralf schrieb:
> dass der benötigte Bereich reinpasst oder man
> strikt 32-Bit-Variablen nehmen sollte, egal ob's eine 8-Bit-Variable
> auch getan hätte.

Wenn's nicht gerade um Arrays geht, halte ich das so: ein Zeichen ist 
ein char, eine Zahl ein int oder ein long oder ein long long. Um den 
Rest soll sich der Compiler kümmern. Ausnahme sind 8 Bit Systeme, zu 
denen der ARM nicht gehört.

MfG Klaus
Gast #2902424
Lesenswert?
• ▲
▼
> Wenn's nicht gerade um Arrays geht, halte ich das so: ein Zeichen ist
> ein char, eine Zahl ein int oder ein long oder ein long long. Um den
> Rest soll sich der Compiler kümmern. Ausnahme sind 8 Bit Systeme, zu
> denen der ARM nicht gehört.
Da ich von den 8-Bittern komme tue ich mich da im ersten Moment schwer 
:)
Dort hat man eben Variablentypen gemäß dem nötigen Wertebereich gewählt. 
Bei den Cortex-M bzw. GCC muss man wohl von diesem Ansatz ablassen.

Ralf

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.