14.01.2015 Aufrufe

Dynamische Adaption in heterogenen verteilten eingebetteten ...

Dynamische Adaption in heterogenen verteilten eingebetteten ...

Dynamische Adaption in heterogenen verteilten eingebetteten ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

4 Basisschicht e<strong>in</strong>es Verwalters<br />

die Eigenschaften von Sektionen zurückgreifen, die unter anderem angeben, ob sich der Inhalt e<strong>in</strong>er<br />

b<strong>in</strong>ären Sektion zur Laufzeit im Speicher des Programms bef<strong>in</strong>det (Flag: SHF_ALLOC).<br />

Für jede der so bestimmten Sektionen werden anschließend die Symbole analysiert, die Positionen<br />

<strong>in</strong>nerhalb der Sektion beschreiben. Ist nur e<strong>in</strong> Symbol vorhanden, welches darüber h<strong>in</strong>aus die gesamte<br />

Sektion abdeckt, so wird e<strong>in</strong> E<strong>in</strong>zelsymbolmodul erzeugt. S<strong>in</strong>d <strong>in</strong> e<strong>in</strong>er Codesektion neben diesem<br />

Symbol noch lokale Symbole vorhanden, die weder Typ noch Größenangabe enthalten, so wird<br />

ebenfalls e<strong>in</strong> E<strong>in</strong>zelsymbolmodul erzeugt. Hierbei wird angenommen, dass es sich bei den zusätzlichen<br />

Symbolen um <strong>in</strong>terne Sprungmarken e<strong>in</strong>er Funktion handelt, die nicht von außen angesprungen werden.<br />

In allen anderen Fällen muss e<strong>in</strong> Multisymbolmodul erzeugt werden (Abbildung 4.16).<br />

Abbildung 4.16: E<strong>in</strong>zel- oder Multisymbolmodul<br />

Zur Bestimmung, ob es sich um e<strong>in</strong> Daten- oder Funktionsmodul handelt, können mehrere Merkmale<br />

ausgewertet und mite<strong>in</strong>ander abgestimmt werden. Der beste Weg, den Typ festzustellen, ist die<br />

Überprüfung der Typ<strong>in</strong>formation <strong>in</strong> den Symbolen. Zeigen alle Symbole entweder auf Daten oder<br />

auf Funktionen, so kann hieraus der Typ des Moduls abgeleitet werden. Es gibt jedoch Compiler,<br />

die Symbole ohne diese Kennzeichnung erzeugen 10 . Außerdem kann der Inhalt e<strong>in</strong>er Sektion auch<br />

durch e<strong>in</strong> allgeme<strong>in</strong>eres Sektionssymbol angesprochen werden (siehe Abschnitt 4.2.5.1). In diesen<br />

Fällen kann als Merkmal der Name der Sektion herangezogen werden. Beg<strong>in</strong>nt er mit .text, so<br />

handelt es sich üblicherweise um Code. Beg<strong>in</strong>nt er h<strong>in</strong>gegen mit .data, .rodata oder .bss, so<br />

s<strong>in</strong>d Daten abgespeichert. Da der Name jedoch ke<strong>in</strong> e<strong>in</strong>deutiges Merkmal darstellt, kann man die<br />

Annahme durch die Eigenschaften der Sektionen, welche <strong>in</strong> der ELF-Sektionstabelle gespeichert<br />

s<strong>in</strong>d, untermauern. E<strong>in</strong>e Sektion, die Code enthält, muss als ausführbar gekennzeichnet se<strong>in</strong> und ist<br />

normalerweise nur-lesbar, woh<strong>in</strong>gegen Datensektionen nicht ausführbar s<strong>in</strong>d.<br />

Nachdem ermittelt wurde, welche Art von Modul erstellt wird, werden die Symbole und Relokationen<br />

vere<strong>in</strong>heitlicht, sodass ke<strong>in</strong>e ELF-spezifischen Informationen mehr verwendet werden. Dabei werden<br />

die Symbole <strong>in</strong> zwei Typen unterteilt:<br />

Endgültige Symbole (F<strong>in</strong>alSymbol). Symbole, deren Werte bekannt s<strong>in</strong>d und entweder e<strong>in</strong>e Position<br />

<strong>in</strong>nerhalb des Moduls oder e<strong>in</strong>en absoluten Wert repräsentieren.<br />

Zielsymbole (RelocationSymbol). Symbole, die als Ziel von Relokationen e<strong>in</strong>gesetzt werden.<br />

Sie enthalten ke<strong>in</strong>en Wert, sondern dienen als Platzhalter und werden später mit e<strong>in</strong>em endgültigen<br />

Symbol des selben Namens verbunden.<br />

E<strong>in</strong>e Relokation enthält nach der Vere<strong>in</strong>fachung nur noch die Position <strong>in</strong>nerhalb des Moduls, an der<br />

e<strong>in</strong>e Änderung vorgenommen werden soll, das Zielsymbol, welches den Wert liefert der e<strong>in</strong>gefügt<br />

werden soll und e<strong>in</strong>en Typ, der die Art und Weise des E<strong>in</strong>fügens genauer beschreibt.<br />

10 Beispiel hierfür ist der GCC für H8 Architekturen. Beobachtet mit verschiedenen GCC-Versionen von<br />

http://www.kpitgnutools.com/ (KPIT GNU Tools and Support). Neueste getestete Version: 4.2-<br />

GNUH8_v0703 (entspricht GCC 4.2.1).<br />

78

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!