aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/mod/modpost.c
diff options
context:
space:
mode:
authorMasahiro Yamada <masahiroy@kernel.org>2022-05-05 16:22:33 +0900
committerMasahiro Yamada <masahiroy@kernel.org>2022-05-11 21:46:38 +0900
commita44abaca0e196cfeef2374ed663b97daa1ad112a (patch)
treefded9837d0c3617ec67525565044d05e03b08041 /scripts/mod/modpost.c
parentmodpost: merge add_{intree_flag,retpoline,staging_flag} to add_header (diff)
downloadlinux-dev-a44abaca0e196cfeef2374ed663b97daa1ad112a.tar.xz
linux-dev-a44abaca0e196cfeef2374ed663b97daa1ad112a.zip
modpost: move *.mod.c generation to write_mod_c_files()
A later commit will add more code to this list_for_each_entry loop. Before that, move the loop body into a separate helper function. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Reviewed-by: Nicolas Schier <nicolas@fjasle.eu> Tested-by: Nathan Chancellor <nathan@kernel.org>
Diffstat (limited to '')
-rw-r--r--scripts/mod/modpost.c56
1 files changed, 31 insertions, 25 deletions
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 8cc386346298..d9efbd5b31a6 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -2390,6 +2390,34 @@ static void write_if_changed(struct buffer *b, const char *fname)
write_buf(b, fname);
}
+/* do sanity checks, and generate *.mod.c file */
+static void write_mod_c_file(struct module *mod)
+{
+ struct buffer buf = { };
+ char fname[PATH_MAX];
+ int ret;
+
+ check_modname_len(mod);
+ check_exports(mod);
+
+ add_header(&buf, mod);
+ add_versions(&buf, mod);
+ add_depends(&buf, mod);
+ add_moddevtable(&buf, mod);
+ add_srcversion(&buf, mod);
+
+ ret = snprintf(fname, sizeof(fname), "%s.mod.c", mod->name);
+ if (ret >= sizeof(fname)) {
+ error("%s: too long path was truncated\n", fname);
+ goto free;
+ }
+
+ write_if_changed(&buf, fname);
+
+free:
+ free(buf.p);
+}
+
/* parse Module.symvers file. line format:
* 0x12345678<tab>symbol<tab>module<tab>export<tab>namespace
**/
@@ -2494,7 +2522,6 @@ struct dump_list {
int main(int argc, char **argv)
{
struct module *mod;
- struct buffer buf = { };
char *missing_namespace_deps = NULL;
char *dump_write = NULL, *files_source = NULL;
int opt;
@@ -2557,30 +2584,11 @@ int main(int argc, char **argv)
read_symbols_from_files(files_source);
list_for_each_entry(mod, &modules, list) {
- char fname[PATH_MAX];
- int ret;
-
- if (mod->is_vmlinux || mod->from_dump)
- continue;
-
- buf.pos = 0;
-
- check_modname_len(mod);
- check_exports(mod);
-
- add_header(&buf, mod);
- add_versions(&buf, mod);
- add_depends(&buf, mod);
- add_moddevtable(&buf, mod);
- add_srcversion(&buf, mod);
-
- ret = snprintf(fname, sizeof(fname), "%s.mod.c", mod->name);
- if (ret >= sizeof(fname)) {
- error("%s: too long path was truncated\n", fname);
+ if (mod->from_dump)
continue;
- }
- write_if_changed(&buf, fname);
+ if (!mod->is_vmlinux)
+ write_mod_c_file(mod);
}
if (missing_namespace_deps)
@@ -2606,7 +2614,5 @@ int main(int argc, char **argv)
warn("suppressed %u unresolved symbol warnings because there were too many)\n",
nr_unresolved - MAX_UNRESOLVED_REPORTS);
- free(buf.p);
-
return error_occurred ? 1 : 0;
}