diff options
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 0c8614d9875c..7231a708af0d 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 |
| @@ -1035,3 +1036,129 @@ machine_check_in_rtas: | |||
| 1035 | /* XXX load up BATs and panic */ | 1036 | /* XXX load up BATs and panic */ |
| 1036 | 1037 | ||
| 1037 | #endif /* CONFIG_PPC_RTAS */ | 1038 | #endif /* CONFIG_PPC_RTAS */ |
| 1039 | |||
| 1040 | #ifdef CONFIG_FTRACE | ||
| 1041 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
| 1042 | _GLOBAL(mcount) | ||
| 1043 | _GLOBAL(_mcount) | ||
| 1044 | stwu r1,-48(r1) | ||
| 1045 | stw r3, 12(r1) | ||
| 1046 | stw r4, 16(r1) | ||
| 1047 | stw r5, 20(r1) | ||
| 1048 | stw r6, 24(r1) | ||
| 1049 | mflr r3 | ||
| 1050 | stw r7, 28(r1) | ||
| 1051 | mfcr r5 | ||
| 1052 | stw r8, 32(r1) | ||
| 1053 | stw r9, 36(r1) | ||
| 1054 | stw r10,40(r1) | ||
| 1055 | stw r3, 44(r1) | ||
| 1056 | stw r5, 8(r1) | ||
| 1057 | subi r3, r3, MCOUNT_INSN_SIZE | ||
| 1058 | .globl mcount_call | ||
| 1059 | mcount_call: | ||
| 1060 | bl ftrace_stub | ||
| 1061 | nop | ||
| 1062 | lwz r6, 8(r1) | ||
| 1063 | lwz r0, 44(r1) | ||
| 1064 | lwz r3, 12(r1) | ||
| 1065 | mtctr r0 | ||
| 1066 | lwz r4, 16(r1) | ||
| 1067 | mtcr r6 | ||
| 1068 | lwz r5, 20(r1) | ||
| 1069 | lwz r6, 24(r1) | ||
| 1070 | lwz r0, 52(r1) | ||
| 1071 | lwz r7, 28(r1) | ||
| 1072 | lwz r8, 32(r1) | ||
| 1073 | mtlr r0 | ||
| 1074 | lwz r9, 36(r1) | ||
| 1075 | lwz r10,40(r1) | ||
| 1076 | addi r1, r1, 48 | ||
| 1077 | bctr | ||
| 1078 | |||
| 1079 | _GLOBAL(ftrace_caller) | ||
| 1080 | /* Based off of objdump optput from glibc */ | ||
| 1081 | stwu r1,-48(r1) | ||
| 1082 | stw r3, 12(r1) | ||
| 1083 | stw r4, 16(r1) | ||
| 1084 | stw r5, 20(r1) | ||
| 1085 | stw r6, 24(r1) | ||
| 1086 | mflr r3 | ||
| 1087 | lwz r4, 52(r1) | ||
| 1088 | mfcr r5 | ||
| 1089 | stw r7, 28(r1) | ||
| 1090 | stw r8, 32(r1) | ||
| 1091 | stw r9, 36(r1) | ||
| 1092 | stw r10,40(r1) | ||
| 1093 | stw r3, 44(r1) | ||
| 1094 | stw r5, 8(r1) | ||
| 1095 | subi r3, r3, MCOUNT_INSN_SIZE | ||
| 1096 | .globl ftrace_call | ||
| 1097 | ftrace_call: | ||
| 1098 | bl ftrace_stub | ||
| 1099 | nop | ||
| 1100 | lwz r6, 8(r1) | ||
| 1101 | lwz r0, 44(r1) | ||
| 1102 | lwz r3, 12(r1) | ||
| 1103 | mtctr r0 | ||
| 1104 | lwz r4, 16(r1) | ||
| 1105 | mtcr r6 | ||
| 1106 | lwz r5, 20(r1) | ||
| 1107 | lwz r6, 24(r1) | ||
| 1108 | lwz r0, 52(r1) | ||
| 1109 | lwz r7, 28(r1) | ||
| 1110 | lwz r8, 32(r1) | ||
| 1111 | mtlr r0 | ||
| 1112 | lwz r9, 36(r1) | ||
| 1113 | lwz r10,40(r1) | ||
| 1114 | addi r1, r1, 48 | ||
| 1115 | bctr | ||
| 1116 | #else | ||
| 1117 | _GLOBAL(mcount) | ||
| 1118 | _GLOBAL(_mcount) | ||
| 1119 | stwu r1,-48(r1) | ||
| 1120 | stw r3, 12(r1) | ||
| 1121 | stw r4, 16(r1) | ||
| 1122 | stw r5, 20(r1) | ||
| 1123 | stw r6, 24(r1) | ||
| 1124 | mflr r3 | ||
| 1125 | lwz r4, 52(r1) | ||
| 1126 | mfcr r5 | ||
| 1127 | stw r7, 28(r1) | ||
| 1128 | stw r8, 32(r1) | ||
| 1129 | stw r9, 36(r1) | ||
| 1130 | stw r10,40(r1) | ||
| 1131 | stw r3, 44(r1) | ||
| 1132 | stw r5, 8(r1) | ||
| 1133 | |||
| 1134 | subi r3, r3, MCOUNT_INSN_SIZE | ||
| 1135 | LOAD_REG_ADDR(r5, ftrace_trace_function) | ||
| 1136 | lwz r5,0(r5) | ||
| 1137 | |||
| 1138 | mtctr r5 | ||
| 1139 | bctrl | ||
| 1140 | |||
| 1141 | nop | ||
| 1142 | |||
| 1143 | lwz r6, 8(r1) | ||
| 1144 | lwz r0, 44(r1) | ||
| 1145 | lwz r3, 12(r1) | ||
| 1146 | mtctr r0 | ||
| 1147 | lwz r4, 16(r1) | ||
| 1148 | mtcr r6 | ||
| 1149 | lwz r5, 20(r1) | ||
| 1150 | lwz r6, 24(r1) | ||
| 1151 | lwz r0, 52(r1) | ||
| 1152 | lwz r7, 28(r1) | ||
| 1153 | lwz r8, 32(r1) | ||
| 1154 | mtlr r0 | ||
| 1155 | lwz r9, 36(r1) | ||
| 1156 | lwz r10,40(r1) | ||
| 1157 | addi r1, r1, 48 | ||
| 1158 | bctr | ||
| 1159 | #endif | ||
| 1160 | |||
| 1161 | _GLOBAL(ftrace_stub) | ||
| 1162 | blr | ||
| 1163 | |||
| 1164 | #endif /* CONFIG_MCOUNT */ | ||
