mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
perf dwarf-aux: Fix __die_find_scope_cb() for namespaces
Currently __die_find_scope_cb() goes to check siblings when the DIE doesn't include the given PC. However namespaces don't have a PC and could contain children that have that PC. When we encounter a namespace, we should check both its children and siblings. Reviewed-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Zecheng Li <zecheng@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Xu Liu <xliuprof@google.com> Link: https://lore.kernel.org/r/20250825195817.226560-1-zecheng@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
4a6ce9ad20
commit
e7ace97fcf
|
|
@ -1958,6 +1958,7 @@ struct find_scope_data {
|
|||
static int __die_find_scope_cb(Dwarf_Die *die_mem, void *arg)
|
||||
{
|
||||
struct find_scope_data *data = arg;
|
||||
int tag = dwarf_tag(die_mem);
|
||||
|
||||
if (dwarf_haspc(die_mem, data->pc)) {
|
||||
Dwarf_Die *tmp;
|
||||
|
|
@ -1971,6 +1972,14 @@ static int __die_find_scope_cb(Dwarf_Die *die_mem, void *arg)
|
|||
data->nr++;
|
||||
return DIE_FIND_CB_CHILD;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the DIE doesn't have the PC, we still need to check its children
|
||||
* and siblings if it's a container like a namespace.
|
||||
*/
|
||||
if (tag == DW_TAG_namespace)
|
||||
return DIE_FIND_CB_CONTINUE;
|
||||
|
||||
return DIE_FIND_CB_SIBLING;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user