OberonCore
https://forum.oberoncore.ru/

XDS 2.6 beta release
https://forum.oberoncore.ru/viewtopic.php?f=30&t=3739
Страница 2 из 6

Автор:  igor [ Пятница, 30 Декабрь, 2011 18:30 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

Александр Ильин писал(а):
Знать бы, что такого хорошего и полезного добавилось...
Могу преположить, что Ваши DLL (и мои тоже) теперь всегда будут на всякий случай ( :) ) импортировать дополнительные библиотеки. В пользу этой версии говорит и одинаковый прирост в 23КБ. Точно можно выяснить, если прогнать dll-ку через какой-нибудь PE-explorer. Особый интерес здесь представляют секции импорта и экспорта. Думаю, что различия в размере PE-файла из-за них.

Автор:  Александр Ильин [ Пятница, 30 Декабрь, 2011 18:32 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

igor писал(а):
Как и следовало ожидать, в основном (хоть и не во всём) изменения заключаются в расширении уже существующей системы.
Собственно, для меня эти расширения не актуальны. Я решил перейти на новую версию, потому что на официальном сайте заявлено, что в ней "bug fixes". С другой стороны, раз есть расширения, то есть и новые баги. :)
Я подозреваю, что в основном включение XDS-C и TSCP сыграло роль в распухании базы. ООП такое ООП.

Насчёт bugs fixed у меня есть подтверждения, я готовлю материал на эту тему. Например, больше не воспроизводится "type guard bug" - это когда при применении охраны типа к результату функции эта функция вызывалась дважды. Теперь на моём тестовом примере этого не происходит.

Автор:  Александр Ильин [ Пятница, 30 Декабрь, 2011 18:38 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

igor писал(а):
Александр Ильин писал(а):
Знать бы, что такого хорошего и полезного добавилось...
Могу преположить, что Ваши DLL теперь всегда будут на всякий случай ( :) ) импортировать дополнительные библиотеки.
Если вернуть старый libxds.lib, то линкер ругается вот как:
Код:
Error (54): Name 'X2C_TRAP_INDEX_C' not found (referenced in  file ***.ob2)
Error (54): Name 'X2C_TRAP_NIL_C' not found (referenced in  file ***.ob2)
Error (54): Name 'X2C_ASSERT_FC' not found (referenced in  file ***.ob2)
Суффикс "C" подсказывает мне, что речь идёт о функциях, доставшихся нам вместе с XDS-C. Раньше ведь они назывались просто X2C_TRAP_INDEX, X2C_TRAP_NIL и X2C_ASSERT_F соответственно. В новой версии libxds.lib есть и старые имена функций, и новые. Неудивительно, что сам этот файл распух с 314 Кб до 746 Кб!

Интересно, есть ли какая-то опция, чтобы использовать старые функции (раз уж они по-прежнему есть в наличии)? Может быть, удастся вернуть размер dll-ок на прежний уровень. В diff'ах документации я видел, что появилось несколько новых опций компилятора.

Автор:  igor [ Пятница, 30 Декабрь, 2011 18:41 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

Александр Ильин писал(а):
Насчёт bugs fixed у меня есть подтверждения
Это хорошие новости :)
Что касается разбухания PE-файлов, то можно попробовать использовать старую версию компоновщика. Прям сейчас этим и займусь. :)

Автор:  Александр Ильин [ Пятница, 30 Декабрь, 2011 18:43 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

В примерах появился интересный проект samples/mixed, который, как будто, демонстрирует проект, написанный совместно на Modula-2 и C. Или там два проекта, использующие общую часть исходников? я ещё не разбирался. В общем, добавление XDS-C может облегчить взаимодействие с сишными программами, что может быть весьма актуально. Надо посмотреть.

Автор:  Александр Ильин [ Пятница, 30 Декабрь, 2011 18:45 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

igor писал(а):
Что касается разбухания PE-файлов, то можно попробовать использовать старую версию компоновщика. Прям сейчас этим и займусь. :)
Обязательно напишите о результатах!

Автор:  igor [ Пятница, 30 Декабрь, 2011 18:50 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

Александр Ильин писал(а):
igor писал(а):
Прям сейчас этим и займусь. :)
Обязательно напишите о результатах!

Со старой версией компоновщика (v2.6) прирост составил 107КБ против 111КБ с новым компоновщиком (v2.13.3). Ну, то есть сам компоновщик не слишком-то "виноват".

Автор:  igor [ Пятница, 30 Декабрь, 2011 19:05 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

igor писал(а):
Ну, то есть сам компоновщик не слишком-то "виноват".
Старый компоновщик ничего не знает про новые библиотечные расширения. Значит "зараза" :) прёт из объектных файлов.

Автор:  Александр Ильин [ Пятница, 30 Декабрь, 2011 19:07 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

igor писал(а):
igor писал(а):
Ну, то есть сам компоновщик не слишком-то "виноват".
Старый компоновщик ничего не знает про новые библиотечные расширения. Значит "зараза" :) прёт из объектных файлов.
Я так понимаю, что это ведь компилятор генерирует обращения к функциям типа X2C_ASSERT_FC при генерации кода стандартной функции ASSERT. И эти имена (их вызовы) зашивает в объектные файлы. Значит, надо копаться в настройках компиляции.

Автор:  igor [ Пятница, 30 Декабрь, 2011 19:27 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

На всякий случай прогнал свой икзешничег через утилиту dumpbin.exe с ключами /imports и /exports. Никакого криминала не обнаружил. Экспорт, как и следовало ожидать, вообще пустой. А импорт только из KERNEL32.DLL и USER32.DLL. Ничего "левого".

Автор:  Александр Ильин [ Пятница, 30 Декабрь, 2011 20:18 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

Внутри компилятора строка "X2C_TRAP_NIL" без суффикса тоже не встречается, так что вряд ли есть такая опция компиляции.

Хекс-редактором поправил obj-файлы после компиляции: убрал суффиксы "C", поправил длины строк, добавил нулей для компенсации смещения, после чего скомпилировал WebEdit.dll новым компилятором/линкером XDS 2.60. Размер dll-файла после компиляции в XDS 2.51: 59'392; в XDS 2.60 с использованием старого libxds.lib (от 2.51) размер: 61'952, при использовании нового libxds.lib пропатченные объектники всё равно дают больший размер: 72'704.

Вывод: имя функции, с префиксом оно или без, роли не играет. Просто в новой либе больше кода под эти рантаймовые функции.

Дублирование имён внутри libxds.lib, скорее всего, сделано для совместимости с предыдущей версией.

Автор:  GameHunter [ Пятница, 30 Декабрь, 2011 22:40 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

Опробовал новый XDS на своих расчётах.

У меня 2 основных режима компиляции: проверочный (со всеми проверками без оптимизации) и рабочий (без проверок с оптимизацией). В проверочном режиме всё работает как и раньше. А вот в рабочем режиме почти сразу появляется floating overflow. Так что, кажется, в целом надёжность компилятора не слишком увеличилась :(

Я уже сталкивался с похожими floating overflow'ами в рабочем режиме (в проверочном они у меня не воспроизводятся) в версии 2.50 - они устраняются только танцами с бубном, если, конечно, не хочется считать в проверочном режиме (это в 1.5 раза медленнее).

Автор:  Александр Ильин [ Пятница, 30 Декабрь, 2011 23:14 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

А есть тестовый проект, на котором бы воспроизводилась ошибка?

Автор:  igor [ Суббота, 31 Декабрь, 2011 00:13 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

Отчёт dumpbin.exe для проекта, собранного в XDS v2.51:
Код:
Microsoft (R) COFF/PE Dumper Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.
Dump of file xxxx.exe
File Type: EXECUTABLE IMAGE
  Summary
       1B000 .bss
        3000 .data
        1000 .debug
        1000 .idata
        2000 .reloc
       1B000 .text

Аналогичный отчёт для того же проекта, собранного в XDS v2.60:
Код:
Microsoft (R) COFF/PE Dumper Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.
Dump of file xxxx.exe
File Type: EXECUTABLE IMAGE
  Summary
       3B000 .bss
        4000 .data
        1000 .debug
        1000 .idata
        3000 .reloc
       1F000 .text


Как видно из отчётов, увеличилась секция инициализированных данных (.data), секция перемещаемых данных (.reloc) и собственно секция кода (.text). Размер секции отладки (.debug) и импорта из внешних библиотек (.idata) не изменился (по крайней мере в памяти, в файле мог и измениться). Секцию неинициализированных данных (.bss) в расчёт можно не принимать, так как её размер в файле всегда равен нулю.

По большому счёту я готов мириться с этим увеличением размера файла. А вот то обстоятельство, что исправлены ошибки, для меня важнее :)
Осталось разобраться что там с floating overflow.

Автор:  GameHunter [ Понедельник, 02 Январь, 2012 15:58 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

Пожалуйста, попробуйте разобраться.

Во вложении моя (чуть модифицированная) программа.
На входе принимает файл V.txt - уже лежит в каталоге EXE,
куда программа будет компилироваться. Про режимы компиляции
Debug и Run читайте комментарии в проектном файле.

В режиме Run в XDS 2.51 всё работает, в XDS 2.60 beta почти сразу
вылетает real overflow, он не воспроизводится в режиме Debug.

При подготовке этого сообщения нашёлся ещё один "бубнотанцевый" баг:
если в файле Flow\fDynamicParticle.ob2 закомментировать строчки No. 50 или 57 (там стоят никчёмные, ничего не значащие операторы), то в режиме Run программа вылетает с сообщением invalid location. Это, опять-таки, не воспроизводится в отладочном режиме. Этот баг присутствует как в старой, так и в новой версиях XDS.

Ну как жить с такими багами :( ?

С уважением,
GH.

Вложения:
Source.rar [179.74 КБ]
Скачиваний: 323

Автор:  Александр Ильин [ Вторник, 03 Январь, 2012 02:21 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

GameHunter писал(а):
Пожалуйста, попробуйте разобраться.
При подготовке этого сообщения нашёлся ещё один "бубнотанцевый" баг
Ну как жить с такими багами :( ?
Подобные ошибки кодогенератора встречались и мне, да только всё не удавалось создать минимальный проект для их воспроизведения. Решались они иной раз изменением текстовой константы в соседней строке. : )

Что там с real overflow я не знаю, а вот до invalid location я докопался с помощью IDA Pro и XD. Дело в том, что там генерируется PUSH, после чего из стека достаётся сохранённое значение указателя. Вот так это выглядит:
Код:
.text:00419130                 call    Space_NewFloatArray
.text:00419135                 mov     ecx, [esp+10h] ; Сюда не обращайте внимания
.text:00419139                 push    0 ; злополучный push
.text:0041913B                 mov     edx, [esp+1Ch]  ; Get local variable 'f' from stack
.text:0041913F                 push    0
.text:00419141                 mov     [edx], eax ; f.Vz := 'result of Space_NewFloatArray'
Команды PUSH - это уже задвигаются в стек параметры для следующего вызова Space.NewFloatArray. По адресу [esp+1Ch] находится значение указателя f, полученного ранее в результате выполнения NEW. Да только вот незачада: смещение 1Ch было бы правильным, если бы не был сделан перед этим "push 0". После выполнения push значение регистра ESP изменилось, и теперь правильное смещение = 20h. Соответственно, из стека достаётся не запомненное значение указателя, а какое-то постороннее значение (в данном случае = 1), что и приводит к ошибке доступа к памяти, аналогичной разыменованию нулевого указателя.

Если пропатчить exe-файл, заменив смещение 1Ch на 20h, то программа работает нормально и завершается в совершенно другом месте с real overflow, как от неё и ожидается : )

Вот знаю я это всё. И что мне теперь со всем этим делать? : )

Автор:  Александр Ильин [ Вторник, 03 Январь, 2012 02:34 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

По поводу real overflow могу сказать, что это исключение возникает скорее всего в результате выполнения инструкции fscale. Но в каком месте исходников - не знаю.

Автор:  igor [ Вторник, 03 Январь, 2012 10:03 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

GameHunter писал(а):
Пожалуйста, попробуйте разобраться.
Во вложении моя (чуть модифицированная) программа.
Вроде, не все модули представлены:
Код:
* [Environment\SymThreads\SymThreads.ob2 18.09 F425]
* file open error: "Processes.sym" no such file

IMHO, начинать нужно с выделения минимального тестового проекта, на котором воспроизводится ошибка. Лучше Вас это никто не сделает.

Автор:  igor [ Вторник, 03 Январь, 2012 10:16 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

Александр Ильин писал(а):
до invalid location я докопался с помощью IDA Pro и XD.
Респект и уважуха! :) . А XD что за инструмент, HxD что ли?

Александр Ильин писал(а):
Вот знаю я это всё. И что мне теперь со всем этим делать? : )
А вот это "mailto:support@excelsior-usa.com" не помогает решить проблему?

Автор:  GameHunter [ Вторник, 03 Январь, 2012 11:48 ]
Заголовок сообщения:  Re: XDS 2.6 beta release

Processes - стандартный модуль XDS'а. Странно что его у Вас нет...

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