LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH 1/4] modpost: pass struct elf_info pointer to get_modinfo()
@ 2018-05-09 9:50 Masahiro Yamada
2018-05-09 9:50 ` [PATCH 2/4] modpost: use strstarts() helper more widely Masahiro Yamada
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Masahiro Yamada @ 2018-05-09 9:50 UTC (permalink / raw)
To: linux-kbuild; +Cc: Masahiro Yamada, Michal Marek, linux-kernel
get_(next_)modinfo takes a pointer and length pair of the .modinfo
section. Instead, pass struct elf_info pointer to reduce the number
of function arguments.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
---
scripts/mod/modpost.c | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index bc71925..37a6a0b4 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -724,16 +724,17 @@ static char *next_string(char *string, unsigned long *secsize)
return string;
}
-static char *get_next_modinfo(void *modinfo, unsigned long modinfo_len,
- const char *tag, char *info)
+static char *get_next_modinfo(struct elf_info *info, const char *tag,
+ char *prev)
{
char *p;
unsigned int taglen = strlen(tag);
- unsigned long size = modinfo_len;
+ char *modinfo = info->modinfo;
+ unsigned long size = info->modinfo_len;
- if (info) {
- size -= info - (char *)modinfo;
- modinfo = next_string(info, &size);
+ if (prev) {
+ size -= prev - modinfo;
+ modinfo = next_string(prev, &size);
}
for (p = modinfo; p; p = next_string(p, &size)) {
@@ -743,11 +744,10 @@ static char *get_next_modinfo(void *modinfo, unsigned long modinfo_len,
return NULL;
}
-static char *get_modinfo(void *modinfo, unsigned long modinfo_len,
- const char *tag)
+static char *get_modinfo(struct elf_info *info, const char *tag)
{
- return get_next_modinfo(modinfo, modinfo_len, tag, NULL);
+ return get_next_modinfo(info, tag, NULL);
}
/**
@@ -1951,7 +1951,7 @@ static void read_symbols(char *modname)
mod->skip = 1;
}
- license = get_modinfo(info.modinfo, info.modinfo_len, "license");
+ license = get_modinfo(&info, "license");
if (!license && !is_vmlinux(modname))
warn("modpost: missing MODULE_LICENSE() in %s\n"
"see include/linux/module.h for "
@@ -1963,8 +1963,7 @@ static void read_symbols(char *modname)
mod->gpl_compatible = 0;
break;
}
- license = get_next_modinfo(info.modinfo, info.modinfo_len,
- "license", license);
+ license = get_next_modinfo(&info, "license", license);
}
for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
@@ -1977,7 +1976,7 @@ static void read_symbols(char *modname)
(is_vmlinux(modname) && vmlinux_section_warnings))
check_sec_ref(mod, modname, &info);
- version = get_modinfo(info.modinfo, info.modinfo_len, "version");
+ version = get_modinfo(&info, "version");
if (version)
maybe_frob_rcs_version(modname, version, info.modinfo,
version - (char *)info.hdr);
--
2.7.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/4] modpost: use strstarts() helper more widely
2018-05-09 9:50 [PATCH 1/4] modpost: pass struct elf_info pointer to get_modinfo() Masahiro Yamada
@ 2018-05-09 9:50 ` Masahiro Yamada
2018-05-09 9:50 ` [PATCH 3/4] modpost: remove redundant is_vmlinux() test Masahiro Yamada
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Masahiro Yamada @ 2018-05-09 9:50 UTC (permalink / raw)
To: linux-kbuild; +Cc: Masahiro Yamada, Michal Marek, linux-kernel
Currently, strstarts() is only used in export_from_secname().
Use it more widely to improve the code readability.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
---
scripts/mod/modpost.c | 39 ++++++++++++++++++---------------------
1 file changed, 18 insertions(+), 21 deletions(-)
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 37a6a0b4..8606b6c 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -596,19 +596,19 @@ static int ignore_undef_symbol(struct elf_info *info, const char *symname)
return 1;
if (info->hdr->e_machine == EM_PPC)
/* Special register function linked on all modules during final link of .ko */
- if (strncmp(symname, "_restgpr_", sizeof("_restgpr_") - 1) == 0 ||
- strncmp(symname, "_savegpr_", sizeof("_savegpr_") - 1) == 0 ||
- strncmp(symname, "_rest32gpr_", sizeof("_rest32gpr_") - 1) == 0 ||
- strncmp(symname, "_save32gpr_", sizeof("_save32gpr_") - 1) == 0 ||
- strncmp(symname, "_restvr_", sizeof("_restvr_") - 1) == 0 ||
- strncmp(symname, "_savevr_", sizeof("_savevr_") - 1) == 0)
+ if (strstarts(symname, "_restgpr_") ||
+ strstarts(symname, "_savegpr_") ||
+ strstarts(symname, "_rest32gpr_") ||
+ strstarts(symname, "_save32gpr_") ||
+ strstarts(symname, "_restvr_") ||
+ strstarts(symname, "_savevr_"))
return 1;
if (info->hdr->e_machine == EM_PPC64)
/* Special register function linked on all modules during final link of .ko */
- if (strncmp(symname, "_restgpr0_", sizeof("_restgpr0_") - 1) == 0 ||
- strncmp(symname, "_savegpr0_", sizeof("_savegpr0_") - 1) == 0 ||
- strncmp(symname, "_restvr_", sizeof("_restvr_") - 1) == 0 ||
- strncmp(symname, "_savevr_", sizeof("_savevr_") - 1) == 0 ||
+ if (strstarts(symname, "_restgpr0_") ||
+ strstarts(symname, "_savegpr0_") ||
+ strstarts(symname, "_restvr_") ||
+ strstarts(symname, "_savevr_") ||
strcmp(symname, ".TOC.") == 0)
return 1;
/* Do not ignore this symbol */
@@ -623,13 +623,13 @@ static void handle_modversions(struct module *mod, struct elf_info *info,
bool is_crc = false;
if ((!is_vmlinux(mod->name) || mod->is_dot_o) &&
- strncmp(symname, "__ksymtab", 9) == 0)
+ strstarts(symname, "__ksymtab"))
export = export_from_secname(info, get_secindex(info, sym));
else
export = export_from_sec(info, get_secindex(info, sym));
/* CRC'd symbol */
- if (strncmp(symname, "__crc_", strlen("__crc_")) == 0) {
+ if (strstarts(symname, "__crc_")) {
is_crc = true;
crc = (unsigned int) sym->st_value;
if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS) {
@@ -648,7 +648,7 @@ static void handle_modversions(struct module *mod, struct elf_info *info,
switch (sym->st_shndx) {
case SHN_COMMON:
- if (!strncmp(symname, "__gnu_lto_", sizeof("__gnu_lto_")-1)) {
+ if (strstarts(symname, "__gnu_lto_")) {
/* Should warn here, but modpost runs before the linker */
} else
warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name);
@@ -691,7 +691,7 @@ static void handle_modversions(struct module *mod, struct elf_info *info,
break;
default:
/* All exported symbols */
- if (strncmp(symname, "__ksymtab_", strlen("__ksymtab_")) == 0) {
+ if (strstarts(symname, "__ksymtab_")) {
sym_add_exported(symname + strlen("__ksymtab_"), mod,
export);
}
@@ -1171,13 +1171,13 @@ static int secref_whitelist(const struct sectioncheck *mismatch,
/* Check for pattern 1 */
if (match(tosec, init_data_sections) &&
match(fromsec, data_sections) &&
- (strncmp(fromsym, "__param", strlen("__param")) == 0))
+ strstarts(fromsym, "__param"))
return 0;
/* Check for pattern 1a */
if (strcmp(tosec, ".init.text") == 0 &&
match(fromsec, data_sections) &&
- (strncmp(fromsym, "__param_ops_", strlen("__param_ops_")) == 0))
+ strstarts(fromsym, "__param_ops_"))
return 0;
/* Check for pattern 2 */
@@ -1532,8 +1532,7 @@ static void default_mismatch_handler(const char *modname, struct elf_info *elf,
from = find_elf_symbol2(elf, r->r_offset, fromsec);
fromsym = sym_name(elf, from);
- if (!strncmp(fromsym, "reference___initcall",
- sizeof("reference___initcall")-1))
+ if (strstarts(fromsym, "reference___initcall"))
return;
tosec = sec_name(elf, get_secindex(elf, sym));
@@ -2163,9 +2162,7 @@ static void add_retpoline(struct buffer *b)
static void add_staging_flag(struct buffer *b, const char *name)
{
- static const char *staging_dir = "drivers/staging";
-
- if (strncmp(staging_dir, name, strlen(staging_dir)) == 0)
+ if (strstarts(name, "drivers/staging"))
buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
}
--
2.7.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/4] modpost: remove redundant is_vmlinux() test
2018-05-09 9:50 [PATCH 1/4] modpost: pass struct elf_info pointer to get_modinfo() Masahiro Yamada
2018-05-09 9:50 ` [PATCH 2/4] modpost: use strstarts() helper more widely Masahiro Yamada
@ 2018-05-09 9:50 ` Masahiro Yamada
2018-05-09 9:50 ` [PATCH 4/4] modpost: constify *modname function argument where possible Masahiro Yamada
2018-05-14 0:12 ` [PATCH 1/4] modpost: pass struct elf_info pointer to get_modinfo() Masahiro Yamada
3 siblings, 0 replies; 5+ messages in thread
From: Masahiro Yamada @ 2018-05-09 9:50 UTC (permalink / raw)
To: linux-kbuild; +Cc: Masahiro Yamada, Michal Marek, linux-kernel
The second test of is_vmlinux() is redundant.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
---
scripts/mod/modpost.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 8606b6c..9e70a6a 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -1971,8 +1971,7 @@ static void read_symbols(char *modname)
handle_modversions(mod, &info, sym, symname);
handle_moddevtable(mod, &info, sym, symname);
}
- if (!is_vmlinux(modname) ||
- (is_vmlinux(modname) && vmlinux_section_warnings))
+ if (!is_vmlinux(modname) || vmlinux_section_warnings)
check_sec_ref(mod, modname, &info);
version = get_modinfo(&info, "version");
--
2.7.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 4/4] modpost: constify *modname function argument where possible
2018-05-09 9:50 [PATCH 1/4] modpost: pass struct elf_info pointer to get_modinfo() Masahiro Yamada
2018-05-09 9:50 ` [PATCH 2/4] modpost: use strstarts() helper more widely Masahiro Yamada
2018-05-09 9:50 ` [PATCH 3/4] modpost: remove redundant is_vmlinux() test Masahiro Yamada
@ 2018-05-09 9:50 ` Masahiro Yamada
2018-05-14 0:12 ` [PATCH 1/4] modpost: pass struct elf_info pointer to get_modinfo() Masahiro Yamada
3 siblings, 0 replies; 5+ messages in thread
From: Masahiro Yamada @ 2018-05-09 9:50 UTC (permalink / raw)
To: linux-kbuild; +Cc: Masahiro Yamada, Michal Marek, linux-kernel
Neither find_module() nor read_symbols() does change *modname.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
---
scripts/mod/modpost.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 9e70a6a..1663fb1 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -121,7 +121,7 @@ void *do_nofail(void *ptr, const char *expr)
/* A list of all modules we processed */
static struct module *modules;
-static struct module *find_module(char *modname)
+static struct module *find_module(const char *modname)
{
struct module *mod;
@@ -1929,7 +1929,7 @@ static char *remove_dot(char *s)
return s;
}
-static void read_symbols(char *modname)
+static void read_symbols(const char *modname)
{
const char *symname;
char *version;
--
2.7.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/4] modpost: pass struct elf_info pointer to get_modinfo()
2018-05-09 9:50 [PATCH 1/4] modpost: pass struct elf_info pointer to get_modinfo() Masahiro Yamada
` (2 preceding siblings ...)
2018-05-09 9:50 ` [PATCH 4/4] modpost: constify *modname function argument where possible Masahiro Yamada
@ 2018-05-14 0:12 ` Masahiro Yamada
3 siblings, 0 replies; 5+ messages in thread
From: Masahiro Yamada @ 2018-05-14 0:12 UTC (permalink / raw)
To: Linux Kbuild mailing list
Cc: Masahiro Yamada, Michal Marek, Linux Kernel Mailing List
2018-05-09 18:50 GMT+09:00 Masahiro Yamada <yamada.masahiro@socionext.com>:
> get_(next_)modinfo takes a pointer and length pair of the .modinfo
> section. Instead, pass struct elf_info pointer to reduce the number
> of function arguments.
>
> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> ---
Series, applied to linux-kbuild.
> scripts/mod/modpost.c | 25 ++++++++++++-------------
> 1 file changed, 12 insertions(+), 13 deletions(-)
>
> diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
> index bc71925..37a6a0b4 100644
> --- a/scripts/mod/modpost.c
> +++ b/scripts/mod/modpost.c
> @@ -724,16 +724,17 @@ static char *next_string(char *string, unsigned long *secsize)
> return string;
> }
>
> -static char *get_next_modinfo(void *modinfo, unsigned long modinfo_len,
> - const char *tag, char *info)
> +static char *get_next_modinfo(struct elf_info *info, const char *tag,
> + char *prev)
> {
> char *p;
> unsigned int taglen = strlen(tag);
> - unsigned long size = modinfo_len;
> + char *modinfo = info->modinfo;
> + unsigned long size = info->modinfo_len;
>
> - if (info) {
> - size -= info - (char *)modinfo;
> - modinfo = next_string(info, &size);
> + if (prev) {
> + size -= prev - modinfo;
> + modinfo = next_string(prev, &size);
> }
>
> for (p = modinfo; p; p = next_string(p, &size)) {
> @@ -743,11 +744,10 @@ static char *get_next_modinfo(void *modinfo, unsigned long modinfo_len,
> return NULL;
> }
>
> -static char *get_modinfo(void *modinfo, unsigned long modinfo_len,
> - const char *tag)
> +static char *get_modinfo(struct elf_info *info, const char *tag)
>
> {
> - return get_next_modinfo(modinfo, modinfo_len, tag, NULL);
> + return get_next_modinfo(info, tag, NULL);
> }
>
> /**
> @@ -1951,7 +1951,7 @@ static void read_symbols(char *modname)
> mod->skip = 1;
> }
>
> - license = get_modinfo(info.modinfo, info.modinfo_len, "license");
> + license = get_modinfo(&info, "license");
> if (!license && !is_vmlinux(modname))
> warn("modpost: missing MODULE_LICENSE() in %s\n"
> "see include/linux/module.h for "
> @@ -1963,8 +1963,7 @@ static void read_symbols(char *modname)
> mod->gpl_compatible = 0;
> break;
> }
> - license = get_next_modinfo(info.modinfo, info.modinfo_len,
> - "license", license);
> + license = get_next_modinfo(&info, "license", license);
> }
>
> for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
> @@ -1977,7 +1976,7 @@ static void read_symbols(char *modname)
> (is_vmlinux(modname) && vmlinux_section_warnings))
> check_sec_ref(mod, modname, &info);
>
> - version = get_modinfo(info.modinfo, info.modinfo_len, "version");
> + version = get_modinfo(&info, "version");
> if (version)
> maybe_frob_rcs_version(modname, version, info.modinfo,
> version - (char *)info.hdr);
> --
> 2.7.4
>
--
Best Regards
Masahiro Yamada
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-05-14 0:12 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-09 9:50 [PATCH 1/4] modpost: pass struct elf_info pointer to get_modinfo() Masahiro Yamada
2018-05-09 9:50 ` [PATCH 2/4] modpost: use strstarts() helper more widely Masahiro Yamada
2018-05-09 9:50 ` [PATCH 3/4] modpost: remove redundant is_vmlinux() test Masahiro Yamada
2018-05-09 9:50 ` [PATCH 4/4] modpost: constify *modname function argument where possible Masahiro Yamada
2018-05-14 0:12 ` [PATCH 1/4] modpost: pass struct elf_info pointer to get_modinfo() Masahiro Yamada
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).