Дошли руки - собрал Qt 4.5.2 на mingw32 gcc 4.4.0
Чтоб релиз работал максимально шустро ключи оптимизации выставил следующие:
QMAKE_CFLAGS_RELEASE = -O3 -march=pentium3 -mtune=pentium3
Конфигурация:
configure.exe -fast -shared -debug-and-release -exceptions -stl -rtti ^
-plugin-sql-ibase -plugin-sql-mysql -plugin-sql-odbc -plugin-sql-sqlite ^
-qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg ^
-webkit ^
-no-openssl -no-phonon -no-qdbus ^
-qt-style-windowsxp -qt-style-windowsvista
Всё собралось без ошибок, но работать оно отказалось.
assistant.exe сразу вылетал.
assistant_adp.exe при попытке перейти по любой ссылке.
Вылет всегда в одном и том же месте QtCode4.dll
Запуск под assistant-а под gdb показал, что грохается в функции inflate_table ((inftrees.c) вызываемой из inflate
(inflate.c). Это библиотека zlib 1.2.3 из каталога qt4/src/3rdparty/zlib.
В gdb место вылета дезасемблируется так:
ASM
movaps %xmm0,-0x38(%ebp)
После смены ключа -О3 на -О2 и перекомпиляции QtCode4.dll ассистенты таки запустились.
Но вылеты продолжились в разных местах QtGui4.dll, с похожими в асме местами.
Мне кажется, что лажает кодогенератор gcc, тем более, что похожие баги есть:
#2834267Соответственно написал в рассылку и зарегистрировал багу:
#2834786.
Ответили, что нужен минимальный воспроизводимый кусок кода.
Пересобрал zlib с указанными опциями, набросал тестик - не падает...
И вот тут я затупил...
Мож кто придумает как изменить пример или свой напишет?
Можно, конечно написать троллям, но у них пока официально не поддерживается mingw 4.4.0 да и опции оптимизации не стандартные - с большой вероятностью отфудболят.
П.С. Машины ниже pentium3 пока не интересуют.