Message ID | 20200929214631.3516445-7-samitolvanen@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add support for Clang LTO | expand |
On Tue, 29 Sep 2020 14:46:08 -0700 Sami Tolvanen <samitolvanen@google.com> wrote: > +++ b/kernel/trace/Kconfig > @@ -595,6 +595,22 @@ config FTRACE_MCOUNT_RECORD > depends on DYNAMIC_FTRACE > depends on HAVE_FTRACE_MCOUNT_RECORD > > +config FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY > + bool > + depends on FTRACE_MCOUNT_RECORD > + > +config FTRACE_MCOUNT_USE_CC > + def_bool y > + depends on $(cc-option,-mrecord-mcount) Does the above get executed at every build? Or does a make *config need to be done? If someone were to pass a .config to someone else that had a compiler that didn't support this, would it be changed if the person just did a make? -- Steve > + depends on !FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY > + depends on FTRACE_MCOUNT_RECORD > + > +config FTRACE_MCOUNT_USE_RECORDMCOUNT > + def_bool y > + depends on !FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY > + depends on !FTRACE_MCOUNT_USE_CC > + depends on FTRACE_MCOUNT_RECORD > + > config TRACING_MAP > bool > depends on ARCH_HAVE_NMI_SAFE_CMPXCHG
On Tue, Sep 29, 2020 at 5:13 PM Steven Rostedt <rostedt@goodmis.org> wrote: > > On Tue, 29 Sep 2020 14:46:08 -0700 > Sami Tolvanen <samitolvanen@google.com> wrote: > > > +++ b/kernel/trace/Kconfig > > @@ -595,6 +595,22 @@ config FTRACE_MCOUNT_RECORD > > depends on DYNAMIC_FTRACE > > depends on HAVE_FTRACE_MCOUNT_RECORD > > > > +config FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY > > + bool > > + depends on FTRACE_MCOUNT_RECORD > > + > > +config FTRACE_MCOUNT_USE_CC > > + def_bool y > > + depends on $(cc-option,-mrecord-mcount) > > Does the above get executed at every build? Or does a make *config need > to be done? If someone were to pass a .config to someone else that had > a compiler that didn't support this, would it be changed if the person > just did a make? Yes, it's updated if you copy a .config and just run make. For example, here's what happens when I create a config with gcc and then build it with Clang: $ make defconfig ... $ ./scripts/config -e FUNCTION_TRACER -e DYNAMIC_FTRACE $ make olddefconfig ... $ grep MCOUNT_USE .config CONFIG_FTRACE_MCOUNT_USE_CC=y $ make CC=clang scripts/kconfig/conf --syncconfig Kconfig ... ^C $ grep MCOUNT_USE .config CONFIG_FTRACE_MCOUNT_USE_OBJTOOL=y Sami
diff --git a/Makefile b/Makefile index 476f19ccac17..77e4f0a9495e 100644 --- a/Makefile +++ b/Makefile @@ -841,12 +841,8 @@ KBUILD_CFLAGS += $(DEBUG_CFLAGS) export DEBUG_CFLAGS ifdef CONFIG_FUNCTION_TRACER -ifdef CONFIG_FTRACE_MCOUNT_RECORD - # gcc 5 supports generating the mcount tables directly - ifeq ($(call cc-option-yn,-mrecord-mcount),y) - CC_FLAGS_FTRACE += -mrecord-mcount - export CC_USING_RECORD_MCOUNT := 1 - endif +ifdef CONFIG_FTRACE_MCOUNT_USE_CC + CC_FLAGS_FTRACE += -mrecord-mcount ifdef CONFIG_HAVE_NOP_MCOUNT ifeq ($(call cc-option-yn, -mnop-mcount),y) CC_FLAGS_FTRACE += -mnop-mcount @@ -854,6 +850,12 @@ ifdef CONFIG_FTRACE_MCOUNT_RECORD endif endif endif +ifdef CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT + ifdef CONFIG_HAVE_C_RECORDMCOUNT + BUILD_C_RECORDMCOUNT := y + export BUILD_C_RECORDMCOUNT + endif +endif ifdef CONFIG_HAVE_FENTRY ifeq ($(call cc-option-yn, -mfentry),y) CC_FLAGS_FTRACE += -mfentry @@ -863,12 +865,6 @@ endif export CC_FLAGS_FTRACE KBUILD_CFLAGS += $(CC_FLAGS_FTRACE) $(CC_FLAGS_USING) KBUILD_AFLAGS += $(CC_FLAGS_USING) -ifdef CONFIG_DYNAMIC_FTRACE - ifdef CONFIG_HAVE_C_RECORDMCOUNT - BUILD_C_RECORDMCOUNT := y - export BUILD_C_RECORDMCOUNT - endif -endif endif # We trigger additional mismatches with less inlining diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig index a4020c0b4508..927ad004888a 100644 --- a/kernel/trace/Kconfig +++ b/kernel/trace/Kconfig @@ -595,6 +595,22 @@ config FTRACE_MCOUNT_RECORD depends on DYNAMIC_FTRACE depends on HAVE_FTRACE_MCOUNT_RECORD +config FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY + bool + depends on FTRACE_MCOUNT_RECORD + +config FTRACE_MCOUNT_USE_CC + def_bool y + depends on $(cc-option,-mrecord-mcount) + depends on !FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY + depends on FTRACE_MCOUNT_RECORD + +config FTRACE_MCOUNT_USE_RECORDMCOUNT + def_bool y + depends on !FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY + depends on !FTRACE_MCOUNT_USE_CC + depends on FTRACE_MCOUNT_RECORD + config TRACING_MAP bool depends on ARCH_HAVE_NMI_SAFE_CMPXCHG diff --git a/scripts/Makefile.build b/scripts/Makefile.build index a467b9323442..a4634aae1506 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -178,8 +178,7 @@ cmd_modversions_c = \ fi endif -ifdef CONFIG_FTRACE_MCOUNT_RECORD -ifndef CC_USING_RECORD_MCOUNT +ifdef CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT # compiler will not generate __mcount_loc use recordmcount or recordmcount.pl ifdef BUILD_C_RECORDMCOUNT ifeq ("$(origin RECORDMCOUNT_WARN)", "command line") @@ -206,8 +205,7 @@ recordmcount_source := $(srctree)/scripts/recordmcount.pl endif # BUILD_C_RECORDMCOUNT cmd_record_mcount = $(if $(findstring $(strip $(CC_FLAGS_FTRACE)),$(_c_flags)), \ $(sub_cmd_record_mcount)) -endif # CC_USING_RECORD_MCOUNT -endif # CONFIG_FTRACE_MCOUNT_RECORD +endif # CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT ifdef CONFIG_STACK_VALIDATION ifneq ($(SKIP_STACK_VALIDATION),1)
Move function tracer options to Kconfig to make it easier to add new methods for generating __mcount_loc, and to make the options available also when building kernel modules. Signed-off-by: Sami Tolvanen <samitolvanen@google.com> --- Makefile | 20 ++++++++------------ kernel/trace/Kconfig | 16 ++++++++++++++++ scripts/Makefile.build | 6 ++---- 3 files changed, 26 insertions(+), 16 deletions(-)