Re: [PATCH 5/5] IA64 dynamic ftrace support

Shaohua Li
2008-12-24T08:08:32Z

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° */
> > > > + 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