From: Ian Rogers <irogers@google.com>
To: "Peter Zijlstra" <peterz@infradead.org>,
"Ingo Molnar" <mingo@redhat.com>,
"Arnaldo Carvalho de Melo" <acme@kernel.org>,
"Mark Rutland" <mark.rutland@arm.com>,
"Alexander Shishkin" <alexander.shishkin@linux.intel.com>,
"Jiri Olsa" <jolsa@kernel.org>,
"Namhyung Kim" <namhyung@kernel.org>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Darren Hart" <dvhart@infradead.org>,
"Davidlohr Bueso" <dave@stgolabs.net>,
"André Almeida" <andrealmeid@collabora.com>,
"James Clark" <james.clark@arm.com>,
"John Garry" <john.g.garry@oracle.com>,
"Riccardo Mancini" <rickyman7@gmail.com>,
"Yury Norov" <yury.norov@gmail.com>,
"Andy Shevchenko" <andriy.shevchenko@linux.intel.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Adrian Hunter" <adrian.hunter@intel.com>,
"Leo Yan" <leo.yan@linaro.org>, "Andi Kleen" <ak@linux.intel.com>,
"Thomas Richter" <tmricht@linux.ibm.com>,
"Kan Liang" <kan.liang@linux.intel.com>,
"Madhavan Srinivasan" <maddy@linux.ibm.com>,
"Shunsuke Nakamura" <nakamura.shun@fujitsu.com>,
"Song Liu" <song@kernel.org>,
"Masami Hiramatsu" <mhiramat@kernel.org>,
"Steven Rostedt" <rostedt@goodmis.org>,
"Miaoqian Lin" <linmq006@gmail.com>,
"Stephen Brennan" <stephen.s.brennan@oracle.com>,
"Kajol Jain" <kjain@linux.ibm.com>,
"Alexey Bayduraev" <alexey.v.bayduraev@linux.intel.com>,
"German Gomez" <german.gomez@arm.com>,
linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org,
"Eric Dumazet" <edumazet@google.com>,
"Dmitry Vyukov" <dvyukov@google.com>,
"Hao Luo" <haoluo@google.com>
Cc: Stephane Eranian <eranian@google.com>, Ian Rogers <irogers@google.com>
Subject: [PATCH v4 14/22] perf map: Add accessors for pgoff and reloc
Date: Sun, 19 Mar 2023 20:38:02 -0700 [thread overview]
Message-ID: <20230320033810.980165-15-irogers@google.com> (raw)
In-Reply-To: <20230320033810.980165-1-irogers@google.com>
Later changes will add reference count checking for struct map. Add
accessors so that the reference count check is only necessary in one
place.
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/arch/x86/util/event.c | 2 +-
tools/perf/builtin-report.c | 2 +-
tools/perf/tests/vmlinux-kallsyms.c | 4 ++--
tools/perf/util/machine.c | 4 ++--
tools/perf/util/map.c | 14 +++++++-------
tools/perf/util/map.h | 10 ++++++++++
tools/perf/util/probe-event.c | 8 ++++----
tools/perf/util/symbol.c | 6 +++---
tools/perf/util/unwind-libdw.c | 6 +++---
9 files changed, 33 insertions(+), 23 deletions(-)
diff --git a/tools/perf/arch/x86/util/event.c b/tools/perf/arch/x86/util/event.c
index 3b2475707756..5741ffe47312 100644
--- a/tools/perf/arch/x86/util/event.c
+++ b/tools/perf/arch/x86/util/event.c
@@ -61,7 +61,7 @@ int perf_event__synthesize_extra_kmaps(struct perf_tool *tool,
event->mmap.start = map__start(map);
event->mmap.len = map__size(map);
- event->mmap.pgoff = map->pgoff;
+ event->mmap.pgoff = map__pgoff(map);
event->mmap.pid = machine->pid;
strlcpy(event->mmap.filename, kmap->name, PATH_MAX);
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 8650d9503b77..c7e4160f64ad 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -853,7 +853,7 @@ static size_t maps__fprintf_task(struct maps *maps, int indent, FILE *fp)
prot & PROT_WRITE ? 'w' : '-',
prot & PROT_EXEC ? 'x' : '-',
map__flags(map) ? 's' : 'p',
- map->pgoff,
+ map__pgoff(map),
dso->id.ino, dso->name);
}
diff --git a/tools/perf/tests/vmlinux-kallsyms.c b/tools/perf/tests/vmlinux-kallsyms.c
index 7db102868bc2..af511233c764 100644
--- a/tools/perf/tests/vmlinux-kallsyms.c
+++ b/tools/perf/tests/vmlinux-kallsyms.c
@@ -335,10 +335,10 @@ static int test__vmlinux_matches_kallsyms(struct test_suite *test __maybe_unused
}
pr_info("WARN: %" PRIx64 "-%" PRIx64 " %" PRIx64 " %s in kallsyms as",
- map__start(map), map__end(map), map->pgoff, dso->name);
+ map__start(map), map__end(map), map__pgoff(map), dso->name);
if (mem_end != map__end(pair))
pr_info(":\nWARN: *%" PRIx64 "-%" PRIx64 " %" PRIx64,
- map__start(pair), map__end(pair), pair->pgoff);
+ map__start(pair), map__end(pair), map__pgoff(pair));
pr_info(" %s\n", dso->name);
pair->priv = 1;
}
diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index afb77bd161e2..916d98885128 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -1276,9 +1276,9 @@ int machine__map_x86_64_entry_trampolines(struct machine *machine,
if (!kmap || !is_entry_trampoline(kmap->name))
continue;
- dest_map = maps__find(kmaps, map->pgoff);
+ dest_map = maps__find(kmaps, map__pgoff(map));
if (dest_map != map)
- map->pgoff = map__map_ip(dest_map, map->pgoff);
+ map->pgoff = map__map_ip(dest_map, map__pgoff(map));
found = true;
}
if (found || machine->trampolines_mapped)
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c
index 816bffbbf344..1fe367e2cf19 100644
--- a/tools/perf/util/map.c
+++ b/tools/perf/util/map.c
@@ -421,7 +421,7 @@ size_t map__fprintf(struct map *map, FILE *fp)
const struct dso *dso = map__dso(map);
return fprintf(fp, " %" PRIx64 "-%" PRIx64 " %" PRIx64 " %s\n",
- map__start(map), map__end(map), map->pgoff, dso->name);
+ map__start(map), map__end(map), map__pgoff(map), dso->name);
}
size_t map__fprintf_dsoname(struct map *map, FILE *fp)
@@ -510,7 +510,7 @@ u64 map__rip_2objdump(struct map *map, u64 rip)
return rip;
if (dso->rel)
- return rip - map->pgoff;
+ return rip - map__pgoff(map);
/*
* kernel modules also have DSO_TYPE_USER in dso->kernel,
@@ -519,7 +519,7 @@ u64 map__rip_2objdump(struct map *map, u64 rip)
if (dso->kernel == DSO_SPACE__USER)
return rip + dso->text_offset;
- return map__unmap_ip(map, rip) - map->reloc;
+ return map__unmap_ip(map, rip) - map__reloc(map);
}
/**
@@ -542,7 +542,7 @@ u64 map__objdump_2mem(struct map *map, u64 ip)
return map__unmap_ip(map, ip);
if (dso->rel)
- return map__unmap_ip(map, ip + map->pgoff);
+ return map__unmap_ip(map, ip + map__pgoff(map));
/*
* kernel modules also have DSO_TYPE_USER in dso->kernel,
@@ -551,7 +551,7 @@ u64 map__objdump_2mem(struct map *map, u64 ip)
if (dso->kernel == DSO_SPACE__USER)
return map__unmap_ip(map, ip - dso->text_offset);
- return ip + map->reloc;
+ return ip + map__reloc(map);
}
bool map__contains_symbol(const struct map *map, const struct symbol *sym)
@@ -592,12 +592,12 @@ struct maps *map__kmaps(struct map *map)
u64 map__dso_map_ip(const struct map *map, u64 ip)
{
- return ip - map__start(map) + map->pgoff;
+ return ip - map__start(map) + map__pgoff(map);
}
u64 map__dso_unmap_ip(const struct map *map, u64 ip)
{
- return ip + map__start(map) - map->pgoff;
+ return ip + map__start(map) - map__pgoff(map);
}
u64 identity__map_ip(const struct map *map __maybe_unused, u64 ip)
diff --git a/tools/perf/util/map.h b/tools/perf/util/map.h
index fd440c9c279e..102485699aa8 100644
--- a/tools/perf/util/map.h
+++ b/tools/perf/util/map.h
@@ -72,6 +72,16 @@ static inline u64 map__end(const struct map *map)
return map->end;
}
+static inline u64 map__pgoff(const struct map *map)
+{
+ return map->pgoff;
+}
+
+static inline u64 map__reloc(const struct map *map)
+{
+ return map->reloc;
+}
+
static inline u32 map__flags(const struct map *map)
{
return map->flags;
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index bb44a3798df8..6e2110d605fb 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -135,14 +135,14 @@ static int kernel_get_symbol_address_by_name(const char *name, u64 *addr,
/* ref_reloc_sym is just a label. Need a special fix*/
reloc_sym = kernel_get_ref_reloc_sym(&map);
if (reloc_sym && strcmp(name, reloc_sym->name) == 0)
- *addr = (!map->reloc || reloc) ? reloc_sym->addr :
+ *addr = (!map__reloc(map) || reloc) ? reloc_sym->addr :
reloc_sym->unrelocated_addr;
else {
sym = machine__find_kernel_symbol_by_name(host_machine, name, &map);
if (!sym)
return -ENOENT;
*addr = map__unmap_ip(map, sym->start) -
- ((reloc) ? 0 : map->reloc) -
+ ((reloc) ? 0 : map__reloc(map)) -
((reladdr) ? map__start(map) : 0);
}
return 0;
@@ -400,7 +400,7 @@ static int find_alternative_probe_point(struct debuginfo *dinfo,
"Consider identifying the final function used at run time and set the probe directly on that.\n",
pp->function);
} else
- address = map__unmap_ip(map, sym->start) - map->reloc;
+ address = map__unmap_ip(map, sym->start) - map__reloc(map);
break;
}
if (!address) {
@@ -866,7 +866,7 @@ post_process_kernel_probe_trace_events(struct probe_trace_event *tevs,
free(tevs[i].point.symbol);
tevs[i].point.symbol = tmp;
tevs[i].point.offset = tevs[i].point.address -
- (map->reloc ? reloc_sym->unrelocated_addr :
+ (map__reloc(map) ? reloc_sym->unrelocated_addr :
reloc_sym->addr);
}
return skipped;
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index b73c4bf0137e..0431c328f4d6 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -805,11 +805,11 @@ static int maps__split_kallsyms_for_kcore(struct maps *kmaps, struct dso *dso)
continue;
}
curr_map_dso = map__dso(curr_map);
- pos->start -= map__start(curr_map) - curr_map->pgoff;
+ pos->start -= map__start(curr_map) - map__pgoff(curr_map);
if (pos->end > map__end(curr_map))
pos->end = map__end(curr_map);
if (pos->end)
- pos->end -= map__start(curr_map) - curr_map->pgoff;
+ pos->end -= map__start(curr_map) - map__pgoff(curr_map);
symbols__insert(&curr_map_dso->symbols, pos);
++count;
}
@@ -1455,7 +1455,7 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
if (new_node->map == replacement_map) {
map->start = map__start(new_node->map);
map->end = map__end(new_node->map);
- map->pgoff = new_node->map->pgoff;
+ map->pgoff = map__pgoff(new_node->map);
map->map_ip = new_node->map->map_ip;
map->unmap_ip = new_node->map->unmap_ip;
/* Ensure maps are correctly ordered */
diff --git a/tools/perf/util/unwind-libdw.c b/tools/perf/util/unwind-libdw.c
index 538320e4260c..9565f9906e5d 100644
--- a/tools/perf/util/unwind-libdw.c
+++ b/tools/perf/util/unwind-libdw.c
@@ -62,19 +62,19 @@ static int __report_module(struct addr_location *al, u64 ip,
Dwarf_Addr s;
dwfl_module_info(mod, NULL, &s, NULL, NULL, NULL, NULL, NULL);
- if (s != map__start(al->map) - al->map->pgoff)
+ if (s != map__start(al->map) - map__pgoff(al->map))
mod = 0;
}
if (!mod)
mod = dwfl_report_elf(ui->dwfl, dso->short_name, dso->long_name, -1,
- map__start(al->map) - al->map->pgoff, false);
+ map__start(al->map) - map__pgoff(al->map), false);
if (!mod) {
char filename[PATH_MAX];
if (dso__build_id_filename(dso, filename, sizeof(filename), false))
mod = dwfl_report_elf(ui->dwfl, dso->short_name, filename, -1,
- map__start(al->map) - al->map->pgoff, false);
+ map__start(al->map) - map__pgoff(al->map), false);
}
if (mod) {
--
2.40.0.rc1.284.g88254d51c5-goog
next prev parent reply other threads:[~2023-03-20 3:42 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-20 3:37 [PATCH v4 00/22] Reference count checker and related fixes Ian Rogers
2023-03-20 3:37 ` [PATCH v4 01/22] perf symbol: Avoid memory leak from abi::__cxa_demangle Ian Rogers
2023-03-20 3:37 ` [PATCH v4 02/22] perf bpf_counter: Use public cpumap accessors Ian Rogers
2023-03-20 3:37 ` [PATCH v4 03/22] perf tests: Add common error route for code-reading Ian Rogers
2023-03-20 3:37 ` [PATCH v4 04/22] perf test: Fix memory leak in symbols Ian Rogers
2023-03-20 8:06 ` Adrian Hunter
2023-03-20 13:04 ` Ian Rogers
2023-03-20 3:37 ` [PATCH v4 05/22] perf symbol: Sort names under write lock Ian Rogers
2023-03-20 3:37 ` [PATCH v4 06/22] perf map: Move map list node into symbol Ian Rogers
2023-03-20 15:48 ` Arnaldo Carvalho de Melo
2023-03-20 16:51 ` Ian Rogers
2023-03-20 3:37 ` [PATCH v4 07/22] perf maps: Remove rb_node from struct map Ian Rogers
2023-03-20 3:37 ` [PATCH v4 08/22] perf maps: Add functions to access maps Ian Rogers
2023-03-20 3:37 ` [PATCH v4 09/22] perf map: Add accessor for dso Ian Rogers
2023-03-20 3:37 ` [PATCH v4 10/22] perf map: Add accessor for start and end Ian Rogers
2023-03-20 3:37 ` [PATCH v4 11/22] perf map: Rename map_ip and unmap_ip Ian Rogers
2023-03-20 3:38 ` [PATCH v4 12/22] perf map: Add helper for " Ian Rogers
2023-03-20 3:38 ` [PATCH v4 13/22] perf map: Add accessors for prot, priv and flags Ian Rogers
2023-03-20 3:38 ` Ian Rogers [this message]
2023-03-20 3:38 ` [PATCH v4 15/22] perf test: Add extra diagnostics to maps test Ian Rogers
2023-03-20 3:38 ` [PATCH v4 16/22] perf maps: Modify maps_by_name to hold a reference to a map Ian Rogers
2023-03-20 3:38 ` [PATCH v4 17/22] perf map: Changes to reference counting Ian Rogers
2023-03-20 11:18 ` Adrian Hunter
2023-03-20 17:00 ` Ian Rogers
2023-03-20 3:38 ` [PATCH v4 18/22] libperf: Add reference count checking macros Ian Rogers
2023-03-20 3:38 ` [PATCH v4 19/22] perf cpumap: Add reference count checking Ian Rogers
2023-03-20 3:38 ` [PATCH v4 20/22] perf namespaces: " Ian Rogers
2023-03-20 3:38 ` [PATCH v4 21/22] perf maps: " Ian Rogers
2023-03-20 3:38 ` [PATCH v4 22/22] perf map: " Ian Rogers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230320033810.980165-15-irogers@google.com \
--to=irogers@google.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=alexey.v.bayduraev@linux.intel.com \
--cc=andrealmeid@collabora.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=dave@stgolabs.net \
--cc=dvhart@infradead.org \
--cc=dvyukov@google.com \
--cc=edumazet@google.com \
--cc=eranian@google.com \
--cc=german.gomez@arm.com \
--cc=haoluo@google.com \
--cc=james.clark@arm.com \
--cc=john.g.garry@oracle.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@linux.intel.com \
--cc=kjain@linux.ibm.com \
--cc=leo.yan@linaro.org \
--cc=linmq006@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=maddy@linux.ibm.com \
--cc=mark.rutland@arm.com \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=nakamura.shun@fujitsu.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=rickyman7@gmail.com \
--cc=rostedt@goodmis.org \
--cc=song@kernel.org \
--cc=stephen.s.brennan@oracle.com \
--cc=tglx@linutronix.de \
--cc=tmricht@linux.ibm.com \
--cc=yury.norov@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome