On Wed, Dec 24, 2008 at 09:00:24AM +0800, Steven Rostedt wrote: > > On Wed, 2008-12-24 at 08:54 +0800, Shaohua Li wrote: > > > > > > > +static unsigned char *ftrace_nop_replace(void) > > > > +{ > > > > + return ftrace_nop_code; > > > > +} > > > > + > > > > +/* In IA64, each function will be added below two bundles with -pg option */ > > > > +static unsigned char __attribute__((aligned(8))) > > > > +ftrace_call_code[MCOUNT_INSN_SIZE] = { > > > > + 0x02, 0x40, 0x31, 0x10, 0x80, 0x05, /* alloc r40=ar.pfs,12,8,0 */ > > > > + 0xb0, 0x02, 0x00, 0x00, 0x42, 0x40, /* mov r43=r0;; */ > > > > + 0x05, 0x00, 0xc4, 0x00, /* mov r42=b0 */ > > > > + 0x11, 0x48, 0x01, 0x02, 0x00, 0x21, /* mov r41=r1 */ > > > > + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* nop.i 0x0 */ > > > > > > If you made your own PLT stub, could you just change the one line to > > > jump to that stub? > > A simple jump to PLT stub doesn't work in IA64, as a lot of registers > > should be saved. I'll do more investigation. > > So the registers are different depending on what function is called? > That is, you would have to change more than one of these lines if you > were to change it from calling _mcount to calling ftrace_stub? Yes, module has different gp register against kernel. Before jump to kernel, the register must be saved. We need insert trampoline code in each module. The code should do the register save and jump to ftrace_caller. Add a weak function in module.h seems ok for the trampoline code, but I don't know how to find the function address. Thanks, Shaohua -- To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |