On Mon, Jun 01, 2020 at 01:19:15PM +0200, Rémi Bernon wrote:
> Wine generates PE binaries for its code modules and also generates
> debug files in PE or PDB formats, which perf cannot parse either.
> 
> Trying libbfd, when supported, if the default libelf symbol parsing
> failed, makes it possible to read the symbol table from any binary
> format supported by it, and lets perf report symbols and annotations
> for Windows applications running under Wine.
> 
> Because libbfd doesn't provide symbol size (probably because of some
> backends not supporting it), we compute it by first sorting the symbols
> by addresses and then considering that they are sequential in a given
> section.

hi,
would you have some example for easy test on this?

SNIP

>  static bool dso__is_compatible_symtab_type(struct dso *dso, bool kmod,
>                                          enum dso_binary_type type)
>  {
> @@ -1691,6 +1806,7 @@ int dso__load(struct dso *dso, struct map *map)
>               bool next_slot = false;
>               bool is_reg;
>               bool nsexit;
> +             bool bfd_syms = false;
>               int sirc = -1;
>  
>               enum dso_binary_type symtab_type = binary_type_symtab[i];
> @@ -1712,9 +1828,17 @@ int dso__load(struct dso *dso, struct map *map)
>               if (is_reg)
>                       sirc = symsrc__init(ss, dso, name, symtab_type);
>  
> +#ifdef HAVE_LIBBFD_SUPPORT
> +             if (is_reg && sirc < 0)
> +                     bfd_syms = dso__load_bfd_symbols(dso, name);
> +#endif

hum, would it be better to find out is it's PE object
and call it directly instead of the failover?

jirka


> +
>               if (nsexit)
>                       nsinfo__mountns_enter(dso->nsinfo, &nsc);
>  
> +             if (bfd_syms)
> +                     break;
> +
>               if (!is_reg || sirc < 0)
>                       continue;
>  
> -- 
> 2.26.1
> 

Reply via email to