On Sun, Apr 24, 2022 at 12:09 PM Masahiro Yamada <masahiroy@xxxxxxxxxx> wrote: > > It took me a while to understand the intent of "exp->module == mod". > > This code goes back to 2003 (pre-git era). > > The commit is not in this git repository, and might be worth a little > explanation. > > You can add EXPORT_SYMBOL() with no definition in the same file (but you > need to put a declaration). > > int foo(void); > EXPORT_SYMBOL(foo); > > This is typical when EXPORT_SYMBOL() is defined in a C file, but the > actual implementation is in a separate assembly file. In old days, > EXPORT_SYMBOL() were only available in C files (but this limitation > does not exist any more). > > Add a separate, clearer message if an exported symbol has no definition. > It should be an error even if KBUILD_MODPOST_WARN is given. > > [1]: https://git.kernel.org/pub/scm/linux/kernel/git/history/history.git/commit/?id=2763b6bcb96e6a38a2fe31108fe5759ec5bcc80a Differentiating between the two (and your explanation of how to reach such a situation) is a nice touch. Reviewed-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> > > Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx> > --- > > scripts/mod/modpost.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c > index c7cfeeb088f7..969a081dba62 100644 > --- a/scripts/mod/modpost.c > +++ b/scripts/mod/modpost.c > @@ -2147,13 +2147,18 @@ static void check_exports(struct module *mod) > for (s = mod->unres; s; s = s->next) { > const char *basename; > exp = find_symbol(s->name); > - if (!exp || exp->module == mod) { > + if (!exp) { > if (!s->weak && nr_unresolved++ < MAX_UNRESOLVED_REPORTS) > modpost_log(warn_unresolved ? LOG_WARN : LOG_ERROR, > "\"%s\" [%s.ko] undefined!\n", > s->name, mod->name); > continue; > } > + if (exp->module == mod) { > + error("\"%s\" [%s.ko] was exported without definition\n", > + s->name, mod->name); > + continue; > + } > basename = strrchr(mod->name, '/'); > if (basename) > basename++; > -- > 2.32.0 > -- Thanks, ~Nick Desaulniers