Your message dated Thu, 21 May 2026 14:13:17 +0200
with message-id <[email protected]>
and subject line Re: unbound: bootstrap woes with gcc-15
has caused the Debian Bug report #1107614,
regarding unbound: bootstrap woes with gcc-15
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)
--
1107614: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1107614
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Source: unbound
Version: 1.22.0-1
Severity: important
Justification: impacts architecture cross bootstrap
User: [email protected]
Usertags: rebootstrap
unbound fails to cross build from source when built with gcc-15. What
actually happens is that unbound has a custom check for malloc(0)
returning non-NULL that employs AC_RUN_IFELSE with a cross compilation
default of "no". As a result, it adds a compatibility layer that
declares void *malloc(); and gcc-15 is then unhappy about there being
too many arguments. Boom.
Now glibc's malloc(0) does return non-NULL, but we cannot test this
during cross compilation. Native unbound builds are unaffected. If the
cross build were to recognize this, it would succeed (by avoiding the
broken compatibility code).
I'm proposing the attached patch. It wraps the AC_RUN_IFELSE in
AC_CACHE_CHECK and uses the standard variable
ac_cv_func_malloc_0_nonnull which is also used by AC_FUNC_MALLOC. In
principle, AC_FUNC_MALLOC could be used here, but it comes with its own
replacement and I've left that part alone. Cross builds can now set that
cache variable and succeed.
Please consider applying it in forky. Also consider sending it upstream.
Last but not least, consider fixing the malloc wrappers to not declare
"void *malloc();" without a size argument.
Helmut
--- unbound-1.22.0.orig/acx_nlnetlabs.m4
+++ unbound-1.22.0/acx_nlnetlabs.m4
@@ -1190,8 +1190,9 @@
dnl $1: unique name for compat code
AC_DEFUN([ACX_FUNC_MALLOC],
[
- AC_MSG_CHECKING([for GNU libc compatible malloc])
- AC_RUN_IFELSE([AC_LANG_PROGRAM(
+ AC_CACHE_CHECK([for GNU libc compatible malloc],[ac_cv_func_malloc_0_nonnull],
+ [
+ AC_RUN_IFELSE([AC_LANG_PROGRAM(
[[#if defined STDC_HEADERS || defined HAVE_STDLIB_H
#include <stdlib.h>
#else
@@ -1199,14 +1200,16 @@
#endif
]], [ if(malloc(0) != 0) return 1;])
],
- [AC_MSG_RESULT([no])
- AC_LIBOBJ(malloc)
- AC_DEFINE_UNQUOTED([malloc], [rpl_malloc_$1], [Define if replacement function should be used.])] ,
- [AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_MALLOC], 1, [If have GNU libc compatible malloc])],
- [AC_MSG_RESULT([no (crosscompile)])
- AC_LIBOBJ(malloc)
- AC_DEFINE_UNQUOTED([malloc], [rpl_malloc_$1], [Define if replacement function should be used.])] )
+ [ac_cv_func_malloc_0_nonnull=no],
+ [ac_cv_func_malloc_0_nonnull=yes],
+ [ac_cv_func_malloc_0_nonnull="no (crosscompile)"])
+ ])
+ AS_IF([test "$ac_cv_func_malloc_0_nonnull" = yes],
+ [AC_DEFINE([HAVE_MALLOC], 1, [If have GNU libc compatible malloc])],
+ [
+ AC_LIBOBJ(malloc)
+ AC_DEFINE_UNQUOTED([malloc], [rpl_malloc_$1], [Define if replacement function should be used.])
+ ])
])
dnl Define fallback for fseeko and ftello if needed.
--- unbound-1.22.0.orig/configure.ac
+++ unbound-1.22.0/configure.ac
@@ -628,19 +628,19 @@
if test x_$enable_alloc_nonregional = x_yes; then
AC_DEFINE(UNBOUND_ALLOC_NONREGIONAL, 1, [use malloc not regions, for debug use])
fi
-if test x_$enable_alloc_checks = x_yes; then
+AS_IF([test x_$enable_alloc_checks = x_yes],[
AC_DEFINE(UNBOUND_ALLOC_STATS, 1, [use statistics for allocs and frees, for debug use])
SLDNS_ALLOCCHECK_EXTRA_OBJ="alloc.lo log.lo"
AC_SUBST(SLDNS_ALLOCCHECK_EXTRA_OBJ)
ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ="alloc.lo"
AC_SUBST(ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ)
-else
- if test x_$enable_alloc_lite = x_yes; then
+],[
+ AS_IF([test x_$enable_alloc_lite = x_yes],[
AC_DEFINE(UNBOUND_ALLOC_LITE, 1, [use to enable lightweight alloc assertions, for debug use])
- else
+ ],[
ACX_FUNC_MALLOC([unbound])
- fi
-fi
+ ])
+])
# check windows threads (we use them, not pthreads, on windows).
if test "$on_mingw" = "yes"; then
--- End Message ---
--- Begin Message ---
Version: 1.25.1-1
On Tue, Jun 10, 2025 at 05:56:27PM +0200, Helmut Grohne wrote:
> I'm proposing the attached patch. It wraps the AC_RUN_IFELSE in
> AC_CACHE_CHECK and uses the standard variable
> ac_cv_func_malloc_0_nonnull which is also used by AC_FUNC_MALLOC. In
> principle, AC_FUNC_MALLOC could be used here, but it comes with its own
> replacement and I've left that part alone. Cross builds can now set that
> cache variable and succeed.
The patch is included in 1.25.1-1. Closing.
Helmut
--- End Message ---