Re: [PATCH] perf parse-events: Include errno.h before kernel headers
From: James Clark
Date: Mon Oct 26 2026 - 14:27:11 EST
On 26/10/2026 17:48, Florian Fainelli wrote:
Building perf against uClibc fails in config_term_common():
util/parse-events.c:954:30: error: 'ERANGE' undeclared
The kernel headers included before errno.h pull in asm/errno.h. uClibc's
bits/errno.h undefines EDOM, EILSEQ and ERANGE before including
linux/errno.h, but the kernel header include guards prevent these macros
from being defined again.
Include errno.h before the kernel headers so ERANGE remains defined.
Fixes: 6b9c0261b3fb ("perf record: Add ratio-to-prev term")
Signed-off-by: Florian Fainelli <florian.fainelli@xxxxxxxxxxxx>
---
tools/perf/util/parse-events.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index cc7ad331a49f..efb46ba9ba22 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -1,10 +1,10 @@
// SPDX-License-Identifier: GPL-2.0
+#include <errno.h>
#include <linux/hw_breakpoint.h>
#include <linux/err.h>
#include <linux/list_sort.h>
#include <linux/zalloc.h>
#include <dirent.h>
-#include <errno.h>
#include <sys/ioctl.h>
#include <sys/param.h>
#include "cpumap.h"
This seems like a bug in uClibc, if it undefs something but then includes a header to re-define it that it expects hasn't already been included. But I suppose even if you fixed it we'd still need some kind of workaround for older versions.
There's another workaround that is slightly less fragile and doesn't have to be applied every time linux/err.h is included in this order. If you change the asm/errno.h include in tools/include/linux/err.h to errno.h then the libc one will always be processed first. It probably makes sense for the userspace copy of the header to use a libc errno anyway.
But maybe it's just as hacky as this fix.
Either way:
Reviewed-by: James Clark <james.clark@xxxxxxxxxx>