[PATCH v2 0/4] perf hashmap: Separate perf's hashmap code from libbpf

From: Ian Rogers

Date: Sat Mar 21 2026 - 20:58:42 EST


The hashmap code as-is violates the C specification meaning
-fno-strict-aliasing is required or fixes sent in:
https://lore.kernel.org/lkml/20260321024446.692008-1-irogers@xxxxxxxxxx/

We're looking to not build perf with -fno-strict-aliasing:
https://lore.kernel.org/lkml/20260320224248.536449-1-irogers@xxxxxxxxxx/

There is also the continual problem with hashmap using errptrs rather
than errno introducing subtle bugs as shown in commits,
d05073adda0f perf trace: Avoid an ERR_PTR in syscall_stats
96f202eab813 perf trace: Fix IS_ERR() vs NULL check bug
9f3c16a430e8 perf expr: Fix return value of ids__new()
but there are additional fixes on the mailing list.
https://lore.kernel.org/lkml/20250805063209.3678359-1-linmq006@xxxxxxxxx/

Allow the perf version of hashmap diverge from libbpf's so that we can
fix its issues. This means that perf has a dependency on libbpf that
has strict aliasing violations, no -fno-strict-alias or the fixes, but
you can bring a horse to water, you can't make it drink.

v1: https://lore.kernel.org/lkml/20260321024446.692008-1-irogers@xxxxxxxxxx/

Ian Rogers (4):
perf build: Don't check difference of perf and libbpf hashmap
perf hashmap: Rename hashmap to perf_hashmap to avoid libbpf conflict
perf hashmap: Fix strict aliasing violations in hashmap
perf hashmap: Remove errptr usage from hashmap

tools/perf/builtin-ftrace.c | 20 ++--
tools/perf/builtin-trace.c | 32 +++---
tools/perf/check-headers.sh | 4 -
tools/perf/tests/expr.c | 68 ++++++-------
tools/perf/tests/pmu-events.c | 8 +-
tools/perf/ui/browsers/annotate.c | 16 +--
tools/perf/util/Build | 9 --
tools/perf/util/annotate.c | 18 ++--
tools/perf/util/annotate.h | 6 +-
tools/perf/util/bpf-trace-summary.c | 30 +++---
tools/perf/util/bpf_lock_contention.c | 14 +--
tools/perf/util/evsel.c | 8 +-
tools/perf/util/evsel.h | 4 +-
tools/perf/util/expr.c | 68 ++++++-------
tools/perf/util/expr.h | 12 +--
tools/perf/util/expr.y | 2 +-
tools/perf/util/fncache.c | 16 +--
tools/perf/util/ftrace.h | 2 +-
tools/perf/util/hashmap.c | 126 +++++++++++------------
tools/perf/util/hashmap.h | 138 +++++++++++++-------------
tools/perf/util/hwmon_pmu.c | 44 ++++----
tools/perf/util/metricgroup.c | 30 +++---
tools/perf/util/pmu.c | 30 +++---
tools/perf/util/pmu.h | 4 +-
tools/perf/util/s390-sample-raw.c | 14 +--
tools/perf/util/stat.c | 10 +-
tools/perf/util/threads.c | 24 ++---
tools/perf/util/threads.h | 2 +-
28 files changed, 379 insertions(+), 380 deletions(-)

--
2.53.0.959.g497ff81fa9-goog