Перейти к содержанию
    

Хотел бы поинтересоваться у людей - использует ли кто-нибудь GCC 5 при полной оптимизации в проектах ?

В gcc 5 (последний от launchpad) полно багов.

Вот ссылка на баг-репорт.

Есть ли смысл пробывать 4ю версию (или, может, другую 5ю ?).

Переехал недавно с IAR - просто в шоке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 5.4.1 20160609 (release) [ARM/embedded-5-branch revision 237715]

Собирал ряд проектов для Cortex-M3/M4 и ARM926EJ. Всюду оптимизация -O2, багов нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Использую последнюю ланчпадовскую сборку и с -Os и c -Ofast, cortex M3, M7, A9 (с TDM7 давно тестировал).

Везде проект ведёт себя предсказуемо...

 

arm-none-eabi-gcc -c -mcpu=cortex-m7 -mthumb -mfloat-abi=hard -mfpu=fpv5-sp-d16 -fno-math-errno -funroll-loops -fgraphite -ffunction-sections -fdata-sections -ffat-lto-objects -Ofast -flto -gdwarf-2 -fomit-frame-pointer -Wall -Wstrict-prototypes -

DNDEBUG=1 -DCPUSTYLE_STM32F7XX=1 -DSTM32F746xx=1 -MD -MP -MF ./dep/bandfilters.o.d -I../../CMSIS-SP-00300-r4p5-00rel0/CMSIS/Include -I../ ../bandfilters.c -o bandfilters.o

arm-none-eabi-gcc -c -mcpu=cortex-a9 -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -fno-math-errno -funroll-loops -fgraphite -ffunction-sections -fdata-sections -ffat-lto-objects -Ofast -flto -gdwarf-2 -fomit-frame-pointer -Wall -Wstrict-prototype

s -DNDEBUG=1 -DCPUSTYLE_R7S721=1 -DCPUSTYLE_R7S721020=1 -MD -MP -MF ./dep/bandfilters.o.d -I../ -I../rza1x_inc ../bandfilters.c -o bandfilters.o

Например так вызывается.

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Собирал ряд проектов для Cortex-M3/M4 и ARM926EJ. Всюду оптимизация -O2, багов нет.

Не могли бы Вы протестить 'gcc_bug2.tar' (с баг-репорта) у себя ? Собственно, это я баг-репорты запостил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могли бы Вы протестить 'gcc_bug2.tar' (с баг-репорта) у себя ? Собственно, это я баг-репорты запостил.

Уже :) Таки да, воспроизводятся оба.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уже :) Таки да, воспроизводятся оба.

Мне на этой неделе продукцию отгружать. С виду все работает (опустился до -O1), но коленки дрожат. Если ли смысл в срочном порядке переходить на 4.9 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5й GCC такой профит мощный даёт, что не можете на 4.9 откатиться? Просто интересно. Сам сижу на GCC 4.9

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 4.9 есть регрессии по размеру. В 5-ке не проверял, возможно вылечили.

Кроме того в 5-ке есть поддержка ARMv8-M, хотя не очень понятно зачем это может быть нужно сейчас.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я использую 4.8 (в основном потому, что 4.9 немного раздувает размер кода, там и библиотека местами раздулась). Жду, когда смелые и безбашенные вроде вас найдут все глюки в новых версиях :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оказался сам дурак (давненько не было проблем с оптимизацией).

Смотрите ответы.

Придется весь сторонний код как-то тестить и проверять и самому быть гораздо аккуратнее (оптимизация очень жесткой оказалась).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Качество кода lwip во всей красе, UB на UB и UB погоняет.

ЗЫ А варнинги это тоже пропустили?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Качество кода lwip во всей красе, UB на UB и UB погоняет.

ЗЫ А варнинги это тоже пропустили?

Я бы не стал вот так огульно. Этот баг был исправлен 3 мая 2012 года, то есть после выхода версии 1.4.0, но перед выходом 1.4.1. Кроме того, в обсуждении было сказано, что этот баг может вылезти только в том случае, если лёгкий выход за границу массива вдруг попадёт в защищённую область памяти и вызовет срабатывание защиты. Кто же мог предположить, что компилятор, увидев такое, воспримет это как индульгенцию генерировать чудо-юдо код? Я бы сказал, что это минус авторам gcc - в такой ситуации неплохо было бы хотя бы предупреждение выдать.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

UB ж и есть индульгенция, по стандарту, так что gcc'шники полностью в своём праве. Впрочем раз исправили, значит отчасти и правда огульно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

UB ж и есть индульгенция, по стандарту, так что gcc'шники полностью в своём праве.

Если не выдали при этом предупреждение - это свинство. За такое в приличном обществе в харю трескают. А так да.

Допускаю, что алгоритмы оптимизации могут быть такими, что там непросто прицепить предупреждение. Но надо хотя бы попытаться :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Опишите подробней плиз по-русски о чем речь (я так понимаю, какие то баги по части DHCP в lwip)

И что есть UB?

 

Сам пользую lwip 1.4.1 и GCC 5 с максимальной оптимизацией и как раз наблюдаю странное поведение ПО.

Изменено пользователем k000858

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...