Merge branch 'linus' into x86/urgent
[sfrench/cifs-2.6.git] / arch / powerpc / include / asm / ftrace.h
index e5f2ae8362f7ea8e15fcaca975fefa6e3662010b..dde1296b8b41a903dd2707f0d9465162efd36fbc 100644 (file)
@@ -5,7 +5,44 @@
 #define MCOUNT_ADDR            ((long)(_mcount))
 #define MCOUNT_INSN_SIZE       4 /* sizeof mcount call */
 
-#ifndef __ASSEMBLY__
+#ifdef __ASSEMBLY__
+
+/* Based off of objdump optput from glibc */
+
+#define MCOUNT_SAVE_FRAME                      \
+       stwu    r1,-48(r1);                     \
+       stw     r3, 12(r1);                     \
+       stw     r4, 16(r1);                     \
+       stw     r5, 20(r1);                     \
+       stw     r6, 24(r1);                     \
+       mflr    r3;                             \
+       lwz     r4, 52(r1);                     \
+       mfcr    r5;                             \
+       stw     r7, 28(r1);                     \
+       stw     r8, 32(r1);                     \
+       stw     r9, 36(r1);                     \
+       stw     r10,40(r1);                     \
+       stw     r3, 44(r1);                     \
+       stw     r5, 8(r1)
+
+#define MCOUNT_RESTORE_FRAME                   \
+       lwz     r6, 8(r1);                      \
+       lwz     r0, 44(r1);                     \
+       lwz     r3, 12(r1);                     \
+       mtctr   r0;                             \
+       lwz     r4, 16(r1);                     \
+       mtcr    r6;                             \
+       lwz     r5, 20(r1);                     \
+       lwz     r6, 24(r1);                     \
+       lwz     r0, 52(r1);                     \
+       lwz     r7, 28(r1);                     \
+       lwz     r8, 32(r1);                     \
+       mtlr    r0;                             \
+       lwz     r9, 36(r1);                     \
+       lwz     r10,40(r1);                     \
+       addi    r1, r1, 48
+
+#else /* !__ASSEMBLY__ */
 extern void _mcount(void);
 
 #ifdef CONFIG_DYNAMIC_FTRACE