kbuild: Only add -fno-var-tracking-assignments for old GCC versions
authorMark Wielaard <mark@klomp.org>
Sat, 17 Oct 2020 12:01:35 +0000 (14:01 +0200)
committerMasahiro Yamada <masahiroy@kernel.org>
Tue, 20 Oct 2020 15:28:53 +0000 (00:28 +0900)
Some old GCC versions between 4.5.0 and 4.9.1 might miscompile code
with -fvar-tracking-assingments (which is enabled by default with -g -O2).
Commit 2062afb4f804 ("Fix gcc-4.9.0 miscompilation of load_balance()
in scheduler") added -fno-var-tracking-assignments unconditionally to
work around this. But newer versions of GCC no longer have this bug, so
only add it for versions of GCC before 5.0. This allows various tools
such as a perf probe or gdb debuggers or systemtap to resolve variable
locations using dwarf locations in more code.

Signed-off-by: Mark Wielaard <mark@klomp.org>
Acked-by: Ian Rogers <irogers@google.com>
Reviewed-by: Andi Kleen <andi@firstfloor.org>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Makefile

index b76c4122c9678ffc41be7b8096c416cf93e8a672..17a62e365a38062ab41ad7df2b18e143e16a4272 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -814,7 +814,11 @@ KBUILD_CFLAGS      += -ftrivial-auto-var-init=zero
 KBUILD_CFLAGS  += -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
 endif
 
-DEBUG_CFLAGS   := $(call cc-option, -fno-var-tracking-assignments)
+# Workaround for GCC versions < 5.0
+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61801
+ifdef CONFIG_CC_IS_GCC
+DEBUG_CFLAGS   := $(call cc-ifversion, -lt, 0500, $(call cc-option, -fno-var-tracking-assignments))
+endif
 
 ifdef CONFIG_DEBUG_INFO