Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Tonal от Август 11, 2009, 11:58



Название: [Qt 4.5.2] Сборка с оптимизацией
Отправлено: Tonal от Август 11, 2009, 11:58
Дошли руки - собрал 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 (http://sourceforge.net/tracker/?func=detail&atid=102435&aid=2834267&group_id=2435)
Соответственно написал в рассылку и зарегистрировал багу: #2834786 (http://sourceforge.net/tracker/?func=detail&atid=102435&aid=2834786&group_id=2435).
Ответили, что нужен минимальный воспроизводимый кусок кода. :-\

Пересобрал zlib с указанными опциями, набросал тестик - не падает...
И вот тут я затупил...
Мож кто придумает как изменить пример или свой напишет?

Можно, конечно написать троллям, но у них пока официально не поддерживается mingw 4.4.0 да и опции оптимизации не стандартные - с большой вероятностью отфудболят. :(

П.С. Машины ниже pentium3 пока не интересуют. :)


Название: Re: [Qt 4.5.2] Сборка с оптимизацией
Отправлено: SABROG от Август 12, 2009, 21:17
Пробовал я тоже включать SSE оптимизацию. Girish мне тут  (http://lists.trolltech.com/qt4-preview-feedback/2007-03/thread00134-0.html)ответил в 2007 году.

Скорее всего дело даже не в версии gcc. Может быть zlib использует вставки асма?
---
Вроде не использует. Значит ключи march=pentium3 -mtune=pentium3 включают MMX/SSE оптимизацию.


Название: Re: [Qt 4.5.2] Сборка с оптимизацией
Отправлено: Alex Shabanov от Август 20, 2009, 12:00
попробуй посмотреть здесь - http://biodisplay.tyrell.hu/implementation/software-engineering/a-cross-platfrom-c-development-environment/compiling-qt-435-with-gcc-4-on-windows/

если не поможет - пришли callstack, скорее всего кодогенератор слажал в с++ коде, т.е. в вызывающем функции zlib-а


Название: Re: [Qt 4.5.2] Сборка с оптимизацией
Отправлено: Tonal от Август 20, 2009, 13:58
Этот пост совсем не о том - 4.5.2 собирается последним mingw отлично. :)
А то что слажал кодогенератор - тоже вроде ясно:
Приведённая инструкция вызывается для адреса варавненного на 8 байт а ожидает выравнивания на 16.
Причём в этом коде не используются операции с плавающей точкой, т.е. инструкция чисто для оптимизации инициализации локальных переменных.

Там в -О3 много грабель с этими инструкциями. Например вот (https://sourceforge.net/tracker/?func=detail&atid=102435&aid=2838712&group_id=2435).


Название: Re: [Qt 4.5.2] Сборка с оптимизацией
Отправлено: Tonal от Август 25, 2009, 06:32
Написал багрепорт.
Ответ вполне ожидаем:
Цитировать
Using GCC 4.4 is not supported on MinGW by Qt Software Development Frameworks :
http://doc.trolltech.com/4.6-snapshot/supported-platforms.html
Try
   * using GCC 3.4.2
   * using -O2 instead of -O3