mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-27 12:32:50 +00:00
perf libunwind: Fixup conversion perf_sample->user_regs to a pointer
Thedc6d2bc2d8("perf sample: Make user_regs and intr_regs optional") misses the changes to a file, resulting in this problem: $ make LIBUNWIND=1 -C tools/perf O=/tmp/build/perf-tools-next install-bin <SNIP> CC /tmp/build/perf-tools-next/util/unwind-libunwind-local.o CC /tmp/build/perf-tools-next/util/unwind-libunwind.o <SNIP> util/unwind-libunwind-local.c: In function ‘access_mem’: util/unwind-libunwind-local.c:582:56: error: ‘ui->sample->user_regs’ is a pointer; did you mean to use ‘->’? 582 | if (__write || !stack || !ui->sample->user_regs.regs) { | ^ | -> util/unwind-libunwind-local.c:587:38: error: passing argument 2 of ‘perf_reg_value’ from incompatible pointer type [-Wincompatible-pointer-types] 587 | ret = perf_reg_value(&start, &ui->sample->user_regs, | ^~~~~~~~~~~~~~~~~~~~~~ | | | struct regs_dump ** <SNIP> ⬢ [acme@toolbox perf-tools-next]$ git bisect baddc6d2bc2d8is the first bad commit commitdc6d2bc2d8(HEAD) Author: Ian Rogers <irogers@google.com> Date: Mon Jan 13 11:43:45 2025 -0800 perf sample: Make user_regs and intr_regs optional Detected using: make -C tools/perf build-test Fixes:dc6d2bc2d8("perf sample: Make user_regs and intr_regs optional") Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ian Rogers <irogers@google.com> Link: https://lore.kernel.org/r/20250313033121.758978-1-irogers@google.com Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
committed by
Namhyung Kim
parent
02ba09c8ab
commit
4e82c88a90
@@ -579,12 +579,12 @@ static int access_mem(unw_addr_space_t __maybe_unused as,
|
||||
int ret;
|
||||
|
||||
/* Don't support write, probably not needed. */
|
||||
if (__write || !stack || !ui->sample->user_regs.regs) {
|
||||
if (__write || !stack || !ui->sample->user_regs || !ui->sample->user_regs->regs) {
|
||||
*valp = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = perf_reg_value(&start, &ui->sample->user_regs,
|
||||
ret = perf_reg_value(&start, perf_sample__user_regs(ui->sample),
|
||||
perf_arch_reg_sp(arch));
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -628,7 +628,7 @@ static int access_reg(unw_addr_space_t __maybe_unused as,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!ui->sample->user_regs.regs) {
|
||||
if (!ui->sample->user_regs || !ui->sample->user_regs->regs) {
|
||||
*valp = 0;
|
||||
return 0;
|
||||
}
|
||||
@@ -637,7 +637,7 @@ static int access_reg(unw_addr_space_t __maybe_unused as,
|
||||
if (id < 0)
|
||||
return -EINVAL;
|
||||
|
||||
ret = perf_reg_value(&val, &ui->sample->user_regs, id);
|
||||
ret = perf_reg_value(&val, perf_sample__user_regs(ui->sample), id);
|
||||
if (ret) {
|
||||
if (!ui->best_effort)
|
||||
pr_err("unwind: can't read reg %d\n", regnum);
|
||||
@@ -741,7 +741,7 @@ static int get_entries(struct unwind_info *ui, unwind_entry_cb_t cb,
|
||||
unw_cursor_t c;
|
||||
int ret, i = 0;
|
||||
|
||||
ret = perf_reg_value(&val, &ui->sample->user_regs,
|
||||
ret = perf_reg_value(&val, perf_sample__user_regs(ui->sample),
|
||||
perf_arch_reg_ip(arch));
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -808,7 +808,7 @@ static int _unwind__get_entries(unwind_entry_cb_t cb, void *arg,
|
||||
.best_effort = best_effort
|
||||
};
|
||||
|
||||
if (!data->user_regs.regs)
|
||||
if (!data->user_regs || !data->user_regs->regs)
|
||||
return -EINVAL;
|
||||
|
||||
if (max_stack <= 0)
|
||||
|
||||
Reference in New Issue
Block a user