perf symbol: Skip symbols if SHF_ALLOC flag is not set
Some symbols are observed with the 'st_value' field zeroed. E.g. libc.so.6 in Ubuntu contains a symbol '__evoke_link_warning_getwd' which resides in the '.gnu.warning.getwd' section. Unlike normal sections, such kind of sections are used for linker warning when a file calls deprecated functions, but they are not part of memory images, the symbols in these sections should be dropped. This patch checks the section attribute SHF_ALLOC bit, if the bit is not set, it skips symbols to avoid spurious ones. Suggested-by: Fangrui Song <maskray@google.com> Signed-off-by: Leo Yan <leo.yan@linaro.org> Acked-by: Namhyung Kim <namhyung@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Chang Rui <changruinj@gmail.com> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: https://lore.kernel.org/r/20220724060013.171050-3-leo.yan@linaro.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
2d86612aac
commit
882528d2e7
|
@ -1255,6 +1255,17 @@ dso__load_sym_internal(struct dso *dso, struct map *map, struct symsrc *syms_ss,
|
|||
|
||||
gelf_getshdr(sec, &shdr);
|
||||
|
||||
/*
|
||||
* If the attribute bit SHF_ALLOC is not set, the section
|
||||
* doesn't occupy memory during process execution.
|
||||
* E.g. ".gnu.warning.*" section is used by linker to generate
|
||||
* warnings when calling deprecated functions, the symbols in
|
||||
* the section aren't loaded to memory during process execution,
|
||||
* so skip them.
|
||||
*/
|
||||
if (!(shdr.sh_flags & SHF_ALLOC))
|
||||
continue;
|
||||
|
||||
secstrs = secstrs_sym;
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue