Ich habe weit und breit für das, wie dies zu tun ist, und haben es versäumt, mit einer Antwort zu kommen.Linker-Skript - Platzieren eines Abschnitts am Ende einer Speicherregion
Mein Speicher-Layout ist wie folgt:
Fake Address | Section
0 | text
7 | relocate
15 | bss
23 | stack
Am Ende des Stapels ich den Haufen legen. Was aufwächst und der Stapel ist ein vollständig absteigender Stapel für den ARM-Chip, den ich benutze.
Nun, was ich tun möchte, ist ein einzelner Abschnitt, nennen wir es .persist
, in meinen RAM-Speicher. Ich möchte, dass es am Ende des RAM residiert, und ich möchte dies in mein Linker-Skript einprogrammieren. Diese .persist
Abschnittsgröße wird jedoch nicht von mir definiert, sondern vom Compiler anhand der darin enthaltenen Symbole berechnet.
Bis jetzt habe ich keine gute Möglichkeit, es zu tun. Da ich die RAM-Startadresse und GRÖSSE kenne, wäre es trivial zu berechnen, wohin der Abschnitt gehen soll, wenn ich die Abschnittsgröße kenne. Doch nach the GNU linker documentation (pg 74) es scheint, dass:
SIZEOF (Abschnitt) Gibt die Größe in Bytes des benannten Abschnitt, wenn dieser Abschnitt zugeordnet ist. Wenn der Abschnitt bei der Auswertung nicht zugeordnet wurde, meldet der Linker einen Fehler.
so kann ich die Größe des Abschnitts im Linker-Skript nicht erarbeiten (da ich die Größe berechnen möchte, BEVOR ich es platziere/zuteile).
Kennt jemand einen guten Weg, dies zu tun?
hatte ich das gleiche Problem. Hilft dir das? http://StackOverflow.com/a/19348569/911550 – parvus
Es ist eine Teillösung, aber nicht das, was ich möchte. Es ist immer noch der nächste, dem irgendjemand sonst helfen wollte. Vielen Dank! – nonsensickle