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

OP #3681876
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
Was meinst du denn mit Pro/Epilog?

In der GCC-Terminologie bezeichnen diese den Code, der vor bzw. nach dem 
eigentlichen Code der Funktion vom Compiler eingefügt wird um sich um 
Sachen kümmert wie Sichern/Wiederherstellen von Registern, Stack-Frame 
anlegen, Frame-Pointer initialisieren, Return-Sequenz, evtl. Code für 
Profiling, etc.
Persönliche Seite
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.
OP
Mit zwei getrennten Projekten passt es jetzt. Kann ich dem Eclipse 
irgendwie verklickern, den Quelltext des Bootloader Projektes zu laden, 
wenn ich debugge und aus dem Hauptprogramm in den Bootloader springe? 
Ich hab schon "Load Symbols" probiert, aber ohne Erfolg.
Christian R. schrieb:...Kann ich dem Eclipse
> irgendwie verklickern, den Quelltext des Bootloader Projektes zu laden,
> wenn ich debugge und aus dem Hauptprogramm in den Bootloader springe?



da müsste ein
1
(gdb) add-symbol-file <bootloader.elf> <startadresse bootloader>

helfen (kannst Du evt. zu deinem .gdbinit hinzufügen).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.