Oops, you are correct; it is doing these checks twice. Not sure how I missed that. I'll send another patch to fix it.
Nick On 2021-02-15 9:36 a.m., Jiri Olsa wrote: > On Wed, Feb 10, 2021 at 02:17:38PM -0500, Nicholas Fraser wrote: >> dso__load_bfd_symbols() attempts to load a DSO at its original path, >> then closes it and loads the file in the debug cache. This is incorrect. >> It should ignore the original file and work with only the debug cache. >> The original file may have changed or may not even exist, for example if >> the debug cache has been transferred to another machine via "perf >> archive". >> >> This fix makes it only load the file in the debug cache. >> >> Signed-off-by: Nicholas Fraser <nfra...@codeweavers.com> >> --- >> tools/perf/util/symbol.c | 8 +------- >> 1 file changed, 1 insertion(+), 7 deletions(-) >> >> diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c >> index 64a039cbba1b..aa9ae875b995 100644 >> --- a/tools/perf/util/symbol.c >> +++ b/tools/perf/util/symbol.c >> @@ -1569,7 +1569,7 @@ int dso__load_bfd_symbols(struct dso *dso, const char >> *debugfile) >> u_int i; >> u64 start, len; >> >> - abfd = bfd_openr(dso->long_name, NULL); >> + abfd = bfd_openr(debugfile, NULL); >> if (!abfd) >> return -1; >> >> @@ -1586,12 +1586,6 @@ int dso__load_bfd_symbols(struct dso *dso, const char >> *debugfile) >> if (section) >> dso->text_offset = section->vma - section->filepos; >> >> - bfd_close(abfd); >> - >> - abfd = bfd_openr(debugfile, NULL); >> - if (!abfd) >> - return -1; >> - > > hum, should you also remove the following code? > > if (!bfd_check_format(abfd, bfd_object)) { > pr_debug2("%s: cannot read %s bfd file.\n", __func__, > debugfile); > goto out_close; > } > > if (bfd_get_flavour(abfd) == bfd_target_elf_flavour) > goto out_close; > > it seems to be called already above > > thanks, > jirka > >> if (!bfd_check_format(abfd, bfd_object)) { >> pr_debug2("%s: cannot read %s bfd file.\n", __func__, >> debugfile); >> -- >> 2.30.0 >> >