Skip to content
  • Wu Zhangjin's avatar
    MIPS: Tracing: Make function graph tracer work with -mmcount-ra-address · 7326c4e5
    Wu Zhangjin authored
    
    
    That thread "MIPS: Add option to pass return address location to
    _mcount" from "David Daney <ddaney@caviumnetworks.com>" have added a new
    option -mmcount-ra-address to gcc(4.5) for MIPS to transfer the location
    of the return address to _mcount.
    
    Benefit from this new feature, function graph tracer on MIPS will be
    easier and safer to hijack the return address of the kernel function,
    which will save some overhead and make the whole thing more reliable.
    
    In this patch, at first, try to enable the option -mmcount-ra-address in
    arch/mips/Makefile with cc-option, if gcc support it, it will be
    enabled, otherwise, no side effect.
    
    and then, we need to support this new option of gcc 4.5 and also support
    the old gcc versions.
    
    with _mcount in the old gcc versions, it's not easy to get the location
    of return address(tracing: add function graph tracer support for MIPS),
       so, we do it in a C function: ftrace_get_parent_addr(ftrace.c), but
       with -mmcount-ra-address, only several instructions need to get what
       we want, so, I put into asm(mcount.S). and also, as the $12(t0) is
       used by -mmcount-ra-address for transferring the localtion of return
       address to _mcount, we need to save it into the stack and restore it
       when enabled dynamic function tracer, 'Cause we have called
       "ftrace_call" before "ftrace_graph_caller", which may destroy
       $12(t0).
    
    (Thanks to David for providing that -mcount-ra-address and giving the
     idea of KBUILD_MCOUNT_RA_ADDRESS, both of them have made the whole
     thing more beautiful!)
    
    Signed-off-by: default avatarWu Zhangjin <wuzhangjin@gmail.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Nicholas Mc Guire <der.herr@hofr.at>
    Cc: zhangfx@lemote.com
    Cc: Wu Zhangjin <wuzhangjin@gmail.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: linux-kernel@vger.kernel.org
    Cc: linux-mips@linux-mips.org
    Patchwork: http://patchwork.linux-mips.org/patch/681/
    
    
    Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    7326c4e5