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


Reply via email to