[PATCH 1/1] modpost: Refactor and removes global variable *modules

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Refactors the code to accept the modules list as a parameter in
the functions that need it, and moves the variable from the
global scope to the main function scope.

This also fixes the parameter shadowing of add_depends.

Signed-off-by: Leonardo Bras <leobras.c@xxxxxxxxx>
---
 scripts/mod/modpost.c | 39 ++++++++++++++++++++-------------------
 1 file changed, 20 insertions(+), 19 deletions(-)

diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 0d998c54564d..bebe65ed957a 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -118,10 +118,7 @@ void *do_nofail(void *ptr, const char *expr)
 	return ptr;
 }
 
-/* A list of all modules we processed */
-static struct module *modules;
-
-static struct module *find_module(const char *modname)
+static struct module *find_module(const char *modname, struct module *modules)
 {
 	struct module *mod;
 
@@ -131,7 +128,7 @@ static struct module *find_module(const char *modname)
 	return mod;
 }
 
-static struct module *new_module(const char *modname)
+static struct module *new_module(const char *modname, struct module **pmodules)
 {
 	struct module *mod;
 	char *p;
@@ -149,8 +146,8 @@ static struct module *new_module(const char *modname)
 	/* add to list */
 	mod->name = p;
 	mod->gpl_compatible = -1;
-	mod->next = modules;
-	modules = mod;
+	mod->next = *pmodules;
+	*pmodules = mod;
 
 	return mod;
 }
@@ -1929,7 +1926,7 @@ static char *remove_dot(char *s)
 	return s;
 }
 
-static void read_symbols(const char *modname)
+static void read_symbols(const char *modname, struct module **pmodules)
 {
 	const char *symname;
 	char *version;
@@ -1941,7 +1938,7 @@ static void read_symbols(const char *modname)
 	if (!parse_elf(&info, modname))
 		return;
 
-	mod = new_module(modname);
+	mod = new_module(modname, pmodules);
 
 	/* When there's no vmlinux, don't print warnings about
 	 * unresolved symbols (since there'll be too many ;) */
@@ -1992,7 +1989,8 @@ static void read_symbols(const char *modname)
 		mod->unres = alloc_symbol("module_layout", 0, mod->unres);
 }
 
-static void read_symbols_from_files(const char *filename)
+static void read_symbols_from_files(const char *filename,
+				    struct module **pmodules)
 {
 	FILE *in = stdin;
 	char fname[PATH_MAX];
@@ -2006,7 +2004,7 @@ static void read_symbols_from_files(const char *filename)
 	while (fgets(fname, PATH_MAX, in) != NULL) {
 		if (strends(fname, "\n"))
 			fname[strlen(fname)-1] = '\0';
-		read_symbols(fname);
+		read_symbols(fname, pmodules);
 	}
 
 	if (in != stdin)
@@ -2318,7 +2316,8 @@ static void write_if_changed(struct buffer *b, const char *fname)
 /* parse Module.symvers file. line format:
  * 0x12345678<tab>symbol<tab>module[[<tab>export]<tab>something]
  **/
-static void read_dump(const char *fname, unsigned int kernel)
+static void read_dump(const char *fname, unsigned int kernel,
+		      struct module **pmodules)
 {
 	unsigned long size, pos = 0;
 	void *file = grab_file(fname, &size);
@@ -2347,11 +2346,11 @@ static void read_dump(const char *fname, unsigned int kernel)
 		crc = strtoul(line, &d, 16);
 		if (*symname == '\0' || *modname == '\0' || *d != '\0')
 			goto fail;
-		mod = find_module(modname);
+		mod = find_module(modname, *pmodules);
 		if (!mod) {
 			if (is_vmlinux(modname))
 				have_vmlinux = 1;
-			mod = new_module(modname);
+			mod = new_module(modname, pmodules);
 			mod->skip = 1;
 		}
 		s = sym_add_exported(symname, mod, export_no(export));
@@ -2415,6 +2414,8 @@ int main(int argc, char **argv)
 	int err;
 	struct ext_sym_list *extsym_iter;
 	struct ext_sym_list *extsym_start = NULL;
+	/* A list of all modules we processed */
+	static struct module *modules;
 
 	while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:E")) != -1) {
 		switch (opt) {
@@ -2466,21 +2467,21 @@ int main(int argc, char **argv)
 	}
 
 	if (kernel_read)
-		read_dump(kernel_read, 1);
+		read_dump(kernel_read, 1, &modules);
 	if (module_read)
-		read_dump(module_read, 0);
+		read_dump(module_read, 0, &modules);
 	while (extsym_start) {
-		read_dump(extsym_start->file, 0);
+		read_dump(extsym_start->file, 0, &modules);
 		extsym_iter = extsym_start->next;
 		free(extsym_start);
 		extsym_start = extsym_iter;
 	}
 
 	while (optind < argc)
-		read_symbols(argv[optind++]);
+		read_symbols(argv[optind++], &modules);
 
 	if (files_source)
-		read_symbols_from_files(files_source);
+		read_symbols_from_files(files_source, &modules);
 
 	for (mod = modules; mod; mod = mod->next) {
 		if (mod->skip)
-- 
2.19.1




[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux