Re: [PATCH] perf build: Fix compiler errors with old capstone

From: Ian Rogers

Date: Wed Jul 01 2026 - 14:53:18 EST


On Wed, Jul 1, 2026 at 11:28 AM Namhyung Kim <namhyung@xxxxxxxxxx> wrote:
>
> It seems RISCV was added in capstone version 5. Unfortunately they are
> enum constants so cannot check with #ifdef but anyway we can define the
> symbols. Let's do it using the version number to avoid build errors.
> It'll fail at runtime though.
>
> util/capstone.c: In function 'e_machine_to_capstone':
> util/capstone.c:186:25: error: 'CS_ARCH_RISCV' undeclared (first use in this function);
> did you mean 'CS_ARCH_SYSZ'?
> 186 | *arch = CS_ARCH_RISCV;
> | ^~~~~~~~~~~~~
> | CS_ARCH_SYSZ
> util/capstone.c:186:25: note: each undeclared identifier is reported only once for each function it appears in
>
> util/capstone.c:187:34: error: 'CS_MODE_RISCV64' undeclared (first use in this function);
> did you mean 'CS_MODE_MIPS64'?
> 187 | *mode |= (is64 ? CS_MODE_RISCV64 : CS_MODE_RISCV32) | CS_MODE_RISCVC;
> | ^~~~~~~~~~~~~~~
> | CS_MODE_MIPS64
>
> Also note that capstone renamed CS_MODE_RISCVC to CS_MODE_RISCV_C which
> would cause a different build failure on latest versions. It's reported
> in https://github.com/capstone-engine/capstone/issues/2977 so I think
> they will add compatibility layer to prevent the error.
>
> Fixes: 12c4737f55f2 ("perf capstone: Determine architecture from e_machine")
> Signed-off-by: Namhyung Kim <namhyung@xxxxxxxxxx>

Perhaps update the feature test from:
https://web.git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git/tree/tools/build/feature/test-libcapstone.c?h=perf-tools-next
```
cs_open(CS_ARCH_X86, CS_MODE_64, &handle);
```
to be CS_ARCH_RISCV? That way we won't detect old libcapstones and
avoid cluttering up the code.

Thanks,
Ian

> ---
> tools/perf/util/capstone.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/tools/perf/util/capstone.c b/tools/perf/util/capstone.c
> index 5ad537fea4360e31..dd7cd97d0a38056e 100644
> --- a/tools/perf/util/capstone.c
> +++ b/tools/perf/util/capstone.c
> @@ -24,6 +24,13 @@
> #include "symbol.h"
> #include "thread.h"
>
> +#if CS_VERSION_MAJOR < 5
> +#define CS_ARCH_RISCV CS_ARCH_MAX
> +#define CS_MODE_RISCV32 1
> +#define CS_MODE_RISCV64 2
> +#define CS_MODE_RISCVC 4
> +#endif
> +
> #ifdef LIBCAPSTONE_DLOPEN
> static void *perf_cs_dll_handle(void)
> {
> --
> 2.55.0.rc0.799.gd6f94ed593-goog
>