Re: [PATCH v9 15/39] kbuild, dyndbg: Clean up builtin module-name ambiguities
From: Nicolas Schier <hidden>
Date: 2026-09-09 15:50:35
Also in:
dri-devel, linux-arch, linux-kbuild, linux-kselftest, linux-modules, linux-pm, lkml
On Tue, Sep 08, 2026 at 06:55:11PM -0600, Jim Cromie via B4 Relay wrote: [...]
quoted hunk ↗ jump to hunk
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
[...]
quoted hunk ↗ jump to hunk
@@ -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). [...]
quoted hunk ↗ jump to hunk
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
Attachments
- signature.asc [application/pgp-signature] 833 bytes