lkml.org 
[lkml]   [2019]   [Oct]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH 1/4] modpost: delegate updating namespaces to separate function
    From
    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.

    Signed-off-by: Matthias Maennich <maennich@google.com>
    ---
    scripts/mod/modpost.c | 21 ++++++++++++++++++---
    1 file changed, 18 insertions(+), 3 deletions(-)

    diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
    index 4d2cdb4d71e3..9f5dcdff4d2f 100644
    --- a/scripts/mod/modpost.c
    +++ b/scripts/mod/modpost.c
    @@ -362,6 +362,22 @@ 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 +399,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 +2211,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);

    --
    2.23.0.581.g78d2f28ef7-goog
    \
     
     \ /
      Last update: 2019-10-10 17:16    [W:4.787 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site