Message ID | 69F64A6F8DE504F5+20250411105459.90782-7-chenlinxuan@uniontech.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | kernel-hacking: introduce CONFIG_NO_AUTO_INLINE | expand |
Chen Linxuan <chenlinxuan@uniontech.com> 于2025年4月11日周五 18:56写道: > > From: Winston Wen <wentao@uniontech.com> > > Add a new kernel hacking option CONFIG_NO_AUTO_INLINE that prevents the > compiler from auto-inlining functions not explicitly marked with the > 'inline' keyword. > > This enhancement improves function tracer capabilities as it can only > trace functions that haven't been inlined by the compiler. > > Previous discussions: > Link: https://lore.kernel.org/all/20181028130945.23581-3-changbin.du@gmail.com/ > > This patch is modified from 917fad29febd ("kernel hacking: add a config > option to disable compiler auto-inlining") which can be founded in > linux-next-history: > Link: https://web.git.kernel.org/pub/scm/linux/kernel/git/next/linux-next-history.git/commit/?id=917fad29febd > > Unlike the original implementation, this patch: > > 1. Make it depends on CC_IS_GCC, > as Clang 18.1.3 break test_bitmap_const_eval() in lib/test_bitmap.c > > 2. Make it depends on X86_64, > as I haven't test other architectures LOONGARCH has been tested, too. > > 3. Removes unnecessary cc-option checks per 7d73c3e9c514 ("Makefile: > remove stale cc-option checks"). > > 4. Update help information. > > Cc: Changbin Du <changbin.du@gmail.com> > Cc: Masahiro Yamada <yamada.masahiro@socionext.com> > Signed-off-by: Winston Wen <wentao@uniontech.com> > Co-Developed-by: Chen Linxuan <chenlinxuan@uniontech.com> > Signed-off-by: Chen Linxuan <chenlinxuan@uniontech.com> > --- > Makefile | 6 ++++++ > lib/Kconfig.debug | 15 +++++++++++++++ > 2 files changed, 21 insertions(+) > > diff --git a/Makefile b/Makefile > index f42418556507..0a9bf33ce75f 100644 > --- a/Makefile > +++ b/Makefile > @@ -1071,6 +1071,12 @@ endif > # Ensure compilers do not transform certain loops into calls to wcslen() > KBUILD_CFLAGS += -fno-builtin-wcslen > > +ifdef CONFIG_NO_AUTO_INLINE > +KBUILD_CFLAGS += -fno-inline-functions \ > + -fno-inline-small-functions \ > + -fno-inline-functions-called-once > +endif > + > # change __FILE__ to the relative path to the source directory > ifdef building_out_of_srctree > KBUILD_CPPFLAGS += $(call cc-option,-ffile-prefix-map=$(srcroot)/=) > diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug > index 9fe4d8dfe578..2ebb4802886a 100644 > --- a/lib/Kconfig.debug > +++ b/lib/Kconfig.debug > @@ -436,8 +436,23 @@ config GDB_SCRIPTS > instance. See Documentation/process/debugging/gdb-kernel-debugging.rst > for further details. > > + > endif # DEBUG_INFO > > +config NO_AUTO_INLINE > + bool "Disable compiler auto-inline optimizations (EXPERIMENTAL)" > + default n > + depends on CC_IS_GCC && (X86 || LOONGARCH) > + help > + This will prevent the compiler from optimizing the kernel by > + auto-inlining functions not marked with the inline keyword. > + With this option, only functions explicitly marked with > + "inline" will be inlined. This will allow the function tracer > + to trace more functions because it only traces functions that > + the compiler has not inlined. > + > + If unsure, select N. > + > config FRAME_WARN > int "Warn for stack frames larger than" > range 0 8192 > -- > 2.48.1 > >
diff --git a/Makefile b/Makefile index f42418556507..0a9bf33ce75f 100644 --- a/Makefile +++ b/Makefile @@ -1071,6 +1071,12 @@ endif # Ensure compilers do not transform certain loops into calls to wcslen() KBUILD_CFLAGS += -fno-builtin-wcslen +ifdef CONFIG_NO_AUTO_INLINE +KBUILD_CFLAGS += -fno-inline-functions \ + -fno-inline-small-functions \ + -fno-inline-functions-called-once +endif + # change __FILE__ to the relative path to the source directory ifdef building_out_of_srctree KBUILD_CPPFLAGS += $(call cc-option,-ffile-prefix-map=$(srcroot)/=) diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 9fe4d8dfe578..2ebb4802886a 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -436,8 +436,23 @@ config GDB_SCRIPTS instance. See Documentation/process/debugging/gdb-kernel-debugging.rst for further details. + endif # DEBUG_INFO +config NO_AUTO_INLINE + bool "Disable compiler auto-inline optimizations (EXPERIMENTAL)" + default n + depends on CC_IS_GCC && (X86 || LOONGARCH) + help + This will prevent the compiler from optimizing the kernel by + auto-inlining functions not marked with the inline keyword. + With this option, only functions explicitly marked with + "inline" will be inlined. This will allow the function tracer + to trace more functions because it only traces functions that + the compiler has not inlined. + + If unsure, select N. + config FRAME_WARN int "Warn for stack frames larger than" range 0 8192