Skip to content

Commit

Permalink
modpost: respect the previous export when 'exported twice' is warned
Browse files Browse the repository at this point in the history
When 'exported twice' is warned, let sym_add_exported() return without
updating the symbol info. This respects the previous export, which is
ordered first in modules.order

This simplifies the code too.

Signed-off-by: Masahiro Yamada <[email protected]>
  • Loading branch information
masahir0y committed Nov 23, 2019
1 parent e4b26c9 commit 7ef9ab3
Showing 1 changed file with 11 additions and 15 deletions.
26 changes: 11 additions & 15 deletions scripts/mod/modpost.c
Original file line number Diff line number Diff line change
Expand Up @@ -211,13 +211,11 @@ static struct symbol *new_symbol(const char *name, struct module *module,
enum export export)
{
unsigned int hash;
struct symbol *new;

hash = tdb_hash(name) % SYMBOL_HASH_SIZE;
new = symbolhash[hash] = alloc_symbol(name, 0, symbolhash[hash]);
new->module = module;
new->export = export;
return new;
symbolhash[hash] = alloc_symbol(name, 0, symbolhash[hash]);

return symbolhash[hash];
}

static struct symbol *find_symbol(const char *name)
Expand Down Expand Up @@ -392,17 +390,15 @@ static struct symbol *sym_add_exported(const char *name, struct module *mod,

if (!s) {
s = new_symbol(name, mod, export);
} else {
if (!external_module || is_vmlinux(s->module->name) ||
s->module == mod) {
warn("%s: '%s' exported twice. Previous export was in %s%s\n",
mod->name, name, s->module->name,
is_vmlinux(s->module->name) ? "" : ".ko");
} else {
/* In case Module.symvers was out of date */
s->module = mod;
}
} else if (!external_module || is_vmlinux(s->module->name) ||
s->module == mod) {
warn("%s: '%s' exported twice. Previous export was in %s%s\n",
mod->name, name, s->module->name,
is_vmlinux(s->module->name) ? "" : ".ko");
return s;
}

s->module = mod;
s->vmlinux = is_vmlinux(mod->name);
s->kernel = 0;
s->export = export;
Expand Down

0 comments on commit 7ef9ab3

Please sign in to comment.