[Buildroot] [git commit branch/2025.02.x] package/pahole: fix build on modern toolchains

Thomas Perale via buildroot <[email protected]>
Newsgroups net.busybox.buildroot
Message-ID <[email protected]>
commit: https://gitlab.com/buildroot.org/buildroot/-/commit/608967e670f2537b82467c5c2df1f15db578b2e8
branch: https://gitlab.com/buildroot.org/buildroot/-/tree/2025.02.x

When building pahole using a modern GCC (e.g. when building
host-pahole), discarded-qualifiers 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 the applicable parts of an upstream patch and
fixing a remaining issue that implicitly got refactored away upstream
already.

Signed-off-by: Florian Larysch <[email protected]>
(cherry picked from commit 8419f0f0c747abe3acd90b0cffb21c2eb34ee623)
Signed-off-by: Thomas Perale <[email protected]>
---
 ...ix-discarded-qualifiers-for-strchr-strstr.patch | 134 +++++++++++++++++++++
 ...ole-preserve-const-ness-of-bsearch-result.patch |  38 ++++++
 2 files changed, 172 insertions(+)

diff --git a/package/pahole/0002-pahole-Fix-discarded-qualifiers-for-strchr-strstr.patch b/package/pahole/0002-pahole-Fix-discarded-qualifiers-for-strchr-strstr.patch
new file mode 100644
index 0000000000..fc0bcc4f7c
--- /dev/null
+++ b/package/pahole/0002-pahole-Fix-discarded-qualifiers-for-strchr-strstr.patch
@@ -0,0 +1,134 @@
+From 5eeb534e02183bcaf2b86f71e0e96efa2d2ce3d0 Mon Sep 17 00:00:00 2001
+From: Damien Hourtoulle <[email protected]>
+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 <[email protected]>
+Signed-off-by: Alan Maguire <[email protected]>
+Link: https://lore.kernel.org/dwarves/[email protected]/
+
+Upstream: https://git.kernel.org/pub/scm/devel/pahole/pahole.git/commit/?id=ba31cfa08ffcfe6ff5757f325de5b03ca157cb78
+[Florian: Backport of the applicable bits to v1.27]
+Signed-off-by: Florian Larysch <[email protected]>
+---
+ pahole.c | 35 ++++++++++++++++++-----------------
+ 1 file changed, 18 insertions(+), 17 deletions(-)
+
+diff --git a/pahole.c b/pahole.c
+index 954498d..3dcb525 100644
+--- a/pahole.c
++++ b/pahole.c
+@@ -2505,7 +2505,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;
+@@ -2518,8 +2518,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);
+@@ -2532,9 +2532,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;
+ 
+ 		}
+@@ -2972,7 +2972,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;
+ 
+@@ -2986,10 +2986,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;
+ 
+@@ -3136,7 +3135,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;
+@@ -3148,13 +3147,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;
+@@ -3163,10 +3162,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/0003-pahole-preserve-const-ness-of-bsearch-result.patch b/package/pahole/0003-pahole-preserve-const-ness-of-bsearch-result.patch
new file mode 100644
index 0000000000..7a4cddf5d1
--- /dev/null
+++ b/package/pahole/0003-pahole-preserve-const-ness-of-bsearch-result.patch
@@ -0,0 +1,38 @@
+From f510bf5d3f3e3405710311ceb4a3539267218bde Mon Sep 17 00:00:00 2001
+From: Florian Larysch <[email protected]>
+Date: Tue, 14 Jul 2026 16:03:12 +0200
+Subject: [PATCH] pahole: preserve const-ness of bsearch result
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fixes:
+
+pahole/btf_encoder.c: In function ‘btf_encoder__tag_kfunc’:
+pahole/btf_encoder.c:1526:16: error: assignment discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers]
+ 1526 |         target = bsearch(&key, base, cnt, sizeof(key), btf_func_cmp);
+      |                ^
+
+Upstream: N/A (implicitly fixed as part of a refactor in commit c567717
+("btf_encoder: Refactor btf_encoder__tag_kfuncs()"), released in v1.30)
+Signed-off-by: Florian Larysch <[email protected]>
+---
+ btf_encoder.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/btf_encoder.c b/btf_encoder.c
+index c2df2bc..4118028 100644
+--- a/btf_encoder.c
++++ b/btf_encoder.c
+@@ -1516,7 +1516,7 @@ static int btf_encoder__tag_kfunc(struct btf_encoder *encoder, struct gobuffer *
+ {
+ 	struct btf_func key = { .name = kfunc };
+ 	struct btf *btf = encoder->btf;
+-	struct btf_func *target;
++	const struct btf_func *target;
+ 	const void *base;
+ 	unsigned int cnt;
+ 	int err = -1;
+-- 
+2.55.0
+

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.