diff options
Diffstat (limited to 'arch/arm/kernel/entry-common.S')
-rw-r--r-- | arch/arm/kernel/entry-common.S | 88 |
1 files changed, 44 insertions, 44 deletions
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 2c1db77d7848..0b042bdb11bf 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S | |||
@@ -94,73 +94,73 @@ ENDPROC(ret_from_fork) | |||
94 | #ifdef CONFIG_FUNCTION_TRACER | 94 | #ifdef CONFIG_FUNCTION_TRACER |
95 | #ifdef CONFIG_DYNAMIC_FTRACE | 95 | #ifdef CONFIG_DYNAMIC_FTRACE |
96 | ENTRY(mcount) | 96 | ENTRY(mcount) |
97 | stmdb sp!, {r0-r3, lr} | 97 | stmdb sp!, {r0-r3, lr} |
98 | mov r0, lr | 98 | mov r0, lr |
99 | sub r0, r0, #MCOUNT_INSN_SIZE | 99 | sub r0, r0, #MCOUNT_INSN_SIZE |
100 | 100 | ||
101 | .globl mcount_call | 101 | .globl mcount_call |
102 | mcount_call: | 102 | mcount_call: |
103 | bl ftrace_stub | 103 | bl ftrace_stub |
104 | ldr lr, [fp, #-4] @ restore lr | 104 | ldr lr, [fp, #-4] @ restore lr |
105 | ldmia sp!, {r0-r3, pc} | 105 | ldmia sp!, {r0-r3, pc} |
106 | 106 | ||
107 | ENTRY(ftrace_caller) | 107 | ENTRY(ftrace_caller) |
108 | stmdb sp!, {r0-r3, lr} | 108 | stmdb sp!, {r0-r3, lr} |
109 | ldr r1, [fp, #-4] | 109 | ldr r1, [fp, #-4] |
110 | mov r0, lr | 110 | mov r0, lr |
111 | sub r0, r0, #MCOUNT_INSN_SIZE | 111 | sub r0, r0, #MCOUNT_INSN_SIZE |
112 | 112 | ||
113 | .globl ftrace_call | 113 | .globl ftrace_call |
114 | ftrace_call: | 114 | ftrace_call: |
115 | bl ftrace_stub | 115 | bl ftrace_stub |
116 | ldr lr, [fp, #-4] @ restore lr | 116 | ldr lr, [fp, #-4] @ restore lr |
117 | ldmia sp!, {r0-r3, pc} | 117 | ldmia sp!, {r0-r3, pc} |
118 | 118 | ||
119 | #else | 119 | #else |
120 | 120 | ||
121 | ENTRY(__gnu_mcount_nc) | 121 | ENTRY(__gnu_mcount_nc) |
122 | stmdb sp!, {r0-r3, lr} | 122 | stmdb sp!, {r0-r3, lr} |
123 | ldr r0, =ftrace_trace_function | 123 | ldr r0, =ftrace_trace_function |
124 | ldr r2, [r0] | 124 | ldr r2, [r0] |
125 | adr r0, ftrace_stub | 125 | adr r0, ftrace_stub |
126 | cmp r0, r2 | 126 | cmp r0, r2 |
127 | bne gnu_trace | 127 | bne gnu_trace |
128 | ldmia sp!, {r0-r3, ip, lr} | 128 | ldmia sp!, {r0-r3, ip, lr} |
129 | mov pc, ip | 129 | mov pc, ip |
130 | 130 | ||
131 | gnu_trace: | 131 | gnu_trace: |
132 | ldr r1, [sp, #20] @ lr of instrumented routine | 132 | ldr r1, [sp, #20] @ lr of instrumented routine |
133 | mov r0, lr | 133 | mov r0, lr |
134 | sub r0, r0, #MCOUNT_INSN_SIZE | 134 | sub r0, r0, #MCOUNT_INSN_SIZE |
135 | mov lr, pc | 135 | mov lr, pc |
136 | mov pc, r2 | 136 | mov pc, r2 |
137 | ldmia sp!, {r0-r3, ip, lr} | 137 | ldmia sp!, {r0-r3, ip, lr} |
138 | mov pc, ip | 138 | mov pc, ip |
139 | 139 | ||
140 | ENTRY(mcount) | 140 | ENTRY(mcount) |
141 | stmdb sp!, {r0-r3, lr} | 141 | stmdb sp!, {r0-r3, lr} |
142 | ldr r0, =ftrace_trace_function | 142 | ldr r0, =ftrace_trace_function |
143 | ldr r2, [r0] | 143 | ldr r2, [r0] |
144 | adr r0, ftrace_stub | 144 | adr r0, ftrace_stub |
145 | cmp r0, r2 | 145 | cmp r0, r2 |
146 | bne trace | 146 | bne trace |
147 | ldr lr, [fp, #-4] @ restore lr | 147 | ldr lr, [fp, #-4] @ restore lr |
148 | ldmia sp!, {r0-r3, pc} | 148 | ldmia sp!, {r0-r3, pc} |
149 | 149 | ||
150 | trace: | 150 | trace: |
151 | ldr r1, [fp, #-4] @ lr of instrumented routine | 151 | ldr r1, [fp, #-4] @ lr of instrumented routine |
152 | mov r0, lr | 152 | mov r0, lr |
153 | sub r0, r0, #MCOUNT_INSN_SIZE | 153 | sub r0, r0, #MCOUNT_INSN_SIZE |
154 | mov lr, pc | 154 | mov lr, pc |
155 | mov pc, r2 | 155 | mov pc, r2 |
156 | ldr lr, [fp, #-4] @ restore lr | 156 | ldr lr, [fp, #-4] @ restore lr |
157 | ldmia sp!, {r0-r3, pc} | 157 | ldmia sp!, {r0-r3, pc} |
158 | 158 | ||
159 | #endif /* CONFIG_DYNAMIC_FTRACE */ | 159 | #endif /* CONFIG_DYNAMIC_FTRACE */ |
160 | 160 | ||
161 | .globl ftrace_stub | 161 | .globl ftrace_stub |
162 | ftrace_stub: | 162 | ftrace_stub: |
163 | mov pc, lr | 163 | mov pc, lr |
164 | 164 | ||
165 | #endif /* CONFIG_FUNCTION_TRACER */ | 165 | #endif /* CONFIG_FUNCTION_TRACER */ |
166 | 166 | ||