Forum: Compiler & IDEs Output Section


von Bruno K. (Gast)


Lesenswert?

Hallo Leute,

ich beschäftige mich zur Zeit mit dem GCC, da ich ein Array an einer 
bestimmten Adresse definieren will. Leider hab ich nicht so viel Zeit 
von Null anzufangen und dann alles durchzuarbeiten, nur um diesen 
Speicher zu reservieren. Wäre mir zwar lieber, weil ich kein 
gefährliches Halbwissen mag, aber... kann mir einer bitte erklären, was 
es mit der Output Section auf sich hat? Ich weiß nicht genau was ich mir 
darunter vorstellen kann. Ich weiß, dass es ein "Bereich" bzw. eine 
(bestimmte) Stelle in der Output File ist. Trotzdem kann ich mir nichts 
genaues darunter vorstellen, da ich mich bisher noch nicht großartig mit 
der Funktion eines Linkers auseinandergesetzt habe, da ich es bisher 
noch nicht gewagt hab mich daran zu probieren.

Danke schon mal für die Hilfe

Grüße B0bbyR4y

von Andreas B. (andreas_b77)


Lesenswert?

Grob überrissen:

Alles wird in irgendeine Sektion abgelegt (das heißt an die schon 
bestehenden Daten darin angehängt). Traditionell unter Unix und auch 
generell bei Mikrocontrollern sind das .text (für Code, ausführbar und 
nicht schreibbar), .data (für Variablen mit Initialisierung, schreibbar, 
nicht ausführbar) und .bss (wie .data, nur mit 0 initialisiert), seit 
längerem auch .rodata (nicht schreibbar, nicht ausführbar, für konstante 
Daten).

Wenn man nur alle Objekte beim Linken hintereinander hängt wäre alles 
unpraktisch durcheinander gemischt. So hingegen kann der Linker alle 
.text Sektionen hintereinander hängen und gemeinsam ins .text der 
Ausgabe schreiben. (Jede Sektion hat dabei noch andere Eigenschaften, 
wie etwa eine Startadresse.) So lassen sich z.B. alle .bss Variablen in 
einem Rutsch auf 0 initialisieren.

Ebenso kann man auch eigene Sektionen definieren. Man muss dann halt 
auch ein angepasstes Linkerskript verwenden damit der Linker auch weiß, 
was er mit der Sektion machen soll (z.B. eben an eine bestimmte Adresse 
legen).

von Bruno K. (Gast)


Lesenswert?

Hi Andreas,

dass habe ich jetzt soweit verstanden. Danke.
Kannst du mir noch sagen, wo ich die Input Datei(en) und die Output 
Datei finden kann?
Die Objekt Dateien sind ja die mit der *.o Endung oder?

Grüße
B0bbyR4y

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.