On Thu, Jul 07, 2016 at 09:49:36AM +0800, Song Shan Gong wrote: SNIP
> + hex2u64(sep + 1, &text_start); > + > + *start = text_start; > +out: > + free(line); > + fclose(file); > + free(module_name - 1); > + return err; > +} > diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c > index b177218..e5c2721 100644 > --- a/tools/perf/util/machine.c > +++ b/tools/perf/util/machine.c > @@ -1091,12 +1091,18 @@ static int machine__set_modules_path(struct machine > *machine) > > return map_groups__set_modules_path_dir(&machine->kmaps, modules_path, > 0); > } > +int __weak arch__fix_module_baseaddr(struct machine *machine __maybe_unused, > + u64 *start __maybe_unused, const char *name > __maybe_unused) > +{ > + return 0; > +} > > static int machine__create_module(void *arg, const char *name, u64 start) > { > struct machine *machine = arg; > struct map *map; > > + arch__fix_module_baseaddr(machine, &start, name); you should check for its return value and fail if needed jirka