Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a2af2dc authored by Wu Zhangjin's avatar Wu Zhangjin Committed by Ralf Baechle
Browse files

MIPS: Tracing: Fix 32-bit support with -mmcount-ra-address



For 32-bit kernel the -mmcount-ra-address option of gcc 4.5 emits one
extra instruction before calling to _mcount so we need to use a different
"b 1f" for it.

Signed-off-by: default avatarWu Zhangjin <wuzhangjin@gmail.com>
Cc: linux-mips <linux-mips@linux-mips.org>
Cc: David Daney <david.s.daney@gmail.com>
Patchwork: http://patchwork.linux-mips.org/patch/1228/


Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 56b49cd3
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -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) {