perf symbols: Remove map from list before updating addresses
Make the order of operations remove, update, add. Updating addresses before the map is removed causes the ordering check to fail when the map is removed. This can be reproduced when running Perf on an Arm system with a static kernel and Perf uses kcore rather than other sources: $ perf record -- ls $ perf report util/maps.c:96: check_invariants: Assertion `map__end(prev) <= map__start(map) || map__start(prev) == map__start(map)' failed Fixes: 659ad3492b913c90 ("perf maps: Switch from rbtree to lazily sorted array for addresses") Signed-off-by: James Clark <james.clark@arm.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.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: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: https://lore.kernel.org/r/20240507141210.195939-2-james.clark@arm.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
d790ead8a6
commit
9fe410a7ef
@ -1378,13 +1378,15 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
|
||||
if (RC_CHK_EQUAL(new_map, replacement_map)) {
|
||||
struct map *map_ref;
|
||||
|
||||
map__set_start(map, map__start(new_map));
|
||||
map__set_end(map, map__end(new_map));
|
||||
map__set_pgoff(map, map__pgoff(new_map));
|
||||
map__set_mapping_type(map, map__mapping_type(new_map));
|
||||
/* Ensure maps are correctly ordered */
|
||||
map_ref = map__get(map);
|
||||
maps__remove(kmaps, map_ref);
|
||||
|
||||
map__set_start(map_ref, map__start(new_map));
|
||||
map__set_end(map_ref, map__end(new_map));
|
||||
map__set_pgoff(map_ref, map__pgoff(new_map));
|
||||
map__set_mapping_type(map_ref, map__mapping_type(new_map));
|
||||
|
||||
err = maps__insert(kmaps, map_ref);
|
||||
map__put(map_ref);
|
||||
map__put(new_map);
|
||||
|
Loading…
x
Reference in New Issue
Block a user