kernel hacking: GCC optimization for better debug experience (-Og)
Subsystems (5)
v3 cover kernel hacking: GCC optimization for better debug experience (-Og)
Hi all,
I have posted this series several months ago but interrupted by personal affairs. Now I get time to complete this task. Thanks for all of the reviewers.
I know some kernel developers was searching for a method to dissable GCC optimizations, probably they want to apply GCC '-O0' option. But since Linux kernel relies on GCC optimization to remove some dead code, so '-O0' just breaks the build. They do need this because they want to debug kernel with qemu, simics, kgtp or kgdb.
Thanks for the GCC '-Og' optimization level introduced in GCC 4.8, which offers a reasonable level of optimization while maintaining fast compilation and a good debugging experience. It is similar to '-O1' while perferring to keep debug ability over runtime speed. With '-Og', we can build a kernel with better debug ability and little performance drop after some simple change.
In this series, firstly introduce a new config CONFIG_NO_AUTO_INLINE after two fixes for this new option. With this option, only functions explicitly marked with "inline" will be inlined. This will allow the function tracer to trace more functions because it only traces functions that the compiler has not inlined.
Then introduce new config CC_OPTIMIZE_FOR_DEBUGGING which apply '-Og' optimization level for whole kernel, with a simple fix in fix_to_virt(). Currently I have only tested this option on x86 and ARM platform. Other platforms should also work but probably need some compiling fixes as what having done in this series. I leave that to who want to try this debug option.
Comparison of vmlinux size: a bit smaller.
w/o CONFIG_CC_OPTIMIZE_FOR_DEBUGGING
$ size vmlinux
text data bss dec hex filename
22665554 9709674 2920908 35296136 21a9388 vmlinux
w/ CONFIG_CC_OPTIMIZE_FOR_DEBUGGING
$ size vmlinux
text data bss dec hex filename
21499032 10102758 2920908 34522698 20ec64a vmlinux
Comparison of system performance: a bit drop (~6%).
This benchmark of kernel compilation is suggested by Ingo Molnar.
https://lkml.org/lkml/2018/5/2/74
Preparation: Set cpufreq to 'performance'.
for ((cpu=0; cpu<120; cpu++)); do
G=/sys/devices/system/cpu/cpu$cpu/cpufreq/scaling_governor
[ -f $G ] && echo performance > $G
done
w/o CONFIG_CC_OPTIMIZE_FOR_DEBUGGING
$ perf stat --repeat 5 --null --pre '\
cp -a kernel ../kernel.copy.$(date +%s); \
rm -rf *; \
git checkout .; \
echo 1 > /proc/sys/vm/drop_caches; \
find ../kernel* -type f | xargs cat >/dev/null; \
make -j kernel >/dev/null; \
make clean >/dev/null 2>&1; \
sync '\
\
make -j8 >/dev/null
Performance counter stats for 'make -j8' (5 runs):
219.764246652 seconds time elapsed ( +- 0.78% )
w/ CONFIG_CC_OPTIMIZE_FOR_DEBUGGING
$ perf stat --repeat 5 --null --pre '\
cp -a kernel ../kernel.copy.$(date +%s); \
rm -rf *; \
git checkout .; \
echo 1 > /proc/sys/vm/drop_caches; \
find ../kernel* -type f | xargs cat >/dev/null; \
make -j kernel >/dev/null; \
make clean >/dev/null 2>&1; \
sync '\
\
make -j8 >/dev/null
Performance counter stats for 'make -j8' (5 runs):
233.574187771 seconds time elapsed ( +- 0.19% )v3:
o Take suggestions from Masahiro Yamada.
v2:
o rebase on top of mainline.
Changbin Du (4):
x86/mm: declare check_la57_support() as inline
kernel hacking: new config NO_AUTO_INLINE to disable compiler
auto-inline optimizations
ARM: mm: fix build error in fix_to_virt with
CONFIG_CC_OPTIMIZE_FOR_DEBUGGING
kernel hacking: new config CC_OPTIMIZE_FOR_DEBUGGING to apply GCC -Og
optimization
Makefile | 11 +++++++++++ arch/arm/mm/mmu.c | 2 +- arch/x86/kernel/head64.c | 2 +- include/linux/compiler-gcc.h | 2 +- include/linux/compiler.h | 2 +- init/Kconfig | 20 ++++++++++++++++++++ kernel/configs/tiny.config | 1 + lib/Kconfig.debug | 17 +++++++++++++++++ 8 files changed, 53 insertions(+), 4 deletions(-)
Signature · 1 line
2.17.1
PATCH v3 1/4 x86/mm: declare check_la57_support() as inline
The level4_kernel_pgt is only defined when X86_5LEVEL is enabled. So declare check_la57_support() as inline to make sure the code referring to level4_kernel_pgt is optimized out. This is a preparation for CONFIG_CC_OPTIMIZE_FOR_DEBUGGING.
--- arch/x86/kernel/head64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kernel/head64.c +1 -1
@@ -98,7 +98,7 @@ static bool __head check_la57_support(unsigned long physaddr)return true; }#else -static bool __head check_la57_support(unsigned long physaddr) +static inline bool __head check_la57_support(unsigned long physaddr) {return false; }
Signature · 1 line
2.17.1
Re: [PATCH v3 1/4] x86/mm: declare check_la57_support() as inline
Quoted 6 lines · On Sun, 28 Oct 2018 13:09:42 +0000 Changbin Du <[email protected]> wrote:
The
level4_kernel_pgtis only defined whenX86_5LEVELis enabled. So declarecheck_la57_support()as inline to make sure the code referring tolevel4_kernel_pgtis optimized out. This is a preparation forCONFIG_CC_OPTIMIZE_FOR_DEBUGGING.Signed-off-by Changbin Du <[email protected]>
-- Steve
Quoted 18 lines
Cc Masahiro Yamada <[email protected]>--- arch/x86/kernel/head64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)arch/x86/kernel/head64.c +1
-1@@ -98,7 +98,7 @@ static bool __head check_la57_support(unsigned long physaddr)return true; }#else -static bool __head check_la57_support(unsigned long physaddr) +static inline bool __head check_la57_support(unsigned long physaddr) {return false; }
Re: [PATCH v3 1/4] x86/mm: declare check_la57_support() as inline
Quoted 9 lines · Steven Rostedt
Quoted 5 lines · On Sun, 28 Oct 2018 13:09:42 +0000 Changbin Du <[email protected]> wrote:
The
level4_kernel_pgtis only defined whenX86_5LEVELis enabled. So declarecheck_la57_support()as inline to make sure the code referring tolevel4_kernel_pgtis optimized out. This is a preparation forCONFIG_CC_OPTIMIZE_FOR_DEBUGGING.
Quoted 6 lines
Quoted 1 line
Signed-off-by Changbin Du <[email protected]>Reviewed-by Steven Rostedt (VMware) <[email protected]>-- Steve
Applied to linux-kbuild.
Signature · 2 lines
Best Regards Masahiro Yamada
Borislav Petkov
maintainerRe: [PATCH v3 1/4] x86/mm: declare check_la57_support() as inline
Quoted 10 lines · Masahiro Yamada
Quoted 9 lines · Steven Rostedt
Quoted 5 lines · On Sun, 28 Oct 2018 13:09:42 +0000 Changbin Du <[email protected]> wrote:
The
level4_kernel_pgtis only defined whenX86_5LEVELis enabled. So declarecheck_la57_support()as inline to make sure the code referring tolevel4_kernel_pgtis optimized out. This is a preparation forCONFIG_CC_OPTIMIZE_FOR_DEBUGGING.
Quoted 8 lines
Quoted 6 lines
Quoted 1 line
Signed-off-by Changbin Du <[email protected]>Reviewed-by Steven Rostedt (VMware) <[email protected]>-- Steve
Applied to linux-kbuild.
Next time, before you route a patch through your tree, please get an x86 maintainer's ACK first.
Thx.
Signature · 4 lines
Regards/Gruss,
Boris.
Good mailing practices for 400: avoid top-posting and trim the reply.Re: [PATCH v3 1/4] x86/mm: declare check_la57_support() as inline
Quoted 16 lines · Borislav Petkov
Quoted 14 lines · Masahiro Yamada
Quoted 13 lines · Steven Rostedt
Quoted 6 lines · On Sun, 28 Oct 2018 13:09:42 +0000 Changbin Du <[email protected]> wrote:
The
level4_kernel_pgtis only defined whenX86_5LEVELis enabled. So declarecheck_la57_support()as inline to make sure the code referring tolevel4_kernel_pgtis optimized out. This is a preparation forCONFIG_CC_OPTIMIZE_FOR_DEBUGGING.Signed-off-by Changbin Du <[email protected]>Reviewed-by Steven Rostedt (VMware) <[email protected]>
Quoted 7 lines
Quoted 4 lines
Quoted 2 lines
-- Steve
Applied to linux-kbuild.
Next time, before you route a patch through your tree, please get an x86 maintainer's ACK first.
I changed my mind, and did not include this in my previous pull request because this series is causing many warnings.
Now, it is aiming for v5.0-rc1
So, it is not too late.
If x86 maintainers issue Acked-by,
I am happy to add it.
Quoted 7 lines
Thx.
--
Regards/Gruss,
Boris.Good mailing practices for 400: avoid top-posting and trim the reply.
Signature · 2 lines
Best Regards Masahiro Yamada
Re: [PATCH v3 1/4] x86/mm: declare check_la57_support() as inline
Quoted 20 lines · Masahiro Yamada
Quoted 19 lines · Borislav Petkov
Quoted 17 lines · Masahiro Yamada
Quoted 15 lines · Steven Rostedt
Quoted 6 lines · On Sun, 28 Oct 2018 13:09:42 +0000 Changbin Du <[email protected]> wrote:
The
level4_kernel_pgtis only defined whenX86_5LEVELis enabled. So declarecheck_la57_support()as inline to make sure the code referring tolevel4_kernel_pgtis optimized out. This is a preparation forCONFIG_CC_OPTIMIZE_FOR_DEBUGGING.Signed-off-by Changbin Du <[email protected]>Reviewed-by Steven Rostedt (VMware) <[email protected]>-- Steve
Quoted 9 lines
Quoted 4 lines
Quoted 1 line
Applied to linux-kbuild.
Next time, before you route a patch through your tree, please get an x86 maintainer's ACK first.
I changed my mind, and did not include this in my previous pull request because this series is causing many warnings.
Most of the new warnings are false warnings. Since this series didn't change any code where the warnings happen. I'll make patches to make gcc happy.
Quoted 23 lines
Now, it is aiming for v5.0-rc1
So, it is not too late.
If x86 maintainers issue Acked-by,
I am happy to add it.Quoted 7 lines
Thx.
--
Regards/Gruss,
Boris.Good mailing practices for 400: avoid top-posting and trim the reply.
Signature · 2 lines
Best Regards Masahiro Yamada
Signature · 2 lines
Thanks, Changbin Du
PATCH v3 2/4 kernel hacking: new config NO_AUTO_INLINE to disable compiler auto-inline optimizations
In reply to Changbin DuThis patch add a new kernel hacking option NO_AUTO_INLINE. Selecting this option will prevent the compiler from optimizing the kernel by auto-inlining functions not marked with the inline keyword.
With this option, only functions explicitly marked with "inline" will be inlined. This will allow the function tracer to trace more functions because it only traces functions that the compiler has not inlined.
--- Makefile | 6 ++++++ lib/Kconfig.debug | 17 +++++++++++++++++ 2 files changed, 23 insertions(+)
Makefile +6 -0
@@ -749,6 +749,12 @@ KBUILD_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly) \ $(call cc-option,-fno-var-tracking) endif +ifdef CONFIG_NO_AUTO_INLINE +KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions) \ + $(call cc-option, -fno-inline-small-functions) \ + $(call cc-option, -fno-inline-functions-called-once) +endif + ifdef CONFIG_FUNCTION_TRACER ifdef CONFIG_FTRACE_MCOUNT_RECORD # gcc 5 supports generating the mcount tables directly
lib/Kconfig.debug +17 -0
@@ -211,6 +211,23 @@ config GDB_SCRIPTS instance. See Documentation/dev-tools/gdb-kernel-debugging.rst for further details. +config NO_AUTO_INLINE + bool "Disable compiler auto-inline optimizations" + help + This will prevent the compiler from optimizing the kernel by + auto-inlining functions not marked with the inline keyword. + With this option, only functions explicitly marked with + "inline" will be inlined. This will allow the function tracer + to trace more functions because it only traces functions that + the compiler has not inlined. + + Enabling this function can help debugging a kernel if using + the function tracer. But it can also change how the kernel + works, because inlining functions may change the timing, + which could make it difficult while debugging race conditions. + + If unsure, select N. + config ENABLE_MUST_CHECK bool "Enable __must_check logic" default y
Signature · 1 line
2.17.1
Re: [PATCH v3 2/4] kernel hacking: new config NO_AUTO_INLINE to disable compiler auto-inline optimizations
Quoted 2 lines · Changbin Du
This patch add a new kernel hacking option
NO_AUTO_INLINE. Selecting
I fixed "This patch add ..." to "This patch adds ..." then applied to linux-kbuild.
Quoted 62 lines
this option will prevent the compiler from optimizing the kernel by auto-inlining functions not marked with the inline keyword.
With this option, only functions explicitly marked with "inline" will be inlined. This will allow the function tracer to trace more functions because it only traces functions that the compiler has not inlined.
Signed-off-by Changbin Du <[email protected]>--- Makefile | 6 ++++++ lib/Kconfig.debug | 17 +++++++++++++++++ 2 files changed, 23 insertions(+)Makefile +6
-0@@ -749,6 +749,12 @@ KBUILD_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly) \ $(call cc-option,-fno-var-tracking) endif +ifdef CONFIG_NO_AUTO_INLINE +KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions) \ + $(call cc-option, -fno-inline-small-functions) \ + $(call cc-option, -fno-inline-functions-called-once) +endif + ifdef CONFIG_FUNCTION_TRACER ifdef CONFIG_FTRACE_MCOUNT_RECORD # gcc 5 supports generating the mcount tables directlylib/Kconfig.debug +17
-1@@ -211,6 +211,23 @@ config GDB_SCRIPTS instance. See Documentation/dev-tools/gdb-kernel-debugging.rst for further details. +config NO_AUTO_INLINE + bool "Disable compiler auto-inline optimizations" + help + This will prevent the compiler from optimizing the kernel by + auto-inlining functions not marked with the inline keyword. + With this option, only functions explicitly marked with + "inline" will be inlined. This will allow the function tracer + to trace more functions because it only traces functions that + the compiler has not inlined. + + Enabling this function can help debugging a kernel if using + the function tracer. But it can also change how the kernel + works, because inlining functions may change the timing, + which could make it difficult while debugging race conditions. + + If unsure, select N. + config ENABLE_MUST_CHECK bool "Enable __must_check logic" default y --2.17.1
Signature · 2 lines
Best Regards Masahiro Yamada
PATCH v3 3/4 ARM: mm: fix build error in fix_to_virt with CONFIG_CC_OPTIMIZE_FOR_DEBUGGING
In reply to Changbin DuWith '-Og' optimization level, GCC would not optimize a count for a loop as a constant value. But BUILD_BUG_ON() only accept compile-time constant values. Let's use __fix_to_virt() to avoid the error.
arch/arm/mm/mmu.o: In function `fix_to_virt':/home/changbin/work/linux/./include/asm-generic/fixmap.h:31: undefined reference to `__compiletime_assert_31' Makefile:1051: recipe for target 'vmlinux' failed
make: *** [vmlinux] Error 1
--- arch/arm/mm/mmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/mm/mmu.c +1 -1
@@ -1599,7 +1599,7 @@ static void __init early_fixmap_shutdown(void)pte_t *pte;struct map_desc map; - map.virtual =fix_to_virt (i); + map.virtual =__fix_to_virt (i); pte =pte_offset_early_fixmap (pmd_off_k (map.virtual), map.virtual);/* Only i/o device mappings are supported ATM */
Signature · 1 line
2.17.1
Re: [PATCH v3 3/4] ARM: mm: fix build error in fix_to_virt with CONFIG_CC_OPTIMIZE_FOR_DEBUGGING
Quoted 5 lines · Changbin Du
With '-Og' optimization level, GCC would not optimize a count for a loop as a constant value. But
BUILD_BUG_ON()only accept compile-time constant values. Let's use__fix_to_virt()to avoid the error.
Quoted 8 lines
arch/arm/mm/mmu.o: In function `fix_to_virt':/home/changbin/work/linux/./include/asm-generic/fixmap.h:31: undefined reference to `__compiletime_assert_31' Makefile:1051: recipe for target 'vmlinux' failed
make: *** [vmlinux] Error 1Signed-off-by Changbin Du <[email protected]>---
Applied to linux-kbuild
Signature · 2 lines
Best Regards Masahiro Yamada
PATCH v3 4/4 kernel hacking: new config CC_OPTIMIZE_FOR_DEBUGGING to apply GCC -Og optimization
In reply to Changbin DuThis will apply GCC '-Og' optimization level which is supported since GCC 4.8. This optimization level offers a reasonable level of optimization while maintaining fast compilation and a good debugging experience. It is similar to '-O1' while perferring to keep debug ability over runtime speed.
If enabling this option breaks your kernel, you should either disable this or find a fix (mostly in the arch code). Currently this option has only been tested on x86_64 and arm platform.
This option can satisfy people who was searching for a method to disable compiler optimizations so to achieve better kernel debugging experience with kgdb or qemu.
The main problem of '-Og' is we must not use __attribute__((error(msg))). The compiler will report error though the call to error function still can be optimize out. So we must fallback to array tricky.
Comparison of vmlinux size: a bit smaller.
w/o CONFIG_CC_OPTIMIZE_FOR_DEBUGGING
$ size vmlinux
text data bss dec hex filename
22665554 9709674 2920908 35296136 21a9388 vmlinux
w/ CONFIG_CC_OPTIMIZE_FOR_DEBUGGING
$ size vmlinux
text data bss dec hex filename
21499032 10102758 2920908 34522698 20ec64a vmlinux
Comparison of system performance: a bit drop (~6%).
This benchmark of kernel compilation is suggested by Ingo Molnar.
https://lkml.org/lkml/2018/5/2/74
Preparation: Set cpufreq to 'performance'.
for ((cpu=0; cpu<120; cpu++)); do
G=/sys/devices/system/cpu/cpu$cpu/cpufreq/scaling_governor
[ -f $G ] && echo performance > $G
done
w/o CONFIG_CC_OPTIMIZE_FOR_DEBUGGING
$ perf stat --repeat 5 --null --pre '\
cp -a kernel ../kernel.copy.$(date +%s); \
rm -rf *; \
git checkout .; \
echo 1 > /proc/sys/vm/drop_caches; \
find ../kernel* -type f | xargs cat >/dev/null; \
make -j kernel >/dev/null; \
make clean >/dev/null 2>&1; \
sync '\
\
make -j8 >/dev/null
Performance counter stats for 'make -j8' (5 runs):
219.764246652 seconds time elapsed ( +- 0.78% )
w/ CONFIG_CC_OPTIMIZE_FOR_DEBUGGING
$ perf stat --repeat 5 --null --pre '\
cp -a kernel ../kernel.copy.$(date +%s); \
rm -rf *; \
git checkout .; \
echo 1 > /proc/sys/vm/drop_caches; \
find ../kernel* -type f | xargs cat >/dev/null; \
make -j kernel >/dev/null; \
make clean >/dev/null 2>&1; \
sync '\
\
make -j8 >/dev/null
Performance counter stats for 'make -j8' (5 runs):
233.574187771 seconds time elapsed ( +- 0.19% )---
v3:
o make CC_OPTIMIZE_FOR_DEBUGGING depends on $(cc-option,-Og)
o reflect CONFIG_CC_OPTIMIZE_FOR_DEBUGGING in tiny.config
--- Makefile | 5 +++++ include/linux/compiler-gcc.h | 2 +- include/linux/compiler.h | 2 +- init/Kconfig | 20 ++++++++++++++++++++ kernel/configs/tiny.config | 1 + 5 files changed, 28 insertions(+), 2 deletions(-)
Makefile +5 -0
@@ -657,6 +657,10 @@ KBUILD_CFLAGS += $(call cc-disable-warning, format-truncation) KBUILD_CFLAGS += $(call cc-disable-warning, format-overflow) KBUILD_CFLAGS += $(call cc-disable-warning, int-in-bool-context) +ifdef CONFIG_CC_OPTIMIZE_FOR_DEBUGGING +KBUILD_CFLAGS += -Og +KBUILD_CFLAGS += $(call cc-disable-warning,maybe-uninitialized,) +else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE KBUILD_CFLAGS += $(call cc-option,-Oz,-Os) KBUILD_CFLAGS += $(call cc-disable-warning,maybe-uninitialized,)
@@ -667,6 +671,7 @@ else KBUILD_CFLAGS += -O2 endif endif +endif KBUILD_CFLAGS += $(call cc-ifversion, -lt, 0409, \ $(call cc-disable-warning,maybe-uninitialized,))
include/linux/compiler-gcc.h +1 -1
@@ -85,7 +85,7 @@#define __compiletime_object_size (obj) __builtin_object_size(obj, 0) -#ifndef __CHECKER__ +#if !defined(__CHECKER__) && !defined(CONFIG_CC_OPTIMIZE_FOR_DEBUGGING )#define __compiletime_warning (message) __attribute__((warning(message)))#define __compiletime_error (message) __attribute__((error(message)))
include/linux/compiler.h +1 -1
@@ -350,7 +350,7 @@ static inline void *offset_to_ptr(const int *off)* sparse see a constant array size without breaking compiletime_assert on old * versions of GCC (e.g. 4.2.4), so hide the array from sparse altogether. */ -# ifndef __CHECKER__ +# if !defined(__CHECKER__) && !defined(CONFIG_CC_OPTIMIZE_FOR_DEBUGGING )# define __compiletime_error_fallback (condition) \ do { ((void)sizeof(char[1 - 2 * condition])); } while (0)# endif
init/Kconfig +20 -0
@@ -1105,6 +1105,26 @@ config CC_OPTIMIZE_FOR_SIZE If unsure, say N. +config CC_OPTIMIZE_FOR_DEBUGGING + bool "Optimize for better debugging experience (-Og)" + depends on $(cc-option,-Og) + select NO_AUTO_INLINE + help + This will apply GCC '-Og' optimization level which is supported + since GCC 4.8. This optimization level offers a reasonable level + of optimization while maintaining fast compilation and a good + debugging experience. It is similar to '-O1' while preferring to + keep debug ability over runtime speed. The overall performance + will drop a bit (~6%). + + Use only if you want to debug the kernel, especially if you want + to have better kernel debugging experience with gdb facilities + like kgdb or qemu. If enabling this option breaks your kernel, + you should either disable this or find a fix (mostly in the arch + code). + + If unsure, select N. + endchoice config HAVE_LD_DEAD_CODE_DATA_ELIMINATION
kernel/configs/tiny.config +1 -0
@@ -1,5 +1,6 @@ # CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set CONFIG_CC_OPTIMIZE_FOR_SIZE=y +# CONFIG_CC_OPTIMIZE_FOR_DEBUGGING is not set # CONFIG_KERNEL_GZIP is not set # CONFIG_KERNEL_BZIP2 is not set # CONFIG_KERNEL_LZMA is not set
Signature · 1 line
2.17.1
Re: [PATCH v3 4/4] kernel hacking: new config CC_OPTIMIZE_FOR_DEBUGGING to apply GCC -Og optimization
Quoted 11 lines · Changbin Du
This will apply GCC '-Og' optimization level which is supported since GCC 4.8. This optimization level offers a reasonable level of optimization while maintaining fast compilation and a good debugging experience. It is similar to '-O1' while perferring to keep debug ability over runtime speed.
If enabling this option breaks your kernel, you should either disable this or find a fix (mostly in the arch code). Currently this option has only been tested on
x86_64and arm platform.
Quoted 7 lines
This option can satisfy people who was searching for a method to disable compiler optimizations so to achieve better kernel debugging experience with kgdb or qemu.
The main problem of '-Og' is we must not use __attribute__((error(msg))). The compiler will report error though the call to error function still can be optimize out. So we must fallback to array tricky.
I removed the sentence "So we must fallback to array tricky."
Commit 81b45683487a51b0f4d3b29d37f20d6d078544e4
killed the fallback to the negative array trick.
I also resolved a conflict.
Your series is now available in the following branch.
git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild kbuild
Please double check if I did it correctly.
--
Best Regards
Masahiro Yamada
Re: [PATCH v3 4/4] kernel hacking: new config CC_OPTIMIZE_FOR_DEBUGGING to apply GCC -Og optimization
Quoted 27 lines · Masahiro Yamada
Quoted 11 lines · Changbin Du
This will apply GCC '-Og' optimization level which is supported since GCC 4.8. This optimization level offers a reasonable level of optimization while maintaining fast compilation and a good debugging experience. It is similar to '-O1' while perferring to keep debug ability over runtime speed.
If enabling this option breaks your kernel, you should either disable this or find a fix (mostly in the arch code). Currently this option has only been tested on
x86_64and arm platform.Quoted 7 lines
This option can satisfy people who was searching for a method to disable compiler optimizations so to achieve better kernel debugging experience with kgdb or qemu.
The main problem of '-Og' is we must not use __attribute__((error(msg))). The compiler will report error though the call to error function still can be optimize out. So we must fallback to array tricky.
I removed the sentence "So we must fallback to array tricky."
Commit
81b45683487a51b0f4d3b29d37f20d6d078544e4
killed the fallback to the negative array trick.
Quoted 9 lines
I also resolved a conflict.
Your series is now available in the following branch.
git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuildkbuildPlease double check if I did it correctly.
I have tested your kbuild branch and no issues found. Thanks for checking this series!
Quoted 4 lines
--
Best Regards
Masahiro Yamada
Signature · 2 lines
Thanks, Changbin Du