Forum: Compiler & IDEs __trampolines_end, Was ist das?


von N. G. (newgeneration) Benutzerseite


Lesenswert?

Hallo Forum,

ich habe mir gerade den Output des GCCs angeschaut.
Dabei ist mit aufgefallen, dass von den knapp 2350 Bytes Flash Speicher, 
die verbraucht sind, etwa ein drittel auf dieses ominöse 
__trampolines_end entfällt. Was macht diese "Funktion" (falls man es so 
nennen kann)?
Ich habe eine etwas größere Tabelle im Flash via PROGMEM gespeichert, 
hängt das vllt damit zusammen?

Wichtig wäre auch zu wissen ob und wie oft das ausgeführt wird, ich 
denke zwar nur einmal beim startup, aber fragen schadet ja nicht.

Danke schonmal

von jemand (Gast)


Lesenswert?

Soweit sich das von einem anderen Compiler übertragen lässt:
Trampolines gibt es, wenn man größere Adresssprünge beim Programmcounter 
nicht direkt durchführen kann. So kann man mit RJMP (relative Jump) beim 
AVR nicht beliebig weit springen, braucht für eine größere Sprungweite 
also eine Zwischenadresse, von der man weiterspringen kann - das 
Trampolin.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

N. G. schrieb:
> Was macht diese "Funktion" [__trampolines_end] ?

__trampolines_end ist ein im Linker-Description-File definiertes Symbol. 
"Trampolines" ist avr-gcc-Sprech für "Linker Stub".

Vermutlich hat __trampolines_end den gleichen Wert wie ein anderes 
Symbol, z.B. main.  Genaueres erfährst du aus dem Map-File.  Binutils 
können von einer Adresse nicht eindeutig auf ein Symbol schließen, und 
wählen dann ein Symbol mit passendem Wert für die Anzeige.

> von den knapp 2350 Bytes Flash Speicher, die verbraucht sind,
> etwa ein drittel auf dieses ominöse __trampolines_end entfällt.

__trampolines_end belegt als "reines" Symbol keinen Platz, und es gibt 
auch kein Objekt diesen namens.

Die Anzahl erzeugter Stubs ist  (__trampolines_end - 
__trampolines_start) / 4, aber vermutlich erzeugt dein Code kein 
einziges Stub.

Die für __trampolines_end angezeigte Größe gehört zu einem anderen 
Objekt.  Abermals cf. Map-File.

von N. G. (newgeneration) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,
ich kann leider mit dem map-file so gar nichts anfangen.
Ich hänge einfach mal das file an, es wäre nett wenn du mir 
erklären/zeigen könntest wo das Symbol herkommt.

von Peter D. (peda)


Lesenswert?

Das ist ein Datenarray im Flash, was irrtümlich im Listing als Code 
dargestellt wird.

von Markus F. (mfro)


Lesenswert?

Aus dem Mapfile ist deutlich zu erkennen, daß __trampolines_start bei 
0x00000068 beginnt und __trampolines_end ebenso an jener Adresse liegt. 
Auch das nachfolgende Objekt aus font.o liegt an derselben Adresse.

Das heißt, daß durch die Datenstruktur kein Platz belegt wird.
1
*(.progmem.gcc*)
2
                0x00000068                . = ALIGN (0x2)
3
                0x00000068                __trampolines_start = .
4
 *(.trampolines)
5
 .trampolines   0x00000068        0x0 linker stubs
6
 *(.trampolines*)
7
                0x00000068                __trampolines_end = .
8
 *(.progmem*)
9
 .progmem.data.font_standard
10
                0x00000068      0x2a0 ./DOGM/font.o

von guest (Gast)


Lesenswert?

Das was da im .lss fälschlicherweise unter __trampolines_end als Code 
angezeigt wird dürfte tatsächlich der Inhalt von 'font_standard' sein.

von N.G. (Gast)


Lesenswert?

(Vom Handy aus, deswegen nicht angemeldet)

War also so wie vermutet :D

Danke an alle

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.