J'ai récemment répondu à une question d'un client VOS qui voulait savoir comment faire pour que ses régions de mémoire virtuelle partagée s'alignent entre ses programmes legacy non-POSIX et ses nouveaux programmes basés sur POSIX.
Ce client avait utilisé la commande create_data_object pour créer plusieurs régions de mémoire virtuelle partagée différentes. Il avait ensuite utilisé un fichier de contrôle de liaison pour s'assurer que chaque programme référençait les régions dans le même ordre et à la même adresse virtuelle. Le problème était que, quelle que soit la manière dont il utilisait la commande gcc pour lier ses nouveaux programmes basés sur POSIX, il ne parvenait pas à aligner les régions SVM. Les nouveaux programmes placent les régions du MVC à des adresses différentes. Même l'utilisation d'un fichier de liaison avec gcc n'a pas aidé.
La carte de liaison (ou la sortie de la commande display_program_module) révèle que les programmes POSIX commencent toujours par les modules objets "s_start_c_program" et "crti". Le module objet s_start_c_program apparaît plus tard dans le programme legacy , et le module objet crti n'apparaît pas du tout. La présence de ces deux modules objet pousse tous les modules objet ultérieurs vers le bas dans le fichier, ce qui entraîne le désalignement.
Il n'y a aucun moyen d'empêcher gcc de mettre ces deux modules objets en premier dans le module de programme. La solution consiste donc à modifier la façon dont les programmes legacy sont liés. Comme les régions SVM doivent commencer sur une limite de page, et comme la taille combinée des régions s_start_c_program et crti code est inférieure à une page, il suffit d'attribuer une page supplémentaire, non utilisée, au début des programmes legacy . Utilisez la commande create_data_object pour créer un objet de données de 4096 octets et placez-le dans le fichier de contrôle bind comme premier module d'objet.
Nous avons convenu de limiter la taille de ces deux programmes à 1 page (4096) octets ou moins, donc cette solution fonctionnera à l'avenir.
Si vous avez des questions sur cette technique, veuillez les afficher ci-dessous.