Re: [PATCH modules-next v10 00/13] kallsyms: reliable symbol->address lookup with /proc/kallmodsyms

From: Steven Rostedt
Date: Mon May 08 2023 - 18:07:04 EST


This topic came up at LSFMM, presented by Jiri.

I'm Cc'ing this email to the BPF mailing list.

-- Steve


On Mon, 5 Dec 2022 16:31:44 +0000
Nick Alcock <nick.alcock@xxxxxxxxxx> wrote:

> The kallmodsyms patch series was originally posted in Nov 2019, and the thread
> (https://lore.kernel.org/linux-kbuild/20191114223036.9359-1-eugene.loh@xxxxxxxxxx/t/#u)
> shows review comments, questions, and feedback from interested parties.
> Most recent posting: <https://lore.kernel.org/linux-modules/20221109134132.9052-1-nick.alcock@xxxxxxxxxx/T/#t>.
>
> All review comments have been satisfied, as far as I know: in particular
> Yamada's note about translation units that are shared between built-in
> modules is satisfied with a better representation which is also much, much
> smaller, and we are no longer using modules_thick.builtin but Luis's new
> modules.builtin.objs.
>
> A kernel tree containing this series alone:
> https://github.com/oracle/dtrace-linux-kernel kallmodsyms/6.1-rc4-modules-next
>
>
> The whole point of symbols is that their names are unique: you can look up a
> symbol and get back a unique address, and vice versa. Alas, because
> /proc/kallsyms (rightly) reports all symbols, even hidden ones, it does not
> really satisfy this requirement. Large numbers of symbols are duplicated
> many times (just search for __list_del_entry!), and while usually these are
> just out-of-lined things defined in header files and thus all have the same
> implementation, it does make it needlessly hard to figure out which one is
> which in stack dumps, when tracing, and such things. Some configuration
> options make things much worse: my test make allyesconfig runs introduced
> thousands of text symbols named _sub_I_65535_1, one per compiler-generated
> object file, and it was fairly easy to make them appear in ftrace output.
>
> Right now the kernel has no way at all to tell such symbols apart, and nor
> has the user: their address differs and that's all. Which module did they
> come from? Which object file? We don't know. Figuring out which is which
> when tracing needs a combination of guesswork and luck, and if there are
> thousands of them that's not a pleasant prospect. In discussions at LPC it
> became clear that this is not just annoying me but Steve Rostedt and others,
> so it's probably desirable to fix this.
>
> It turns out that the linker, and the kernel build system, can be made to
> give us everything we need to resolve this once and for all. This series
> provides a new /proc/kallmodsyms which is like /proc/kallsyms except that it
> annotates every (textual) symbol which comes from a built-in kernel module
> with the module's name, in square brackets: if a symbol is used by multiple
> modules, it gets [multiple] [names]; if a symbol is still ambiguous it gets
> a cut-down {object file name}; the combination of symbol, [module] [names]
> and {object file name} is unique (with one minor exception: the arm64 nvhe
> module is pre-linked with ld -r, causing all symbols in it to appear to come
> from the same object file: if it was reworked to use thin archives this
> problem would go away).
>
> The object file names are cut down to save space: we store only the shortest
> suffix needed to distinguish symbols from each other. It's fairly rare even
> to see two/level names, let alone three/level/ones. We also save even more
> space by annotating every symbol in a given object file with the object file
> name if we annotate any of them.
>
> We also add new fields that let you get at this new info in the kallsyms
> iterator.
>
> In brief we do this by mapping from address ranges to object files (with
> assistance from the linker map file), then mapping from those object files
> to built-in kernel modules and object file names. Because the number of
> object files is much smaller than the number of symbols, because we fuse
> address range and object file entries together if possible, and because we
> don't even store object file names unless we need to, this is a fairly
> efficient representation, even with a bit of extra complexity to allow
> object files to be in more than one module at once.
>
> The size impact of all of this is minimal: in testing, vmlinux grew by 16632
> bytes, and the compressed vmlinux only grew by 12544 bytes (about .1% of a
> 10MiB kernel): though this is very configuration-dependent, it seems likely
> to scale roughly with the kernel as a whole.
>
> This is all controlled by a new config parameter CONFIG_KALLMODSYMS, which when
> set results in output in /proc/kallmodsyms that looks like this:
>
> ffffffff97606e50 t not_visible
> ffffffff97606e70 T perf_msr_probe
> ffffffff97606f80 t test_msr [rapl]
> ffffffffa6007350 t rapl_pmu_event_stop [rapl]
> ffffffffa6007440 t rapl_pmu_event_del [rapl]
> ffffffffa6007460 t rapl_hrtimer_handle [rapl]
> ffffffffa6007500 t rapl_pmu_event_read [rapl]
> ffffffffa6007520 t rapl_pmu_event_init [rapl]
> ffffffffa6007630 t rapl_cpu_offline [rapl]
> ffffffffa6007710 t amd_pmu_event_map {core.o}
> ffffffffa6007750 t amd_pmu_add_event {core.o}
> ffffffffa6007760 t amd_put_event_constraints_f17h {core.o}
>
> The modular symbols are notated as [rapl] even if rapl is built into the
> kernel. Further, at least one symbol nottated as {core.o} would have been
> ambiguous without that notation. If we look a little further down, we see:
>
> ffffffff97607a70 t cmask_show {core.o}
> ffffffff97607ab0 t inv_show {core.o}
> ffffffff97607ae0 t edge_show {core.o}
> ffffffff97607b10 t umask_show {core.o}
> ffffffff97607b40 t event_show {core.o}
>
> where event_show in particular is highly ambiguous and appears in many
> object files, all of which are now notated with different {object file
> names}.
>
> Further down, we see what happens when object files are reused by multiple
> modules, all of which are built in to the kernel, and some of which contain
> symbols that are ambiguously-named even within that set of modules:
>
> ffffffff97d7aed0 t liquidio_pcie_mmio_enabled [liquidio]
> ffffffff97d7aef0 t liquidio_pcie_resume [liquidio]
> ffffffff97d7af00 t liquidio_ptp_adjtime [liquidio]
> ffffffff97d7af50 t liquidio_ptp_enable [liquidio]
> ffffffff97d7af70 t liquidio_get_stats64 [liquidio]
> ffffffff97d7b0f0 t liquidio_fix_features [liquidio]
> ffffffff97d7b1c0 t liquidio_get_port_parent_id [liquidio]
> [...]
> ffffffff97d824c0 t lio_vf_rep_modinit [liquidio]
> ffffffff97d824f0 t lio_vf_rep_modexit [liquidio]
> ffffffff97d82520 t lio_ethtool_get_channels [liquidio] [liquidio_vf]
> ffffffff97d82600 t lio_ethtool_get_ringparam [liquidio] [liquidio_vf]
> ffffffff97d826a0 t lio_get_msglevel [liquidio] [liquidio_vf]
> ffffffff97d826c0 t lio_vf_set_msglevel [liquidio] [liquidio_vf]
> ffffffff97d826e0 t lio_get_pauseparam [liquidio] [liquidio_vf]
> ffffffff97d82710 t lio_get_ethtool_stats [liquidio] [liquidio_vf]
> ffffffff97d82e70 t lio_vf_get_ethtool_stats [liquidio] [liquidio_vf]
> [...]
> ffffffff97d91a80 t cn23xx_vf_mbox_thread [liquidio] [liquidio_vf] {cn23xx_vf_device.o}
> ffffffff97d91aa0 t cpumask_weight.constprop.0 [liquidio] [liquidio_vf] {cn23xx_vf_device.o}
> ffffffff97d91ac0 t cn23xx_vf_msix_interrupt_handler [liquidio] [liquidio_vf] {cn23xx_vf_device.o}
> ffffffff97d91bd0 t cn23xx_vf_get_oq_ticks [liquidio] [liquidio_vf] {cn23xx_vf_device.o}
> ffffffff97d91c00 t cn23xx_vf_ask_pf_to_do_flr [liquidio] [liquidio_vf] {cn23xx_vf_device.o}
> ffffffff97d91c70 t cn23xx_octeon_pfvf_handshake [liquidio] [liquidio_vf] {cn23xx_vf_device.o}
> ffffffff97d91e20 t cn23xx_setup_octeon_vf_device [liquidio] [liquidio_vf] {cn23xx_vf_device.o}
> ffffffff97d92060 t octeon_mbox_read [liquidio] [liquidio_vf]
> ffffffff97d92230 t octeon_mbox_write [liquidio] [liquidio_vf]
> [...]
> ffffffff97d946b0 t octeon_alloc_soft_command_resp [liquidio] [liquidio_vf]
> ffffffff97d947e0 t octnet_send_nic_data_pkt [liquidio] [liquidio_vf]
> ffffffff97d94820 t octnet_send_nic_ctrl_pkt [liquidio] [liquidio_vf]
> ffffffff97d94ab0 t liquidio_get_stats64 [liquidio_vf]
> ffffffff97d94c10 t liquidio_fix_features [liquidio_vf]
> ffffffff97d94cd0 t wait_for_pending_requests [liquidio_vf]
>
> Like /proc/kallsyms, the output is sorted by address, so keeps the curious
> property of /proc/kallsyms that symbols may appear repeatedly with different
> addresses: but now, unlike in /proc/kallsyms, we can see that those symbols
> appear repeatedly because they are *different symbols* that ultimately
> belong to different modules or different object files, all of which are
> built in to the kernel.
>
> Note that kernel symbols for built-in modules will probably appear
> interspersed with other symbols that are part of different modules and
> non-modular always-built-in symbols, which, as usual, have no
> square-bracketed module denotation (though they might have an {object file
> name}.
>
> As with /proc/kallsyms, non-root usage produces addresses that are all zero.
>
> Tested with a make allyesconfig and allmodconfig, and with and without
> CONFIG_X86_KERNEL_IBT.
>
> Limitations:
>
> - this approach only works for textual symbols (and weak ones). I don't
> see any way to make it work for data symbols etc: except for initialized
> data they don't really have corresponding object files at all and they
> tend to get merged together anyway.
>
> - Compiling with clang LTO is untested. Compiling with X86 IBT now works,
> but .cold-partitioned symbols are not attributed to any objfiles right
> now (currently, this results in no conflicts on a make allyesconfig
> build, so it's harmless).
>
> - Non-built-in modules can also have ambiguous symbols in them in different
> input object files: they aren't handled yet because kallsyms never runs
> over modules to create the necessary sections. This is fixable, but it's
> probably best handled in another patch series. (kallsyms would need to
> do much less work for modules: only the sections introduced by this patch
> series would need emission at all, and no [module] notations would be
> needed, only {objfile}.)
>
> - Section start/end symbols necessarily lie on the boundary between object
> files, so are sometimes misreported as being in the wrong object file or
> module. This is unlikely to be too troublesome for these symbols in
> particular, but if anyone can figure out a way to fix this I'd be happy
> to do it.
>
> - There is no BPF iterator support yet (it's just a matter of adding it
> if needed).
>
> The commits in this series all have reviewed-by tags: they're all from
> internal reviews, so please ignore them.
>
> Differences from v9, early November 2022:
>
> - Rework to use Luis Chamberlain's modules.builtin.objs rather than a
> tristate-generated "modules_thick.builtin". Keep the iterator over
> modules_thick.builtin, but rename it to scripts/modules_builtin.c and
> make it more robust against strange lines in modules.builtin.objs,
> such as lines with no colon in.
> - Rework the old modules_thick.builtin stuff into a "tristate checker"
> which warns about source files that contain MODULE_LICENSE for which
> the corresponding Kconfig symbol is of type 'bool' rather than
> 'tristate'. It no longer runs unless requested, so doesn't slow
> the build down with a big recursion across the whole source tree.
> - Fix up a bunch of places where the tristate checker (and the old
> modules_thick.builtin and modules.builtin generators) gave the wrong
> answers, usually considering things to be modules that actually
> unconditionally built in. (16 makefiles touched.)
> - Eliminate MODULE_LICENSE/AUTHOR/DESCRIPTION from a bunch of things
> that cannot actually be modules: aarch64 and x86_64 are now clean,
> other arches not checked. Verified with make allmodconfig on both
> arches. (189 not-actually-modules touched.)
> - Use the CONFIG_VMLINUX_MAP machinery rather than generating a whole
> second linker mapfile.
> - Add (in a separate commit since it is largely conceptually separate)
> support for the ld -r linking used by CONFIG_X86_KERNEL_IBT.
> - Add a special kallsyms build-time warning for ambiguous symbols that
> came from the same object file: note that they are probably the
> result of ld -r.
> - When lengthening shortened objfile names to resolve an ambiguity,
> always lengthen the name of the objfile with the longer (unshortened)
> length, fixing ambiguous objfiles with names which are substrings of
> other objfiles' names.
> - Fix a bug which could cause inflooping when outputting the
> .kallsyms_mod_objnames section.
> - Rebase atop modules-next.
>
> Differences from v8, February 2022:
>
> - Add object file name handling, emitting only those object names needed to
> disambiguate symbols, shortening them as much as possible compatible with
> that.
> - Rename .kallsyms_module_names to .kallsyms_mod_objnames now that it
> contains object file names too.
> - Fix a bug in optimize_obj2mod that prevented proper reuse of module names
> for object files appearing in both multimodule modules and single-module
> modules: saves a few KiB more, often more than the space increase due to
> object file name handling.
> - Rebased atop v6.1-rc2: move modules_thick.builtin generation into
> the top-level Kbuild accordingly, and adjust to getopt_long use in
> scripts/kallsyms.
> - Significant revisions to the cover letter.
> - Add proof-of-concept kallmodsyms module support to perf.
> - (This ping) confirmed that series applies atop v6.1-rc4 without
> further changes.
>
> Differences from v7, December 2021:
>
> - Adjust for changes in the v5.17 merge window. Adjust a few commit
> messages and shrink the cover letter.
> - Drop the symbol-size patch, probably better done from userspace.
>
> Differences from v6, November 2021:
>
> - Adjust for rewrite of confdata machinery in v5.16 (tristate.conf
> handling is now more of a rewrite than a reversion)
>
> Differences from v5, October 2021:
>
> - Fix generation of mapfiles under UML
>
> Differences from v4, September 2021:
>
> - Fix building of tristate.conf if missing (usually concealed by the
> syncconfig being run for other reasons, but not always: the kernel
> test robot spotted it).
> - Forward-port atop v5.15-rc3.
>
> Differences from v3, August 2021:
>
> - Fix a kernel test robot warning in get_ksymbol_core (possible
> use of uninitialized variable if kallmodsyms was wanted but
> kallsyms_module_offsets was not present, which is most unlikely).
>
> Differences from v2, June 2021:
>
> - Split the series up. In particular, the size impact of the table
> optimizer is now quantified, and the symbol-size patch is split out and
> turned into an RFC patch, with the /proc/kallmodsyms format before that
> patch lacking a size column. Some speculation on how to make the symbol
> sizes less space-wasteful is added (but not yet implemented).
>
> - Drop a couple of unnecessary #includes, one unnecessarily exported
> symbol, and a needless de-staticing.
>
> Differences from v1, in 2019:
>
> - Move from a straight symbol->module name mapping to a mapping from
> address-range to TU to module name list, bringing major space savings
> over the previous approach and support for object files used by many
> built-in modules at the same time, at the cost of a slightly more complex
> approach (unavoidably so, I think, given that we have to merge three data
> sources together: the link map in .tmp_vmlinux.ranges, the nm output on
> stdin, and the mapping from TU name to module names in
> modules_thick.builtin).
>
> We do opportunistic merging of TUs if they cite the same modules and
> reuse module names where doing so is simple: see optimize_obj2mod below.
> I considered more extensive searches for mergeable entries and more
> intricate encodings of the module name list allowing TUs that are used by
> overlapping sets of modules to share their names, but such modules are
> rare enough (and such overlapping sharings are vanishingly rare) that it
> seemed likely to save only a few bytes at the cost of much more
> hard-to-test code. This is doubly true now that the tables needed are
> only a few kilobytes in length.
>
> Signed-off-by: Nick Alcock <nick.alcock@xxxxxxxxxx>
> Signed-off-by: Eugene Loh <eugene.loh@xxxxxxxxxx>
> Reviewed-by: Kris Van Hees <kris.van.hees@xxxxxxxxxx>
>
> Luis Chamberlain (1):
> kbuild: add modules.builtin.objs
>
> Nick Alcock (12):
> kbuild: bring back tristate.conf
> kbuild: add tristate checker
> kbuild: fix up substitutions in makefiles to allow for tristate
> checker
> kbuild: remove MODULE_LICENSE/AUTHOR/DESCRIPTION in non-modules
> build: add a simple iterator over modules.builtin.objs
> kbuild: generate an address ranges map at vmlinux link time
> kbuild: make address ranges map work with IBT
> kallsyms: introduce sections needed to map symbols to built-in modules
> kallsyms: optimize .kallsyms_modules*
> kallsyms: distinguish text symbols fully using object file names
> kallsyms: add /proc/kallmodsyms for text symbol disambiguation
> perf: proof-of-concept kallmodsyms support
>
> .gitignore | 3 +-
> Documentation/dontdiff | 4 +-
> Documentation/kbuild/kbuild.rst | 5 +
> Documentation/kbuild/kconfig.rst | 5 +
> Makefile | 35 +-
> arch/x86/crypto/blake2s-glue.c | 1 -
> arch/x86/mm/debug_pagetables.c | 3 -
> crypto/asymmetric_keys/asymmetric_type.c | 1 -
> drivers/Makefile | 2 +-
> .../accessibility/braille/braille_console.c | 4 -
> drivers/amba/tegra-ahb.c | 3 -
> drivers/android/binder.c | 1 -
> drivers/bus/arm-cci.c | 2 -
> drivers/bus/arm-integrator-lm.c | 3 -
> drivers/bus/bt1-apb.c | 3 -
> drivers/bus/bt1-axi.c | 3 -
> drivers/bus/imx-weim.c | 3 -
> drivers/bus/intel-ixp4xx-eb.c | 3 -
> drivers/bus/qcom-ebi2.c | 3 -
> drivers/bus/qcom-ssc-block-bus.c | 3 -
> drivers/bus/simple-pm-bus.c | 3 -
> drivers/clk/bcm/clk-bcm2835-aux.c | 3 -
> drivers/clk/bcm/clk-bcm2835.c | 3 -
> drivers/clk/clk-bm1880.c | 3 -
> drivers/clk/clk-fixed-mmio.c | 3 -
> drivers/clk/clk-fsl-sai.c | 3 -
> drivers/clk/hisilicon/clk-hi3559a.c | 2 -
> drivers/clk/microchip/clk-mpfs-ccc.c | 3 -
> drivers/clk/microchip/clk-mpfs.c | 5 -
> drivers/clk/renesas/rcar-usb2-clock-sel.c | 2 -
> drivers/clk/renesas/renesas-cpg-mssr.c | 2 -
> drivers/clk/renesas/rzg2l-cpg.c | 2 -
> drivers/clocksource/em_sti.c | 3 -
> drivers/clocksource/sh_cmt.c | 3 -
> drivers/clocksource/sh_mtu2.c | 3 -
> drivers/clocksource/sh_tmu.c | 3 -
> drivers/clocksource/timer-stm32-lp.c | 2 -
> drivers/clocksource/timer-tegra186.c | 3 -
> drivers/clocksource/timer-ti-dm.c | 3 -
> drivers/cpufreq/freq_table.c | 3 -
> drivers/cpufreq/intel_pstate.c | 3 -
> drivers/cpufreq/tegra124-cpufreq.c | 3 -
> drivers/dma-buf/heaps/cma_heap.c | 2 -
> drivers/dma-buf/heaps/system_heap.c | 1 -
> drivers/dma-buf/udmabuf.c | 2 -
> drivers/dma/ep93xx_dma.c | 3 -
> drivers/dma/ipu/ipu_idmac.c | 3 -
> drivers/dma/mv_xor_v2.c | 2 -
> drivers/dma/s3c24xx-dma.c | 3 -
> drivers/dma/sh/shdma-base.c | 3 -
> drivers/dma/stm32-dmamux.c | 4 -
> drivers/dma/stm32-mdma.c | 4 -
> drivers/edac/altera_edac.c | 3 -
> drivers/firmware/broadcom/bcm47xx_nvram.c | 1 -
> drivers/firmware/imx/imx-scu.c | 3 -
> drivers/firmware/imx/scu-pd.c | 3 -
> drivers/gpio/gpio-aspeed-sgpio.c | 2 -
> drivers/gpio/gpio-imx-scu.c | 3 -
> drivers/gpio/gpio-mxs.c | 6 -
> drivers/gpio/gpio-rda.c | 3 -
> drivers/gpu/drm/drm_mipi_dsi.c | 3 -
> drivers/hv/Makefile | 2 +-
> drivers/hwspinlock/hwspinlock_core.c | 3 -
> drivers/interconnect/core.c | 3 -
> drivers/iommu/sun50i-iommu.c | 4 -
> drivers/irqchip/irq-al-fic.c | 3 -
> drivers/irqchip/irq-ls-scfg-msi.c | 3 -
> drivers/irqchip/irq-mbigen.c | 4 -
> drivers/irqchip/irq-mchp-eic.c | 3 -
> drivers/irqchip/irq-mvebu-pic.c | 3 -
> drivers/irqchip/irq-renesas-intc-irqpin.c | 3 -
> drivers/irqchip/irq-renesas-irqc.c | 3 -
> drivers/irqchip/irq-renesas-rza1.c | 3 -
> drivers/irqchip/irq-renesas-rzg2l.c | 3 -
> drivers/irqchip/irq-sl28cpld.c | 3 -
> drivers/irqchip/irq-ti-sci-inta.c | 3 -
> drivers/irqchip/irq-ti-sci-intr.c | 3 -
> drivers/leds/leds-asic3.c | 3 -
> drivers/mailbox/rockchip-mailbox.c | 4 -
> drivers/mailbox/zynqmp-ipi-mailbox.c | 3 -
> drivers/memory/bt1-l2-ctl.c | 3 -
> drivers/memory/da8xx-ddrctl.c | 3 -
> drivers/memory/fsl_ifc.c | 3 -
> drivers/memory/mvebu-devbus.c | 3 -
> drivers/memory/tegra/mc.c | 3 -
> drivers/memory/tegra/tegra186-emc.c | 3 -
> drivers/mfd/88pm860x-core.c | 3 -
> drivers/mfd/altera-sysmgr.c | 3 -
> drivers/mfd/bcm2835-pm.c | 3 -
> drivers/mfd/da903x.c | 4 -
> drivers/mfd/da9052-core.c | 3 -
> drivers/mfd/da9052-i2c.c | 3 -
> drivers/mfd/da9052-spi.c | 3 -
> drivers/mfd/da9055-core.c | 3 -
> drivers/mfd/da9055-i2c.c | 3 -
> drivers/mfd/ezx-pcap.c | 3 -
> drivers/mfd/intel_soc_pmic_crc.c | 4 -
> drivers/mfd/lp8788.c | 3 -
> drivers/mfd/omap-usb-host.c | 4 -
> drivers/mfd/omap-usb-tll.c | 4 -
> drivers/mfd/palmas.c | 3 -
> drivers/mfd/stmpe-i2c.c | 3 -
> drivers/mfd/stmpe-spi.c | 3 -
> drivers/mfd/tc3589x.c | 3 -
> drivers/mfd/tps6586x.c | 3 -
> drivers/mfd/twl4030-audio.c | 3 -
> drivers/mfd/twl6040.c | 4 -
> drivers/mmc/Makefile | 2 +-
> drivers/mtd/parsers/bcm63xxpart.c | 6 -
> drivers/net/wireless/silabs/wfx/Makefile | 2 +-
> drivers/nvmem/core.c | 4 -
> drivers/nvmem/zynqmp_nvmem.c | 3 -
> drivers/pci/controller/dwc/pcie-histb.c | 2 -
> .../controller/mobiveil/pcie-mobiveil-plat.c | 3 -
> drivers/pci/controller/pci-tegra.c | 1 -
> drivers/pci/controller/pci-versatile.c | 2 -
> drivers/pci/controller/pcie-hisi-error.c | 2 -
> drivers/pci/controller/pcie-microchip-host.c | 3 -
> drivers/pci/endpoint/pci-ep-cfs.c | 3 -
> drivers/pci/endpoint/pci-epc-core.c | 3 -
> drivers/pci/endpoint/pci-epc-mem.c | 3 -
> drivers/pci/endpoint/pci-epf-core.c | 3 -
> drivers/pci/hotplug/acpiphp_core.c | 3 -
> drivers/pci/hotplug/shpchp_core.c | 3 -
> drivers/perf/apple_m1_cpu_pmu.c | 1 -
> drivers/phy/intel/phy-intel-lgm-combo.c | 2 -
> drivers/pinctrl/actions/pinctrl-s500.c | 4 -
> drivers/pinctrl/actions/pinctrl-s700.c | 3 -
> drivers/pinctrl/actions/pinctrl-s900.c | 4 -
> drivers/pinctrl/bcm/pinctrl-ns.c | 2 -
> drivers/pinctrl/mediatek/pinctrl-mt8188.c | 2 -
> drivers/pinctrl/mediatek/pinctrl-mt8192.c | 2 -
> drivers/pinctrl/mediatek/pinctrl-mt8365.c | 3 -
> drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c | 4 -
> drivers/pinctrl/pinctrl-amd.c | 3 -
> drivers/pinctrl/renesas/pinctrl-rza1.c | 3 -
> drivers/pinctrl/renesas/pinctrl-rza2.c | 3 -
> drivers/pinctrl/renesas/pinctrl-rzg2l.c | 3 -
> drivers/pinctrl/renesas/pinctrl-rzn1.c | 3 -
> drivers/pinctrl/renesas/pinctrl-rzv2m.c | 3 -
> drivers/power/reset/as3722-poweroff.c | 3 -
> drivers/power/reset/gpio-poweroff.c | 3 -
> drivers/power/reset/gpio-restart.c | 3 -
> drivers/power/reset/keystone-reset.c | 3 -
> drivers/power/reset/ltc2952-poweroff.c | 3 -
> drivers/power/reset/mt6323-poweroff.c | 3 -
> drivers/power/reset/regulator-poweroff.c | 3 -
> drivers/power/reset/restart-poweroff.c | 3 -
> drivers/power/reset/tps65086-restart.c | 3 -
> drivers/power/supply/power_supply_core.c | 6 -
> drivers/power/supply/wm97xx_battery.c | 3 -
> drivers/powercap/powercap_sys.c | 3 -
> drivers/regulator/stm32-pwr.c | 3 -
> drivers/remoteproc/remoteproc_core.c | 2 -
> drivers/reset/reset-axs10x.c | 3 -
> drivers/reset/reset-hsdk.c | 3 -
> drivers/reset/reset-lantiq.c | 3 -
> drivers/reset/reset-microchip-sparx5.c | 3 -
> drivers/reset/reset-mpfs.c | 3 -
> drivers/s390/char/Makefile | 2 +-
> drivers/s390/crypto/Makefile | 2 +-
> drivers/soc/apple/apple-pmgr-pwrstate.c | 3 -
> drivers/soc/bcm/bcm2835-power.c | 3 -
> drivers/soc/bcm/raspberrypi-power.c | 4 -
> drivers/soc/fujitsu/a64fx-diag.c | 3 -
> drivers/soc/sunxi/sunxi_sram.c | 3 -
> drivers/soc/tegra/cbb/tegra194-cbb.c | 3 -
> drivers/soc/tegra/cbb/tegra234-cbb.c | 2 -
> drivers/tty/n_null.c | 3 -
> drivers/tty/serial/imx_earlycon.c | 3 -
> drivers/tty/serial/rda-uart.c | 3 -
> drivers/video/console/vgacon.c | 1 -
> drivers/video/fbdev/asiliantfb.c | 1 -
> drivers/video/fbdev/gbefb.c | 1 -
> drivers/video/fbdev/imsttfb.c | 1 -
> drivers/video/fbdev/mmp/hw/mmp_ctrl.c | 3 -
> .../video/fbdev/mmp/panel/tpo_tj032md01bw.c | 3 -
> drivers/video/fbdev/vesafb.c | 1 -
> drivers/video/fbdev/wm8505fb.c | 3 -
> drivers/video/fbdev/wmt_ge_rops.c | 4 -
> drivers/xen/grant-dma-ops.c | 3 -
> drivers/xen/xenbus/xenbus_probe.c | 1 -
> fs/binfmt_elf.c | 1 -
> fs/nfs_common/nfs_ssc.c | 1 -
> fs/unicode/utf8-core.c | 1 -
> include/linux/module.h | 4 +-
> init/Kconfig | 10 +
> kernel/dma/map_benchmark.c | 3 -
> kernel/events/hw_breakpoint_test.c | 2 -
> kernel/kallsyms.c | 277 +++-
> kernel/kallsyms_internal.h | 14 +
> kernel/trace/rv/reactor_panic.c | 3 -
> kernel/trace/rv/reactor_printk.c | 3 -
> kernel/watch_queue.c | 3 -
> lib/btree.c | 3 -
> lib/crypto/blake2s-generic.c | 3 -
> lib/crypto/blake2s.c | 3 -
> lib/glob.c | 2 -
> lib/packing.c | 2 -
> lib/pldmfw/pldmfw.c | 3 -
> lib/test_fprobe.c | 1 -
> mm/zpool.c | 3 -
> mm/zswap.c | 3 -
> net/8021q/Makefile | 2 +-
> net/Makefile | 2 +-
> net/bridge/Makefile | 4 +-
> net/dccp/Makefile | 4 +-
> net/ipv6/Makefile | 2 +-
> net/l2tp/Makefile | 12 +-
> net/mctp/af_mctp.c | 3 -
> net/netfilter/Makefile | 2 +-
> net/netlabel/Makefile | 2 +-
> net/sctp/Makefile | 2 +-
> scripts/.gitignore | 1 +
> scripts/Kbuild.include | 21 +
> scripts/Makefile | 7 +
> scripts/Makefile.lib | 13 +-
> scripts/Makefile.vmlinux_o | 21 +-
> scripts/addaddrs.c | 28 +
> scripts/check-tristates.mk | 56 +
> scripts/kallsyms.c | 1223 ++++++++++++++++-
> scripts/kconfig/confdata.c | 41 +-
> scripts/link-vmlinux.sh | 38 +-
> scripts/modules_builtin.c | 200 +++
> scripts/modules_builtin.h | 48 +
> tools/perf/builtin-kallsyms.c | 35 +-
> tools/perf/util/event.c | 14 +-
> tools/perf/util/machine.c | 6 +-
> tools/perf/util/machine.h | 1 +
> tools/perf/util/symbol.c | 207 ++-
> tools/perf/util/symbol.h | 12 +-
> 231 files changed, 2241 insertions(+), 671 deletions(-)
> create mode 100644 scripts/addaddrs.c
> create mode 100644 scripts/check-tristates.mk
> create mode 100644 scripts/modules_builtin.c
> create mode 100644 scripts/modules_builtin.h
>