Messages in this thread | | | From | Masahiro Yamada <> | Date | Sun, 14 Aug 2022 11:01:36 +0900 | Subject | Re: [PATCH v2] kbuild: add configurable debug info level |
| |
+CC: Fangrui Song <maskray@google.com>
On Sun, Aug 14, 2022 at 9:25 AM Dmitrii Bundin <dmitrii.bundin.a@gmail.com> 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@gmail.com> > --- > > Changes in v2: https://lore.kernel.org/all/20220804223504.4739-1-dmitrii.bundin.a@gmail.com/ > - 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
| |