diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-02-03 10:30:27 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-02-03 10:30:27 -0800 | 
| commit | 2cb54ce9ee92ae627bc1cef8bea236905910a86d (patch) | |
| tree | 8cf38943b5acd64b25621d6eab72591c6a65ba1e /scripts/kallsyms.c | |
| parent | 29905b52fad0854351f57bab867647e4982285bf (diff) | |
| parent | 4b9eee96fcb361a5e16a8d2619825e8a048f81f7 (diff) | |
Merge branch 'modversions' (modversions fixes for powerpc from Ard)
Merge kcrctab entry fixes from Ard Biesheuvel:
 "This is a followup to [0] 'modversions: redefine kcrctab entries as
  relative CRC pointers', but since relative CRC pointers do not work in
  modules, and are actually only needed by powerpc with
  CONFIG_RELOCATABLE=y, I have made it a Kconfig selectable feature
  instead.
  First it introduces the MODULE_REL_CRCS Kconfig symbol, and adds the
  kbuild handling of it, i.e., modpost, genksyms and kallsyms.
  Then it switches all architectures to 32-bit CRC entries in kcrctab,
  where all architectures except powerpc with CONFIG_RELOCATABLE=y use
  absolute ELF symbol references as before"
[0] http://marc.info/?l=linux-arch&m=148493613415294&w=2
* emailed patches from Ard Biesheuvel:
  module: unify absolute krctab definitions for 32-bit and 64-bit
  modversions: treat symbol CRCs as 32 bit quantities
  kbuild: modversions: add infrastructure for emitting relative CRCs
Diffstat (limited to 'scripts/kallsyms.c')
| -rw-r--r-- | scripts/kallsyms.c | 12 | 
1 files changed, 12 insertions, 0 deletions
| diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c index 299b92ca1ae0..5d554419170b 100644 --- a/scripts/kallsyms.c +++ b/scripts/kallsyms.c @@ -219,6 +219,10 @@ static int symbol_valid(struct sym_entry *s)  		"_SDA2_BASE_",		/* ppc */  		NULL }; +	static char *special_prefixes[] = { +		"__crc_",		/* modversions */ +		NULL }; +  	static char *special_suffixes[] = {  		"_veneer",		/* arm */  		"_from_arm",		/* arm */ @@ -259,6 +263,14 @@ static int symbol_valid(struct sym_entry *s)  		if (strcmp(sym_name, special_symbols[i]) == 0)  			return 0; +	for (i = 0; special_prefixes[i]; i++) { +		int l = strlen(special_prefixes[i]); + +		if (l <= strlen(sym_name) && +		    strncmp(sym_name, special_prefixes[i], l) == 0) +			return 0; +	} +  	for (i = 0; special_suffixes[i]; i++) {  		int l = strlen(sym_name) - strlen(special_suffixes[i]); | 
