On Fri, Jun 23, 2017 at 10:51:05AM -0300, Arnaldo Carvalho de Melo wrote: > Em Fri, Jun 23, 2017 at 02:48:21PM +0900, Namhyung Kim escreveu: > > If a module is already loaded, it should have symbols and no need to > > load new symbols from kallsyms. Actually kallsyms can have different > > addresses if the module was reloaded. > > Well, if it is loaded, then it should match what is in kallsyms, no?
No, the perf.data was recorded with a module, and then the module was modified and reloaded at the same address. Maybe the word "loaded" can be confusing - if perf.data file has symbols in the module v1 but kallsyms has symbols in the module v2. So it needs to read symbols from the module v1 (in the build-id cache). > > > Current code just discards the first symbols only, but it should do the > > same for all symbols in the module. Note that the kernel doesn't set > > the dso->loaded bit so simply checking it would do the job IMHO. > > The kernel sets dso->loaded? Can you rephrase this part? And if this > procedure doesn't set dso->loaded how can simply checking it do the job? > > Can you clarify the above sentence? Please elaborate the scenario more > fully. Oh, I made it confusing, sorry.. I mean that it's in the middle of the dso__load() so the (kernel) dso->loaded bit was not set yet. Thanks, Namhyung > > - Arnaldo > > > Cc: Adrian Hunter <adrian.hun...@intel.com> > > Cc: Wang Nan <wangn...@huawei.com> > > Signed-off-by: Namhyung Kim <namhy...@kernel.org> > > --- > > tools/perf/util/symbol.c | 9 +++++---- > > 1 file changed, 5 insertions(+), 4 deletions(-) > > > > diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c > > index e7a98dbd2aed..74078ba595b3 100644 > > --- a/tools/perf/util/symbol.c > > +++ b/tools/perf/util/symbol.c > > @@ -787,11 +787,12 @@ static int dso__split_kallsyms(struct dso *dso, > > struct map *map, u64 delta) > > curr_map = map; > > goto discard_symbol; > > } > > - > > - if (curr_map->dso->loaded && > > - !machine__is_default_guest(machine)) > > - goto discard_symbol; > > } > > + > > + if (curr_map->dso->loaded && > > + !machine__is_default_guest(machine)) > > + goto discard_symbol; > > + > > /* > > * So that we look just like we get from .ko files, > > * i.e. not prelinked, relative to map->start. > > -- > > 2.13.1