| From: Josh Stone <jistone@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@redhat.com> |
| Cc: Jakub Jelinek <jakub@redhat.com> |
| Cc: Josh Boyer <jwboyer@fedoraproject.org> |
| Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Andrew Morton <akpm@linux-foundation.org> |
| Cc: Markus Trippelsdorf <markus@trippelsdorf.de> |
| Cc: Michel Dänzer <michel@daenzer.net> |
| Signed-off-by: Josh Stone <jistone@redhat.com> |
| |
| Makefile | 4 ++++ |
| lib/Kconfig.debug | 18 +++++++++++++++++- |
| 2 files changed, 21 insertions(+), 1 deletion(-) |
| |
| diff --git a/Makefile b/Makefile |
| index 257ef5892ab7..3cc6f4477e78 100644 |
| |
| |
| @@ -701,7 +701,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 e2894b23efb6..d98afe18f704 100644 |
| |
| |
| @@ -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 GDB_SCRIPTS |
| bool "Provide GDB scripts for kernel debugging" |