+CC: Fangrui Song <maskray@xxxxxxxxxx> On Sun, Aug 14, 2022 at 9:25 AM Dmitrii Bundin <dmitrii.bundin.a@xxxxxxxxx> wrote: > > Provides a way to configure debug info level (-glevel). > Debug level 3 includes extra information such as macro definitions. With > level 3 enabled it's possible to expand macros right from the debugging > session in gdb simplifying debugging when complicated macros involved. > The default level is set to 2 to not change the default build behavior. > > 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 > > lib/Kconfig.debug | 11 +++++++++++ > scripts/Makefile.debug | 2 +- > 2 files changed, 12 insertions(+), 1 deletion(-) > > diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug > index 2e24db4bff19..a17c12c20290 100644 > --- a/lib/Kconfig.debug > +++ b/lib/Kconfig.debug > @@ -304,6 +304,17 @@ 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 0 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. Level 0 produces no debug information. > + We already have CONFIG_DEBUG_INFO_NONE to disable the debug info. The combination of CONFIG_DEBUG_INFO=y and CONFIG_DEBUG_INFO_LEVEL=0 (-g0) would emulate CONFIG_DEBUG_INFO_NONE ? Using 'int' does not look sensible to me. > 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..28beffc42e71 100644 > --- a/scripts/Makefile.debug > +++ b/scripts/Makefile.debug > @@ -3,7 +3,7 @@ DEBUG_CFLAGS := > ifdef CONFIG_DEBUG_INFO_SPLIT > DEBUG_CFLAGS += -gsplit-dwarf > else > -DEBUG_CFLAGS += -g > +DEBUG_CFLAGS += -g$(CONFIG_DEBUG_INFO_LEVEL) > endif > > ifndef CONFIG_AS_IS_LLVM > -- > 2.17.1 > I want to consult Fangrui Song for this part. With this Makefile code, CONFIG_DEBUG_INFO_SPLIT takes the presidency over CONFIG_DEBUG_INFO_LEVEL. When CONFIG_DEBUG_INFO_SPLIT is enabled (-gsplit-dwarf), it always uses the default -g2 level. CONFIG_DEBUG_INFO_LEVEL is just ignored silently. It might be sensible in older GCC/Clang behavior because -gsplit-dwarf implied -g2. But, with this commit: https://reviews.llvm.org/D80391 -gsplit-dwarf and -g<level> are orthogonal for GCC 11+/Clang 12+, correct? I think "splitting debug files" and "debug level" should be controlled independently. (but it depends on the compiler version, if I understood correctly) -- Best Regards Masahiro Yamada