modpost: refactor namespace_from_kstrtabns() to not hard-code section name
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Thu, 14 Nov 2019 17:42:22 +0000 (02:42 +0900)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Sat, 23 Nov 2019 03:44:24 +0000 (12:44 +0900)
Currently, namespace_from_kstrtabns() relies on the fact that
namespace strings are recorded in the __ksymtab_strings section.
Actually, it is coded in include/linux/export.h, but modpost does
not need to hard-code the section name.

Elf_Sym::st_shndx holds the index of the relevant section. Using it is
a more portable way to get the namespace string.

Make namespace_from_kstrtabns() simply call sym_get_data(), and delete
the info->ksymtab_strings .

While I was here, I added more 'const' qualifiers to pointers.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
scripts/mod/modpost.c
scripts/mod/modpost.h

index cd885573daafbf8f1c5c0b9b36906343453509be..d9418c58a8c0ade00da7f517b1fb2d89595499d3 100644 (file)
@@ -356,10 +356,10 @@ static enum export export_from_sec(struct elf_info *elf, unsigned int sec)
                return export_unknown;
 }
 
-static const char *namespace_from_kstrtabns(struct elf_info *info,
-                                           Elf_Sym *kstrtabns)
+static const char *namespace_from_kstrtabns(const struct elf_info *info,
+                                           const Elf_Sym *sym)
 {
-       char *value = info->ksymtab_strings + kstrtabns->st_value;
+       const char *value = sym_get_data(info, sym);
        return value[0] ? value : NULL;
 }
 
@@ -601,10 +601,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, "__ksymtab_strings") == 0)
-                       info->ksymtab_strings = (void *)hdr +
-                                               sechdrs[i].sh_offset -
-                                               sechdrs[i].sh_addr;
 
                if (sechdrs[i].sh_type == SHT_SYMTAB) {
                        unsigned int sh_link_idx;
index fe6652535e4baeea04bca22025dd76bd532c1f1d..64a82d2d85f6e623380838f4ad2f5ec880f12bc3 100644 (file)
@@ -143,7 +143,6 @@ struct elf_info {
        Elf_Section  export_gpl_sec;
        Elf_Section  export_unused_gpl_sec;
        Elf_Section  export_gpl_future_sec;
-       char         *ksymtab_strings;
        char         *strtab;
        char         *modinfo;
        unsigned int modinfo_len;