Commit a2b11184 authored by Matthias Maennich's avatar Matthias Maennich Committed by Jessica Yu

modpost: delegate updating namespaces to separate function

Let the function 'sym_update_namespace' take care of updating the
namespace for a symbol. While this currently only replaces one single
location where namespaces are updated, in a following patch, this
function will get more call sites.

The function signature is intentionally close to sym_update_crc and
taking the name by char* seems like unnecessary work as the symbol has
to be looked up again. In a later patch of this series, this concern
will be addressed.

This function ensures that symbol::namespace is either NULL or has a
valid non-empty value. Previously, the empty string was considered 'no
namespace' as well and this lead to confusion.
Acked-by: default avatarWill Deacon <will@kernel.org>
Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: default avatarMatthias Maennich <maennich@google.com>
Signed-off-by: default avatarJessica Yu <jeyu@kernel.org>
parent 4f5cafb5
......@@ -362,6 +362,25 @@ static char *sym_extract_namespace(const char **symname)
return namespace;
}
static void sym_update_namespace(const char *symname, const char *namespace)
{
struct symbol *s = find_symbol(symname);
/*
* That symbol should have been created earlier and thus this is
* actually an assertion.
*/
if (!s) {
merror("Could not update namespace(%s) for symbol %s\n",
namespace, symname);
return;
}
free(s->namespace);
s->namespace =
namespace && namespace[0] ? NOFAIL(strdup(namespace)) : NULL;
}
/**
* Add an exported symbol - it may have already been added without a
* CRC, in this case just update the CRC
......@@ -383,8 +402,7 @@ static struct symbol *sym_add_exported(const char *name, const char *namespace,
s->module = mod;
}
}
free(s->namespace);
s->namespace = namespace ? strdup(namespace) : NULL;
sym_update_namespace(name, namespace);
s->preloaded = 0;
s->vmlinux = is_vmlinux(mod->name);
s->kernel = 0;
......@@ -2196,7 +2214,7 @@ static int check_exports(struct module *mod)
else
basename = mod->name;
if (exp->namespace && exp->namespace[0]) {
if (exp->namespace) {
add_namespace(&mod->required_namespaces,
exp->namespace);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment