diff options
Diffstat (limited to 'scripts/mod/modpost.c')
| -rw-r--r-- | scripts/mod/modpost.c | 10 | 
1 files changed, 10 insertions, 0 deletions
| diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 29c89a6bad3d..4dedd0d3d3a7 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -621,6 +621,16 @@ static void handle_modversions(struct module *mod, struct elf_info *info,  	if (strncmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) {  		is_crc = true;  		crc = (unsigned int) sym->st_value; +		if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS) { +			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); +			crc = *crcp; +		}  		sym_update_crc(symname + strlen(CRC_PFX), mod, crc,  				export);  	} | 
