OberonCore
https://forum.oberoncore.ru/

64-х разрядные DLL из BlackBox
https://forum.oberoncore.ru/viewtopic.php?f=1&t=286
Страница 1 из 1

Автор:  MT [ Среда, 02 Август, 2006 22:22 ]
Заголовок сообщения:  64-х разрядные DLL из BlackBox

Подскажите какие необходимо внести исправления в линкер и(или) копилятор BlackBox для генерации 64-х разрядных WinApi приложений. Может кто нибудь это сделал?

Автор:  Сергей Оборотов [ Пятница, 04 Август, 2006 08:23 ]
Заголовок сообщения:  Re: 64-х разрядные DLL из BlackBox

MT писал(а):
Подскажите какие необходимо внести исправления в линкер и(или) копилятор BlackBox для генерации 64-х разрядных WinApi приложений. Может кто нибудь это сделал?
Исправлять не надо. Добавлять только. Такое пожелание.

Автор:  MT [ Пятница, 04 Август, 2006 15:52 ]
Заголовок сообщения: 

Добавлю, только не знаю что. Раскажите подробнее

Автор:  Илья Ермаков [ Пятница, 04 Август, 2006 23:36 ]
Заголовок сообщения: 

Ситуация такова - с одной стороны, надо править компилятор, с другой - адаптировать рантайм.

1) По компилятору. В ББ использован модифицированный под Компонентный Паскаль компилятор Оберона-2 OP2 (Oberon Portable Compiler). Этот компилятор написан специально с расчетом на легкую портируемость. Однопроходной компилятор с прямой кодогенерацией из синтаксического дерева. Для портируемости разбит на две части - front-end и back-end, от первого ко второму передается синтаксическое дерево.
Описание OP2 доступно здесь:
ftp://ftp.inf.ethz.ch/pub/software/Ober ... 2.Paper.ps
(если нужно, могу выложить в PDF).
В BlackBox принято то же именование модулей, но с префиксом подсистемы Dev.
Итого: в компиляторе ББ переписать придется 3 модуля - DevCPV486, DevCPL486, DevCPC486.

2) По рантайму - естественно, потребуется внести изменения в ядро Kernel и сборщик мусора. На поверхностный взгляд этого хватит, хотя наверняка потребуется дорабатывать и что-то еще.

Отдельно - потребуется решить вопрос, как быть с базовыми типами.
Трогать их крайне нежелательно, они зафиксированы в стандарте языка и сделаны совместимыми с Java. Видимо, нужно оставить за основной LONGINT и добавить HUGEINT для 128-бит арифметики.

Автор:  Сергей Оборотов [ Суббота, 05 Август, 2006 11:39 ]
Заголовок сообщения: 

Мне бы Вашу уверенность. Попробуйте сначала разобраться в форматe PE64 DLL. А потом добавить разбор дополнительных ключей в линкере. Типа pe32 и pe64.

Автор:  Илья Ермаков [ Суббота, 05 Август, 2006 12:14 ]
Заголовок сообщения: 

Да, про линковщик забыл!

DevLinker тоже придется править. Однако это отнюдь не самое сложное по сравнению с кодогенерацией и рантаймом. В рантайме сложности связаны с переходом на 64-бит указатели.

Автор:  Сергей Оборотов [ Суббота, 05 Август, 2006 13:00 ]
Заголовок сообщения: 

Уточнить детали формата PE64 можно по исходникам FASM http://flatassembler.net/fasmw167.zip

Автор:  Сергей Оборотов [ Суббота, 05 Август, 2006 17:06 ]
Заголовок сообщения: 

Цитата:
В рантайме сложности связаны с переходом на 64-бит указатели.
Кто-нибудь уже пытался?

Автор:  Илья Ермаков [ Суббота, 05 Август, 2006 22:06 ]
Заголовок сообщения: 

Не знаю по поводу попыток...

Вообще говоря, сложностей-то как таковых с переходом на указатели нет. Но есть много рутины, требующей внимательной правки кода ядра и, видимо, не только ядра.

Автор:  MT [ Понедельник, 07 Август, 2006 21:08 ]
Заголовок сообщения: 

Спасибо большое за ответы. Буду разбираться. Мне требуется генерация чистых 64-разрядных WinApi, kernel в части отвечающий за выделение памяти я давно написал под себя (требовалась многозадачность и отказался от сборки мусора). Что касается перехода на 64-х разрядную адресацию - кажется не сложно добавить новый тип PTR64 (может я ошибаюсь). Сложнее с форматом PE64 - хотя пишут что он не отличается по структуре от PE32.

Илья, если не сложно дайте ссылку на описание O2 в pdf формате.

Автор:  Илья Ермаков [ Вторник, 08 Август, 2006 20:47 ]
Заголовок сообщения: 

Вот, пожалуйста:

= Ссылка устарела =

Автор:  MT [ Среда, 09 Август, 2006 15:47 ]
Заголовок сообщения: 

Спасибо, скачал

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/