Re: armv7 target /sys/kern/kern_linker.c build failures for main in personal build (KLD_DPF with __func__ used in argment as if it produced a string literal)
Date: Mon, 21 Sep 2026 09:54:38 UTC
It's clear I never compiled this code. I guess your kernel must have
KLD_DEBUG defined. No config in the base currently does which is surly a bug
(it should be in NOTES at least).
-- Brooks
On Sat, Sep 19, 2026 at 12:34:23PM -0700, Mark Millard wrote:
> Both non-debug and debug builds got the issue:
>
> --- kern_linker.o ---
> /usr/main-src/sys/kern/kern_linker.c:340:16: error: expected ')'
> 340 | (__func__ ": registering exterror categories for %s\n",
> | ^
> /usr/main-src/sys/kern/kern_linker.c:340:6: note: to match this '('
> 340 | (__func__ ": registering exterror categories for %s\n",
> | ^
> /usr/main-src/sys/kern/kern_linker.c:357:16: error: expected ')'
> 357 | (__func__ ": unregistering exterror categories for
> %s\n",
> | ^
> /usr/main-src/sys/kern/kern_linker.c:357:6: note: to match this '('
> 357 | (__func__ ": unregistering exterror categories for
> %s\n",
> | ^
> Building
> /usr/obj/BUILDs/main-CA7-nodbg-clang/usr/main-src/arm.armv7/sys/GENERIC-NODBG-CA7/kern_module.o
> Building
> /usr/obj/BUILDs/main-CA7-nodbg-clang/usr/main-src/arm.armv7/sys/GENERIC-NODBG-CA7/kern_mtxpool.o
> 2 errors generated.
> *** [kern_linker.o] Error code 1
>
>
> --- kern_linker.o ---
> /usr/main-src/sys/kern/kern_linker.c:340:16: error: expected ')'
> 340 | (__func__ ": registering exterror categories for %s\n",
> | ^
> /usr/main-src/sys/kern/kern_linker.c:340:6: note: to match this '('
> 340 | (__func__ ": registering exterror categories for %s\n",
> | ^
> /usr/main-src/sys/kern/kern_linker.c:357:16: error: expected ')'
> 357 | (__func__ ": unregistering exterror categories for
> %s\n",
> | ^
> /usr/main-src/sys/kern/kern_linker.c:357:6: note: to match this '('
> 357 | (__func__ ": unregistering exterror categories for
> %s\n",
> | ^
> Building
> /usr/obj/BUILDs/main-CA7-dbg-clang/usr/main-src/arm.armv7/sys/GENERIC-DBG-CA7/kern_mutex.o
> 2 errors generated.
> *** [kern_linker.o] Error code 1
>
>
> I'll remind that, in C, __func__ is a reference to an implicit, function
> local:
>
> static const char __func__[] = "function-name";
>
> and is not a string literal. One cannot concatenate __func__ with a
> string literal via adjacent placement (that would be a language extension).
>
> Note: aarch4 did not report such a failure when built from the same
> source tree on the same machine. an amd64 system also did not report the
> failure when based on a copy of the same source tree.
>
>
> My prior context predated:
>
> author Brooks Davis <brooks@FreeBSD.org> 2026-08-03 16:50:01 +0000
> committer Brooks Davis <brooks@FreeBSD.org> 2026-08-03 21:43:23 +0000
> commit 295f10230903d54c700518467c4ea4492f5c4faa (patch)
> tree fc76723160a417b8aa23121ff7a8a4e29f634527 /sys/kern/kern_linker.c
> parent bbf95a9b8481e41a99b301e12338e1cda6915a01 (diff)
>
> exterror(9): dynamic kernel categories
>
> Make it possible to define categories without compiling their
> paths into libc (important for third-party modules). The
> EXTERR_CATEGORY_DYNAMIC macro can be defined to a string describing the
> compilation unit (generally the path relative to src/sys) which takes
> the place of EXTERR_CATEGORY.
>
> These strings are assembled in linker sets with category numbers
> assigned at system startup or module load time. The strings can be
> retrieved from the kern.exterr.categories.<category> sysctl.
>
> Reviewed by: kib
> Sponsored by: Innovate UK
> Differential Revision: https://reviews.freebsd.org/D58237
>
> The code from that is:
>
> +static void
> +linker_file_register_exterr(linker_file_t lf)
> +{
> + struct exterr_cat **start, **stop;
> +
> + KLD_DPF(FILE,
> + (__func__ ": registering exterror categories for %s\n",
> + lf->filename));
> +
> + sx_assert(&kld_sx, SA_XLOCKED);
> +
> + if (linker_file_lookup_set(lf, "exterr_cats", &start, &stop, NULL) != 0)
> + return;
> +
> + exterr_cat_register_module(start, stop);
> +}
> +
> +static void
> +linker_file_unregister_exterr(linker_file_t lf)
> +{
> + struct exterr_cat **start, **stop;
> +
> + KLD_DPF(FILE,
> + (__func__ ": unregistering exterror categories for %s\n",
> + lf->filename));
> +
> + sx_assert(&kld_sx, SA_XLOCKED);
> +
> + if (linker_file_lookup_set(lf, "exterr_cats", &start, &stop, NULL) != 0)
> + return;
> +
> + exterr_cat_unregister_module(start, stop);
> +}
> +
>
>
> --
> ===
> Mark Millard
> marklmi at yahoo.com
>