У меня есть программа на Аде, написанная для конкретной (встроенной, многопроцессорной, 32-разрядной) архитектуры. Я пытаюсь использовать этот же код в моделировании на 64-битном RHEL в качестве общего объекта (поскольку существует несколько версий, и мне нужно выбрать версию во время выполнения).
У меня проблема в том, что в коде есть несколько мест, где люди, которые его написали (не я...), использовали Unchecked_Conversions для преобразования System.Addresses в 32-битные целые числа. Не только это, но и множество подпрограмм с жестко закодированными адресами памяти. Я могу внести небольшие изменения в этот код, но полностью портировать его на x86_64 на самом деле не вариант. Существуют подпрограммы, которые обрабатывают прерывания, планируют задачи ЦП и т. д.
Этот код работал нормально в прошлом, когда он был статически связан с предыдущей версией моделирования (состоящей из Fortran/C/C++). Однако теперь запускается основной исполняемый файл, а затем загружается общий объект на основе некоторых входных данных. Затем этот общий объект проверяет некоторые другие входные данные и загружает соответствующий общий объект Ады.
Просматривая код, становится очевидным, что он должен работать нормально, если я могу сохранить адреса логической памяти от 0 до 2 147 483 647 (32-разрядное целое число со знаком). Есть ли способ заставить загрузчик общих объектов оставить место в нижних диапазонах для кода Ады или, возможно, заставить код Ады «думать», что его адреса находятся в диапазоне от 0 до 2 147 483 647?
-m32
. Это создаст 32-битные (i386) исполняемые файлы. - person Ulfalizer   schedule 29.04.2015