lkml.org 
[lkml]   [2008]   [Dec]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[RFC] x86: entry_64 - introduce FTRACE_ frame macro
    Impact: clean up

    Itroduce FTRACE_SAVE/RESTORE_FRAME which allow us to
    save a number of lines on source level.

    Also fix a comment in ftrace.h.

    ---
    Actually I'm not that sure about bringing new macros there
    since we already have a lot so feel free to just drop it.

    Maybe it would be good to comment args passed
    to ftrace_call on ABI level :)

    Ah, the patch is on top of -tip e3bdf48

    arch/x86/include/asm/ftrace.h | 2 -
    arch/x86/kernel/entry_64.S | 70 +++++++++++++++---------------------------
    2 files changed, 26 insertions(+), 46 deletions(-)

    Index: linux-2.6.git/arch/x86/include/asm/ftrace.h
    ===================================================================
    --- linux-2.6.git.orig/arch/x86/include/asm/ftrace.h
    +++ linux-2.6.git/arch/x86/include/asm/ftrace.h
    @@ -46,7 +46,7 @@ struct ftrace_ret_stack {
    /*
    * Primary handler of a function return.
    * It relays on ftrace_return_to_handler.
    - * Defined in entry32.S
    + * Defined in entry_32/64.S
    */
    extern void return_to_handler(void);

    Index: linux-2.6.git/arch/x86/kernel/entry_64.S
    ===================================================================
    --- linux-2.6.git.orig/arch/x86/kernel/entry_64.S
    +++ linux-2.6.git/arch/x86/kernel/entry_64.S
    @@ -66,10 +66,7 @@ ENTRY(mcount)
    retq
    END(mcount)

    -ENTRY(ftrace_caller)
    - cmpl $0, function_trace_stop
    - jne ftrace_stub
    -
    + .macro FTRACE_SAVE_FRAME
    /* taken from glibc */
    subq $0x38, %rsp
    movq %rax, (%rsp)
    @@ -79,15 +76,9 @@ ENTRY(ftrace_caller)
    movq %rdi, 32(%rsp)
    movq %r8, 40(%rsp)
    movq %r9, 48(%rsp)
    + .endm

    - movq 0x38(%rsp), %rdi
    - movq 8(%rbp), %rsi
    - subq $MCOUNT_INSN_SIZE, %rdi
    -
    -.globl ftrace_call
    -ftrace_call:
    - call ftrace_stub
    -
    + .macro FTRACE_RESTORE_FRAME
    movq 48(%rsp), %r9
    movq 40(%rsp), %r8
    movq 32(%rsp), %rdi
    @@ -96,6 +87,23 @@ ftrace_call:
    movq 8(%rsp), %rcx
    movq (%rsp), %rax
    addq $0x38, %rsp
    + .endm
    +
    +ENTRY(ftrace_caller)
    + cmpl $0, function_trace_stop
    + jne ftrace_stub
    +
    + FTRACE_SAVE_FRAME
    +
    + movq 0x38(%rsp), %rdi
    + movq 8(%rbp), %rsi
    + subq $MCOUNT_INSN_SIZE, %rdi
    +
    +.globl ftrace_call
    +ftrace_call:
    + call ftrace_stub
    +
    + FTRACE_RESTORE_FRAME

    #ifdef CONFIG_FUNCTION_GRAPH_TRACER
    .globl ftrace_graph_call
    @@ -129,15 +137,7 @@ ftrace_stub:
    retq

    trace:
    - /* taken from glibc */
    - subq $0x38, %rsp
    - movq %rax, (%rsp)
    - movq %rcx, 8(%rsp)
    - movq %rdx, 16(%rsp)
    - movq %rsi, 24(%rsp)
    - movq %rdi, 32(%rsp)
    - movq %r8, 40(%rsp)
    - movq %r9, 48(%rsp)
    + FTRACE_SAVE_FRAME

    movq 0x38(%rsp), %rdi
    movq 8(%rbp), %rsi
    @@ -145,14 +145,7 @@ trace:

    call *ftrace_trace_function

    - movq 48(%rsp), %r9
    - movq 40(%rsp), %r8
    - movq 32(%rsp), %rdi
    - movq 24(%rsp), %rsi
    - movq 16(%rsp), %rdx
    - movq 8(%rsp), %rcx
    - movq (%rsp), %rax
    - addq $0x38, %rsp
    + FTRACE_RESTORE_FRAME

    jmp ftrace_stub
    END(mcount)
    @@ -164,14 +157,7 @@ ENTRY(ftrace_graph_caller)
    cmpl $0, function_trace_stop
    jne ftrace_stub

    - subq $0x38, %rsp
    - movq %rax, (%rsp)
    - movq %rcx, 8(%rsp)
    - movq %rdx, 16(%rsp)
    - movq %rsi, 24(%rsp)
    - movq %rdi, 32(%rsp)
    - movq %r8, 40(%rsp)
    - movq %r9, 48(%rsp)
    + FTRACE_SAVE_FRAME

    leaq 8(%rbp), %rdi
    movq 0x38(%rsp), %rsi
    @@ -179,14 +165,8 @@ ENTRY(ftrace_graph_caller)

    call prepare_ftrace_return

    - movq 48(%rsp), %r9
    - movq 40(%rsp), %r8
    - movq 32(%rsp), %rdi
    - movq 24(%rsp), %rsi
    - movq 16(%rsp), %rdx
    - movq 8(%rsp), %rcx
    - movq (%rsp), %rax
    - addq $0x38, %rsp
    + FTRACE_RESTORE_FRAME
    +
    retq
    END(ftrace_graph_caller)


    \
     
     \ /
      Last update: 2008-12-12 19:45    [W:0.025 / U:3.064 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site