Loading arch/arm/kernel/entry-common.S +80 −66 Original line number Diff line number Diff line Loading @@ -141,98 +141,112 @@ ENDPROC(ret_from_fork) #endif #endif #ifdef CONFIG_DYNAMIC_FTRACE ENTRY(__gnu_mcount_nc) mov ip, lr ldmia sp!, {lr} mov pc, ip ENDPROC(__gnu_mcount_nc) .macro __mcount suffix mcount_enter ldr r0, =ftrace_trace_function ldr r2, [r0] adr r0, .Lftrace_stub cmp r0, r2 bne 1f mcount_exit ENTRY(ftrace_caller) stmdb sp!, {r0-r3, lr} mov r0, lr 1: mcount_get_lr r1 @ lr of instrumented func mov r0, lr @ instrumented function sub r0, r0, #MCOUNT_INSN_SIZE adr lr, BSYM(2f) mov pc, r2 2: mcount_exit .endm .macro __ftrace_caller suffix mcount_enter mcount_get_lr r1 @ lr of instrumented func mov r0, lr @ instrumented function sub r0, r0, #MCOUNT_INSN_SIZE ldr r1, [sp, #20] .global ftrace_call ftrace_call: .globl ftrace_call\suffix ftrace_call\suffix: bl ftrace_stub ldmia sp!, {r0-r3, ip, lr} mov pc, ip ENDPROC(ftrace_caller) mcount_exit .endm #ifdef CONFIG_OLD_MCOUNT /* * mcount */ .macro mcount_enter stmdb sp!, {r0-r3, lr} .endm .macro mcount_get_lr reg ldr \reg, [fp, #-4] .endm .macro mcount_exit ldr lr, [fp, #-4] ldmia sp!, {r0-r3, pc} .endm ENTRY(mcount) #ifdef CONFIG_DYNAMIC_FTRACE stmdb sp!, {lr} ldr lr, [fp, #-4] ldmia sp!, {pc} #else __mcount _old #endif ENDPROC(mcount) #ifdef CONFIG_DYNAMIC_FTRACE ENTRY(ftrace_caller_old) stmdb sp!, {r0-r3, lr} ldr r1, [fp, #-4] mov r0, lr sub r0, r0, #MCOUNT_INSN_SIZE .globl ftrace_call_old ftrace_call_old: bl ftrace_stub ldr lr, [fp, #-4] @ restore lr ldmia sp!, {r0-r3, pc} __ftrace_caller _old ENDPROC(ftrace_caller_old) #endif #else .purgem mcount_enter .purgem mcount_get_lr .purgem mcount_exit #endif ENTRY(__gnu_mcount_nc) /* * __gnu_mcount_nc */ .macro mcount_enter stmdb sp!, {r0-r3, lr} ldr r0, =ftrace_trace_function ldr r2, [r0] adr r0, .Lftrace_stub cmp r0, r2 bne gnu_trace .endm .macro mcount_get_lr reg ldr \reg, [sp, #20] .endm .macro mcount_exit ldmia sp!, {r0-r3, ip, lr} mov pc, ip .endm gnu_trace: ldr r1, [sp, #20] @ lr of instrumented routine mov r0, lr sub r0, r0, #MCOUNT_INSN_SIZE adr lr, BSYM(1f) mov pc, r2 1: ldmia sp!, {r0-r3, ip, lr} ENTRY(__gnu_mcount_nc) #ifdef CONFIG_DYNAMIC_FTRACE mov ip, lr ldmia sp!, {lr} mov pc, ip #else __mcount #endif ENDPROC(__gnu_mcount_nc) #ifdef CONFIG_OLD_MCOUNT /* * This is under an ifdef in order to force link-time errors for people trying * to build with !FRAME_POINTER with a GCC which doesn't use the new-style * mcount. */ ENTRY(mcount) stmdb sp!, {r0-r3, lr} ldr r0, =ftrace_trace_function ldr r2, [r0] adr r0, ftrace_stub cmp r0, r2 bne trace ldr lr, [fp, #-4] @ restore lr ldmia sp!, {r0-r3, pc} trace: ldr r1, [fp, #-4] @ lr of instrumented routine mov r0, lr sub r0, r0, #MCOUNT_INSN_SIZE mov lr, pc mov pc, r2 ldr lr, [fp, #-4] @ restore lr ldmia sp!, {r0-r3, pc} ENDPROC(mcount) #ifdef CONFIG_DYNAMIC_FTRACE ENTRY(ftrace_caller) __ftrace_caller ENDPROC(ftrace_caller) #endif #endif /* CONFIG_DYNAMIC_FTRACE */ .purgem mcount_enter .purgem mcount_get_lr .purgem mcount_exit ENTRY(ftrace_stub) .Lftrace_stub: Loading Loading
arch/arm/kernel/entry-common.S +80 −66 Original line number Diff line number Diff line Loading @@ -141,98 +141,112 @@ ENDPROC(ret_from_fork) #endif #endif #ifdef CONFIG_DYNAMIC_FTRACE ENTRY(__gnu_mcount_nc) mov ip, lr ldmia sp!, {lr} mov pc, ip ENDPROC(__gnu_mcount_nc) .macro __mcount suffix mcount_enter ldr r0, =ftrace_trace_function ldr r2, [r0] adr r0, .Lftrace_stub cmp r0, r2 bne 1f mcount_exit ENTRY(ftrace_caller) stmdb sp!, {r0-r3, lr} mov r0, lr 1: mcount_get_lr r1 @ lr of instrumented func mov r0, lr @ instrumented function sub r0, r0, #MCOUNT_INSN_SIZE adr lr, BSYM(2f) mov pc, r2 2: mcount_exit .endm .macro __ftrace_caller suffix mcount_enter mcount_get_lr r1 @ lr of instrumented func mov r0, lr @ instrumented function sub r0, r0, #MCOUNT_INSN_SIZE ldr r1, [sp, #20] .global ftrace_call ftrace_call: .globl ftrace_call\suffix ftrace_call\suffix: bl ftrace_stub ldmia sp!, {r0-r3, ip, lr} mov pc, ip ENDPROC(ftrace_caller) mcount_exit .endm #ifdef CONFIG_OLD_MCOUNT /* * mcount */ .macro mcount_enter stmdb sp!, {r0-r3, lr} .endm .macro mcount_get_lr reg ldr \reg, [fp, #-4] .endm .macro mcount_exit ldr lr, [fp, #-4] ldmia sp!, {r0-r3, pc} .endm ENTRY(mcount) #ifdef CONFIG_DYNAMIC_FTRACE stmdb sp!, {lr} ldr lr, [fp, #-4] ldmia sp!, {pc} #else __mcount _old #endif ENDPROC(mcount) #ifdef CONFIG_DYNAMIC_FTRACE ENTRY(ftrace_caller_old) stmdb sp!, {r0-r3, lr} ldr r1, [fp, #-4] mov r0, lr sub r0, r0, #MCOUNT_INSN_SIZE .globl ftrace_call_old ftrace_call_old: bl ftrace_stub ldr lr, [fp, #-4] @ restore lr ldmia sp!, {r0-r3, pc} __ftrace_caller _old ENDPROC(ftrace_caller_old) #endif #else .purgem mcount_enter .purgem mcount_get_lr .purgem mcount_exit #endif ENTRY(__gnu_mcount_nc) /* * __gnu_mcount_nc */ .macro mcount_enter stmdb sp!, {r0-r3, lr} ldr r0, =ftrace_trace_function ldr r2, [r0] adr r0, .Lftrace_stub cmp r0, r2 bne gnu_trace .endm .macro mcount_get_lr reg ldr \reg, [sp, #20] .endm .macro mcount_exit ldmia sp!, {r0-r3, ip, lr} mov pc, ip .endm gnu_trace: ldr r1, [sp, #20] @ lr of instrumented routine mov r0, lr sub r0, r0, #MCOUNT_INSN_SIZE adr lr, BSYM(1f) mov pc, r2 1: ldmia sp!, {r0-r3, ip, lr} ENTRY(__gnu_mcount_nc) #ifdef CONFIG_DYNAMIC_FTRACE mov ip, lr ldmia sp!, {lr} mov pc, ip #else __mcount #endif ENDPROC(__gnu_mcount_nc) #ifdef CONFIG_OLD_MCOUNT /* * This is under an ifdef in order to force link-time errors for people trying * to build with !FRAME_POINTER with a GCC which doesn't use the new-style * mcount. */ ENTRY(mcount) stmdb sp!, {r0-r3, lr} ldr r0, =ftrace_trace_function ldr r2, [r0] adr r0, ftrace_stub cmp r0, r2 bne trace ldr lr, [fp, #-4] @ restore lr ldmia sp!, {r0-r3, pc} trace: ldr r1, [fp, #-4] @ lr of instrumented routine mov r0, lr sub r0, r0, #MCOUNT_INSN_SIZE mov lr, pc mov pc, r2 ldr lr, [fp, #-4] @ restore lr ldmia sp!, {r0-r3, pc} ENDPROC(mcount) #ifdef CONFIG_DYNAMIC_FTRACE ENTRY(ftrace_caller) __ftrace_caller ENDPROC(ftrace_caller) #endif #endif /* CONFIG_DYNAMIC_FTRACE */ .purgem mcount_enter .purgem mcount_get_lr .purgem mcount_exit ENTRY(ftrace_stub) .Lftrace_stub: Loading