Skip to content

Commit

Permalink
perf parse-events: Vary default_breakpoint_len on i386 and arm64
Browse files Browse the repository at this point in the history
On arm64 the breakpoint length should be 4-bytes but 8-bytes is
tolerated as perf passes that as sizeof(long). Just pass the correct
value.

On i386 the sizeof(long) check in the kernel needs to match the
kernel's long size. Check using an environment (uname checks) whether
4 or 8 bytes needs to be passed. Cache the value in a static.

Signed-off-by: Ian Rogers <irogers@google.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: Chaitanya S Prakash <chaitanyas.prakash@arm.com>
Cc: Colin Ian King <colin.i.king@gmail.com>
Cc: Dominique Martinet <asmadeus@codewreck.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Junhao He <hejunhao3@huawei.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Yang Jihong <yangjihong@bytedance.com>
Link: https://lore.kernel.org/r/20240904050606.752788-6-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
captain5050 authored and acmel committed Sep 4, 2024
1 parent 70b27c7 commit fa6cc3f
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions tools/perf/util/parse-events.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <sys/ioctl.h>
#include <sys/param.h>
#include "term.h"
#include "env.h"
#include "evlist.h"
#include "evsel.h"
#include <subcmd/parse-options.h>
Expand Down Expand Up @@ -673,7 +674,22 @@ static int add_tracepoint_multi_sys(struct parse_events_state *parse_state,

size_t default_breakpoint_len(void)
{
#if defined(__i386__)
static int len;

if (len == 0) {
struct perf_env env = {};

perf_env__init(&env);
len = perf_env__kernel_is_64_bit(&env) ? sizeof(u64) : sizeof(long);
perf_env__exit(&env);
}
return len;
#elif defined(__aarch64__)
return 4;
#else
return sizeof(long);
#endif
}

static int
Expand Down

0 comments on commit fa6cc3f

Please sign in to comment.