+void check_license(struct module *mod)
+{
+ struct symbol *s, *exp;
+
+ for (s = mod->unres; s; s = s->next) {
+ if (mod->gpl_compatible == 1) {
+ /* GPL-compatible modules may use all symbols */
+ continue;
+ }
+ exp = find_symbol(s->name);
+ if (!exp || exp->module == mod)
+ continue;
+ const char *basename = strrchr(mod->name, '/');
+ if (basename)
+ basename++;
+ switch (exp->export) {
+ case export_gpl:
+ fatal("modpost: GPL-incompatible module %s "
+ "uses GPL-only symbol '%s'\n",
+ basename ? basename : mod->name,
+ exp->name);
+ break;
+ case export_gpl_future:
+ warn("modpost: GPL-incompatible module %s "
+ "uses future GPL-only symbol '%s'\n",
+ basename ? basename : mod->name,
+ exp->name);
+ break;
+ case export_plain: /* ignore */ break;
+ case export_unknown: /* ignore */ break;
+ }
+ }
+}
+