2010-11-12 9 views
1

Un grand commentaire sur my answer describing how to use linker scripts to make a ctor-like function list a souligné que GND ld récente a beaucoup amélioré le support pour greffer de nouvelles sections dans les scripts de l'éditeur de liens système avec -Wl,-T... et INSERT BEFORE/INSERT AFTER. Cela m'a fait penser à d'autres astuces de script d'éditeur de liens. Pour un micrologiciel de carte réseau, j'ai modifié le script de l'éditeur de liens pour regrouper les modules d'exécution du micrologiciel afin qu'ils soient tous dans un bloc contigu pouvant être dans le cache L1 sans conflits. Pour nettoyer les traînards (où je ne pouvais pas grouper par .o) j'ai utilisé des attributs de section sur des fonctions individuelles. Les compteurs de performance ont vérifié que cela fonctionnait réellement (le cache d'instruction L1 réduit à presque rien).Utilisations intelligentes des scripts d'éditeur de liens?

Quelles autres choses intelligentes avez-vous accomplies avec les scripts de liens?

Répondre

2

Sur une certaine plate-forme, pour des raisons que je ne vais pas entrer dans, je devais avoir une section d'exécutable que je pourrais jeter après chargement. Maintenant, malheureusement, le démappage de la mémoire pour l'exécutable n'était pas possible, donc j'ai été obligé de recourir à la supercherie de linker. Ce que j'ai fini par faire était l'introduction d'une section de l'exécutable qui a aliasé le BSD. En supposant que je puisse faire un peu de code assez tôt, je pourrais copier les données, réinitialiser le bss, et tant que ma section aliasée serait plus petite que le bss total de l'exécutable, je n'aurais pas payé le privilège. Il y a quelques problèmes dans le fait que je ne pouvais pas vraiment changer le crt du tout et le premier point que je pouvais injecter du code était encore après l'initialisation de tls (qui utilisait quelques bss), mais rien d'impossible à contourner. Je suis encore un peu surpris que cela a fonctionné, j'aurais pensé que le bss a été initialisé par le crt après que toutes les sections du programme ont été chargées. Je ne l'ai pas essayé sur une plate-forme où j'ai accès au chargeur ou à la source crt.

Questions connexes