2008-12-06 7 views
10

Nous développons un port de l'assembleur GNU pour une architecture client. Maintenant le problème rencontré est que:Symboles relocalisables au format ELF (langage d'assemblage)

Si un opérande immédiat d'une instruction est une expression impliquant plus d'un symbole relocatable, comment est-il géré dans le fichier de sortie au format elf. Quelle sera l'information sur la réinstallation produite dans un tel cas?

Par exemple:

j label1 + label2 

où label1 et label2 sont définis dans les sections délocalisables, ils pourraient être les mêmes sections ou les différentes sections délocalisables.

Répondre

7

ELF n » Je ne connais pas les instructions en soi. Il connaît les codages particuliers des décalages de symboles dans les instructions. Dans l'assembleur, vous devez générer deux enregistrements de relocalisation, chacun avec le triplet correspondant [adresse, type, symbole] pour corriger correctement cette partie de l'instruction. L'éditeur de liens ne sait pas nécessairement que ces deux enregistrements pointent vers la même instruction. Les types de relocalisation ELF dépendent entièrement de l'UC (ou, plus précisément, de l'ISA). Vous pouvez donc définir librement les relocalisations dont vous avez besoin pour une nouvelle architecture.

Il est difficile d'être plus précis sans les détails de l'encodage des instructions.

0

Je sais prise à propos de ELF et seulement un peu plus sur l'association, mais ...

Je suppose que chaque opérande est traité de la même manière qu'il serait s'il n'y avait qu'un seul.

OTOH pourrait être le problème que le format pour j varie selon l'endroit où les étiquettes sont? Si oui, je pense vous êtes irrécupérables comme linkers ne sont pas assez intelligents pour faire ce genre de chose (le système de construction ADA IIRC pourrait être plus intelligent que la plupart de sorte que vous pourriez regarder.)

0

Je m'attendrais à une entrée par adresse pour chaque instruction qui doit être déplacée. Objdump pourrait être en mesure d'afficher la table de relocalisation d'un fichier exécutable ou d'un objet, mais je ne connais pas les drapeaux à la main.

Ma suggestion est d'essayer de déterrer une instruction x86 (ou autre CISC) qui fait quelque chose de similaire à ce que fait votre arc client, et de voir quelles relocalisations sont générées lorsque vous l'assembler/lier.