Message ID | 20200903203053.3411268-9-samitolvanen@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add support for Clang LTO | expand |
On Thu, Sep 03, 2020 at 01:30:33PM -0700, Sami Tolvanen wrote: > Select HAVE_OBJTOOL_MCOUNT if STACK_VALIDATION is selected to use > objtool to generate __mcount_loc sections for dynamic ftrace with > Clang and gcc <5. > > Signed-off-by: Sami Tolvanen <samitolvanen@google.com> Am I right to understand that this fixes mcount for Clang generally (i.e. it's not _strictly_ related to LTO, though LTO depends on this change)? And does this mean mcount was working for gcc < 5? Reviewed-by: Kees Cook <keescook@chromium.org>
On Thu, Sep 3, 2020 at 2:58 PM Kees Cook <keescook@chromium.org> wrote: > > On Thu, Sep 03, 2020 at 01:30:33PM -0700, Sami Tolvanen wrote: > > Select HAVE_OBJTOOL_MCOUNT if STACK_VALIDATION is selected to use > > objtool to generate __mcount_loc sections for dynamic ftrace with > > Clang and gcc <5. > > > > Signed-off-by: Sami Tolvanen <samitolvanen@google.com> > > Am I right to understand that this fixes mcount for Clang generally > (i.e. it's not _strictly_ related to LTO, though LTO depends on this > change)? No, this works fine with Clang when LTO is disabled, because recordmcount ignores files named "ftrace.o". However, with LTO, we process vmlinux.o instead, so we need a different method of ignoring __fentry__ relocations that are not calls. In v1, I used a function attribute to whitelist functions that refer to __fentry__, but as Peter pointed out back then, objtool already knows where the call sites are, so using it to generate __mcount_loc is cleaner. > And does this mean mcount was working for gcc < 5? Yes. I should have been clearer in the commit message. The reason I mentioned gcc <5 is that later gcc versions support -mrecord-mcount, which means they don't need an external tool for generating __mcount_loc anymore. Sami
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 7101ac64bb20..6de2e5c0bdba 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -163,6 +163,7 @@ config X86 select HAVE_CMPXCHG_LOCAL select HAVE_CONTEXT_TRACKING if X86_64 select HAVE_C_RECORDMCOUNT + select HAVE_OBJTOOL_MCOUNT if STACK_VALIDATION select HAVE_DEBUG_KMEMLEAK select HAVE_DMA_CONTIGUOUS select HAVE_DYNAMIC_FTRACE
Select HAVE_OBJTOOL_MCOUNT if STACK_VALIDATION is selected to use objtool to generate __mcount_loc sections for dynamic ftrace with Clang and gcc <5. Signed-off-by: Sami Tolvanen <samitolvanen@google.com> --- arch/x86/Kconfig | 1 + 1 file changed, 1 insertion(+)