perf-core build fails on powerpc

Sukadev Bhattiprolu
2018-03-13T19:17:49Z

Building perf on Powerpc seems broken when using Arnaldo's perf/core branch
with HEAD as:

1b442ed ("perf test: Fix exit code for record+probe_libc_inet_pton.sh")

It maybe related to this commit:

commit d596299
Author: John Garry <john.garry@huawei.com>
Date: Thu Mar 8 18:58:29 2018 +0800

perf vendor events: Add support for pmu events vendor subdirectory

Reverting this hunk from tools/perf/pmu-events/jevents.c, seems to fix the
problem for me.

@@ -957,8 +963,12 @@ static int process_one_file(const char *fpath, const struct

/* model directory, reset topic */
+#if 0
if ((level == 1 && is_dir && is_leaf_dir(fpath)) ||
(level == 2 && is_dir)) {
+#else
+ if (level == 1 && is_dir) {
+#endif

The problem is that the tools/perf/pmu-events/pmu-events.c file generated by
the jevents program is missing the "prefix" lines like:

struct pmu_event pme_power8[] = {
and
struct pmu_event pme_power9[] = {

i.e the pmu-events.c begins like:
---

#include "../../pmu-events/pmu-events.h"
{
.name = "pm_data_from_dl2l3_mod",
.event = "event=0x4c048",
.desc = "The processor's data cache was reloaded with Modified (M) data from another chip's L2 or L3 on a different Node or Group (Distant), as this chip due to a demand load",
.topic = "cache",
.long_desc = "The processor's data cache was reloaded with Modified (M) data from another chip's L2 or L3 on a different Node or Group (Distant), as this chip due to either only demand loads or demand loads plus prefetches if MMCR1[16] is 1",
},

---

Below is the debug and info messages at the time of failure:

---

HOSTCC /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/jevents.o
HOSTLD /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/jevents-in.o
LINK /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/jevents
GEN /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c
d 0 50 powerpc pmu-events/arch/powerpc
d 1 4096 power8 pmu-events/arch/powerpc/power8
f 2 10275 cache.json pmu-events/arch/powerpc/power8/cache.json
f 2 302 floating-point.json pmu-events/arch/powerpc/power8/floating-point.json
f 2 29283 marked.json pmu-events/arch/powerpc/power8/marked.json
f 2 12028 memory.json pmu-events/arch/powerpc/power8/memory.json
f 2 159271 other.json pmu-events/arch/powerpc/power8/other.json
f 2 10777 pipeline.json pmu-events/arch/powerpc/power8/pipeline.json
f 2 3781 pmc.json pmu-events/arch/powerpc/power8/pmc.json
f 2 6664 translation.json pmu-events/arch/powerpc/power8/translation.json
f 2 25104 frontend.json pmu-events/arch/powerpc/power8/frontend.json
d 1 4096 power9 pmu-events/arch/powerpc/power9
f 2 1096 floating-point.json pmu-events/arch/powerpc/power9/floating-point.json
f 2 5503 cache.json pmu-events/arch/powerpc/power9/cache.json
f 2 14885 frontend.json pmu-events/arch/powerpc/power9/frontend.json
f 2 27807 marked.json pmu-events/arch/powerpc/power9/marked.json
f 2 4820 memory.json pmu-events/arch/powerpc/power9/memory.json
f 2 85387 other.json pmu-events/arch/powerpc/power9/other.json
f 2 23839 pipeline.json pmu-events/arch/powerpc/power9/pipeline.json
f 2 5138 pmc.json pmu-events/arch/powerpc/power9/pmc.json
f 2 9897 translation.json pmu-events/arch/powerpc/power9/translation.json
f 1 440 mapfile.csv pmu-events/arch/powerpc/mapfile.csv
jevents: Processing mapfile pmu-events/arch/powerpc/mapfile.csv
CC /home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.o
/home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:2:1: error: expected identifier or ‘(’ before ‘{’ token
{
^
/home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:8:2: error: expected identifier or ‘(’ before ‘,’ token
},
^
/home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:15:2: error: expected identifier or ‘(’ before ‘,’ token
},
^
/home/suka/linux-acme.git/tools/perf/perf-obj/pmu-events/pmu-events.c:22:2: error: expected identifier or ‘(’ before ‘,’ token
},

----