Re: [PATCH v3] kbuild: add debug level and macro defs options
From: Masahiro Yamada
Date: Thu Aug 18 2022 - 00:14:36 EST
On Mon, Aug 15, 2022 at 10:34 AM Dmitrii Bundin
<dmitrii.bundin.a@xxxxxxxxx> wrote:
>
> Adds config options to control debug info level and producing of macro
> definitions for GCC/Clang.
>
> Option DEBUG_INFO_LEVEL is responsible for controlling debug info level.
> Before GCC 11 and Clang 12 -gsplit-dwarf implicitly uses -g2. To provide
> a way to override the setting with, e.g. -g1, DEBUG_INFO_LEVEL is set
> independently from DEBUG_INFO_SPLIT.
>
> Option DEBUG_MACRO_DEFINITIONS is responsible for controlling inclusion
> of macro definitions. Since Clang uses -fdebug-macro to control if macro
> definitions are produced which is different from GCC, provides a
> compiler-specific way of handling macro inclusion. The option is handled
> after DEBUG_INFO_LEVEL since -g3 -g2 implies -g2, but -g2 -g3 implies
> -g3 and GCC uses -g3 to produce macro definitions.
I am not sure if DEBUG_INFO_LEVEL is useful
because the macro debug data is now enabled
by DEBUG_MACRO_DEFINITIONS.
-g1 is only possible via DEBUG_INFO_LEVEL, but
presumably it is not your main interest
(and not sure if there is anybody interested)
because the main motivation for your v1
is to generate macro debug data.
BTW, DEBUG_INFO_MACRO might be more consistent
(as the others are prefixed DEBUG_INFO_*), but that might
be just my personal preference.
>
> Signed-off-by: Dmitrii Bundin <dmitrii.bundin.a@xxxxxxxxx>
> ---
>
> Changes in v2: https://lore.kernel.org/all/20220804223504.4739-1-dmitrii.bundin.a@xxxxxxxxx/
> - Replace hardcoded -g3 with a configurable debug info level
>
> Changes in v3: https://lore.kernel.org/all/20220814002021.16990-1-dmitrii.bundin.a@xxxxxxxxx/
> - Make -g<level> and -gdwarf-split to be set independently
> - Add a separate option to control macro definitions for GCC/Clang
>
> lib/Kconfig.debug | 20 ++++++++++++++++++++
> scripts/Makefile.debug | 12 ++++++++++--
> 2 files changed, 30 insertions(+), 2 deletions(-)
>
> diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
> index 2e24db4bff19..ace6f2eddb56 100644
> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug
> @@ -304,6 +304,26 @@ config DEBUG_INFO_REDUCED
> DEBUG_INFO build and compile times are reduced too.
> Only works with newer gcc versions.
>
> +config DEBUG_INFO_LEVEL
> + int "Debug info level"
> + range 1 3
> + default "2"
> + help
> + Sets the level of how much debug information to generate (-glevel).
> + Level 1 produces minimal debug information without including information
> + about local variables. Level 3 includes extra information like macro
> + definitions. Setting up level 3 will require significantly more disk
> + space and increase built time.
> +
> +config DEBUG_MACRO_DEFINITIONS
> + bool "Add macro definitions to debug info"
> + default n
> + help
> + Generates macro definitions to provide a way to expand macros right
> + in the debugging session. This information can be used with macro expand,
> + info macro in gdb. This option is equivalent to setting -g3 in GCC and
> + -fdebug-macro in Clang.
> +
> config DEBUG_INFO_COMPRESSED
> bool "Compressed debugging information"
> depends on $(cc-option,-gz=zlib)
> diff --git a/scripts/Makefile.debug b/scripts/Makefile.debug
> index 9f39b0130551..29cd04234e75 100644
> --- a/scripts/Makefile.debug
> +++ b/scripts/Makefile.debug
> @@ -2,8 +2,6 @@ DEBUG_CFLAGS :=
>
> ifdef CONFIG_DEBUG_INFO_SPLIT
> DEBUG_CFLAGS += -gsplit-dwarf
> -else
> -DEBUG_CFLAGS += -g
> endif
>
> ifndef CONFIG_AS_IS_LLVM
> @@ -16,6 +14,16 @@ dwarf-version-$(CONFIG_DEBUG_INFO_DWARF5) := 5
> DEBUG_CFLAGS += -gdwarf-$(dwarf-version-y)
> endif
>
> +DEBUG_CFLAGS += -g$(CONFIG_DEBUG_INFO_LEVEL)
> +ifdef CONFIG_DEBUG_MACRO_DEFINITIONS
> +ifdef CONFIG_CC_IS_GCC
> +DEBUG_CFLAGS += -g3
> +endif
> +ifdef CONFIG_CC_IS_CLANG
> +DEBUG_CFLAGS += -fdebug-macro
> +endif
> +endif
> +
> ifdef CONFIG_DEBUG_INFO_REDUCED
> DEBUG_CFLAGS += -fno-var-tracking
> ifdef CONFIG_CC_IS_GCC
> --
> 2.17.1
>
--
Best Regards
Masahiro Yamada