diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-07-15 01:44:51 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-07-15 01:44:51 -0400 |
commit | 43d2548bb2ef7e6d753f91468a746784041e522d (patch) | |
tree | 77d13fcd48fd998393abb825ec36e2b732684a73 /arch/powerpc/kernel/entry_32.S | |
parent | 585583d95c5660973bc0cf64add517b040acd8a4 (diff) | |
parent | 85082fd7cbe3173198aac0eb5e85ab1edcc6352c (diff) |
Merge commit '85082fd7cbe3173198aac0eb5e85ab1edcc6352c' into test-build
Manual fixup of:
arch/powerpc/Kconfig
Diffstat (limited to 'arch/powerpc/kernel/entry_32.S')
-rw-r--r-- | arch/powerpc/kernel/entry_32.S | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index ab2d62f70b14..da52269aec1e 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <asm/ppc_asm.h> | 30 | #include <asm/ppc_asm.h> |
31 | #include <asm/asm-offsets.h> | 31 | #include <asm/asm-offsets.h> |
32 | #include <asm/unistd.h> | 32 | #include <asm/unistd.h> |
33 | #include <asm/ftrace.h> | ||
33 | 34 | ||
34 | #undef SHOW_SYSCALLS | 35 | #undef SHOW_SYSCALLS |
35 | #undef SHOW_SYSCALLS_TASK | 36 | #undef SHOW_SYSCALLS_TASK |
@@ -1151,3 +1152,129 @@ machine_check_in_rtas: | |||
1151 | /* XXX load up BATs and panic */ | 1152 | /* XXX load up BATs and panic */ |
1152 | 1153 | ||
1153 | #endif /* CONFIG_PPC_RTAS */ | 1154 | #endif /* CONFIG_PPC_RTAS */ |
1155 | |||
1156 | #ifdef CONFIG_FTRACE | ||
1157 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
1158 | _GLOBAL(mcount) | ||
1159 | _GLOBAL(_mcount) | ||
1160 | stwu r1,-48(r1) | ||
1161 | stw r3, 12(r1) | ||
1162 | stw r4, 16(r1) | ||
1163 | stw r5, 20(r1) | ||
1164 | stw r6, 24(r1) | ||
1165 | mflr r3 | ||
1166 | stw r7, 28(r1) | ||
1167 | mfcr r5 | ||
1168 | stw r8, 32(r1) | ||
1169 | stw r9, 36(r1) | ||
1170 | stw r10,40(r1) | ||
1171 | stw r3, 44(r1) | ||
1172 | stw r5, 8(r1) | ||
1173 | subi r3, r3, MCOUNT_INSN_SIZE | ||
1174 | .globl mcount_call | ||
1175 | mcount_call: | ||
1176 | bl ftrace_stub | ||
1177 | nop | ||
1178 | lwz r6, 8(r1) | ||
1179 | lwz r0, 44(r1) | ||
1180 | lwz r3, 12(r1) | ||
1181 | mtctr r0 | ||
1182 | lwz r4, 16(r1) | ||
1183 | mtcr r6 | ||
1184 | lwz r5, 20(r1) | ||
1185 | lwz r6, 24(r1) | ||
1186 | lwz r0, 52(r1) | ||
1187 | lwz r7, 28(r1) | ||
1188 | lwz r8, 32(r1) | ||
1189 | mtlr r0 | ||
1190 | lwz r9, 36(r1) | ||
1191 | lwz r10,40(r1) | ||
1192 | addi r1, r1, 48 | ||
1193 | bctr | ||
1194 | |||
1195 | _GLOBAL(ftrace_caller) | ||
1196 | /* Based off of objdump optput from glibc */ | ||
1197 | stwu r1,-48(r1) | ||
1198 | stw r3, 12(r1) | ||
1199 | stw r4, 16(r1) | ||
1200 | stw r5, 20(r1) | ||
1201 | stw r6, 24(r1) | ||
1202 | mflr r3 | ||
1203 | lwz r4, 52(r1) | ||
1204 | mfcr r5 | ||
1205 | stw r7, 28(r1) | ||
1206 | stw r8, 32(r1) | ||
1207 | stw r9, 36(r1) | ||
1208 | stw r10,40(r1) | ||
1209 | stw r3, 44(r1) | ||
1210 | stw r5, 8(r1) | ||
1211 | subi r3, r3, MCOUNT_INSN_SIZE | ||
1212 | .globl ftrace_call | ||
1213 | ftrace_call: | ||
1214 | bl ftrace_stub | ||
1215 | nop | ||
1216 | lwz r6, 8(r1) | ||
1217 | lwz r0, 44(r1) | ||
1218 | lwz r3, 12(r1) | ||
1219 | mtctr r0 | ||
1220 | lwz r4, 16(r1) | ||
1221 | mtcr r6 | ||
1222 | lwz r5, 20(r1) | ||
1223 | lwz r6, 24(r1) | ||
1224 | lwz r0, 52(r1) | ||
1225 | lwz r7, 28(r1) | ||
1226 | lwz r8, 32(r1) | ||
1227 | mtlr r0 | ||
1228 | lwz r9, 36(r1) | ||
1229 | lwz r10,40(r1) | ||
1230 | addi r1, r1, 48 | ||
1231 | bctr | ||
1232 | #else | ||
1233 | _GLOBAL(mcount) | ||
1234 | _GLOBAL(_mcount) | ||
1235 | stwu r1,-48(r1) | ||
1236 | stw r3, 12(r1) | ||
1237 | stw r4, 16(r1) | ||
1238 | stw r5, 20(r1) | ||
1239 | stw r6, 24(r1) | ||
1240 | mflr r3 | ||
1241 | lwz r4, 52(r1) | ||
1242 | mfcr r5 | ||
1243 | stw r7, 28(r1) | ||
1244 | stw r8, 32(r1) | ||
1245 | stw r9, 36(r1) | ||
1246 | stw r10,40(r1) | ||
1247 | stw r3, 44(r1) | ||
1248 | stw r5, 8(r1) | ||
1249 | |||
1250 | subi r3, r3, MCOUNT_INSN_SIZE | ||
1251 | LOAD_REG_ADDR(r5, ftrace_trace_function) | ||
1252 | lwz r5,0(r5) | ||
1253 | |||
1254 | mtctr r5 | ||
1255 | bctrl | ||
1256 | |||
1257 | nop | ||
1258 | |||
1259 | lwz r6, 8(r1) | ||
1260 | lwz r0, 44(r1) | ||
1261 | lwz r3, 12(r1) | ||
1262 | mtctr r0 | ||
1263 | lwz r4, 16(r1) | ||
1264 | mtcr r6 | ||
1265 | lwz r5, 20(r1) | ||
1266 | lwz r6, 24(r1) | ||
1267 | lwz r0, 52(r1) | ||
1268 | lwz r7, 28(r1) | ||
1269 | lwz r8, 32(r1) | ||
1270 | mtlr r0 | ||
1271 | lwz r9, 36(r1) | ||
1272 | lwz r10,40(r1) | ||
1273 | addi r1, r1, 48 | ||
1274 | bctr | ||
1275 | #endif | ||
1276 | |||
1277 | _GLOBAL(ftrace_stub) | ||
1278 | blr | ||
1279 | |||
1280 | #endif /* CONFIG_MCOUNT */ | ||