The ELF machine type for CSKY is insufficent to describe the perf registers, the e_flags from the ELF header is also required. Expand the thread__e_machine and associated APIs to optionally fill in an e_flags output field. For uses in `perf trace` the e_flags doesn't matter and the e_flags needn't be computed. For `perf annotate` the e_flags are computed and passed around, however, this is optimized so the e_flags are only read for EM_CSKY. Call chain unwinding needs to know about perf registers during recording and in the unwinding logic, this is similarly wired up with the e_flags.
Ian Rogers (4): perf dso: Factor out e_machine reading for use in thread perf thread: Add optional e_flags output argument to thread__e_machine perf perf_regs: Accurately compute register names for CSKY perf unwind-libdw: Wire up e_flags for CSKY tools/perf/builtin-script.c | 38 +++-- tools/perf/builtin-trace.c | 12 +- tools/perf/util/annotate.c | 5 +- tools/perf/util/disasm.c | 5 +- tools/perf/util/disasm.h | 2 +- tools/perf/util/dso.c | 139 ++++++++++++------ tools/perf/util/dso.h | 12 +- tools/perf/util/parse-regs-options.c | 4 +- .../perf/util/perf-regs-arch/perf_regs_csky.c | 13 +- tools/perf/util/perf_regs.c | 4 +- tools/perf/util/perf_regs.h | 4 +- .../scripting-engines/trace-event-python.c | 17 ++- tools/perf/util/session.c | 26 ++-- tools/perf/util/thread.c | 62 +++++--- tools/perf/util/thread.h | 16 +- tools/perf/util/unwind-libdw.c | 9 +- tools/perf/util/unwind-libdw.h | 1 + 17 files changed, 244 insertions(+), 125 deletions(-) -- 2.52.0.457.g6b5491de43-goog
