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

Steven Rostedt
2008-12-24T01:00:24Z

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?

>
> > > Index: linux/scripts/recordmcount.pl
> > > =================================> > > --- linux.orig/scripts/recordmcount.pl 2008-12-23 13:24:59.000000000 +0800
> > > +++ linux/scripts/recordmcount.pl 2008-12-23 13:30:09.000000000 +0800
> > > @@ -206,6 +206,13 @@ if ($arch eq "x86_64") {
> > > $alignment = 2;
> > > $section_type = '%progbits';
> > >
> > > +} elsif ($arch eq "ia64") {
> > > + $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s_mcount\$";
> > > + $type = "data8";
> > > +
> > > + if ($is_module eq "0") {
> > > + $cc .= " -mconstant-gp";
> > > + }
> >
> > I wonder if it would be better to pass in CFLAGS and then be able to
> > parse that instead. Then we can find out a lot more about what we are
> > working on.
> CFLAGS seems have a lot of useless flags here.

OK, I was hoping to start making the parameters a bit smaller. But this
is fine.

-- Steve