Message ID | 20221002181107.51286-4-masahiroy@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Kconfig.debug: make more efforts to fix CONFIG_DEBUG_INFO for Clang+GAS | expand |
On Mon, Oct 03, 2022 at 03:11:07AM +0900, Masahiro Yamada wrote: > Commit f9b3cd245784 ("Kconfig.debug: make DEBUG_INFO selectable from > a choice") added CONFIG_DEBUG_INFO_NONE into the DWARF version choice, > but it should rather belong to the debug level choice. > > This commit consolidates CONFIG options into two choices: > > - Debug info level (NONE / REDUCED / DEFAULT) > > - DWARF format (DWARF_TOOLCHAIN_DEFAULT / DWARF4 / DWARF5) > > This is more consistent with compilers' policy because the -g0 compiler > flag means "no debug info". > > GCC manual: > > -g<level> > > Request debugging information and also use level to specify how > much information. The default level is 2. > > Level 0 produces no debug information at all. Thus, -g0 negates -g. > > Level 1 produces minimal information, enough for making backtraces > in parts of the program that you don’t plan to debug. This includes > descriptions of functions and external variables, and line number > tables, but no information about local variables. > > Level 3 includes extra information, such as all the macro > definitions present in the program. Some debuggers support macro > expansion when you use -g3. > > Rustc Codegen manual: > > debuginfo > > This flag controls the generation of debug information. It takes > one of the following values: > > 0: no debug info at all (the default). > 1: line tables only. > 2: full debug info. > > I moved CONFIG_DEBUG_INFO_REDUCED into the debug level choice. > > This change will make it easier to add another debug info level if > necessary. > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> > Acked-by: Miguel Ojeda <ojeda@kernel.org> As far as I can tell, this will require updating defconfigs again to include an explicit 'CONFIG_DEBUG_INFO_DEFAULT=y', right? It might be nice to do that as part of this change to keep everything working, as there was some fallout from the last time: 92f89ec1b534 ("powerpc: Restore CONFIG_DEBUG_INFO in defconfigs") ddd366bf01de ("ARM: defconfig: address renamed CONFIG_DEBUG_INFO=y") Regardless, I think this is a good change. Reviewed-by: Nathan Chancellor <nathan@kernel.org> > --- > > lib/Kconfig.debug | 59 +++++++++++++++++++++++++++++------------------ > 1 file changed, 36 insertions(+), 23 deletions(-) > > diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug > index cc90414d492e..ce1faae1a979 100644 > --- a/lib/Kconfig.debug > +++ b/lib/Kconfig.debug > @@ -234,15 +234,10 @@ config DEBUG_INFO > choice > prompt "Debug information" > depends on DEBUG_KERNEL > + depends on !CC_IS_CLANG || AS_IS_LLVM || CLANG_VERSION < 140000 || (AS_IS_GNU && AS_VERSION >= 23502) > help > Selecting something other than "None" results in a kernel image > that will include debugging info resulting in a larger kernel image. > - This adds debug symbols to the kernel and modules (gcc -g), and > - is needed if you intend to use kernel crashdump or binary object > - tools like crash, kgdb, LKCD, gdb, etc on the kernel. > - > - Choose which version of DWARF debug info to emit. If unsure, > - select "Toolchain default". > > config DEBUG_INFO_NONE > bool "Disable debug information" > @@ -250,10 +245,40 @@ config DEBUG_INFO_NONE > Do not build the kernel with debugging information, which will > result in a faster and smaller build. > > +config DEBUG_INFO_REDUCED > + bool "Reduced debugging information" > + select DEBUG_INFO > + help > + If you say Y here compiler is instructed to generate less debugging > + information for structure types. This means that tools that > + need full debugging information (like kgdb or systemtap) won't > + be happy. But if you merely need debugging information to > + resolve line numbers there is no loss. Advantage is that > + build directory object sizes shrink dramatically over a full > + DEBUG_INFO build and compile times are reduced too. > + Only works with newer gcc versions. > + > +config DEBUG_INFO_DEFAULT > + bool "Default-level debugging information" > + select DEBUG_INFO > + help > + If you say Y here compiler is instructed to generate the default > + level of debugging information. > + > + This adds debug symbols to the kernel and modules (gcc -g), and > + is needed if you intend to use kernel crashdump or binary object > + tools like crash, kgdb, LKCD, gdb, etc on the kernel. > + > +endchoice # "Debug information" > + > +choice > + prompt "DWARF version" > + depends on DEBUG_INFO > + help > + Which version of DWARF debug info to emit. > + > config DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT > bool "Rely on the toolchain's implicit default DWARF version" > - select DEBUG_INFO > - depends on !CC_IS_CLANG || AS_IS_LLVM || CLANG_VERSION < 140000 || (AS_IS_GNU && AS_VERSION >= 23502) > help > The implicit default version of DWARF debug info produced by a > toolchain changes over time. > @@ -262,9 +287,10 @@ config DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT > support newer revisions, and prevent testing newer versions, but > those should be less common scenarios. > > + If unsure, say Y. > + > config DEBUG_INFO_DWARF4 > bool "Generate DWARF Version 4 debuginfo" > - select DEBUG_INFO > depends on !CC_IS_CLANG || AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502) > help > Generate DWARF v4 debug info. This requires gcc 4.5+, binutils 2.35.2 > @@ -276,7 +302,6 @@ config DEBUG_INFO_DWARF4 > > config DEBUG_INFO_DWARF5 > bool "Generate DWARF Version 5 debuginfo" > - select DEBUG_INFO > depends on !CC_IS_CLANG || AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502) > help > Generate DWARF v5 debug info. Requires binutils 2.35.2, gcc 5.0+ (gcc > @@ -291,22 +316,10 @@ config DEBUG_INFO_DWARF5 > config if they rely on tooling that has not yet been updated to > support DWARF Version 5. > > -endchoice # "Debug information" > +endchoice # "DWARF version" > > if DEBUG_INFO > > -config DEBUG_INFO_REDUCED > - bool "Reduce debugging information" > - help > - If you say Y here gcc is instructed to generate less debugging > - information for structure types. This means that tools that > - need full debugging information (like kgdb or systemtap) won't > - be happy. But if you merely need debugging information to > - resolve line numbers there is no loss. Advantage is that > - build directory object sizes shrink dramatically over a full > - DEBUG_INFO build and compile times are reduced too. > - Only works with newer gcc versions. > - > config DEBUG_INFO_COMPRESSED > bool "Compressed debugging information" > depends on $(cc-option,-gz=zlib) > -- > 2.34.1 >
On Tue, Oct 4, 2022 at 2:20 AM Nathan Chancellor <nathan@kernel.org> wrote: > > On Mon, Oct 03, 2022 at 03:11:07AM +0900, Masahiro Yamada wrote: > > Commit f9b3cd245784 ("Kconfig.debug: make DEBUG_INFO selectable from > > a choice") added CONFIG_DEBUG_INFO_NONE into the DWARF version choice, > > but it should rather belong to the debug level choice. > > > > This commit consolidates CONFIG options into two choices: > > > > - Debug info level (NONE / REDUCED / DEFAULT) > > > > - DWARF format (DWARF_TOOLCHAIN_DEFAULT / DWARF4 / DWARF5) > > > > This is more consistent with compilers' policy because the -g0 compiler > > flag means "no debug info". > > > > GCC manual: > > > > -g<level> > > > > Request debugging information and also use level to specify how > > much information. The default level is 2. > > > > Level 0 produces no debug information at all. Thus, -g0 negates -g. > > > > Level 1 produces minimal information, enough for making backtraces > > in parts of the program that you don’t plan to debug. This includes > > descriptions of functions and external variables, and line number > > tables, but no information about local variables. > > > > Level 3 includes extra information, such as all the macro > > definitions present in the program. Some debuggers support macro > > expansion when you use -g3. > > > > Rustc Codegen manual: > > > > debuginfo > > > > This flag controls the generation of debug information. It takes > > one of the following values: > > > > 0: no debug info at all (the default). > > 1: line tables only. > > 2: full debug info. > > > > I moved CONFIG_DEBUG_INFO_REDUCED into the debug level choice. > > > > This change will make it easier to add another debug info level if > > necessary. > > > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > > Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> > > Acked-by: Miguel Ojeda <ojeda@kernel.org> > > As far as I can tell, this will require updating defconfigs again to > include an explicit 'CONFIG_DEBUG_INFO_DEFAULT=y', right? It might be > nice to do that as part of this change to keep everything working, as > there was some fallout from the last time: > > 92f89ec1b534 ("powerpc: Restore CONFIG_DEBUG_INFO in defconfigs") > ddd366bf01de ("ARM: defconfig: address renamed CONFIG_DEBUG_INFO=y") > > Regardless, I think this is a good change. Thanks. I will do that in v2.
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index cc90414d492e..ce1faae1a979 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -234,15 +234,10 @@ config DEBUG_INFO choice prompt "Debug information" depends on DEBUG_KERNEL + depends on !CC_IS_CLANG || AS_IS_LLVM || CLANG_VERSION < 140000 || (AS_IS_GNU && AS_VERSION >= 23502) help Selecting something other than "None" results in a kernel image that will include debugging info resulting in a larger kernel image. - This adds debug symbols to the kernel and modules (gcc -g), and - is needed if you intend to use kernel crashdump or binary object - tools like crash, kgdb, LKCD, gdb, etc on the kernel. - - Choose which version of DWARF debug info to emit. If unsure, - select "Toolchain default". config DEBUG_INFO_NONE bool "Disable debug information" @@ -250,10 +245,40 @@ config DEBUG_INFO_NONE Do not build the kernel with debugging information, which will result in a faster and smaller build. +config DEBUG_INFO_REDUCED + bool "Reduced debugging information" + select DEBUG_INFO + help + If you say Y here compiler is instructed to generate less debugging + information for structure types. This means that tools that + need full debugging information (like kgdb or systemtap) won't + be happy. But if you merely need debugging information to + resolve line numbers there is no loss. Advantage is that + build directory object sizes shrink dramatically over a full + DEBUG_INFO build and compile times are reduced too. + Only works with newer gcc versions. + +config DEBUG_INFO_DEFAULT + bool "Default-level debugging information" + select DEBUG_INFO + help + If you say Y here compiler is instructed to generate the default + level of debugging information. + + This adds debug symbols to the kernel and modules (gcc -g), and + is needed if you intend to use kernel crashdump or binary object + tools like crash, kgdb, LKCD, gdb, etc on the kernel. + +endchoice # "Debug information" + +choice + prompt "DWARF version" + depends on DEBUG_INFO + help + Which version of DWARF debug info to emit. + config DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT bool "Rely on the toolchain's implicit default DWARF version" - select DEBUG_INFO - depends on !CC_IS_CLANG || AS_IS_LLVM || CLANG_VERSION < 140000 || (AS_IS_GNU && AS_VERSION >= 23502) help The implicit default version of DWARF debug info produced by a toolchain changes over time. @@ -262,9 +287,10 @@ config DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT support newer revisions, and prevent testing newer versions, but those should be less common scenarios. + If unsure, say Y. + config DEBUG_INFO_DWARF4 bool "Generate DWARF Version 4 debuginfo" - select DEBUG_INFO depends on !CC_IS_CLANG || AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502) help Generate DWARF v4 debug info. This requires gcc 4.5+, binutils 2.35.2 @@ -276,7 +302,6 @@ config DEBUG_INFO_DWARF4 config DEBUG_INFO_DWARF5 bool "Generate DWARF Version 5 debuginfo" - select DEBUG_INFO depends on !CC_IS_CLANG || AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502) help Generate DWARF v5 debug info. Requires binutils 2.35.2, gcc 5.0+ (gcc @@ -291,22 +316,10 @@ config DEBUG_INFO_DWARF5 config if they rely on tooling that has not yet been updated to support DWARF Version 5. -endchoice # "Debug information" +endchoice # "DWARF version" if DEBUG_INFO -config DEBUG_INFO_REDUCED - bool "Reduce debugging information" - help - If you say Y here gcc is instructed to generate less debugging - information for structure types. This means that tools that - need full debugging information (like kgdb or systemtap) won't - be happy. But if you merely need debugging information to - resolve line numbers there is no loss. Advantage is that - build directory object sizes shrink dramatically over a full - DEBUG_INFO build and compile times are reduced too. - Only works with newer gcc versions. - config DEBUG_INFO_COMPRESSED bool "Compressed debugging information" depends on $(cc-option,-gz=zlib)