msp430-gcc: Prolog und Epilog einer Funktion mit in Section

#3681876
Lesenswert?

Ich hab seit langem mal wieder den msp430-gcc angeworfen (Version 4,8 in 
der CCE6 Version von TI). Und ich möchte einen Flash-Updater in eine 
Firmware integrieren. Mit angepasstem Linker-Script klappt das schon 
ganz gut, sämtliche Funktionen die ich für das Eigenupdate benötige 
landen in einer eigens dafür angelegten Section. Allerdings haut mir der 
GCC die Epiloge nicht in diese Section sondern in die normale .text 
Section, so dass ich an einer bestimmten Stelle ein Problem bekomme, 
weil ich irgendwann den Sektor lösche, in dem der Epilog der 
Flash-Funktion steht. Und dann ist natürlich Absturz.
Ich bin jetzt nicht der absolute GCC Crack und Google hat bisher auch 
nicht weiter geholfen. Wie krieg ich das hin, dass er die gesamte 
Funktion mit allem, was dazugehört, in die angegebene Section wirft?
Persönliche Seite #3681960
Lesenswert?

Da ich von msp430 keine Ahnung hab, hab ich mal ein Blick ins msp430 
Backend geworfen, allerdings den offiziellen GCC 4.9.

Da gibt's "epilogue_helper": 
http://gcc.gnu.org/viewcvs/gcc/branches/gcc-4_9-branch/gcc/config/msp430/msp430.md?revision=210656&view=markup#l924

Diese wiederum sind implementiert in der libgcc: 
http://gcc.gnu.org/viewcvs/gcc/branches/gcc-4_9-branch/libgcc/config/msp430/epilogue.S?view=co&revision=209304&content-type=text%2Fplain

Du müsstest diese Funktionen auch in deine Sonder-Sections legen.

Mit deinem Ansatz ist aber mit weiteren Problemen zu rechnen:

- Evtl. fehlen dem Flash-Updater dann diese Funktionen.

- Ditto für zip andere Fnuktionen der libgcc zu denen (implizite)
  Aufrufe im erzeugten Code sein können: Vergleiche, Shifts,
  Multiplikation, float Arithmetik, ... siehe Quellen
  in $GCC_SOURCE/libgcc/config/msp430/

Um solchen und ähnlichen Problemen aus dem Weg zu gehen, sind daher 
Flash-Updater (Bootloader) und Anwendung üblicherweise 2 getrennte 
Projekte.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren