MIPS: Tracing: Fix 32-bit support with -mmcount-ra-address
[deliverable/linux.git] / arch / mips / kernel / ftrace.c
index e9e64e0ff7aa428470204fca8f9970d73d9c0dac..37aa7677e76de419f87fa34aa70c34da582db9f3 100644 (file)
@@ -62,14 +62,26 @@ int ftrace_make_nop(struct module *mod,
                                return -EFAULT;
                }
 
+#if defined(KBUILD_MCOUNT_RA_ADDRESS) && defined(CONFIG_32BIT)
+               /* lui v1, hi_16bit_of_mcount        --> b 1f (0x10000005)
+                * addiu v1, v1, low_16bit_of_mcount
+                * move at, ra
+                * move $12, ra_address
+                * jalr v1
+                *  sub sp, sp, 8
+                *                                  1: offset = 5 instructions
+                */
+               new = 0x10000005;
+#else
                /* lui v1, hi_16bit_of_mcount        --> b 1f (0x10000004)
                 * addiu v1, v1, low_16bit_of_mcount
                 * move at, ra
                 * jalr v1
-                * nop
-                *                                   1f: (ip + 12)
+                *  nop | move $12, ra_address | sub sp, sp, 8
+                *                                  1: offset = 4 instructions
                 */
                new = 0x10000004;
+#endif
        } else {
                /* record/calculate it for ftrace_make_call */
                if (jal_mcount == 0) {
This page took 0.033505 seconds and 5 git commands to generate.