kbuild: warn about duplicate exported symbols
authorSam Ravnborg <sam@mars.ravnborg.org>
Sat, 28 Jan 2006 21:22:33 +0000 (22:22 +0100)
committerSam Ravnborg <sam@mars.ravnborg.org>
Sun, 19 Feb 2006 08:51:18 +0000 (09:51 +0100)
In modpost introduce a check for symbols exported twice.
This check caught only one victim (inet_bind_bucket_create) for
which a patch is already sent to netdev.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
scripts/mod/modpost.c

index 976adf152db3d24e78dece1d4225ff95389e86b0..d901095ea8b7a840e8948b415f4249f6c21289a4 100644 (file)
@@ -117,6 +117,7 @@ struct symbol {
        unsigned int vmlinux:1;    /* 1 if symbol is defined in vmlinux */
        unsigned int kernel:1;     /* 1 if symbol is from kernel
                                    *  (only for external modules) **/
+       unsigned int preloaded:1;  /* 1 if symbol from Module.symvers */
        char name[0];
 };
 
@@ -186,9 +187,17 @@ static struct symbol *sym_add_exported(const char *name, struct module *mod)
 {
        struct symbol *s = find_symbol(name);
 
-       if (!s)
+       if (!s) {
                s = new_symbol(name, mod);
-
+       } else {
+               if (!s->preloaded) {
+                       warn("%s: duplicate symbol '%s' previous definition "
+                            "was in %s%s\n", mod->name, name,
+                            s->module->name,
+                            is_vmlinux(s->module->name) ?"":".ko");
+               }
+       }
+       s->preloaded = 0;
        s->vmlinux   = is_vmlinux(mod->name);
        s->kernel    = 0;
        return s;
@@ -706,7 +715,8 @@ static void read_dump(const char *fname, unsigned int kernel)
                        mod->skip = 1;
                }
                s = sym_add_exported(symname, mod);
-               s->kernel = kernel;
+               s->kernel    = kernel;
+               s->preloaded = 1;
                sym_update_crc(symname, mod, crc);
        }
        return;