[kernel] Add patch from Josh Stone to restore var-tracking via Kconfig (rhbz 1126580)

Josh Boyer jwboyer at fedoraproject.org
Tue Dec 16 19:22:03 UTC 2014


commit 401d0d95f4aa5afd87c917829bf2127c6b93edc0
Author: Josh Boyer <jwboyer at fedoraproject.org>
Date:   Tue Dec 16 12:13:21 2014 -0500

    Add patch from Josh Stone to restore var-tracking via Kconfig (rhbz 1126580)

 Kbuild-Add-an-option-to-enable-GCC-VTA.patch |   92 ++++++++++++++++++++++++++
 config-generic                               |    1 +
 kernel.spec                                  |    8 ++
 3 files changed, 101 insertions(+), 0 deletions(-)
---
diff --git a/Kbuild-Add-an-option-to-enable-GCC-VTA.patch b/Kbuild-Add-an-option-to-enable-GCC-VTA.patch
new file mode 100644
index 0000000..561ce4e
--- /dev/null
+++ b/Kbuild-Add-an-option-to-enable-GCC-VTA.patch
@@ -0,0 +1,92 @@
+From: Josh Stone <jistone at redhat.com>
+Date: Fri, 21 Nov 2014 10:40:00 -0800
+Subject: [PATCH] Kbuild: Add an option to enable GCC VTA
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Due to recent codegen issues, gcc -fvar-tracking-assignments was
+unconditionally disabled in commit 2062afb4f804a ("Fix gcc-4.9.0
+miscompilation of load_balance() in scheduler").  However, this reduces
+the debuginfo coverage for variable locations, especially in inline
+functions.  VTA is certainly not perfect either in those cases, but it
+is much better than without.  With compiler versions that have fixed the
+codegen bugs, we would prefer to have the better details for SystemTap,
+and surely other debuginfo consumers like perf will benefit as well.
+
+This patch simply makes CONFIG_DEBUG_INFO_VTA an option.  I considered
+Frank and Linus's discussion of a cc-option-like -fcompare-debug test,
+but I'm convinced that a narrow test of an arch-specific codegen issue
+is not really useful.  GCC has their own regression tests for this, so
+I'd suggest GCC_COMPARE_DEBUG=-fvar-tracking-assignments-toggle is more
+useful for kernel developers to test confidence.
+
+In fact, I ran into a couple more issues when testing for this patch[1],
+although neither of those had any codegen impact.
+ [1] https://bugzilla.redhat.com/show_bug.cgi?id=1140872
+
+With gcc-4.9.2-1.fc22, I can now build v3.18-rc5 with Fedora's i686 and
+x86_64 configs, and this is completely clean with GCC_COMPARE_DEBUG.
+
+Cc: Frank Ch. Eigler <fche at redhat.com>
+Cc: Jakub Jelinek <jakub at redhat.com>
+Cc: Josh Boyer <jwboyer at fedoraproject.org>
+Cc: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+Cc: Linus Torvalds <torvalds at linux-foundation.org>
+Cc: Andrew Morton <akpm at linux-foundation.org>
+Cc: Markus Trippelsdorf <markus at trippelsdorf.de>
+Cc: Michel Dänzer <michel at daenzer.net>
+Signed-off-by: Josh Stone <jistone at redhat.com>
+---
+ Makefile          |  4 ++++
+ lib/Kconfig.debug | 18 +++++++++++++++++-
+ 2 files changed, 21 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index fd80c6e9bc23..4ba81e0dce46 100644
+--- a/Makefile
++++ b/Makefile
+@@ -704,7 +704,11 @@ KBUILD_CFLAGS	+= -fomit-frame-pointer
+ endif
+ endif
+ 
++ifdef CONFIG_DEBUG_INFO_VTA
++KBUILD_CFLAGS   += $(call cc-option, -fvar-tracking-assignments)
++else
+ KBUILD_CFLAGS   += $(call cc-option, -fno-var-tracking-assignments)
++endif
+ 
+ ifdef CONFIG_DEBUG_INFO
+ ifdef CONFIG_DEBUG_INFO_SPLIT
+diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
+index 4e35a5d767ed..27410417de1d 100644
+--- a/lib/Kconfig.debug
++++ b/lib/Kconfig.debug
+@@ -165,7 +165,23 @@ config DEBUG_INFO_DWARF4
+ 	  Generate dwarf4 debug info. This requires recent versions
+ 	  of gcc and gdb. It makes the debug information larger.
+ 	  But it significantly improves the success of resolving
+-	  variables in gdb on optimized code.
++	  variables in gdb on optimized code.  The gcc docs also
++	  recommend enabling -fvar-tracking-assignments for maximum
++	  benefit. (see DEBUG_INFO_VTA)
++
++config DEBUG_INFO_VTA
++	bool "Enable var-tracking-assignments for debuginfo"
++	depends on DEBUG_INFO
++	help
++	  Enable gcc -fvar-tracking-assignments for improved debug
++	  information on variable locations in optimized code.  Per
++	  gcc, DEBUG_INFO_DWARF4 is recommended for best use of VTA.
++
++	  VTA has been implicated in codegen bugs (gcc PR61801,
++	  PR61904), so this may deserve some caution.  One can set
++	  GCC_COMPARE_DEBUG=-fvar-tracking-assignments-toggle in the
++	  environment to automatically compile everything both ways,
++	  generating an error if anything differs.
+ 
+ config ENABLE_WARN_DEPRECATED
+ 	bool "Enable __deprecated logic"
+-- 
+2.1.0
+
diff --git a/config-generic b/config-generic
index 0f4eddc..e1d549d 100644
--- a/config-generic
+++ b/config-generic
@@ -4372,6 +4372,7 @@ CONFIG_FRAME_WARN=1024
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x0
 CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_INFO_VTA=y
 # Revisit both of these options
 # CONFIG_DEBUG_INFO_SPLIT is not set
 # CONFIG_DEBUG_INFO_DWARF4 is not set
diff --git a/kernel.spec b/kernel.spec
index 372fe91..4c32d67 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -519,6 +519,9 @@ Patch530: silence-fbcon-logo.patch
 
 Patch600: lib-cpumask-Make-CPUMASK_OFFSTACK-usable-without-deb.patch
 
+#rhbz 1126580
+Patch601: Kbuild-Add-an-option-to-enable-GCC-VTA.patch
+
 Patch800: crash-driver.patch
 
 # crypto/
@@ -1278,6 +1281,8 @@ ApplyPatch input-silence-i8042-noise.patch
 ApplyPatch silence-fbcon-logo.patch
 
 # Changes to upstream defaults.
+#rhbz 1126580
+ApplyPatch Kbuild-Add-an-option-to-enable-GCC-VTA.patch
 
 # /dev/crash driver.
 ApplyPatch crash-driver.patch
@@ -2243,6 +2248,9 @@ fi
 #                                    ||----w |
 #                                    ||     ||
 %changelog
+* Tue Dec 16 2014 Josh Boyer <jwboyer at fedoraproject.org>
+- Add patch from Josh Stone to restore var-tracking via Kconfig (rhbz 1126580)
+
 * Mon Dec 15 2014 Josh Boyer <jwboyer at fedoraproject.org>
 - Fix ppc64 boot with smt-enabled=off (rhbz 1173806)
 - CVE-2014-8133 x86: espfix(64) bypass via set_thread_area and CLONE_SETTLS (rhbz 1172797 1174374)


More information about the scm-commits mailing list