James Hogan | 00512bd | 2012-10-05 16:27:31 +0100 | [diff] [blame^] | 1 | /* |
| 2 | * Copyright (C) 2008 Imagination Technologies Ltd. |
| 3 | * Licensed under the GPL |
| 4 | * |
| 5 | */ |
| 6 | |
| 7 | #include <asm/ftrace.h> |
| 8 | |
| 9 | .text |
| 10 | #ifdef CONFIG_DYNAMIC_FTRACE |
| 11 | .global _mcount_wrapper |
| 12 | .type _mcount_wrapper,function |
| 13 | _mcount_wrapper: |
| 14 | MOV PC,D0.4 |
| 15 | |
| 16 | .global _ftrace_caller |
| 17 | .type _ftrace_caller,function |
| 18 | _ftrace_caller: |
| 19 | MOVT D0Re0,#HI(_function_trace_stop) |
| 20 | ADD D0Re0,D0Re0,#LO(_function_trace_stop) |
| 21 | GETD D0Re0,[D0Re0] |
| 22 | CMP D0Re0,#0 |
| 23 | BEQ $Lcall_stub |
| 24 | MOV PC,D0.4 |
| 25 | $Lcall_stub: |
| 26 | MSETL [A0StP], D0Ar6, D0Ar4, D0Ar2, D0.4 |
| 27 | MOV D1Ar1, D0.4 |
| 28 | MOV D0Ar2, D1RtP |
| 29 | SUB D1Ar1,D1Ar1,#MCOUNT_INSN_SIZE |
| 30 | |
| 31 | .global _ftrace_call |
| 32 | _ftrace_call: |
| 33 | MOVT D1RtP,#HI(_ftrace_stub) |
| 34 | CALL D1RtP,#LO(_ftrace_stub) |
| 35 | GETL D0.4, D1RtP, [A0StP++#(-8)] |
| 36 | GETL D0Ar2, D1Ar1, [A0StP++#(-8)] |
| 37 | GETL D0Ar4, D1Ar3, [A0StP++#(-8)] |
| 38 | GETL D0Ar6, D1Ar5, [A0StP++#(-8)] |
| 39 | MOV PC, D0.4 |
| 40 | #else |
| 41 | |
| 42 | .global _mcount_wrapper |
| 43 | .type _mcount_wrapper,function |
| 44 | _mcount_wrapper: |
| 45 | MOVT D0Re0,#HI(_function_trace_stop) |
| 46 | ADD D0Re0,D0Re0,#LO(_function_trace_stop) |
| 47 | GETD D0Re0,[D0Re0] |
| 48 | CMP D0Re0,#0 |
| 49 | BEQ $Lcall_mcount |
| 50 | MOV PC,D0.4 |
| 51 | $Lcall_mcount: |
| 52 | MSETL [A0StP], D0Ar6, D0Ar4, D0Ar2, D0.4 |
| 53 | MOV D1Ar1, D0.4 |
| 54 | MOV D0Ar2, D1RtP |
| 55 | MOVT D0Re0,#HI(_ftrace_trace_function) |
| 56 | ADD D0Re0,D0Re0,#LO(_ftrace_trace_function) |
| 57 | GET D1Ar3,[D0Re0] |
| 58 | MOVT D1Re0,#HI(_ftrace_stub) |
| 59 | ADD D1Re0,D1Re0,#LO(_ftrace_stub) |
| 60 | CMP D1Ar3,D1Re0 |
| 61 | BEQ $Ltrace_exit |
| 62 | MOV D1RtP,D1Ar3 |
| 63 | SUB D1Ar1,D1Ar1,#MCOUNT_INSN_SIZE |
| 64 | SWAP PC,D1RtP |
| 65 | $Ltrace_exit: |
| 66 | GETL D0.4, D1RtP, [A0StP++#(-8)] |
| 67 | GETL D0Ar2, D1Ar1, [A0StP++#(-8)] |
| 68 | GETL D0Ar4, D1Ar3, [A0StP++#(-8)] |
| 69 | GETL D0Ar6, D1Ar5, [A0StP++#(-8)] |
| 70 | MOV PC, D0.4 |
| 71 | |
| 72 | #endif /* CONFIG_DYNAMIC_FTRACE */ |
| 73 | |
| 74 | .global _ftrace_stub |
| 75 | _ftrace_stub: |
| 76 | MOV PC,D1RtP |