Skip to content

Commit

Permalink
modpost: use null string instead of NULL pointer for default namespace
Browse files Browse the repository at this point in the history
The default namespace is the null string, "".

When set, the null string "" is converted to NULL:

  s->namespace = namespace[0] ? NOFAIL(strdup(namespace)) : NULL;

When printed, the NULL pointer is get back to the null string:

  sym->namespace ?: ""

This saves 1 byte memory allocated for "", but loses the readability.

In kernel-space, we strive to save memory, but modpost is a userspace
tool used to build the kernel. On modern systems, such small piece of
memory is not a big deal.

Handle the namespace string as is.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
  • Loading branch information
Masahiro Yamada committed Jun 22, 2023
1 parent 6e7611c commit 700c48b
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions scripts/mod/modpost.c
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,13 @@ static bool contains_namespace(struct list_head *head, const char *namespace)
{
struct namespace_list *list;

/*
* The default namespace is null string "", which is always implicitly
* contained.
*/
if (!namespace[0])
return true;

list_for_each_entry(list, head, list) {
if (!strcmp(list->namespace, namespace))
return true;
Expand Down Expand Up @@ -369,7 +376,7 @@ static struct symbol *sym_add_exported(const char *name, struct module *mod,
s = alloc_symbol(name);
s->module = mod;
s->is_gpl_only = gpl_only;
s->namespace = namespace[0] ? NOFAIL(strdup(namespace)) : NULL;
s->namespace = NOFAIL(strdup(namespace));
list_add_tail(&s->list, &mod->exported_symbols);
hash_add_symbol(s);

Expand Down Expand Up @@ -1829,8 +1836,7 @@ static void check_exports(struct module *mod)
else
basename = mod->name;

if (exp->namespace &&
!contains_namespace(&mod->imported_namespaces, exp->namespace)) {
if (!contains_namespace(&mod->imported_namespaces, exp->namespace)) {
modpost_log(allow_missing_ns_imports ? LOG_WARN : LOG_ERROR,
"module %s uses symbol %s from namespace %s, but does not import it.\n",
basename, exp->name, exp->namespace);
Expand Down Expand Up @@ -1916,8 +1922,7 @@ static void add_exported_symbols(struct buffer *buf, struct module *mod)
list_for_each_entry(sym, &mod->exported_symbols, list)
buf_printf(buf, "KSYMTAB_%s(%s, \"%s\", \"%s\");\n",
sym->is_func ? "FUNC" : "DATA", sym->name,
sym->is_gpl_only ? "_gpl" : "",
sym->namespace ?: "");
sym->is_gpl_only ? "_gpl" : "", sym->namespace);

if (!modversions)
return;
Expand Down Expand Up @@ -2185,7 +2190,7 @@ static void write_dump(const char *fname)
buf_printf(&buf, "0x%08x\t%s\t%s\tEXPORT_SYMBOL%s\t%s\n",
sym->crc, sym->name, mod->name,
sym->is_gpl_only ? "_GPL" : "",
sym->namespace ?: "");
sym->namespace);
}
}
write_buf(&buf, fname);
Expand Down

0 comments on commit 700c48b

Please sign in to comment.