Skip to content

Commit

Permalink
modpost: add sym_find_with_module() helper
Browse files Browse the repository at this point in the history
find_symbol() returns the first symbol found in the hash table. This
table is global, so it may return a symbol from an unexpected module.

There is a case where we want to search for a symbol with a given name
in a specified module.

Add sym_find_with_module(), which receives the module pointer as the
second argument. It is equivalent to find_module() if NULL is passed
as the module pointer.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
Tested-by: Nathan Chancellor <nathan@kernel.org>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM-14 (x86-64)
  • Loading branch information
Masahiro Yamada committed May 23, 2022
1 parent 2a66c31 commit 69c4cc9
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions scripts/mod/modpost.c
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ static void sym_add_unresolved(const char *name, struct module *mod, bool weak)
list_add_tail(&sym->list, &mod->unresolved_symbols);
}

static struct symbol *find_symbol(const char *name)
static struct symbol *sym_find_with_module(const char *name, struct module *mod)
{
struct symbol *s;

Expand All @@ -275,12 +275,17 @@ static struct symbol *find_symbol(const char *name)
name++;

for (s = symbolhash[tdb_hash(name) % SYMBOL_HASH_SIZE]; s; s = s->next) {
if (strcmp(s->name, name) == 0)
if (strcmp(s->name, name) == 0 && (!mod || s->module == mod))
return s;
}
return NULL;
}

static struct symbol *find_symbol(const char *name)
{
return sym_find_with_module(name, NULL);
}

struct namespace_list {
struct list_head list;
char namespace[];
Expand Down

0 comments on commit 69c4cc9

Please sign in to comment.