Re: [PATCH v9 15/39] kbuild, dyndbg: Clean up builtin module-name ambiguities
From: Nicolas Schier
Date: Wed Sep 09 2026 - 12:00:24 EST
On Tue, Sep 08, 2026 at 06:55:11PM -0600, Jim Cromie via B4 Relay wrote:
[...]
> diff --git a/Documentation/admin-guide/dynamic-debug-howto.rst b/Documentation/admin-guide/dynamic-debug-howto.rst
> index 9c2f096ed1d8..99bbae37d34e 100644
> --- a/Documentation/admin-guide/dynamic-debug-howto.rst
> +++ b/Documentation/admin-guide/dynamic-debug-howto.rst
[...]
> @@ -161,17 +161,21 @@ file
> file kernel/freezer.c # ie column 1 of control file
> file drivers/usb/* # all callsites under it
> file inode.c:start_* # parse :tail as a func (above)
> - file inode.c:1-100 # parse :tail as a line-range (above)
> + file inode.c:1-100 # parse :tail as a line-range (below)
>
> module
> - The given string is compared against the module name
> - of each callsite. The module name is the string as
> - seen in ``lsmod``, i.e. without the directory or the ``.ko``
> - suffix and with ``-`` changed to ``_``. Examples::
> -
> - module sunrpc
> - module nfsd
> - module drm* # both drm, drm_kms_helper
> + The query string is compared against the subsystem module name of
> + each callsite, as shown in the control file, or its simple name.
> + The simple module name is the string as seen in ``lsmod``,
> + i.e. without the directory or the ``.ko`` suffix and with ``-``
> + changed to ``_``.
> + Examples::
> +
> + module nfsd # simple modname (as from lsmod)
> + module init/main # subsystem modname (as in control file)
> + module */main # any subsystem ending in main
> + module main # simple modname, selects same as above
> + module drm* # both drm, drm_kms_helper
The five lines above have mixed indentation, please switch them all to
one tab (no spaces).
[...]
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index 0a4fdd8bd975..e129c4d10ed8 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -23,6 +23,32 @@ modname_flags = -DKBUILD_MODNAME=$(call name-fix,$(modname)) \
> -D__KBUILD_MODNAME=$(call name-fix-token,$(modname))
> modfile_flags = -DKBUILD_MODFILE=$(call stringify,$(modfile))
>
> +# Dynamic debug subsystem modname with clean heuristic and override support
> +dd_modname_override = $(strip $(firstword $(DD_MODNAME_$(target-stem).o) \
> + $(DD_MODNAME)))
> +dd_obj := $(strip $(filter-out .,\
> + $(patsubst drivers/%,%,\
> + $(patsubst arch/$(SRCARCH)/%,%,\
> + $(patsubst arch/%/,%,$(obj))))))
May it become problematic if there is a conflict with
arch/sh/drivers/dma/*
arch/sh/drivers/pci/*
vs.
drivers/dma/*
drivers/pci/*
?
> +dd_modname_default = $(strip $(if $(filter $(notdir $(obj)),$(__modname)),\
> + $(__modname),\
> + $(if $(filter main core common util init snapshot \
> + process,$(__modname)),\
> + $(dd_obj),\
> + $(if $(word 2,$(__modname)),\
> + $(dd_obj),\
> + $(if $(dd_obj),$(dd_obj),$(__modname))))))
This looks quite complex. I _think_ this should be equivalent, but
perhaps a bit more simple to maintenance:
dd_modname_default = \
$(or \
$(filter $(notdir obj), $(__modname)), \
$(filter-out main core common util init snapshot process, $(__modname)), \
$(dd_obj)))
(Removed $(strip) and the last $(__modname) fallback as both are already
in definition of 'dd_modname'.)
What do you think?
> +dd_modname = $(strip $(or $(dd_modname_override),\
> + $(dd_modname_default),\
> + $(__modname)))
> +dd-name-subst = $(subst $(comma),_,$(subst -,_,$(strip $1)))
> +dd-name-fix-token = $(subst $(space),_,$(call dd-name-subst,$1))
> +dd_tok = $(call dd-name-fix-token,$(dd_modname))
> +dd_modname_flags = $(if $(dd_modname),\
> + -DKBUILD_DD_MODNAME=$(call stringify,$(dd_tok)))
> +
> +modfile_flags += $(dd_modname_flags)
dd-name-subst and dd-name-fix-token are not needed, dd_modname_flags is
used only once and can be folded:
dd_tok = $(call name-fix,$(subst $(space),_,$(dd_modname)))
modfile_flags += $(if (dd_modname), -DKBUILD_DD_MODNAME=$(dd_tok))
--
Nicolas
Attachment:
signature.asc
Description: PGP signature