Re: [PATCH] Kbuild: clear marker out of modpost

From: AmÃrico Wang
Date: Mon Nov 16 2009 - 01:31:21 EST


On Mon, Nov 16, 2009 at 1:49 PM, Wenji Huang <wenji.huang@xxxxxxxxxx> wrote:
> Remove the unnecessary functions and variables.
>
> Signed-off-by: Wenji Huang <wenji.huang@xxxxxxxxxx>

I am not sure about this removal, Ingo seems to have other
opinions, please check:

http://lkml.org/lkml/2009/9/18/92

Adding Ingo into Cc:.

Thanks.

> ---
> Âscripts/mod/modpost.c | Â164 -------------------------------------------------
> Âscripts/mod/modpost.h | Â Â3 -
> Â2 files changed, 0 insertions(+), 167 deletions(-)
>
> diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
> index 801a16a..204e3f0 100644
> --- a/scripts/mod/modpost.c
> +++ b/scripts/mod/modpost.c
> @@ -451,8 +451,6 @@ static int parse_elf(struct elf_info *info, const char *filename)
> Â Â Â Â Â Â Â Â Â Â Â Âinfo->export_unused_gpl_sec = i;
> Â Â Â Â Â Â Â Âelse if (strcmp(secname, "__ksymtab_gpl_future") == 0)
> Â Â Â Â Â Â Â Â Â Â Â Âinfo->export_gpl_future_sec = i;
> - Â Â Â Â Â Â Â else if (strcmp(secname, "__markers_strings") == 0)
> - Â Â Â Â Â Â Â Â Â Â Â info->markers_strings_sec = i;
>
> Â Â Â Â Â Â Â Âif (sechdrs[i].sh_type != SHT_SYMTAB)
> Â Â Â Â Â Â Â Â Â Â Â Âcontinue;
> @@ -1509,62 +1507,6 @@ static void check_sec_ref(struct module *mod, const char *modname,
> Â Â Â Â}
> Â}
>
> -static void get_markers(struct elf_info *info, struct module *mod)
> -{
> - Â Â Â const Elf_Shdr *sh = &info->sechdrs[info->markers_strings_sec];
> - Â Â Â const char *strings = (const char *) info->hdr + sh->sh_offset;
> - Â Â Â const Elf_Sym *sym, *first_sym, *last_sym;
> - Â Â Â size_t n;
> -
> - Â Â Â if (!info->markers_strings_sec)
> - Â Â Â Â Â Â Â return;
> -
> - Â Â Â /*
> - Â Â Â Â* First count the strings. ÂWe look for all the symbols defined
> - Â Â Â Â* in the __markers_strings section named __mstrtab_*. ÂFor
> - Â Â Â Â* these local names, the compiler puts a random .NNN suffix on,
> - Â Â Â Â* so the names don't correspond exactly.
> - Â Â Â Â*/
> - Â Â Â first_sym = last_sym = NULL;
> - Â Â Â n = 0;
> - Â Â Â for (sym = info->symtab_start; sym < info->symtab_stop; sym++)
> - Â Â Â Â Â Â Â if (ELF_ST_TYPE(sym->st_info) == STT_OBJECT &&
> - Â Â Â Â Â Â Â Â Â sym->st_shndx == info->markers_strings_sec &&
> - Â Â Â Â Â Â Â Â Â !strncmp(info->strtab + sym->st_name,
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â"__mstrtab_", sizeof "__mstrtab_" - 1)) {
> - Â Â Â Â Â Â Â Â Â Â Â if (first_sym == NULL)
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â first_sym = sym;
> - Â Â Â Â Â Â Â Â Â Â Â last_sym = sym;
> - Â Â Â Â Â Â Â Â Â Â Â ++n;
> - Â Â Â Â Â Â Â }
> -
> - Â Â Â if (n == 0)
> - Â Â Â Â Â Â Â return;
> -
> - Â Â Â /*
> - Â Â Â Â* Now collect each name and format into a line for the output.
> - Â Â Â Â* Lines look like:
> -    Â*   Âmarker_name   vmlinux marker %s format %d
> - Â Â Â Â* The format string after the second \t can use whitespace.
> - Â Â Â Â*/
> - Â Â Â mod->markers = NOFAIL(malloc(sizeof mod->markers[0] * n));
> - Â Â Â mod->nmarkers = n;
> -
> - Â Â Â n = 0;
> - Â Â Â for (sym = first_sym; sym <= last_sym; sym++)
> - Â Â Â Â Â Â Â if (ELF_ST_TYPE(sym->st_info) == STT_OBJECT &&
> - Â Â Â Â Â Â Â Â Â sym->st_shndx == info->markers_strings_sec &&
> - Â Â Â Â Â Â Â Â Â !strncmp(info->strtab + sym->st_name,
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â"__mstrtab_", sizeof "__mstrtab_" - 1)) {
> - Â Â Â Â Â Â Â Â Â Â Â const char *name = strings + sym->st_value;
> - Â Â Â Â Â Â Â Â Â Â Â const char *fmt = strchr(name, '\0') + 1;
> - Â Â Â Â Â Â Â Â Â Â Â char *line = NULL;
> - Â Â Â Â Â Â Â Â Â Â Â asprintf(&line, "%s\t%s\t%s\n", name, mod->name, fmt);
> - Â Â Â Â Â Â Â Â Â Â Â NOFAIL(line);
> - Â Â Â Â Â Â Â Â Â Â Â mod->markers[n++] = line;
> - Â Â Â Â Â Â Â }
> -}
> -
> Âstatic void read_symbols(char *modname)
> Â{
> Â Â Â Âconst char *symname;
> @@ -1620,8 +1562,6 @@ static void read_symbols(char *modname)
> Â Â Â Â Â Â Â Âget_src_version(modname, mod->srcversion,
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âsizeof(mod->srcversion)-1);
>
> - Â Â Â get_markers(&info, mod);
> -
> Â Â Â Âparse_elf_finish(&info);
>
> Â Â Â Â/* Our trick to get versioning for module struct etc. - it's
> @@ -1976,96 +1916,6 @@ static void write_dump(const char *fname)
> Â Â Â Âwrite_if_changed(&buf, fname);
> Â}
>
> -static void add_marker(struct module *mod, const char *name, const char *fmt)
> -{
> - Â Â Â char *line = NULL;
> - Â Â Â asprintf(&line, "%s\t%s\t%s\n", name, mod->name, fmt);
> - Â Â Â NOFAIL(line);
> -
> - Â Â Â mod->markers = NOFAIL(realloc(mod->markers, ((mod->nmarkers + 1) *
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âsizeof mod->markers[0])));
> - Â Â Â mod->markers[mod->nmarkers++] = line;
> -}
> -
> -static void read_markers(const char *fname)
> -{
> - Â Â Â unsigned long size, pos = 0;
> - Â Â Â void *file = grab_file(fname, &size);
> - Â Â Â char *line;
> -
> - Â Â Â if (!file) Â Â Â Â Â Â Â/* No old markers, silently ignore */
> - Â Â Â Â Â Â Â return;
> -
> - Â Â Â while ((line = get_next_line(&pos, file, size))) {
> - Â Â Â Â Â Â Â char *marker, *modname, *fmt;
> - Â Â Â Â Â Â Â struct module *mod;
> -
> - Â Â Â Â Â Â Â marker = line;
> - Â Â Â Â Â Â Â modname = strchr(marker, '\t');
> - Â Â Â Â Â Â Â if (!modname)
> - Â Â Â Â Â Â Â Â Â Â Â goto fail;
> - Â Â Â Â Â Â Â *modname++ = '\0';
> - Â Â Â Â Â Â Â fmt = strchr(modname, '\t');
> - Â Â Â Â Â Â Â if (!fmt)
> - Â Â Â Â Â Â Â Â Â Â Â goto fail;
> - Â Â Â Â Â Â Â *fmt++ = '\0';
> - Â Â Â Â Â Â Â if (*marker == '\0' || *modname == '\0')
> - Â Â Â Â Â Â Â Â Â Â Â goto fail;
> -
> - Â Â Â Â Â Â Â mod = find_module(modname);
> - Â Â Â Â Â Â Â if (!mod) {
> - Â Â Â Â Â Â Â Â Â Â Â mod = new_module(modname);
> - Â Â Â Â Â Â Â Â Â Â Â mod->skip = 1;
> - Â Â Â Â Â Â Â }
> - Â Â Â Â Â Â Â if (is_vmlinux(modname)) {
> - Â Â Â Â Â Â Â Â Â Â Â have_vmlinux = 1;
> - Â Â Â Â Â Â Â Â Â Â Â mod->skip = 0;
> - Â Â Â Â Â Â Â }
> -
> - Â Â Â Â Â Â Â if (!mod->skip)
> - Â Â Â Â Â Â Â Â Â Â Â add_marker(mod, marker, fmt);
> - Â Â Â }
> - Â Â Â release_file(file, size);
> - Â Â Â return;
> -fail:
> - Â Â Â fatal("parse error in markers list file\n");
> -}
> -
> -static int compare_strings(const void *a, const void *b)
> -{
> - Â Â Â return strcmp(*(const char **) a, *(const char **) b);
> -}
> -
> -static void write_markers(const char *fname)
> -{
> - Â Â Â struct buffer buf = { };
> - Â Â Â struct module *mod;
> - Â Â Â size_t i;
> -
> - Â Â Â for (mod = modules; mod; mod = mod->next)
> - Â Â Â Â Â Â Â if ((!external_module || !mod->skip) && mod->markers != NULL) {
> - Â Â Â Â Â Â Â Â Â Â Â /*
> - Â Â Â Â Â Â Â Â Â Â Â Â* Sort the strings so we can skip duplicates when
> - Â Â Â Â Â Â Â Â Â Â Â Â* we write them out.
> - Â Â Â Â Â Â Â Â Â Â Â Â*/
> - Â Â Â Â Â Â Â Â Â Â Â qsort(mod->markers, mod->nmarkers,
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â sizeof mod->markers[0], &compare_strings);
> - Â Â Â Â Â Â Â Â Â Â Â for (i = 0; i < mod->nmarkers; ++i) {
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â char *line = mod->markers[i];
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â buf_write(&buf, line, strlen(line));
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â while (i + 1 < mod->nmarkers &&
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â!strcmp(mod->markers[i],
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âmod->markers[i + 1]))
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â free(mod->markers[i++]);
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â free(mod->markers[i]);
> - Â Â Â Â Â Â Â Â Â Â Â }
> - Â Â Â Â Â Â Â Â Â Â Â free(mod->markers);
> - Â Â Â Â Â Â Â Â Â Â Â mod->markers = NULL;
> - Â Â Â Â Â Â Â }
> -
> - Â Â Â write_if_changed(&buf, fname);
> -}
> -
> Âstruct ext_sym_list {
> Â Â Â Âstruct ext_sym_list *next;
> Â Â Â Âconst char *file;
> @@ -2077,8 +1927,6 @@ int main(int argc, char **argv)
> Â Â Â Âstruct buffer buf = { };
> Â Â Â Âchar *kernel_read = NULL, *module_read = NULL;
> Â Â Â Âchar *dump_write = NULL;
> - Â Â Â char *markers_read = NULL;
> - Â Â Â char *markers_write = NULL;
> Â Â Â Âint opt;
> Â Â Â Âint err;
> Â Â Â Âstruct ext_sym_list *extsym_iter;
> @@ -2122,12 +1970,6 @@ int main(int argc, char **argv)
> Â Â Â Â Â Â Â Âcase 'w':
> Â Â Â Â Â Â Â Â Â Â Â Âwarn_unresolved = 1;
> Â Â Â Â Â Â Â Â Â Â Â Âbreak;
> - Â Â Â Â Â Â Â Â Â Â Â case 'M':
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â markers_write = optarg;
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â break;
> - Â Â Â Â Â Â Â Â Â Â Â case 'K':
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â markers_read = optarg;
> - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â break;
> Â Â Â Â Â Â Â Âdefault:
> Â Â Â Â Â Â Â Â Â Â Â Âexit(1);
> Â Â Â Â Â Â Â Â}
> @@ -2182,11 +2024,5 @@ int main(int argc, char **argv)
> Â Â Â Â Â Â Â Â Â Â "'make CONFIG_DEBUG_SECTION_MISMATCH=y'\n",
> Â Â Â Â Â Â Â Â Â Â sec_mismatch_count);
>
> - Â Â Â if (markers_read)
> - Â Â Â Â Â Â Â read_markers(markers_read);
> -
> - Â Â Â if (markers_write)
> - Â Â Â Â Â Â Â write_markers(markers_write);
> -
> Â Â Â Âreturn err;
> Â}
> diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h
> index 09f58e3..be987a4 100644
> --- a/scripts/mod/modpost.h
> +++ b/scripts/mod/modpost.h
> @@ -112,8 +112,6 @@ struct module {
> Â Â Â Âint has_init;
> Â Â Â Âint has_cleanup;
> Â Â Â Âstruct buffer dev_table_buf;
> - Â Â Â char **markers;
> - Â Â Â size_t nmarkers;
>    Âchar     srcversion[25];
> Â};
>
> @@ -128,7 +126,6 @@ struct elf_info {
> Â Â Â ÂElf_Section Âexport_gpl_sec;
> Â Â Â ÂElf_Section Âexport_unused_gpl_sec;
> Â Â Â ÂElf_Section Âexport_gpl_future_sec;
> - Â Â Â Elf_Section Âmarkers_strings_sec;
>    Âconst char  *strtab;
>    Âchar     *modinfo;
> Â Â Â Âunsigned int modinfo_len;
> --
> 1.5.6
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at Âhttp://vger.kernel.org/majordomo-info.html
> Please read the FAQ at Âhttp://www.tux.org/lkml/
>
èº{.nÇ+‰·Ÿ®‰­†+%ŠËlzwm…ébëæìr¸›zX§»®w¥Š{ayºÊÚë,j­¢f£¢·hš‹àz¹®w¥¢¸ ¢·¦j:+v‰¨ŠwèjØm¶Ÿÿ¾«‘êçzZ+ƒùšŽŠÝj"ú!¶iO•æ¬z·švØ^¶m§ÿðà nÆàþY&—