From mboxrd@z Thu Jan 1 00:00:00 1970 From: Martijn Coenen Subject: [PATCH 4/6] modpost: add support for generating namespace dependencies. Date: Mon, 16 Jul 2018 14:21:23 +0200 Message-ID: <20180716122125.175792-5-maco@android.com> References: <20180716122125.175792-1-maco@android.com> Return-path: In-Reply-To: <20180716122125.175792-1-maco@android.com> Sender: linux-kernel-owner@vger.kernel.org To: linux-kernel@vger.kernel.org Cc: Martijn Coenen , Masahiro Yamada , Michal Marek , Geert Uytterhoeven , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, Alan Stern , Greg Kroah-Hartman , Oliver Neukum , Arnd Bergmann , Jessica Yu , Stephen Boyd , Philippe Ombredanne , Kate Stewart , Sam Ravnborg , linux-kbuild@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-usb@vger.kernel.org, usb-storage@lists.one-eyed-alien.net, linux-scsi List-Id: linux-arch.vger.kernel.org This patch adds an option to modpost to generate a .ns_deps file per module, containing the namespace depedencies for that module. This file can subsequently be used by other tools to automatically add newly introduced namespaces to the modules that require them, saving a lot of manual work. Signed-off-by: Martijn Coenen --- scripts/mod/modpost.c | 58 +++++++++++++++++++++++++++++++++++++++---- scripts/mod/modpost.h | 2 ++ 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index a56a8461a96a..be33d60d5527 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -39,6 +39,8 @@ static int sec_mismatch_verbose = 1; static int sec_mismatch_fatal = 0; /* ignore missing files */ static int ignore_missing_files; +/* Write namespace dependencies */ +static int write_ns_deps; enum export { export_plain, export_unused, export_gpl, @@ -2151,10 +2153,15 @@ static void check_exports(struct module *mod) else basename = mod->name; - if (exp->ns && !module_imports_namespace(mod, exp->ns)) { - warn("module %s uses symbol %s from namespace %s, " - "but does not import it.\n", - basename, exp->name, exp->ns); + if (exp->ns) { + add_namespace(&mod->required_namespaces, exp->ns); + + if (!write_ns_deps && + !module_imports_namespace(mod, exp->ns)) { + warn("module %s uses symbol %s from namespace " + "%s, but does not import it.\n", + basename, exp->name, exp->ns); + } } if (!mod->gpl_compatible) @@ -2457,6 +2464,38 @@ static void write_dump(const char *fname) free(buf.p); } +static void write_ns_deps_files(void) +{ + struct module *mod; + struct namespace_list *ns; + struct buffer ns_deps_buf = { }; + + for (mod = modules; mod; mod = mod->next) { + char fname[PATH_MAX]; + const char *basename; + + if (mod->skip) + continue; + + ns_deps_buf.pos = 0; + + for (ns = mod->required_namespaces; ns; ns = ns->next) + buf_printf(&ns_deps_buf, "%s\n", ns->namespace); + + if (ns_deps_buf.pos == 0) + continue; + + basename = strrchr(mod->name, '/'); + if (basename) + basename++; + else + basename = mod->name; + + sprintf(fname, ".tmp_versions/%s.ns_deps", basename); + write_if_changed(&ns_deps_buf, fname); + } +} + struct ext_sym_list { struct ext_sym_list *next; const char *file; @@ -2473,7 +2512,7 @@ int main(int argc, char **argv) struct ext_sym_list *extsym_iter; struct ext_sym_list *extsym_start = NULL; - while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:E")) != -1) { + while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:Ed")) != -1) { switch (opt) { case 'i': kernel_read = optarg; @@ -2517,6 +2556,9 @@ int main(int argc, char **argv) case 'E': sec_mismatch_fatal = 1; break; + case 'd': + write_ns_deps = 1; + break; default: exit(1); } @@ -2545,6 +2587,12 @@ int main(int argc, char **argv) check_exports(mod); } + if (write_ns_deps) { + /* Just write namespace dependencies and exit */ + write_ns_deps_files(); + return 0; + } + err = 0; for (mod = modules; mod; mod = mod->next) { diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h index 9626bf3e7424..92a926d375d2 100644 --- a/scripts/mod/modpost.h +++ b/scripts/mod/modpost.h @@ -126,6 +126,8 @@ struct module { struct buffer dev_table_buf; char srcversion[25]; int is_dot_o; + // Required namespace dependencies + struct namespace_list *required_namespaces; // Actual imported namespaces struct namespace_list *imported_namespaces; }; -- 2.18.0.203.gfac676dfb9-goog From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-f66.google.com ([209.85.208.66]:34964 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731128AbeGPMsv (ORCPT ); Mon, 16 Jul 2018 08:48:51 -0400 Received: by mail-ed1-f66.google.com with SMTP id b10-v6so29800479edi.2 for ; Mon, 16 Jul 2018 05:21:38 -0700 (PDT) From: Martijn Coenen Subject: [PATCH 4/6] modpost: add support for generating namespace dependencies. Date: Mon, 16 Jul 2018 14:21:23 +0200 Message-ID: <20180716122125.175792-5-maco@android.com> In-Reply-To: <20180716122125.175792-1-maco@android.com> References: <20180716122125.175792-1-maco@android.com> Sender: linux-arch-owner@vger.kernel.org List-ID: To: linux-kernel@vger.kernel.org Cc: Martijn Coenen , Masahiro Yamada , Michal Marek , Geert Uytterhoeven , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, Alan Stern , Greg Kroah-Hartman , Oliver Neukum , Arnd Bergmann , Jessica Yu , Stephen Boyd , Philippe Ombredanne , Kate Stewart , Sam Ravnborg , linux-kbuild@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-usb@vger.kernel.org, usb-storage@lists.one-eyed-alien.net, linux-scsi@vger.kernel.org, linux-arch@vger.kernel.org, maco@google.com, sspatil@google.com, malchev@google.com, joelaf@google.com Message-ID: <20180716122123.8J9xFMJP49Zn6p242FAcZ8YhxH8eaMKjV4K8NnXhyr8@z> This patch adds an option to modpost to generate a .ns_deps file per module, containing the namespace depedencies for that module. This file can subsequently be used by other tools to automatically add newly introduced namespaces to the modules that require them, saving a lot of manual work. Signed-off-by: Martijn Coenen --- scripts/mod/modpost.c | 58 +++++++++++++++++++++++++++++++++++++++---- scripts/mod/modpost.h | 2 ++ 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index a56a8461a96a..be33d60d5527 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -39,6 +39,8 @@ static int sec_mismatch_verbose = 1; static int sec_mismatch_fatal = 0; /* ignore missing files */ static int ignore_missing_files; +/* Write namespace dependencies */ +static int write_ns_deps; enum export { export_plain, export_unused, export_gpl, @@ -2151,10 +2153,15 @@ static void check_exports(struct module *mod) else basename = mod->name; - if (exp->ns && !module_imports_namespace(mod, exp->ns)) { - warn("module %s uses symbol %s from namespace %s, " - "but does not import it.\n", - basename, exp->name, exp->ns); + if (exp->ns) { + add_namespace(&mod->required_namespaces, exp->ns); + + if (!write_ns_deps && + !module_imports_namespace(mod, exp->ns)) { + warn("module %s uses symbol %s from namespace " + "%s, but does not import it.\n", + basename, exp->name, exp->ns); + } } if (!mod->gpl_compatible) @@ -2457,6 +2464,38 @@ static void write_dump(const char *fname) free(buf.p); } +static void write_ns_deps_files(void) +{ + struct module *mod; + struct namespace_list *ns; + struct buffer ns_deps_buf = { }; + + for (mod = modules; mod; mod = mod->next) { + char fname[PATH_MAX]; + const char *basename; + + if (mod->skip) + continue; + + ns_deps_buf.pos = 0; + + for (ns = mod->required_namespaces; ns; ns = ns->next) + buf_printf(&ns_deps_buf, "%s\n", ns->namespace); + + if (ns_deps_buf.pos == 0) + continue; + + basename = strrchr(mod->name, '/'); + if (basename) + basename++; + else + basename = mod->name; + + sprintf(fname, ".tmp_versions/%s.ns_deps", basename); + write_if_changed(&ns_deps_buf, fname); + } +} + struct ext_sym_list { struct ext_sym_list *next; const char *file; @@ -2473,7 +2512,7 @@ int main(int argc, char **argv) struct ext_sym_list *extsym_iter; struct ext_sym_list *extsym_start = NULL; - while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:E")) != -1) { + while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:Ed")) != -1) { switch (opt) { case 'i': kernel_read = optarg; @@ -2517,6 +2556,9 @@ int main(int argc, char **argv) case 'E': sec_mismatch_fatal = 1; break; + case 'd': + write_ns_deps = 1; + break; default: exit(1); } @@ -2545,6 +2587,12 @@ int main(int argc, char **argv) check_exports(mod); } + if (write_ns_deps) { + /* Just write namespace dependencies and exit */ + write_ns_deps_files(); + return 0; + } + err = 0; for (mod = modules; mod; mod = mod->next) { diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h index 9626bf3e7424..92a926d375d2 100644 --- a/scripts/mod/modpost.h +++ b/scripts/mod/modpost.h @@ -126,6 +126,8 @@ struct module { struct buffer dev_table_buf; char srcversion[25]; int is_dot_o; + // Required namespace dependencies + struct namespace_list *required_namespaces; // Actual imported namespaces struct namespace_list *imported_namespaces; }; -- 2.18.0.203.gfac676dfb9-goog From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [4/6] modpost: add support for generating namespace dependencies. From: Martijn Coenen Message-Id: <20180716122125.175792-5-maco@android.com> Date: Mon, 16 Jul 2018 14:21:23 +0200 To: linux-kernel@vger.kernel.org Cc: Martijn Coenen , Masahiro Yamada , Michal Marek , Geert Uytterhoeven , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, Alan Stern , Greg Kroah-Hartman , Oliver Neukum , Arnd Bergmann , Jessica Yu , Stephen Boyd , Philippe Ombredanne , Kate Stewart , Sam Ravnborg , linux-kbuild@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-usb@vger.kernel.org, usb-storage@lists.one-eyed-alien.net, linux-scsi@vger.kernel.org, linux-arch@vger.kernel.org, maco@google.com, sspatil@google.com, malchev@google.com, joelaf@google.com List-ID: VGhpcyBwYXRjaCBhZGRzIGFuIG9wdGlvbiB0byBtb2Rwb3N0IHRvIGdlbmVyYXRlIGEgLm5zX2Rl cHMgZmlsZSBwZXIKbW9kdWxlLCBjb250YWluaW5nIHRoZSBuYW1lc3BhY2UgZGVwZWRlbmNpZXMg Zm9yIHRoYXQgbW9kdWxlLgoKVGhpcyBmaWxlIGNhbiBzdWJzZXF1ZW50bHkgYmUgdXNlZCBieSBv dGhlciB0b29scyB0byBhdXRvbWF0aWNhbGx5IGFkZApuZXdseSBpbnRyb2R1Y2VkIG5hbWVzcGFj ZXMgdG8gdGhlIG1vZHVsZXMgdGhhdCByZXF1aXJlIHRoZW0sIHNhdmluZyBhCmxvdCBvZiBtYW51 YWwgd29yay4KClNpZ25lZC1vZmYtYnk6IE1hcnRpam4gQ29lbmVuIDxtYWNvQGFuZHJvaWQuY29t PgotLS0KIHNjcmlwdHMvbW9kL21vZHBvc3QuYyB8IDU4ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0KIHNjcmlwdHMvbW9kL21vZHBvc3QuaCB8ICAyICsrCiAyIGZp bGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCmluZGV4IGE1 NmE4NDYxYTk2YS4uYmUzM2Q2MGQ1NTI3IDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0 LmMKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCkBAIC0zOSw2ICszOSw4IEBAIHN0YXRpYyBp bnQgc2VjX21pc21hdGNoX3ZlcmJvc2UgPSAxOwogc3RhdGljIGludCBzZWNfbWlzbWF0Y2hfZmF0 YWwgPSAwOwogLyogaWdub3JlIG1pc3NpbmcgZmlsZXMgKi8KIHN0YXRpYyBpbnQgaWdub3JlX21p c3NpbmdfZmlsZXM7CisvKiBXcml0ZSBuYW1lc3BhY2UgZGVwZW5kZW5jaWVzICovCitzdGF0aWMg aW50IHdyaXRlX25zX2RlcHM7CiAKIGVudW0gZXhwb3J0IHsKIAlleHBvcnRfcGxhaW4sICAgICAg ZXhwb3J0X3VudXNlZCwgICAgIGV4cG9ydF9ncGwsCkBAIC0yMTUxLDEwICsyMTUzLDE1IEBAIHN0 YXRpYyB2b2lkIGNoZWNrX2V4cG9ydHMoc3RydWN0IG1vZHVsZSAqbW9kKQogCQllbHNlCiAJCQli YXNlbmFtZSA9IG1vZC0+bmFtZTsKIAotCQlpZiAoZXhwLT5ucyAmJiAhbW9kdWxlX2ltcG9ydHNf bmFtZXNwYWNlKG1vZCwgZXhwLT5ucykpIHsKLQkJCXdhcm4oIm1vZHVsZSAlcyB1c2VzIHN5bWJv bCAlcyBmcm9tIG5hbWVzcGFjZSAlcywgIgotCQkJICAgICAiYnV0IGRvZXMgbm90IGltcG9ydCBp dC5cbiIsCi0JCQkgICAgIGJhc2VuYW1lLCBleHAtPm5hbWUsIGV4cC0+bnMpOworCQlpZiAoZXhw LT5ucykgeworCQkJYWRkX25hbWVzcGFjZSgmbW9kLT5yZXF1aXJlZF9uYW1lc3BhY2VzLCBleHAt Pm5zKTsKKworCQkJaWYgKCF3cml0ZV9uc19kZXBzICYmCisJCQkgICAgIW1vZHVsZV9pbXBvcnRz X25hbWVzcGFjZShtb2QsIGV4cC0+bnMpKSB7CisJCQkJd2FybigibW9kdWxlICVzIHVzZXMgc3lt Ym9sICVzIGZyb20gbmFtZXNwYWNlICIKKwkJCQkgICAgICIlcywgYnV0IGRvZXMgbm90IGltcG9y dCBpdC5cbiIsCisJCQkJICAgICBiYXNlbmFtZSwgZXhwLT5uYW1lLCBleHAtPm5zKTsKKwkJCX0K IAkJfQogCiAJCWlmICghbW9kLT5ncGxfY29tcGF0aWJsZSkKQEAgLTI0NTcsNiArMjQ2NCwzOCBA QCBzdGF0aWMgdm9pZCB3cml0ZV9kdW1wKGNvbnN0IGNoYXIgKmZuYW1lKQogCWZyZWUoYnVmLnAp OwogfQogCitzdGF0aWMgdm9pZCB3cml0ZV9uc19kZXBzX2ZpbGVzKHZvaWQpCit7CisJc3RydWN0 IG1vZHVsZSAqbW9kOworCXN0cnVjdCBuYW1lc3BhY2VfbGlzdCAqbnM7CisJc3RydWN0IGJ1ZmZl ciBuc19kZXBzX2J1ZiA9IHsgfTsKKworCWZvciAobW9kID0gbW9kdWxlczsgbW9kOyBtb2QgPSBt b2QtPm5leHQpIHsKKwkJY2hhciBmbmFtZVtQQVRIX01BWF07CisJCWNvbnN0IGNoYXIgKmJhc2Vu YW1lOworCisJCWlmIChtb2QtPnNraXApCisJCQljb250aW51ZTsKKworCQluc19kZXBzX2J1Zi5w b3MgPSAwOworCisJCWZvciAobnMgPSBtb2QtPnJlcXVpcmVkX25hbWVzcGFjZXM7IG5zOyBucyA9 IG5zLT5uZXh0KQorCQkJYnVmX3ByaW50ZigmbnNfZGVwc19idWYsICIlc1xuIiwgbnMtPm5hbWVz cGFjZSk7CisKKwkJaWYgKG5zX2RlcHNfYnVmLnBvcyA9PSAwKQorCQkJY29udGludWU7CisKKwkJ YmFzZW5hbWUgPSBzdHJyY2hyKG1vZC0+bmFtZSwgJy8nKTsKKwkJaWYgKGJhc2VuYW1lKQorCQkJ YmFzZW5hbWUrKzsKKwkJZWxzZQorCQkJYmFzZW5hbWUgPSBtb2QtPm5hbWU7CisKKwkJc3ByaW50 ZihmbmFtZSwgIi50bXBfdmVyc2lvbnMvJXMubnNfZGVwcyIsIGJhc2VuYW1lKTsKKwkJd3JpdGVf aWZfY2hhbmdlZCgmbnNfZGVwc19idWYsIGZuYW1lKTsKKwl9Cit9CisKIHN0cnVjdCBleHRfc3lt X2xpc3QgewogCXN0cnVjdCBleHRfc3ltX2xpc3QgKm5leHQ7CiAJY29uc3QgY2hhciAqZmlsZTsK QEAgLTI0NzMsNyArMjUxMiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlz dHJ1Y3QgZXh0X3N5bV9saXN0ICpleHRzeW1faXRlcjsKIAlzdHJ1Y3QgZXh0X3N5bV9saXN0ICpl eHRzeW1fc3RhcnQgPSBOVUxMOwogCi0Jd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwg Imk6STplOm1uc1NUOm86YXdNOks6RSIpKSAhPSAtMSkgeworCXdoaWxlICgob3B0ID0gZ2V0b3B0 KGFyZ2MsIGFyZ3YsICJpOkk6ZTptbnNTVDpvOmF3TTpLOkVkIikpICE9IC0xKSB7CiAJCXN3aXRj aCAob3B0KSB7CiAJCWNhc2UgJ2knOgogCQkJa2VybmVsX3JlYWQgPSBvcHRhcmc7CkBAIC0yNTE3 LDYgKzI1NTYsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWNhc2UgJ0Un OgogCQkJc2VjX21pc21hdGNoX2ZhdGFsID0gMTsKIAkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJ CXdyaXRlX25zX2RlcHMgPSAxOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlleGl0KDEpOwog CQl9CkBAIC0yNTQ1LDYgKzI1ODcsMTIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQljaGVja19leHBvcnRzKG1vZCk7CiAJfQogCisJaWYgKHdyaXRlX25zX2RlcHMpIHsKKwkJ LyogSnVzdCB3cml0ZSBuYW1lc3BhY2UgZGVwZW5kZW5jaWVzIGFuZCBleGl0ICovCisJCXdyaXRl X25zX2RlcHNfZmlsZXMoKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJZXJyID0gMDsKIAogCWZvciAo bW9kID0gbW9kdWxlczsgbW9kOyBtb2QgPSBtb2QtPm5leHQpIHsKZGlmZiAtLWdpdCBhL3Njcmlw dHMvbW9kL21vZHBvc3QuaCBiL3NjcmlwdHMvbW9kL21vZHBvc3QuaAppbmRleCA5NjI2YmYzZTc0 MjQuLjkyYTkyNmQzNzVkMiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5oCisrKyBi L3NjcmlwdHMvbW9kL21vZHBvc3QuaApAQCAtMTI2LDYgKzEyNiw4IEBAIHN0cnVjdCBtb2R1bGUg ewogCXN0cnVjdCBidWZmZXIgZGV2X3RhYmxlX2J1ZjsKIAljaGFyCSAgICAgc3JjdmVyc2lvblsy NV07CiAJaW50IGlzX2RvdF9vOworCS8vIFJlcXVpcmVkIG5hbWVzcGFjZSBkZXBlbmRlbmNpZXMK KwlzdHJ1Y3QgbmFtZXNwYWNlX2xpc3QgKnJlcXVpcmVkX25hbWVzcGFjZXM7CiAJLy8gQWN0dWFs IGltcG9ydGVkIG5hbWVzcGFjZXMKIAlzdHJ1Y3QgbmFtZXNwYWNlX2xpc3QgKmltcG9ydGVkX25h bWVzcGFjZXM7CiB9Owo=