diff options
author | Álvaro Fernández Rojas <noltari@gmail.com> | 2020-03-01 15:50:37 +0100 |
---|---|---|
committer | Álvaro Fernández Rojas <noltari@gmail.com> | 2020-03-01 15:52:36 +0100 |
commit | 6f9bc70dd584ed41dc1da31bf0342b3cf95ba5d9 (patch) | |
tree | 431918b73d6c7729c136f817871ac4fb4a8224ce /target/linux/generic/backport-5.4/030-modpost-add-a-helper-to-get-data-pointed-by-a-symbol.patch | |
parent | 4bde37a2ddaaf28051ca77abb901b8c1eb20a82c (diff) | |
download | upstream-6f9bc70dd584ed41dc1da31bf0342b3cf95ba5d9.tar.gz upstream-6f9bc70dd584ed41dc1da31bf0342b3cf95ba5d9.tar.bz2 upstream-6f9bc70dd584ed41dc1da31bf0342b3cf95ba5d9.zip |
linux-5.4: backport modpost upstream patches
Fixes modpost Segmentation Fault with bcm2708 and bcm2709:
MODPOST vmlinux.o
Segmentation fault
make[6]: *** [scripts/Makefile.modpost:66: __modpost] Error 139
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Diffstat (limited to 'target/linux/generic/backport-5.4/030-modpost-add-a-helper-to-get-data-pointed-by-a-symbol.patch')
-rw-r--r-- | target/linux/generic/backport-5.4/030-modpost-add-a-helper-to-get-data-pointed-by-a-symbol.patch | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/target/linux/generic/backport-5.4/030-modpost-add-a-helper-to-get-data-pointed-by-a-symbol.patch b/target/linux/generic/backport-5.4/030-modpost-add-a-helper-to-get-data-pointed-by-a-symbol.patch new file mode 100644 index 0000000000..cf88c0c69f --- /dev/null +++ b/target/linux/generic/backport-5.4/030-modpost-add-a-helper-to-get-data-pointed-by-a-symbol.patch @@ -0,0 +1,53 @@ +From afa0459daa7b08c7b2c879705b69d39b734a11d0 Mon Sep 17 00:00:00 2001 +From: Masahiro Yamada <yamada.masahiro@socionext.com> +Date: Fri, 15 Nov 2019 02:42:21 +0900 +Subject: [PATCH] modpost: add a helper to get data pointed by a symbol + +When CONFIG_MODULE_REL_CRCS is enabled, the value of __crc_* is not +an absolute value, but the address to the CRC data embedded in the +.rodata section. + +Getting the data pointed by the symbol value is somewhat complex. +Split it out into a new helper, sym_get_data(). + +I will reuse it to refactor namespace_from_kstrtabns() in the next +commit. + +Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> +--- + scripts/mod/modpost.c | 17 +++++++++++++---- + 1 file changed, 13 insertions(+), 4 deletions(-) + +--- a/scripts/mod/modpost.c ++++ b/scripts/mod/modpost.c +@@ -312,6 +312,18 @@ static const char *sec_name(struct elf_i + return sech_name(elf, &elf->sechdrs[secindex]); + } + ++static void *sym_get_data(const struct elf_info *info, const Elf_Sym *sym) ++{ ++ Elf_Shdr *sechdr = &info->sechdrs[sym->st_shndx]; ++ unsigned long offset; ++ ++ offset = sym->st_value; ++ if (info->hdr->e_type != ET_REL) ++ offset -= sechdr->sh_addr; ++ ++ return (void *)info->hdr + sechdr->sh_offset + offset; ++} ++ + #define strstarts(str, prefix) (strncmp(str, prefix, strlen(prefix)) == 0) + + static enum export export_from_secname(struct elf_info *elf, unsigned int sec) +@@ -701,10 +713,7 @@ static void handle_modversions(struct mo + unsigned int *crcp; + + /* symbol points to the CRC in the ELF object */ +- crcp = (void *)info->hdr + sym->st_value + +- info->sechdrs[sym->st_shndx].sh_offset - +- (info->hdr->e_type != ET_REL ? +- info->sechdrs[sym->st_shndx].sh_addr : 0); ++ crcp = sym_get_data(info, sym); + crc = TO_NATIVE(*crcp); + } + sym_update_crc(symname + strlen("__crc_"), mod, crc, |