Frage

Wir sind für eine Client-Architektur einen Port des GNU Assembler entwickeln. Nun ist das Problem konfrontiert ist, dass:

Wenn ein unmittelbarer Operand eine Anweisung ist ein Ausdruck mehr als ein verschiebbares Symbol beteiligt, wie ist es behandelt in der Ausgabedatei in elf Format. Was wird die Verschiebungsinformationen in einem solchen Fall erzeugt werden?

Zum Beispiel:

j label1 + label2

wo label1 und label2 in relocatable Abschnitte definiert sind, könnten sie die gleichen Teile oder unterschiedliche relocatable Abschnitte sein.

War es hilfreich?

Lösung

ELF weiß nicht, über Anweisungen, per se. Er weiß über bestimmte Kodierungen von Symbolverschiebungen innerhalb Anweisungen. In dem Assembler, würde man zur Ausgabe zwei Relocation Aufzeichnungen muß, die jeweils mit dem entsprechenden [Adresse, Typ, Symbol] Triplett richtig auf den Teil des Befehls Patch. Der Linker würde nicht notwendigerweise auch wissen, dass diese beiden Datensätze auf den gleichen Befehl zeigen.

Die ELF Relocation-Typen sind vollständig CPU-abhängige (oder, genauer gesagt, ISA-abhängig zu sein), so dass Sie frei zu definieren sind, was Verlagerungen Sie für eine neue Architektur benötigen.

Es ist schwer spezifischere ohne Einzelheiten der Befehlscodierung zu sein.

Andere Tipps

Ich weiß Buchse über ELF und nur ein wenig mehr über die Verknüpfung aber ...

Ich würde erwarten, dass jeder Operand die gleiche Art und Weise behandelt wird, dass es wäre, wenn es nur eine ist.

OTOH könnte sein, das Problem, dass das Format für j ändert, je nachdem wo die Etiketten? Wenn ja, I denkt sind Sie gesunken als Linker nicht klug genug ist, so etwas zu tun (der ADA-Build-System IIRC klüger sein könnte als die meisten so man es aussehen könnte.)

würde ich erwarten, einen Eintrag pro Adresse für jede Anweisung, die Verlagerung benötigt.

objdump möglicherweise in der Lage, die Verschiebungstabelle einer ausführbaren oder Objektdatei angezeigt werden, aber ich weiß nicht, die Flaggen offhand.

ist mein Vorschlag zu versuchen, ein x86 (oder andere CISC) Instruktion zu graben, die etwas Ähnliches, was tut Ihr Client Bogen tut, und sehen, was Verlagerungen erzeugt werden, wenn Sie montieren / verknüpfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top