[PATCH v2 3/3] perf tools: Support register names from all archs

German Gomez german.gomez at arm.com
Fri Dec 10 07:21:09 PST 2021


On 08/12/2021 13:55, German Gomez wrote:
> Hi John,
>
> On 08/12/2021 11:51, John Garry wrote:
>> On 07/12/2021 18:06, German Gomez wrote:
>>>   tools/perf/arch/arm/include/perf_regs.h       |  42 --
>>>   tools/perf/arch/arm64/include/perf_regs.h     |  76 --
>>>   tools/perf/arch/csky/include/perf_regs.h      |  82 ---
>>>   tools/perf/arch/mips/include/perf_regs.h      |  69 --
>>>   tools/perf/arch/powerpc/include/perf_regs.h   |  66 --
>>>   tools/perf/arch/riscv/include/perf_regs.h     |  74 --
>>>   tools/perf/arch/s390/include/perf_regs.h      |  78 --
>>>   tools/perf/arch/x86/include/perf_regs.h       |  82 ---
>>>   tools/perf/builtin-script.c                   |  18 +-
>>>   tools/perf/util/perf_regs.c                   | 666 ++++++++++++++++++
>>>   tools/perf/util/perf_regs.h                   |  10 +-
>>>   .../scripting-engines/trace-event-python.c    |  10 +-
>>>   tools/perf/util/session.c                     |  25 +-
>>>   13 files changed, 697 insertions(+), 601 deletions(-)
>> Did you consider leaving the register structures where they are while
>> renaming to include the arch name and then having as externs or similar? I see an example of that idea for arm64_unwind_libunwind_ops.
>>
> If by register structures you are referring to "__perf_reg_name(int)", I
> can't leave them where they are. Only one of them would be included in
> the build.

I think I need to elaborate a bit more on this since some of the files
involved share the same name but are serving different purposes and it
could lead to confusion.

The linux repo has "perf_regs.h" for each architecture enumerating the
registers from each architecture. These are the files I #include'd in
"/tools/perf/util/perf_regs.c".

The other "perf_regs.h" affected by this patch are local only to perf.
Likewise there is one file for each architecture, but contrary to the
linux ones, they are mutually exclusive, so I can't #include them all:

#ifndef ARCH_PERF_REGS_H
#define ARCH_PERF_REGS_H
//...
#undef ARCH_PERF_REGS_H

Before the patch, the functions "__perf_reg_name" were declared &
implemented in these headers, so I had to take them out.

Thanks,
German



More information about the linux-riscv mailing list