2009-07-06 7 views
3

J'ai vu ce terme dans le compilateur Python Lisp et dans certaines sources de C linker. Je suppose qu'une réparation est juste une enveloppe autour d'une routine d'assemblage qui s'assure que l'alignement est correct, mais je ne suis pas du tout sûr de quoi que ce soit ici.Définition de correction?

Répondre

8

Un "fixup" est un terme de liaison. Il y a une très bonne discussion ici:

http://www.microsoft.com/msj/0797/hood0797.aspx

Chaque fois qu'un fichier objet (.o, obj) fait référence à un symbole externe, il sera le code d'espace réservé de sortie comme « Mettre l'adresse 0 à enregistrer 5 » et un notez que "Remplissez ce 0 avec l'adresse réelle du symbole 'foo'". Un autre fichier d'objet va définir 'foo', l'éditeur de liens va alors revenir en arrière et "corriger" le 0 pour qu'il soit l'adresse correcte. Par ailleurs, si personne ne définit 'foo', vous obtenez ce message d'erreur de style des années 50 rétro flirter quelque chose comme 'ne trouve pas de référence à _foo' ou encore moins compréhensible si vous utilisez C++.

Et assez rarement, vous obtiendrez une "erreur de correction" lorsque l'adresse de "foo" ne correspond pas à l'endroit où l'éditeur de liens veut le mettre. Généralement, cela provient d'une correction qui nécessite un décalage relatif trop grand.

+0

Bonne réponse et un lien, merci. – skypher

1

Linker et chargeuses est une ressource intéressante qui explique désencrage beaucoup de jargon, et comprend CPUs non x86 ici et là aussi:

http://www.iecc.com/linker/

du modérateur de comp.compilers.