[PATCH v9 08/18] perf sample-raw: Use perf_env e_machine rather than arch

Ian Rogers
2026-05-03T00:23:09Z

Use the e_machine rather than the arch to determine S390 and x86 types.

Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/util/sample-raw.c | 21 +++++++++++----------
tools/perf/util/sample-raw.h | 6 +++++-
2 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/tools/perf/util/sample-raw.c b/tools/perf/util/sample-raw.c
index bcf442574d6e..be998c713a0d 100644
--- a/tools/perf/util/sample-raw.c
+++ b/tools/perf/util/sample-raw.c
@@ -1,11 +1,12 @@
/* SPDX-License-Identifier: GPL-2.0 */
+#include "sample-raw.h"

-#include <string.h>
+#include <elf.h>
#include <linux/string.h>
-#include "evlist.h"
+
#include "env.h"
+#include "evlist.h"
#include "header.h"
-#include "sample-raw.h"
#include "session.h"

/*
@@ -14,14 +15,14 @@
*/
void evlist__init_trace_event_sample_raw(struct evlist *evlist, struct perf_env *env)
{
- const char *arch_pf = perf_env__arch(env);
- const char *cpuid = perf_env__cpuid(env);
+ uint16_t e_machine = perf_env__e_machine(env, /*e_eflags=*/NULL);

- if (arch_pf && !strcmp("s390", arch_pf))
+ if (e_machine == EM_S390) {
evlist->trace_event_sample_raw = evlist__s390_sample_raw;
- else if (arch_pf && !strcmp("x86", arch_pf) &&
- cpuid && strstarts(cpuid, "AuthenticAMD") &&
- evlist__has_amd_ibs(evlist)) {
- evlist->trace_event_sample_raw = evlist__amd_sample_raw;
+ } else if (e_machine == EM_X86_64 || e_machine == EM_386) {
+ const char *cpuid = perf_env__cpuid(env);
+
+ if (cpuid && strstarts(cpuid, "AuthenticAMD") && evlist__has_amd_ibs(evlist))
+ evlist->trace_event_sample_raw = evlist__amd_sample_raw;
}
}
diff --git a/tools/perf/util/sample-raw.h b/tools/perf/util/sample-raw.h
index 896e9a87e373..c8d38c841c8c 100644
--- a/tools/perf/util/sample-raw.h
+++ b/tools/perf/util/sample-raw.h
@@ -2,7 +2,10 @@
#ifndef __SAMPLE_RAW_H
#define __SAMPLE_RAW_H 1

+#include <stdbool.h>
+
struct evlist;
+struct perf_env;
union perf_event;
struct perf_sample;

@@ -12,4 +15,5 @@ bool evlist__has_amd_ibs(struct evlist *evlist);
void evlist__amd_sample_raw(struct evlist *evlist, union perf_event *event,
struct perf_sample *sample);
void evlist__init_trace_event_sample_raw(struct evlist *evlist, struct perf_env *env);
-#endif /* __PERF_EVLIST_H */
+
+#endif /* __SAMPLE_RAW_H */
--
2.54.0.545.g6539524ca2-goog