14 Jan, 2009

1 commit

  • IA64 dynamic ftrace support.
    The original _mcount stub for each function is like:
    alloc r40=ar.pfs,12,8,0
    mov r43=r0;;
    mov r42=b0
    mov r41=r1
    nop.i 0x0
    br.call.sptk.many b0 = _mcount;;

    The patch convert it to below for nop:
    [MII] nop.m 0x0
    mov r3=ip
    nop.i 0x0
    [MLX] nop.m 0x0
    nop.x 0x0;;
    This isn't completely nop, as there is one instuction 'mov r3=ip', but
    it should be light and harmless for code follow it.

    And below is for call
    [MII] nop.m 0x0
    mov r3=ip
    nop.i 0x0
    [MLX] nop.m 0x0
    brl.many .;;
    In this way, only one instruction is changed to convert code between nop
    and call. This should meet dyn-ftrace's requirement.
    But this requires CPU support brl instruction, so dyn-ftrace isn't
    supported for old Itanium system. Assume there are quite few such old
    system running.

    Signed-off-by: Shaohua Li
    Signed-off-by: Steven Rostedt
    Signed-off-by: Ingo Molnar

    Shaohua Li