On 05/12/2010 06:23 AM, Wu Zhangjin wrote:
From: Wu Zhangjin<wuzhangjin@xxxxxxxxx> As the doc[1] of gcc-4.5 shows, the -mmcount-ra-address uses register $12 to transfer the stack offset of the return address to the _mcount function. in 64bit kernel, $12 is t0, but in 32bit kernel, it is t4, so, we need to use $12 instead of t0 here to cover the 64bit and 32bit support. [1] Gcc doc: MIPS Options http://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html Signed-off-by: Wu Zhangjin<wuzhangjin@xxxxxxxxx>
Would it be better to do?: #define MCOUNT_RA_ADDRESS_REG $12 s/t0/MCOUNT_RA_ADDRESS_REG/g David Daney
--- arch/mips/kernel/mcount.S | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/mips/kernel/mcount.S b/arch/mips/kernel/mcount.S index e256bf9..92d1540 100644 --- a/arch/mips/kernel/mcount.S +++ b/arch/mips/kernel/mcount.S @@ -69,7 +69,7 @@ _mcount: MCOUNT_SAVE_REGS #ifdef KBUILD_MCOUNT_RA_ADDRESS - PTR_S t0, PT_R12(sp) /* t0 saved the location of the return address(at) by -mmcount-ra-address */ + PTR_S $12, PT_R12(sp) /* $12 saved the location of the return address(at) by -mmcount-ra-address */ #endif move a0, ra /* arg1: next ip, selfaddr */ @@ -135,7 +135,7 @@ NESTED(ftrace_graph_caller, PT_SIZE, ra) #ifdef CONFIG_DYNAMIC_FTRACE PTR_L a1, PT_R31(sp) /* load the original ra from the stack */ #ifdef KBUILD_MCOUNT_RA_ADDRESS - PTR_L t0, PT_R12(sp) /* load the original t0 from the stack */ + PTR_L $12, PT_R12(sp) /* load the original $12 from the stack */ #endif #else MCOUNT_SAVE_REGS @@ -143,10 +143,10 @@ NESTED(ftrace_graph_caller, PT_SIZE, ra) #endif #ifdef KBUILD_MCOUNT_RA_ADDRESS - bnez t0, 1f /* non-leaf func: t0 saved the location of the return address */ + bnez $12, 1f /* non-leaf func: $12 saved the location of the return address */ nop - PTR_LA t0, PT_R1(sp) /* leaf func: get the location of at(old ra) from our own stack */ -1: move a0, t0 /* arg1: the location of the return address */ + PTR_LA $12, PT_R1(sp) /* leaf func: get the location of at(old ra) from our own stack */ +1: move a0, $12 /* arg1: the location of the return address */ #else PTR_LA a0, PT_R1(sp) /* arg1:&AT -> a0 */ #endif