www.mikrocontroller.net

Forum: Compiler & IDEs Object-Files gegen existierende Symboltabelle linken


Autor: R. W. (rickw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mit dem msp430-g++ ein Projekt kompiliert, gebunden und per 
LinkerScript extra einen bestimmten Speicherplatz für ein Modul 
reserviert. Das ganze ist so etwas wie ein Betriebssystemkern.

Jetzt habe ich ein paar Source-Dateien (Modul), die ich gern gegen die 
Symboltabelle dieses "Kerns" linken möchte, um den entstandenen 
Binärcode dann auf den Mikrocontroller zu übertragen. Im Kern habe ich 
schon einen Funktionspointer als Einsprungpunkt vorgesehen.

Ist so etwas mit dem gnu-compiler/linker überhaupt möglich? Die 
Symboltabelle habe ich mit nm erhalten, aber ich verstehe nicht, wie ich 
den Linker damit in einem zweiten Schritt füttern kann.

Vielen Dank für Hinweise

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun, das würde wohl auf eine Art shared lib hinauslaufen.

Ist aber eigentlich Overkill für das, was du vorhast.  Schreib doch
einfach eine separate Datei, die die Einsprungpunkte deines OS
beschreibt, so in der Art:
typedef void (*osfunc)(void);

void call_os(void)
{
   osfunc entry1 = (osfunc)0x8000;

   entry1();
}

Autor: R. W. (rickw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

danke für den Tipp. Aber die Einsprungpunkte von Hand zu setzen, wäre zu 
aufwändig. Das Betriebssystem ist in C++ geschrieben, die Module erben 
von Klassen, die schon im System vorhanden sind und erweitern sie um 
neue Funktionalitäten. Das heißt, es gibt viel zu viele Sprünge und 
Abhängigkeiten.

Im Prinzip bestehen die Module nur aus Objekten. Methodenaufrufe von 
außen sind rein virtuell. Von daher klappt das auch wunderbar.

Jetzt möchte ich diese Module halt gern auf dem PC linken. Es soll ja 
Leute geben, die einen ELF-Linker in 3KB Code gequetscht haben, aber das 
kann doch nicht die einzige Möglichkeit sein.

Was du außerdem mit Shared Libraries ansprichst, würde so weit ich weiß 
mit dem msp430-gcc nicht funktionieren, da er das nicht unterstützt.

Richard

EDIT: Ich nehme letzteres zurück. Msp430-ld verwendet selbst eine 
lbgcc.a für Spezialfunktionen. Also kann er es anscheinend doch.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eine .a ist üblicherweise keine shared lib, sondern statisch, oder?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.