2021-12-10 00:09:15

by Kees Cook

[permalink] [raw]
Subject: [PATCH] Kconfig.debug: Make DEBUG_INFO selectable from a choice

Currently it's not possible to enable DEBUG_INFO for an all*config
build, since it is marked as "depends on !COMPILE_TEST". This generally
makes sense because a debug build of an all*config target ends up taking
much longer and the output is much larger. Having this be "default off"
makes sense. However, there are cases where enabling DEBUG_INFO for such
builds is useful for doing treewide A/B comparisons of build options,
etc.

Make DEBUG_INFO selectable from any of the DWARF version choice options,
with DEBUG_INFO_NONE being the default for COMPILE_TEST. The mutually
exclusive relationship between DWARF5 and BTF must be inverted, but the
result remains the same. Additionally moves DEBUG_KERNEL and DEBUG_MISC
up to the top of the menu because was enabling features _above_ it,
making it weird to navigate menuconfig.

Suggested-by: Arnd Bergmann <[email protected]>
Signed-off-by: Kees Cook <[email protected]>
---
lib/Kconfig.debug | 142 +++++++++++++++++++++++++---------------------
1 file changed, 76 insertions(+), 66 deletions(-)

diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 5c12bde10996..70ef47e92681 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -208,20 +208,89 @@ config DEBUG_BUGVERBOSE

endmenu # "printk and dmesg options"

+config DEBUG_KERNEL
+ bool "Kernel debugging"
+ help
+ Say Y here if you are developing drivers or trying to debug and
+ identify kernel problems.
+
+config DEBUG_MISC
+ bool "Miscellaneous debug code"
+ default DEBUG_KERNEL
+ depends on DEBUG_KERNEL
+ help
+ Say Y here if you need to enable miscellaneous debug code that should
+ be under a more specific debug option but isn't.
+
menu "Compile-time checks and compiler options"

config DEBUG_INFO
- bool "Compile the kernel with debug info"
- depends on DEBUG_KERNEL && !COMPILE_TEST
+ bool
help
- If you say Y here the resulting kernel image will include
- debugging info resulting in a larger kernel image.
+ A kernel debug info option other than "None" has been selected
+ in the "Debug information" choice below, indicating that debug
+ information will be generated for build targets.
+
+choice
+ prompt "Debug information"
+ depends on DEBUG_KERNEL
+ default DEBUG_INFO_NONE if COMPILE_TEST
+ default DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT if DEBUG_KERNEL
+ 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.
- Say Y here only if you plan to debug the kernel.

- If unsure, say N.
+ Choose which version of DWARF debug info to emit. If unsure,
+ select "Toolchain default".
+
+config DEBUG_INFO_NONE
+ bool "Disable debug information"
+ help
+ Do not build the kernel with debugging information, which will
+ result in a faster and smaller build.
+
+config DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
+ bool "Rely on the toolchain's implicit default DWARF version"
+ select DEBUG_INFO
+ help
+ The implicit default version of DWARF debug info produced by a
+ toolchain changes over time.
+
+ This can break consumers of the debug info that haven't upgraded to
+ support newer revisions, and prevent testing newer versions, but
+ those should be less common scenarios.
+
+config DEBUG_INFO_DWARF4
+ bool "Generate DWARF Version 4 debuginfo"
+ select DEBUG_INFO
+ help
+ Generate DWARF v4 debug info. This requires gcc 4.5+ and gdb 7.0+.
+
+ If you have consumers of DWARF debug info that are not ready for
+ newer revisions of DWARF, you may wish to choose this or have your
+ config select this.
+
+config DEBUG_INFO_DWARF5
+ bool "Generate DWARF Version 5 debuginfo"
+ select DEBUG_INFO
+ depends on !CC_IS_CLANG || (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
+ 5.0+ accepts the -gdwarf-5 flag but only had partial support for some
+ draft features until 7.0), and gdb 8.0+.
+
+ Changes to the structure of debug info in Version 5 allow for around
+ 15-18% savings in resulting image and debug info section sizes as
+ compared to DWARF Version 4. DWARF Version 5 standardizes previous
+ extensions such as accelerators for symbol indexing and the format
+ for fission (.dwo/.dwp) files. Users may not want to select this
+ config if they rely on tooling that has not yet been updated to
+ support DWARF Version 5.
+
+endchoice # "Debug information"

if DEBUG_INFO

@@ -267,55 +336,11 @@ config DEBUG_INFO_SPLIT
to know about the .dwo files and include them.
Incompatible with older versions of ccache.

-choice
- prompt "DWARF version"
- 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"
- help
- The implicit default version of DWARF debug info produced by a
- toolchain changes over time.
-
- This can break consumers of the debug info that haven't upgraded to
- 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"
- help
- Generate DWARF v4 debug info. This requires gcc 4.5+ and gdb 7.0+.
-
- If you have consumers of DWARF debug info that are not ready for
- newer revisions of DWARF, you may wish to choose this or have your
- config select this.
-
-config DEBUG_INFO_DWARF5
- bool "Generate DWARF Version 5 debuginfo"
- depends on !CC_IS_CLANG || (CC_IS_CLANG && (AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502)))
- depends on !DEBUG_INFO_BTF
- help
- Generate DWARF v5 debug info. Requires binutils 2.35.2, gcc 5.0+ (gcc
- 5.0+ accepts the -gdwarf-5 flag but only had partial support for some
- draft features until 7.0), and gdb 8.0+.
-
- Changes to the structure of debug info in Version 5 allow for around
- 15-18% savings in resulting image and debug info section sizes as
- compared to DWARF Version 4. DWARF Version 5 standardizes previous
- extensions such as accelerators for symbol indexing and the format
- for fission (.dwo/.dwp) files. Users may not want to select this
- config if they rely on tooling that has not yet been updated to
- support DWARF Version 5.
-
-endchoice # "DWARF version"
-
config DEBUG_INFO_BTF
bool "Generate BTF typeinfo"
depends on !DEBUG_INFO_SPLIT && !DEBUG_INFO_REDUCED
depends on !GCC_PLUGIN_RANDSTRUCT || COMPILE_TEST
+ depends on !DEBUG_INFO_DWARF5
help
Generate deduplicated BTF type information from DWARF debug info.
Turning this on expects presence of pahole tool, which will convert
@@ -584,21 +609,6 @@ source "lib/Kconfig.kcsan"

endmenu

-config DEBUG_KERNEL
- bool "Kernel debugging"
- help
- Say Y here if you are developing drivers or trying to debug and
- identify kernel problems.
-
-config DEBUG_MISC
- bool "Miscellaneous debug code"
- default DEBUG_KERNEL
- depends on DEBUG_KERNEL
- help
- Say Y here if you need to enable miscellaneous debug code that should
- be under a more specific debug option but isn't.
-
-
menu "Memory Debugging"

source "mm/Kconfig.debug"
--
2.30.2



2021-12-10 09:40:33

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH] Kconfig.debug: Make DEBUG_INFO selectable from a choice

On Fri, Dec 10, 2021 at 1:09 AM Kees Cook <[email protected]> wrote:
>
> Currently it's not possible to enable DEBUG_INFO for an all*config
> build, since it is marked as "depends on !COMPILE_TEST". This generally
> makes sense because a debug build of an all*config target ends up taking
> much longer and the output is much larger. Having this be "default off"
> makes sense. However, there are cases where enabling DEBUG_INFO for such
> builds is useful for doing treewide A/B comparisons of build options,
> etc.
>
> Make DEBUG_INFO selectable from any of the DWARF version choice options,
> with DEBUG_INFO_NONE being the default for COMPILE_TEST. The mutually
> exclusive relationship between DWARF5 and BTF must be inverted, but the
> result remains the same. Additionally moves DEBUG_KERNEL and DEBUG_MISC
> up to the top of the menu because was enabling features _above_ it,
> making it weird to navigate menuconfig.
>
> Suggested-by: Arnd Bergmann <[email protected]>
> Signed-off-by: Kees Cook <[email protected]>

Looks good to me,

Reviewed-by: Arnd Bergmann <[email protected]>

One detail:

> +choice
> + prompt "Debug information"
> + depends on DEBUG_KERNEL
> + default DEBUG_INFO_NONE if COMPILE_TEST
> + default DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT if DEBUG_KERNEL

I think this line should be simplified to

default DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT

since DEBUG_KERNEL is always enabled at this point. You can also consider
turning the 'menu' into 'menuconfig DEBUG_KERNEL' and dropping the 'depends
on DEBUG_KERNEL' in favor of the implied dependency.

Arnd

2021-12-10 16:28:45

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH] Kconfig.debug: Make DEBUG_INFO selectable from a choice

On Thu, Dec 09, 2021 at 04:09:10PM -0800, Kees Cook wrote:
> Currently it's not possible to enable DEBUG_INFO for an all*config
> build, since it is marked as "depends on !COMPILE_TEST". This generally
> makes sense because a debug build of an all*config target ends up taking
> much longer and the output is much larger. Having this be "default off"
> makes sense. However, there are cases where enabling DEBUG_INFO for such
> builds is useful for doing treewide A/B comparisons of build options,
> etc.
>
> Make DEBUG_INFO selectable from any of the DWARF version choice options,
> with DEBUG_INFO_NONE being the default for COMPILE_TEST. The mutually
> exclusive relationship between DWARF5 and BTF must be inverted, but the
> result remains the same. Additionally moves DEBUG_KERNEL and DEBUG_MISC
> up to the top of the menu because was enabling features _above_ it,
> making it weird to navigate menuconfig.
>
> Suggested-by: Arnd Bergmann <[email protected]>
> Signed-off-by: Kees Cook <[email protected]>

Reviewed-by: Nathan Chancellor <[email protected]>

> ---
> lib/Kconfig.debug | 142 +++++++++++++++++++++++++---------------------
> 1 file changed, 76 insertions(+), 66 deletions(-)
>
> diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
> index 5c12bde10996..70ef47e92681 100644
> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug
> @@ -208,20 +208,89 @@ config DEBUG_BUGVERBOSE
>
> endmenu # "printk and dmesg options"
>
> +config DEBUG_KERNEL
> + bool "Kernel debugging"
> + help
> + Say Y here if you are developing drivers or trying to debug and
> + identify kernel problems.
> +
> +config DEBUG_MISC
> + bool "Miscellaneous debug code"
> + default DEBUG_KERNEL
> + depends on DEBUG_KERNEL
> + help
> + Say Y here if you need to enable miscellaneous debug code that should
> + be under a more specific debug option but isn't.
> +
> menu "Compile-time checks and compiler options"
>
> config DEBUG_INFO
> - bool "Compile the kernel with debug info"
> - depends on DEBUG_KERNEL && !COMPILE_TEST
> + bool
> help
> - If you say Y here the resulting kernel image will include
> - debugging info resulting in a larger kernel image.
> + A kernel debug info option other than "None" has been selected
> + in the "Debug information" choice below, indicating that debug
> + information will be generated for build targets.
> +
> +choice
> + prompt "Debug information"
> + depends on DEBUG_KERNEL
> + default DEBUG_INFO_NONE if COMPILE_TEST
> + default DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT if DEBUG_KERNEL
> + 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.
> - Say Y here only if you plan to debug the kernel.
>
> - If unsure, say N.
> + Choose which version of DWARF debug info to emit. If unsure,
> + select "Toolchain default".
> +
> +config DEBUG_INFO_NONE
> + bool "Disable debug information"
> + help
> + Do not build the kernel with debugging information, which will
> + result in a faster and smaller build.
> +
> +config DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
> + bool "Rely on the toolchain's implicit default DWARF version"
> + select DEBUG_INFO
> + help
> + The implicit default version of DWARF debug info produced by a
> + toolchain changes over time.
> +
> + This can break consumers of the debug info that haven't upgraded to
> + support newer revisions, and prevent testing newer versions, but
> + those should be less common scenarios.
> +
> +config DEBUG_INFO_DWARF4
> + bool "Generate DWARF Version 4 debuginfo"
> + select DEBUG_INFO
> + help
> + Generate DWARF v4 debug info. This requires gcc 4.5+ and gdb 7.0+.
> +
> + If you have consumers of DWARF debug info that are not ready for
> + newer revisions of DWARF, you may wish to choose this or have your
> + config select this.
> +
> +config DEBUG_INFO_DWARF5
> + bool "Generate DWARF Version 5 debuginfo"
> + select DEBUG_INFO
> + depends on !CC_IS_CLANG || (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
> + 5.0+ accepts the -gdwarf-5 flag but only had partial support for some
> + draft features until 7.0), and gdb 8.0+.
> +
> + Changes to the structure of debug info in Version 5 allow for around
> + 15-18% savings in resulting image and debug info section sizes as
> + compared to DWARF Version 4. DWARF Version 5 standardizes previous
> + extensions such as accelerators for symbol indexing and the format
> + for fission (.dwo/.dwp) files. Users may not want to select this
> + config if they rely on tooling that has not yet been updated to
> + support DWARF Version 5.
> +
> +endchoice # "Debug information"
>
> if DEBUG_INFO
>
> @@ -267,55 +336,11 @@ config DEBUG_INFO_SPLIT
> to know about the .dwo files and include them.
> Incompatible with older versions of ccache.
>
> -choice
> - prompt "DWARF version"
> - 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"
> - help
> - The implicit default version of DWARF debug info produced by a
> - toolchain changes over time.
> -
> - This can break consumers of the debug info that haven't upgraded to
> - 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"
> - help
> - Generate DWARF v4 debug info. This requires gcc 4.5+ and gdb 7.0+.
> -
> - If you have consumers of DWARF debug info that are not ready for
> - newer revisions of DWARF, you may wish to choose this or have your
> - config select this.
> -
> -config DEBUG_INFO_DWARF5
> - bool "Generate DWARF Version 5 debuginfo"
> - depends on !CC_IS_CLANG || (CC_IS_CLANG && (AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502)))
> - depends on !DEBUG_INFO_BTF
> - help
> - Generate DWARF v5 debug info. Requires binutils 2.35.2, gcc 5.0+ (gcc
> - 5.0+ accepts the -gdwarf-5 flag but only had partial support for some
> - draft features until 7.0), and gdb 8.0+.
> -
> - Changes to the structure of debug info in Version 5 allow for around
> - 15-18% savings in resulting image and debug info section sizes as
> - compared to DWARF Version 4. DWARF Version 5 standardizes previous
> - extensions such as accelerators for symbol indexing and the format
> - for fission (.dwo/.dwp) files. Users may not want to select this
> - config if they rely on tooling that has not yet been updated to
> - support DWARF Version 5.
> -
> -endchoice # "DWARF version"
> -
> config DEBUG_INFO_BTF
> bool "Generate BTF typeinfo"
> depends on !DEBUG_INFO_SPLIT && !DEBUG_INFO_REDUCED
> depends on !GCC_PLUGIN_RANDSTRUCT || COMPILE_TEST
> + depends on !DEBUG_INFO_DWARF5
> help
> Generate deduplicated BTF type information from DWARF debug info.
> Turning this on expects presence of pahole tool, which will convert
> @@ -584,21 +609,6 @@ source "lib/Kconfig.kcsan"
>
> endmenu
>
> -config DEBUG_KERNEL
> - bool "Kernel debugging"
> - help
> - Say Y here if you are developing drivers or trying to debug and
> - identify kernel problems.
> -
> -config DEBUG_MISC
> - bool "Miscellaneous debug code"
> - default DEBUG_KERNEL
> - depends on DEBUG_KERNEL
> - help
> - Say Y here if you need to enable miscellaneous debug code that should
> - be under a more specific debug option but isn't.
> -
> -
> menu "Memory Debugging"
>
> source "mm/Kconfig.debug"
> --
> 2.30.2
>

2021-12-10 19:58:02

by Nick Desaulniers

[permalink] [raw]
Subject: Re: [PATCH] Kconfig.debug: Make DEBUG_INFO selectable from a choice

On Thu, Dec 9, 2021 at 4:09 PM Kees Cook <[email protected]> wrote:
>
> Currently it's not possible to enable DEBUG_INFO for an all*config
> build, since it is marked as "depends on !COMPILE_TEST". This generally

Indeed.

> makes sense because a debug build of an all*config target ends up taking
> much longer and the output is much larger. Having this be "default off"
> makes sense. However, there are cases where enabling DEBUG_INFO for such
> builds is useful for doing treewide A/B comparisons of build options,
> etc.
>
> Make DEBUG_INFO selectable from any of the DWARF version choice options,
> with DEBUG_INFO_NONE being the default for COMPILE_TEST. The mutually
> exclusive relationship between DWARF5 and BTF must be inverted, but the
> result remains the same. Additionally moves DEBUG_KERNEL and DEBUG_MISC
> up to the top of the menu because was enabling features _above_ it,

s/was/they were/

Reviewed-by: Nick Desaulniers <[email protected]>
Tested-by: Nick Desaulniers <[email protected]>

> making it weird to navigate menuconfig.
>
> Suggested-by: Arnd Bergmann <[email protected]>
> Signed-off-by: Kees Cook <[email protected]>
> ---
> lib/Kconfig.debug | 142 +++++++++++++++++++++++++---------------------
> 1 file changed, 76 insertions(+), 66 deletions(-)
>
> diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
> index 5c12bde10996..70ef47e92681 100644
> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug
> @@ -208,20 +208,89 @@ config DEBUG_BUGVERBOSE
>
> endmenu # "printk and dmesg options"
>
> +config DEBUG_KERNEL
> + bool "Kernel debugging"
> + help
> + Say Y here if you are developing drivers or trying to debug and
> + identify kernel problems.
> +
> +config DEBUG_MISC
> + bool "Miscellaneous debug code"
> + default DEBUG_KERNEL
> + depends on DEBUG_KERNEL
> + help
> + Say Y here if you need to enable miscellaneous debug code that should
> + be under a more specific debug option but isn't.
> +
> menu "Compile-time checks and compiler options"
>
> config DEBUG_INFO
> - bool "Compile the kernel with debug info"
> - depends on DEBUG_KERNEL && !COMPILE_TEST
> + bool
> help
> - If you say Y here the resulting kernel image will include
> - debugging info resulting in a larger kernel image.
> + A kernel debug info option other than "None" has been selected
> + in the "Debug information" choice below, indicating that debug
> + information will be generated for build targets.
> +
> +choice
> + prompt "Debug information"
> + depends on DEBUG_KERNEL
> + default DEBUG_INFO_NONE if COMPILE_TEST
> + default DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT if DEBUG_KERNEL
> + 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.
> - Say Y here only if you plan to debug the kernel.
>
> - If unsure, say N.
> + Choose which version of DWARF debug info to emit. If unsure,
> + select "Toolchain default".
> +
> +config DEBUG_INFO_NONE
> + bool "Disable debug information"
> + help
> + Do not build the kernel with debugging information, which will
> + result in a faster and smaller build.
> +
> +config DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
> + bool "Rely on the toolchain's implicit default DWARF version"
> + select DEBUG_INFO
> + help
> + The implicit default version of DWARF debug info produced by a
> + toolchain changes over time.
> +
> + This can break consumers of the debug info that haven't upgraded to
> + support newer revisions, and prevent testing newer versions, but
> + those should be less common scenarios.
> +
> +config DEBUG_INFO_DWARF4
> + bool "Generate DWARF Version 4 debuginfo"
> + select DEBUG_INFO
> + help
> + Generate DWARF v4 debug info. This requires gcc 4.5+ and gdb 7.0+.
> +
> + If you have consumers of DWARF debug info that are not ready for
> + newer revisions of DWARF, you may wish to choose this or have your
> + config select this.
> +
> +config DEBUG_INFO_DWARF5
> + bool "Generate DWARF Version 5 debuginfo"
> + select DEBUG_INFO
> + depends on !CC_IS_CLANG || (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
> + 5.0+ accepts the -gdwarf-5 flag but only had partial support for some
> + draft features until 7.0), and gdb 8.0+.
> +
> + Changes to the structure of debug info in Version 5 allow for around
> + 15-18% savings in resulting image and debug info section sizes as
> + compared to DWARF Version 4. DWARF Version 5 standardizes previous
> + extensions such as accelerators for symbol indexing and the format
> + for fission (.dwo/.dwp) files. Users may not want to select this
> + config if they rely on tooling that has not yet been updated to
> + support DWARF Version 5.
> +
> +endchoice # "Debug information"
>
> if DEBUG_INFO
>
> @@ -267,55 +336,11 @@ config DEBUG_INFO_SPLIT
> to know about the .dwo files and include them.
> Incompatible with older versions of ccache.
>
> -choice
> - prompt "DWARF version"
> - 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"
> - help
> - The implicit default version of DWARF debug info produced by a
> - toolchain changes over time.
> -
> - This can break consumers of the debug info that haven't upgraded to
> - 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"
> - help
> - Generate DWARF v4 debug info. This requires gcc 4.5+ and gdb 7.0+.
> -
> - If you have consumers of DWARF debug info that are not ready for
> - newer revisions of DWARF, you may wish to choose this or have your
> - config select this.
> -
> -config DEBUG_INFO_DWARF5
> - bool "Generate DWARF Version 5 debuginfo"
> - depends on !CC_IS_CLANG || (CC_IS_CLANG && (AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502)))
> - depends on !DEBUG_INFO_BTF
> - help
> - Generate DWARF v5 debug info. Requires binutils 2.35.2, gcc 5.0+ (gcc
> - 5.0+ accepts the -gdwarf-5 flag but only had partial support for some
> - draft features until 7.0), and gdb 8.0+.
> -
> - Changes to the structure of debug info in Version 5 allow for around
> - 15-18% savings in resulting image and debug info section sizes as
> - compared to DWARF Version 4. DWARF Version 5 standardizes previous
> - extensions such as accelerators for symbol indexing and the format
> - for fission (.dwo/.dwp) files. Users may not want to select this
> - config if they rely on tooling that has not yet been updated to
> - support DWARF Version 5.
> -
> -endchoice # "DWARF version"
> -
> config DEBUG_INFO_BTF
> bool "Generate BTF typeinfo"
> depends on !DEBUG_INFO_SPLIT && !DEBUG_INFO_REDUCED
> depends on !GCC_PLUGIN_RANDSTRUCT || COMPILE_TEST
> + depends on !DEBUG_INFO_DWARF5

I did hit a trivial conflict applying this to mainline/next-20211208 against
d9847eb8be3d8 ("bpf: Make CONFIG_DEBUG_INFO_BTF depend upon CONFIG_BPF_SYSCALL")

> help
> Generate deduplicated BTF type information from DWARF debug info.
> Turning this on expects presence of pahole tool, which will convert
> @@ -584,21 +609,6 @@ source "lib/Kconfig.kcsan"
>
> endmenu
>
> -config DEBUG_KERNEL
> - bool "Kernel debugging"
> - help
> - Say Y here if you are developing drivers or trying to debug and
> - identify kernel problems.
> -
> -config DEBUG_MISC
> - bool "Miscellaneous debug code"
> - default DEBUG_KERNEL
> - depends on DEBUG_KERNEL
> - help
> - Say Y here if you need to enable miscellaneous debug code that should
> - be under a more specific debug option but isn't.
> -
> -
> menu "Memory Debugging"
>
> source "mm/Kconfig.debug"
> --
> 2.30.2
>


--
Thanks,
~Nick Desaulniers

2021-12-21 23:23:46

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH] Kconfig.debug: Make DEBUG_INFO selectable from a choice

On Fri, Dec 10, 2021 at 6:40 PM Arnd Bergmann <[email protected]> wrote:
>
> On Fri, Dec 10, 2021 at 1:09 AM Kees Cook <[email protected]> wrote:
> >
> > Currently it's not possible to enable DEBUG_INFO for an all*config
> > build, since it is marked as "depends on !COMPILE_TEST". This generally
> > makes sense because a debug build of an all*config target ends up taking
> > much longer and the output is much larger. Having this be "default off"
> > makes sense. However, there are cases where enabling DEBUG_INFO for such
> > builds is useful for doing treewide A/B comparisons of build options,
> > etc.
> >
> > Make DEBUG_INFO selectable from any of the DWARF version choice options,
> > with DEBUG_INFO_NONE being the default for COMPILE_TEST. The mutually
> > exclusive relationship between DWARF5 and BTF must be inverted, but the
> > result remains the same. Additionally moves DEBUG_KERNEL and DEBUG_MISC
> > up to the top of the menu because was enabling features _above_ it,
> > making it weird to navigate menuconfig.
> >
> > Suggested-by: Arnd Bergmann <[email protected]>
> > Signed-off-by: Kees Cook <[email protected]>
>
> Looks good to me,
>
> Reviewed-by: Arnd Bergmann <[email protected]>
>
> One detail:
>
> > +choice
> > + prompt "Debug information"
> > + depends on DEBUG_KERNEL
> > + default DEBUG_INFO_NONE if COMPILE_TEST
> > + default DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT if DEBUG_KERNEL
>
> I think this line should be simplified to
>
> default DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT

Indeed.

It can be simplified into:

default DEBUG_INFO_NONE if COMPILE_TEST
default DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT

The first entry of the choice is the default.
So, it can be further simplified to:

default DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT if !COMPILE_TEST



Another way is to move DEBUG_INFO_NONE to the last entry of the choice,
then

default DEBUG_INFO_NONE if COMPILE_TEST





> since DEBUG_KERNEL is always enabled at this point. You can also consider
> turning the 'menu' into 'menuconfig DEBUG_KERNEL' and dropping the 'depends
> on DEBUG_KERNEL' in favor of the implied dependency.
>
> Arnd



--
Best Regards
Masahiro Yamada