modpost: do not call get_modinfo() for vmlinux(.o)
authorMasahiro Yamada <masahiroy@kernel.org>
Mon, 1 Jun 2020 05:57:16 +0000 (14:57 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Sat, 6 Jun 2020 14:38:12 +0000 (23:38 +0900)
The three calls of get_modinfo() ("license", "import_ns", "version")
always return NULL for vmlinux(.o) because the built-in module info is
prefixed with __MODULE_INFO_PREFIX.

It is harmless to call get_modinfo(), but there is no point to search
for what apparently does not exist.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
scripts/mod/modpost.c

index fbb3d33..a5da633 100644 (file)
@@ -2006,25 +2006,26 @@ static void read_symbols(const char *modname)
                mod->skip = 1;
        }
 
-       license = get_modinfo(&info, "license");
-       if (!license && !is_vmlinux(modname))
-               warn("missing MODULE_LICENSE() in %s\n"
-                    "see include/linux/module.h for "
-                    "more information\n", modname);
-       while (license) {
-               if (license_is_gpl_compatible(license))
-                       mod->gpl_compatible = 1;
-               else {
-                       mod->gpl_compatible = 0;
-                       break;
+       if (!is_vmlinux(modname)) {
+               license = get_modinfo(&info, "license");
+               if (!license)
+                       warn("missing MODULE_LICENSE() in %s\n", modname);
+               while (license) {
+                       if (license_is_gpl_compatible(license))
+                               mod->gpl_compatible = 1;
+                       else {
+                               mod->gpl_compatible = 0;
+                               break;
+                       }
+                       license = get_next_modinfo(&info, "license", license);
                }
-               license = get_next_modinfo(&info, "license", license);
-       }
 
-       namespace = get_modinfo(&info, "import_ns");
-       while (namespace) {
-               add_namespace(&mod->imported_namespaces, namespace);
-               namespace = get_next_modinfo(&info, "import_ns", namespace);
+               namespace = get_modinfo(&info, "import_ns");
+               while (namespace) {
+                       add_namespace(&mod->imported_namespaces, namespace);
+                       namespace = get_next_modinfo(&info, "import_ns",
+                                                    namespace);
+               }
        }
 
        for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
@@ -2065,10 +2066,12 @@ static void read_symbols(const char *modname)
        if (!is_vmlinux(modname) || vmlinux_section_warnings)
                check_sec_ref(mod, modname, &info);
 
-       version = get_modinfo(&info, "version");
-       if (version || (all_versions && !is_vmlinux(modname)))
-               get_src_version(modname, mod->srcversion,
-                               sizeof(mod->srcversion)-1);
+       if (!is_vmlinux(modname)) {
+               version = get_modinfo(&info, "version");
+               if (version || all_versions)
+                       get_src_version(modname, mod->srcversion,
+                                       sizeof(mod->srcversion) - 1);
+       }
 
        parse_elf_finish(&info);