On Tue, Dec 23, 2008 at 10:22:04PM +0800, Steven Rostedt wrote: > > On Tue, 2008-12-23 at 14:08 +0800, Shaohua Li wrote: > > In IA64, a function pointer isn't a 'unsigned long' but a > > 'struct {unsigned long ip, unsigned long gp}'. MCOUNT_ADDR is determined > > at link time not compile time, so explictly ignore kernel/trace/ftrace.o > > in recordmcount.pl. > > > > Signed-off-by: Shaohua Li <shaohua.li@xxxxxxxxx> > > --- > > kernel/trace/ftrace.c | 10 +--------- > > scripts/recordmcount.pl | 5 +++++ > > 2 files changed, 6 insertions(+), 9 deletions(-) > > > > Index: linux/kernel/trace/ftrace.c > > =================================================================== > > --- linux.orig/kernel/trace/ftrace.c 2008-12-23 13:11:28.000000000 +0800 > > +++ linux/kernel/trace/ftrace.c 2008-12-23 13:24:59.000000000 +0800 > > @@ -263,14 +263,6 @@ static void ftrace_update_pid_func(void) > > # error Dynamic ftrace depends on MCOUNT_RECORD > > #endif > > > > -/* > > - * Since MCOUNT_ADDR may point to mcount itself, we do not want > > - * to get it confused by reading a reference in the code as we > > - * are parsing on objcopy output of text. Use a variable for > > - * it instead. > > - */ > > -static unsigned long mcount_addr = MCOUNT_ADDR; > > - > > enum { > > FTRACE_ENABLE_CALLS = (1 << 0), > > FTRACE_DISABLE_CALLS = (1 << 1), > > @@ -575,7 +567,7 @@ ftrace_code_disable(struct module *mod, > > > > ip = rec->ip; > > > > - ret = ftrace_make_nop(mod, rec, mcount_addr); > > + ret = ftrace_make_nop(mod, rec, MCOUNT_ADDR); > > This change will make dynamic ftrace fail on other archs (ppc and x86). > Please read the comment you deleted. By using MCOUNT_ADDR directly in > the code, you will create a reference to mcount in a text section that > will confuse recordmcount.pl. It will think this reference is a call to > mcount and when it tries to modify it, it will fail because the code is > not a call. Did you read the changes just at the bottom? I explictly ignored kernel/trace/ftrace.o in recordmcount.pl. Thanks, Shaohua > > > if (ret) { > > ftrace_bug(ret, ip); > > rec->flags |= FTRACE_FL_FAILED; > > Index: linux/scripts/recordmcount.pl > > =================================================================== > > --- linux.orig/scripts/recordmcount.pl 2008-12-23 13:24:38.000000000 +0800 > > +++ linux/scripts/recordmcount.pl 2008-12-23 13:24:59.000000000 +0800 > > @@ -109,6 +109,11 @@ if ($#ARGV < 7) { > > my ($arch, $bits, $objdump, $objcopy, $cc, > > $ld, $nm, $rm, $mv, $is_module, $inputfile) = @ARGV; > > > > +# This file refers to mcount and shouldn't be ftraced, so lets' ignore it > > +if ($inputfile eq "kernel/trace/ftrace.o") { > > + exit(0); > > +} > > + > > # Acceptable sections to record. > > my %text_sections = ( > > ".text" => 1, > > > > > -- 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
![]() |