为什么在启用大小优化配置的情况下编译内核时会抑制变量未初始化的警告?

why is warning for variable being uninitialized supressed when kernel is compiled with size optimization config enabled?

为了优化内核启动时间,我在配置中禁用了 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

我不明白在内核大小优化而不是其他方面禁用未初始化变量警告背后的原因。这背后的想法是什么?如果我在 "not optimized for size" 的后一种情况下添加标志以忽略未初始化的变量,如果有的话我会面临什么问题。

感谢任何帮助。

谢谢

最近的内核(5.1 及更高版本 - 在撰写本文时尚未发布 - 参见 commit b303c6df80c9 ("kbuild: compute false-positive -Wmaybe-uninitialized cases in Kconfig"))有一个单独的配置选项 CONFIG_CC_DISABLE_WARN_MAYBE_UNINITIALIZED 来禁用警告。这些内核定义了GCC 4.7 版(引入警告)和 GCC 4.8 版的默认选项,但可以手动配置该选项。

对于您的内核和编译器版本,修改 Makefile 以全局添加 $(call cc-disable-warning,maybe-uninitialized,) 应该是安全的。或者,您可以考虑使用 GCC 4.9 或更高版本。