* [Buildroot] [PATCH 1/1] package/pahole: fix build on modern toolchains
@ 2026-07-14 14:46 Florian Larysch
0 siblings, 0 replies; only message in thread
From: Florian Larysch @ 2026-07-14 14:46 UTC (permalink / raw)
To: buildroot; +Cc: Francis Laniel, Florian Larysch
When building pahole using a modern GCC (e.g. when building
host-pahole), discarded-qualifiers and unused-but-set-variable warnings
are produced. In builds that don't set CMAKE_BUILD_TYPE=Release, -Werror
gets set and causes a build failure.
Fix this by backporting an unreleased upstream patch (for
discarded-qualifiers) and adding another pending one for
unused-but-set-variable (and, arguably, a correctness issue).
Fixes: https://autobuild.buildroot.org/results/ba7/ba79fb9d08b2c6ec573b79fdbb6b4880bf603a57
Signed-off-by: Florian Larysch <fl@n621.de>
---
...scarded-qualifiers-for-strchr-strstr.patch | 147 ++++++++++++++++++
...-function-parameter-type-match-check.patch | 41 +++++
2 files changed, 188 insertions(+)
create mode 100644 package/pahole/0001-pahole-Fix-discarded-qualifiers-for-strchr-strstr.patch
create mode 100644 package/pahole/0002-pahole-fix-BTF-function-parameter-type-match-check.patch
diff --git a/package/pahole/0001-pahole-Fix-discarded-qualifiers-for-strchr-strstr.patch b/package/pahole/0001-pahole-Fix-discarded-qualifiers-for-strchr-strstr.patch
new file mode 100644
index 0000000000..87a63cfdc9
--- /dev/null
+++ b/package/pahole/0001-pahole-Fix-discarded-qualifiers-for-strchr-strstr.patch
@@ -0,0 +1,147 @@
+From 5f5809cd50cc4d583a2fe3f4d556cb120760e229 Mon Sep 17 00:00:00 2001
+From: Damien Hourtoulle <damien.hourtoulle@gmail.com>
+Date: Wed, 11 Mar 2026 15:09:39 +0100
+Subject: [PATCH] pahole: Fix discarded-qualifiers for strchr/strstr.
+
+Glibc 2.43 added C23 const-preserving overloads :
+https://sourceware.org/glibc/wiki/Release/2.43.
+
+For the function prototype__new, fix local variable declaration to use
+the correct const char* type instead of char*, removing the need to
+discard the const qualifier.
+
+Also fix a pre-existing bug in type__find_type_enum: when iterating
+over a '+'-concatenated list of enum names, after advancing to the next
+segment the new separator was not nullified, causing "second+third" to
+be passed to cu__find_enumeration_by_name instead of "second". Add a
+null check before writing to sep_mutable to avoid a null dereference
+when no further '+' is present.
+
+Signed-off-by: Damien Hourtoulle <damien.hourtoulle@gmail.com>
+Signed-off-by: Alan Maguire <alan.maguire@oracle.com>
+Link: https://lore.kernel.org/dwarves/20260311140938.81459-2-d.hourtoulle@geoide.fr/
+
+Upstream: https://git.kernel.org/pub/scm/devel/pahole/pahole.git/commit/?id=ba31cfa08ffcfe6ff5757f325de5b03ca157cb78
+Signed-off-by: Florian Larysch <fl@n621.de>
+---
+ btf_encoder.c | 2 +-
+ pahole.c | 35 ++++++++++++++++++-----------------
+ 2 files changed, 19 insertions(+), 18 deletions(-)
+
+diff --git a/btf_encoder.c b/btf_encoder.c
+index 03bc3c7..4a585f5 100644
+--- a/btf_encoder.c
++++ b/btf_encoder.c
+@@ -1199,7 +1199,7 @@ static bool str_contains_non_fn_suffix(const char *str) {
+ ".cold",
+ ".part"
+ };
+- char *suffix = strchr(str, '.');
++ const char *suffix = strchr(str, '.');
+ int i;
+
+ if (!suffix)
+diff --git a/pahole.c b/pahole.c
+index ef01e58..8c827fc 100644
+--- a/pahole.c
++++ b/pahole.c
+@@ -2482,7 +2482,7 @@ static int64_t type_instance__int_value(struct type_instance *instance, const ch
+ int byte_offset = 0;
+
+ if (!member) {
+- char *sep = strchr(member_name_orig, '.');
++ const char *sep = strchr(member_name_orig, '.');
+
+ if (!sep)
+ return -1;
+@@ -2495,8 +2495,8 @@ static int64_t type_instance__int_value(struct type_instance *instance, const ch
+ char *member_name = member_name_alloc;
+ struct type *type = instance->type;
+
+- sep = member_name_alloc + (sep - member_name_orig);
+- *sep = 0;
++ char *sep_mutable = member_name_alloc + (sep - member_name_orig); // sep mutable for the copy
++ *sep_mutable = 0;
+
+ while (1) {
+ member = type__find_member_by_name(type, member_name);
+@@ -2509,9 +2509,9 @@ out_free_member_name:
+ type = tag__type(cu__type(cu, member->tag.type));
+ if (type == NULL)
+ goto out_free_member_name;
+- member_name = sep + 1;
+- sep = strchr(member_name, '.');
+- if (!sep)
++ member_name = sep_mutable + 1;
++ sep_mutable = strchr(member_name, '.');
++ if (!sep_mutable)
+ break;
+
+ }
+@@ -2949,7 +2949,7 @@ static struct prototype *prototype__new(const char *expression)
+
+ strcpy(prototype->name, expression);
+
+- const char *name = prototype->name;
++ char *name = prototype->name;
+
+ prototype->nr_args = 0;
+
+@@ -2963,10 +2963,9 @@ static struct prototype *prototype__new(const char *expression)
+ if (args_close == NULL)
+ goto out_no_closing_parens;
+
++ *args_open++ = *args_close = '\0';
+ char *args = args_open;
+
+- *args++ = *args_close = '\0';
+-
+ while (isspace(*args))
+ ++args;
+
+@@ -3113,7 +3112,7 @@ static int type__find_type_enum(struct type *type, struct cu *cu, const char *ty
+ return type__add_type_enum(type, te, cu);
+
+ // Now look at a 'virtual enum', i.e. the concatenation of multiple enums
+- char *sep = strchr(type_enum, '+');
++ const char *sep = strchr(type_enum, '+');
+
+ if (!sep)
+ return -1;
+@@ -3125,13 +3124,13 @@ static int type__find_type_enum(struct type *type, struct cu *cu, const char *ty
+
+ int ret = -1;
+
+- sep = type_enums + (sep - type_enum);
++ char *sep_mutable = type_enums + (sep - type_enum);
++ char *cur = type_enums;
+
+- type_enum = type_enums;
+- *sep = '\0';
++ *sep_mutable = '\0';
+
+ while (1) {
+- te = cu__find_enumeration_by_name(cu, type_enum, NULL);
++ te = cu__find_enumeration_by_name(cu, cur, NULL);
+
+ if (!te)
+ goto out;
+@@ -3140,10 +3139,12 @@ static int type__find_type_enum(struct type *type, struct cu *cu, const char *ty
+ if (ret)
+ goto out;
+
+- if (sep == NULL)
++ if (sep_mutable == NULL)
+ break;
+- type_enum = sep + 1;
+- sep = strchr(type_enum, '+');
++ cur = sep_mutable + 1;
++ sep_mutable = strchr(cur, '+');
++ if (sep_mutable)
++ *sep_mutable = '\0';
+ }
+
+ ret = 0;
+--
+2.55.0
+
diff --git a/package/pahole/0002-pahole-fix-BTF-function-parameter-type-match-check.patch b/package/pahole/0002-pahole-fix-BTF-function-parameter-type-match-check.patch
new file mode 100644
index 0000000000..0bea2a602f
--- /dev/null
+++ b/package/pahole/0002-pahole-fix-BTF-function-parameter-type-match-check.patch
@@ -0,0 +1,41 @@
+From f282f4e995becc55a8fa380781dc36e0ff0796d2 Mon Sep 17 00:00:00 2001
+From: Florian Larysch <fl@n621.de>
+Date: Tue, 14 Jul 2026 16:07:54 +0200
+Subject: [PATCH] pahole: fix BTF function parameter type match check
+
+The BTF_KIND_FUNC_PROTO arm in types__match() first checks whether two
+function types identified by t1/t2 have matching return types and then
+attempts to iterate over the function parameters (p1/p2) to check them
+for compatibility too.
+
+However, the loop just repeats the check on t1/t2 instead of p1/p2, so
+we just keep re-checking return type compatibility, ignoring possible
+mismatches of the actual parameter types.
+
+Fix this by actually comparing p1 and p2. This also resolves a
+unused-but-set-variable build-time warning.
+
+Upstream: https://lore.kernel.org/dwarves/20260714140858.17507-1-fl@n621.de/
+Signed-off-by: Florian Larysch <fl@n621.de>
+---
+ btf_encoder.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/btf_encoder.c b/btf_encoder.c
+index 4a585f5..4f9790e 100644
+--- a/btf_encoder.c
++++ b/btf_encoder.c
+@@ -1109,8 +1109,8 @@ static bool types__match(struct btf_encoder *encoder,
+ btf2, t2->type))
+ return false;
+ for (i = 0; i < vlen; i++, p1++, p2++) {
+- if (!types__match(encoder, btf1, t1->type,
+- btf2, t2->type))
++ if (!types__match(encoder, btf1, p1->type,
++ btf2, p2->type))
+ return false;
+ }
+ return true;
+--
+2.55.0
+
--
2.55.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-07-14 14:46 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-14 14:46 [Buildroot] [PATCH 1/1] package/pahole: fix build on modern toolchains Florian Larysch
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox