lkml.org 
[lkml]   [2013]   [Nov]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 077/116] ftrace/x86: skip over the breakpoint for ftrace caller
    Date
    3.12-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Kevin Hao <haokexin@gmail.com>

    commit ab4ead02ec235d706d0611d8741964628291237e upstream.

    In commit 8a4d0a687a59 "ftrace: Use breakpoint method to update ftrace
    caller", we choose to use breakpoint method to update the ftrace
    caller. But we also need to skip over the breakpoint in function
    ftrace_int3_handler() for them. Otherwise weird things would happen.

    Signed-off-by: Kevin Hao <haokexin@gmail.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/x86/kernel/ftrace.c | 14 +++++++++++++-
    1 file changed, 13 insertions(+), 1 deletion(-)

    --- a/arch/x86/kernel/ftrace.c
    +++ b/arch/x86/kernel/ftrace.c
    @@ -248,6 +248,15 @@ int ftrace_update_ftrace_func(ftrace_fun
    return ret;
    }

    +static int is_ftrace_caller(unsigned long ip)
    +{
    + if (ip == (unsigned long)(&ftrace_call) ||
    + ip == (unsigned long)(&ftrace_regs_call))
    + return 1;
    +
    + return 0;
    +}
    +
    /*
    * A breakpoint was added to the code address we are about to
    * modify, and this is the handle that will just skip over it.
    @@ -257,10 +266,13 @@ int ftrace_update_ftrace_func(ftrace_fun
    */
    int ftrace_int3_handler(struct pt_regs *regs)
    {
    + unsigned long ip;
    +
    if (WARN_ON_ONCE(!regs))
    return 0;

    - if (!ftrace_location(regs->ip - 1))
    + ip = regs->ip - 1;
    + if (!ftrace_location(ip) && !is_ftrace_caller(ip))
    return 0;

    regs->ip += MCOUNT_INSN_SIZE - 1;



    \
     
     \ /
      Last update: 2013-11-27 05:21    [W:4.126 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site