Un éditeur de liens peut produire un exécutable plus petit et pourtant incorrect. Mold 2.42 rappelle que suppression, fusion du code et métadonnées doivent rester cohérentes.

Les changements de cette version
Les notes 2.42.0 ajoutent SFrame v3, relocations Android compactées et niveaux de compression du débogage. Elles corrigent aussi la fusion de code identique concernant exceptions, symboles remplaçables et alignement. Le projet annonce des gains, mais cet article ne fournit pas de chronométrage comparatif.
Ces fonctions agissent à des niveaux différents. Compacter les relocations exige un chargeur compatible ; compresser le débogage modifie les données stockées ; fusionner décide si des sections peuvent partager une implémentation. Réussir l’édition de liens ne rend pas ces questions interchangeables.
Quatre octets d’alignement ne permettent pas toute adresse
Notre exemple simplifié comporte deux fonctions candidates avec les mêmes instructions. L’une exige un alignement sur quatre octets. Après fusion, 0x1002 ne convient pas : son reste dans la division par quatre vaut deux. 0x1004 respecte la contrainte.
Ce calcul ne représente pas tous les contrôles d’équivalence de mold. Il isole une raison pour laquelle « mêmes instructions » ne suffit pas : le placement conservé doit respecter les contraintes pertinentes des entrées combinées. Exceptions et remplacement de symboles créent d’autres différences, avant même l’alignement.
La couverture compare les deux adresses à cette exigence commune. C’est un calcul explicatif, pas le résultat d’un exécutable que nous aurions testé.
L’information de pile suit le code conservé
Le support SFrame traite les entrées lors des suppressions ou fusions et produit un ordre par adresse de fonction. Imaginez l’index d’un livre : supprimer ou déplacer un chapitre oblige à le corriger, même si le texte restant ne change pas. Recopier l’ancien index conserverait des références erronées.
Lors d’une mise à jour de chaîne de compilation, vérifiez donc le résultat autant que la durée. Exercez traces de pile, exceptions et outils intervenant après l’édition de liens. Pour les relocations Android, incluez chargeur et environnement cible dans la vérification de compatibilité.
Chronométrez avec les mêmes entrées et options. Réduire un fichier de débogage peut être utile même si sa compression ralentit la construction ; accélérer l’édition de liens ne justifie pas de changer le comportement du programme. Mesurez ce qui correspond au fichier réellement livré.
Revue du 8 septembre : sources primaires et état livré vérifiés, limites corrigées, illustration utile et explication originale.