Commit 69c4cc99 authored by Masahiro Yamada's avatar Masahiro Yamada
Browse files

modpost: add sym_find_with_module() helper



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: default avatarMasahiro Yamada <masahiroy@kernel.org>
Reviewed-by: default avatarNicolas Schier <nicolas@fjasle.eu>
Tested-by: default avatarNathan Chancellor <nathan@kernel.org>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM-14 (x86-64)
parent 2a66c312
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -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;

@@ -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[];