• S
    ftrace: Do not function trace inlined functions · 45959ee7
    Steven Rostedt 提交于
    When gcc inlines a function, it does not mark it with the mcount
    prologue, which in turn means that inlined functions are not traced
    by the function tracer. But if CONFIG_OPTIMIZE_INLINING is set, then
    gcc is allowed not to inline a function that is marked inline.
    
    Depending on the options and the compiler, a function may or may
    not be traced by the function tracer, depending on whether gcc
    decides to inline a function or not. This has caused several
    problems in the pass becaues gcc is not always consistent with
    what it decides to inline between different gcc versions.
    
    Some places should not be traced (like paravirt native_* functions)
    and these are mostly marked as inline. When gcc decides not to
    inline the function, and if that function should not be traced, then
    the ftrace function tracer will suddenly break when it use to work
    fine. This becomes even harder to debug when different versions of
    gcc will not inline that function, making the same kernel and config
    work for some gcc versions and not work for others.
    
    By making all functions marked inline to not be traced will remove
    the ambiguity that gcc adds when it comes to tracing functions marked
    inline. All gcc versions will be consistent with what functions are
    traced and having volatile working code will be removed.
    
    Note, only the inline macro when CONFIG_OPTIMIZE_INLINING is set needs
    to have notrace added, as the attribute __always_inline will force
    the function to be inlined and then not traced.
    Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
    45959ee7
compiler-gcc.h 3.8 KB