почему предупреждение о неинициализированной переменной подавляется, когда ядро ​​скомпилировано с включенной конфигурацией оптимизации размера? - PullRequest
0 голосов
/ 03 апреля 2019

пытаясь оптимизировать время загрузки ядра, я отключил флаг CONFIG_CC_OPTIMIZE_FOR_SIZE в конфигурации. Это привело к большому количеству предупреждений may-be uninitialized (которые рассматривались как ошибки).

Попытка отладки того, что я нашел в Makefile:

ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
KBUILD_CFLAGS   += -Os $(call cc-disable-warning,maybe-uninitialized,)
else
KBUILD_CFLAGS   += -O2
endif

Я не понимаю, почему стоит отключить предупреждение для неинициализированной переменной, когда ядро ​​оптимизировано по размеру, а не по другим причинам. Что стоит за этим, и если я добавлю флаг, чтобы игнорировать неинициализированные переменные в последующем случае «не оптимизирован по размеру», с какими проблемами я могу столкнуться, если таковые имеются.

Любая помощь приветствуется.

Спасибо

1 Ответ

1 голос
/ 03 апреля 2019

Самые последние ядра (5.1 и более поздние - еще не выпущены на момент написания статьи - см. commit b303c6df80c9 (" kbuild: вычислить ложноположительные -Wmaybe-неинициализированные случаи в Kconfig ")) есть отдельная опция конфигурации CONFIG_CC_DISABLE_WARN_MAYBE_UNINITIALIZED для отключения предупреждения.Эти ядра определяют опцию по умолчанию для GCC версии 4.7 (с введенным предупреждением) и GCC версии 4.8, но эту опцию можно настроить вручную.

Для вашей версии ядра и компилятора, можно безопасно изменить Makefile, добавив $(call cc-disable-warning,maybe-uninitialized,) глобально.В качестве альтернативы, вы можете рассмотреть возможность использования GCC 4.9 или более поздней версии.

...