Forum: Compiler & IDEs Symboltabelle/MAP-File erzeugen?


von Ralf (Gast)


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

von Stefan E. (sternst)


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.

von Ralf (Gast)


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

von Ralf (Gast)


Lesenswert?

Nachtrag:
> Dann werd ich mal zusehen, dass ich ne ELF-Datei bekomme, die
> spuckt der Linker bisher auch nicht aus
Ich seh grad, die AXF-Datei IST die ELF-Datei, wenn ich das richtig 
sehe...

Ralf

von Klaus (Gast)


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

von Ralf (Gast)


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

von Klaus (Gast)


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

von Ralf (Gast)


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

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.