Ich habe kürzlich eine Frage von einem VOS-Kunden erhalten, der wissen wollte, wie er seine gemeinsam genutzten virtuellen Speicherbereiche zwischen seinen legacy -Programmen und seinen neuen POSIX-basierten Programmen ausrichten kann.
Dieser Kunde hatte mit dem Befehl create_data_object mehrere verschiedene gemeinsam genutzte virtuelle Speicherbereiche erstellt. Anschließend hatte er eine Bind-Steuerungsdatei verwendet, um sicherzustellen, dass jedes Programm in derselben Reihenfolge und unter derselben virtuellen Adresse auf die Bereiche verwies. Das Problem war, dass er die SVM-Bereiche nicht aufeinander abstimmen konnte, egal wie er den Befehl „gcc“ zum Binden seiner neuen POSIX-basierten Programme verwendete. Die neuen Programme platzierten die SVM-Bereiche an unterschiedlichen Adressen. Selbst die Verwendung einer Bindungsdatei mit „gcc“ half nicht weiter.
Die Bindungszuordnung (oder die Ausgabe des Befehls display_program_module) zeigt, dass POSIX-Programme immer mit den Objektmodulen „s_start_c_program“ und „crti“ beginnen. Das Objektmodul s_start_c_program erscheint später im legacy , und das Objektmodul crti erscheint überhaupt nicht. Das Vorhandensein dieser beiden Objektmodule verschiebt alle nachfolgenden Objektmodule in der Datei nach unten, was zu einer Fehlausrichtung führt.
Es gibt keine Möglichkeit, gcc daran zu hindern, diese beiden Objektmodule an den Anfang des Programmmoduls zu setzen. Die Lösung besteht also darin, die Art und Weise zu ändern, wie die legacy gebunden werden. Da SVM-Regionen an einer Seitengrenze beginnen müssen und die kombinierte Größe der Code-Regionen s_start_c_program und crti weniger als eine Seite beträgt, müssen wir lediglich eine zusätzliche, ungenutzte Seite am Anfang der legacy zuweisen. Verwenden Sie den Befehl create_data_object, um ein 4096-Byte-Datenobjekt zu erstellen, und fügen Sie es als erstes Objektmodul in die Bind-Steuerungsdatei ein.
Wir haben vereinbart, die Größe dieser beiden Programme auf maximal 1 Seite (4096) Byte zu begrenzen, sodass diese Lösung auch in Zukunft funktionieren wird.
Wenn Sie Fragen zu dieser Technik haben, stellen Sie diese bitte unten.
