perf parse-regs: Remove PERF_REGS_{MAX|MASK} from common code

The macros PERF_REGS_MAX and PERF_REGS_MASK are architecture specific,
let's remove them from the common file util/perf_regs.c.

As a side effect, the weak functions arch__intr_reg_mask() and
arch__user_reg_mask() just return zeros, every arch defines its own
functions in the 'arch' folder for returning right values.

Note, we don't need to return intr/user register masks dynamically, this
is because these two functions are invoked during recording phase but
not decoding phase, they are always invoked on the native environment,
thus we don't need to parse them dynamically.

Signed-off-by: Leo Yan <leo.yan@linaro.org>
Acked-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Eric Lin <eric.lin@sifive.com>
Cc: Fangrui Song <maskray@google.com>
Cc: Guo Ren <guoren@kernel.org>
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Ivan Babrou <ivan@cloudflare.com>
Cc: James Clark <james.clark@arm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Ming Wang <wangming01@loongson.cn>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Sandipan Das <sandipan.das@amd.com>
Cc: Will Deacon <will@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-csky@vger.kernel.org
Cc: linux-riscv@lists.infradead.org
Link: https://lore.kernel.org/r/20230606014559.21783-6-leo.yan@linaro.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Leo Yan 2023-06-06 09:45:58 +08:00 committed by Arnaldo Carvalho de Melo
parent 6a87e0f0ce
commit 856caabf72
12 changed files with 79 additions and 6 deletions

View File

@ -4,3 +4,13 @@
const struct sample_reg sample_reg_masks[] = { const struct sample_reg sample_reg_masks[] = {
SMPL_REG_END SMPL_REG_END
}; };
uint64_t arch__intr_reg_mask(void)
{
return PERF_REGS_MASK;
}
uint64_t arch__user_reg_mask(void)
{
return PERF_REGS_MASK;
}

View File

@ -139,6 +139,11 @@ int arch_sdt_arg_parse_op(char *old_op, char **new_op)
return SDT_ARG_VALID; return SDT_ARG_VALID;
} }
uint64_t arch__intr_reg_mask(void)
{
return PERF_REGS_MASK;
}
uint64_t arch__user_reg_mask(void) uint64_t arch__user_reg_mask(void)
{ {
struct perf_event_attr attr = { struct perf_event_attr attr = {

View File

@ -4,3 +4,13 @@
const struct sample_reg sample_reg_masks[] = { const struct sample_reg sample_reg_masks[] = {
SMPL_REG_END SMPL_REG_END
}; };
uint64_t arch__intr_reg_mask(void)
{
return PERF_REGS_MASK;
}
uint64_t arch__user_reg_mask(void)
{
return PERF_REGS_MASK;
}

View File

@ -4,3 +4,13 @@
const struct sample_reg sample_reg_masks[] = { const struct sample_reg sample_reg_masks[] = {
SMPL_REG_END SMPL_REG_END
}; };
uint64_t arch__intr_reg_mask(void)
{
return PERF_REGS_MASK;
}
uint64_t arch__user_reg_mask(void)
{
return PERF_REGS_MASK;
}

View File

@ -4,3 +4,13 @@
const struct sample_reg sample_reg_masks[] = { const struct sample_reg sample_reg_masks[] = {
SMPL_REG_END SMPL_REG_END
}; };
uint64_t arch__intr_reg_mask(void)
{
return PERF_REGS_MASK;
}
uint64_t arch__user_reg_mask(void)
{
return PERF_REGS_MASK;
}

View File

@ -226,3 +226,8 @@ uint64_t arch__intr_reg_mask(void)
} }
return mask; return mask;
} }
uint64_t arch__user_reg_mask(void)
{
return PERF_REGS_MASK;
}

View File

@ -4,3 +4,13 @@
const struct sample_reg sample_reg_masks[] = { const struct sample_reg sample_reg_masks[] = {
SMPL_REG_END SMPL_REG_END
}; };
uint64_t arch__intr_reg_mask(void)
{
return PERF_REGS_MASK;
}
uint64_t arch__user_reg_mask(void)
{
return PERF_REGS_MASK;
}

View File

@ -4,3 +4,13 @@
const struct sample_reg sample_reg_masks[] = { const struct sample_reg sample_reg_masks[] = {
SMPL_REG_END SMPL_REG_END
}; };
uint64_t arch__intr_reg_mask(void)
{
return PERF_REGS_MASK;
}
uint64_t arch__user_reg_mask(void)
{
return PERF_REGS_MASK;
}

View File

@ -317,3 +317,8 @@ uint64_t arch__intr_reg_mask(void)
return PERF_REGS_MASK; return PERF_REGS_MASK;
} }
uint64_t arch__user_reg_mask(void)
{
return PERF_REGS_MASK;
}

View File

@ -879,7 +879,7 @@ static void __evsel__config_callchain(struct evsel *evsel, struct record_opts *o
evsel__set_sample_bit(evsel, REGS_USER); evsel__set_sample_bit(evsel, REGS_USER);
evsel__set_sample_bit(evsel, STACK_USER); evsel__set_sample_bit(evsel, STACK_USER);
if (opts->sample_user_regs && if (opts->sample_user_regs &&
DWARF_MINIMAL_REGS(arch) != PERF_REGS_MASK) { DWARF_MINIMAL_REGS(arch) != arch__user_reg_mask()) {
attr->sample_regs_user |= DWARF_MINIMAL_REGS(arch); attr->sample_regs_user |= DWARF_MINIMAL_REGS(arch);
pr_warning("WARNING: The use of --call-graph=dwarf may require all the user registers, " pr_warning("WARNING: The use of --call-graph=dwarf may require all the user registers, "
"specifying a subset with --user-regs may render DWARF unwinding unreliable, " "specifying a subset with --user-regs may render DWARF unwinding unreliable, "

View File

@ -13,12 +13,12 @@ int __weak arch_sdt_arg_parse_op(char *old_op __maybe_unused,
uint64_t __weak arch__intr_reg_mask(void) uint64_t __weak arch__intr_reg_mask(void)
{ {
return PERF_REGS_MASK; return 0;
} }
uint64_t __weak arch__user_reg_mask(void) uint64_t __weak arch__user_reg_mask(void)
{ {
return PERF_REGS_MASK; return 0;
} }
#ifdef HAVE_PERF_REGS_SUPPORT #ifdef HAVE_PERF_REGS_SUPPORT

View File

@ -70,12 +70,10 @@ static inline uint64_t DWARF_MINIMAL_REGS(const char *arch)
} }
#else #else
#define PERF_REGS_MASK 0
#define PERF_REGS_MAX 0
static inline uint64_t DWARF_MINIMAL_REGS(const char *arch __maybe_unused) static inline uint64_t DWARF_MINIMAL_REGS(const char *arch __maybe_unused)
{ {
return PERF_REGS_MASK; return 0;
} }
static inline const char *perf_reg_name(int id __maybe_unused, const char *arch __maybe_unused) static inline const char *perf_reg_name(int id __maybe_unused, const char *arch __maybe_unused)