kernel_optimize_test/scripts/kconfig
Masahiro Yamada 8b41fc4454 kbuild: create modules.builtin without Makefile.modbuiltin or tristate.conf
Commit bc081dd6e9 ("kbuild: generate modules.builtin") added
infrastructure to generate modules.builtin, the list of all
builtin modules.

Basically, it works like this:

  - Kconfig generates include/config/tristate.conf, the list of
    tristate CONFIG options with a value in a capital letter.

  - scripts/Makefile.modbuiltin makes Kbuild descend into
    directories to collect the information of builtin modules.

I am not a big fan of it because Kbuild ends up with traversing
the source tree twice.

I am not sure how perfectly it should work, but this approach cannot
avoid false positives; even if the relevant CONFIG option is tristate,
some Makefiles forces obj-m to obj-y.

Some examples are:

  arch/powerpc/platforms/powermac/Makefile:
    obj-$(CONFIG_NVRAM:m=y)         += nvram.o

  net/ipv6/Makefile:
    obj-$(subst m,y,$(CONFIG_IPV6)) += inet6_hashtables.o

  net/netlabel/Makefile:
    obj-$(subst m,y,$(CONFIG_IPV6)) += netlabel_calipso.o

Nobody has complained about (or noticed) it, so it is probably fine to
have false positives in modules.builtin.

This commit simplifies the implementation. Let's exploit the fact
that every module has MODULE_LICENSE(). (modpost shows a warning if
MODULE_LICENSE is missing. If so, 0-day bot would already have blocked
such a module.)

I added MODULE_FILE to <linux/module.h>. When the code is being compiled
as builtin, it will be filled with the file path of the module, and
collected into modules.builtin.info. Then, scripts/link-vmlinux.sh
extracts the list of builtin modules out of it.

This new approach fixes the false-positives above, but adds another
type of false-positives; non-modular code may have MODULE_LICENSE()
by mistake. This is not a big deal, it is just the code is always
orphan. We can clean it up if we like. You can see cleanup examples by:

  $ git log --grep='make.* explicitly non-modular'

To sum up, this commits deletes lots of code, but still produces almost
equivalent results. Please note it does not increase the vmlinux size at
all. As you can see in include/asm-generic/vmlinux.lds.h, the .modinfo
section is discarded in the link stage.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
2020-01-07 02:18:39 +09:00
..
lxdialog kconfig: remove trailing whitespaces 2019-05-09 22:37:17 +09:00
tests docs: kbuild: convert docs to ReST and rename to *.rst 2019-06-14 14:21:21 -06:00
.gitignore kconfig: rename generated .*conf-cfg to *conf-cfg 2019-01-06 10:47:09 +09:00
conf.c kconfig: Add option to get the full help text with listnewconfig 2019-11-11 20:10:01 +09:00
confdata.c kbuild: create modules.builtin without Makefile.modbuiltin or tristate.conf 2020-01-07 02:18:39 +09:00
expr.c kconfig: don't crash on NULL expressions in expr_eq() 2019-12-17 19:21:07 +09:00
expr.h kconfig: fix missing choice values in auto.conf 2019-07-17 22:37:51 +09:00
gconf-cfg.sh kconfig: do not require pkg-config on make {menu,n}config 2018-09-03 02:13:48 +09:00
gconf.c kconfig: remove trailing whitespaces 2019-05-09 22:37:17 +09:00
gconf.glade scripts/kconfig/gconf.glade Update broken web addresses. 2010-09-17 16:54:42 +02:00
images.c kconfig: split images.c out of qconf.cc/gconf.c to fix gconf warnings 2018-12-28 22:22:39 +09:00
images.h kconfig: split images.c out of qconf.cc/gconf.c to fix gconf warnings 2018-12-28 22:22:39 +09:00
lexer.l kconfig: use snprintf for formatting pathnames 2019-05-14 23:23:25 +09:00
list.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
lkc_proto.h kconfig: Fix spelling of sym_is_changable 2019-07-06 21:58:23 +09:00
lkc.h kconfig: require the argument of --defconfig 2019-06-09 15:08:18 +09:00
Makefile kconfig: Add option to get the full help text with listnewconfig 2019-11-11 20:10:01 +09:00
mconf-cfg.sh kconfig: be more helpful if pkg-config is missing 2019-11-11 20:10:01 +09:00
mconf.c kconfig: Fix spelling of sym_is_changable 2019-07-06 21:58:23 +09:00
menu.c kconfig: convert to SPDX License Identifier 2018-12-28 22:22:28 +09:00
merge_config.sh merge_config.sh: ignore unwanted grep errors 2019-09-04 23:12:50 +09:00
nconf-cfg.sh kconfig: be more helpful if pkg-config is missing 2019-11-11 20:10:01 +09:00
nconf.c kconfig: Fix spelling of sym_is_changable 2019-07-06 21:58:23 +09:00
nconf.gui.c kconfig/[mn]conf: handle backspace (^H) key 2019-03-29 22:48:01 +09:00
nconf.h kconfig: convert to SPDX License Identifier 2018-12-28 22:22:28 +09:00
parser.y kconfig: split util.c out of parser.y 2019-11-11 20:07:03 +09:00
preprocess.c kconfig: add static qualifier to expand_string() 2019-06-09 15:08:18 +09:00
qconf-cfg.sh kconfig: do not require pkg-config on make {menu,n}config 2018-09-03 02:13:48 +09:00
qconf.cc kconfig: Fix spelling of sym_is_changable 2019-07-06 21:58:23 +09:00
qconf.h kconfig: fix 'Save As' menu of xconfig 2019-03-12 02:50:24 +09:00
streamline_config.pl kconfig: convert to SPDX License Identifier 2018-12-28 22:22:28 +09:00
symbol.c Kconfig updates for v5.3 2019-07-12 16:06:27 -07:00
util.c kconfig: convert to SPDX License Identifier 2018-12-28 22:22:28 +09:00