diff options
Diffstat (limited to 'scripts/mod/modpost.c')
| -rw-r--r-- | scripts/mod/modpost.c | 58 | 
1 files changed, 14 insertions, 44 deletions
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 9d9c5b905b35..091d90573b63 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -772,32 +772,10 @@ static const char *sech_name(struct elf_info *elf, Elf_Shdr *sechdr)  		sechdr->sh_name;  } -/* if sym is empty or point to a string - * like ".[0-9]+" then return 1. - * This is the optional prefix added by ld to some sections - */ -static int number_prefix(const char *sym) -{ -	if (*sym++ == '\0') -		return 1; -	if (*sym != '.') -		return 0; -	do { -		char c = *sym++; -		if (c < '0' || c > '9') -			return 0; -	} while (*sym); -	return 1; -} -  /* The pattern is an array of simple patterns.   * "foo" will match an exact string equal to "foo"   * "*foo" will match a string that ends with "foo"   * "foo*" will match a string that begins with "foo" - * "foo$" will match a string equal to "foo" or "foo.1" - *   where the '1' can be any number including several digits. - *   The $ syntax is for sections where ld append a dot number - *   to make section name unique.   */  static int match(const char *sym, const char * const pat[])  { @@ -816,13 +794,6 @@ static int match(const char *sym, const char * const pat[])  			if (strncmp(sym, p, strlen(p) - 1) == 0)  				return 1;  		} -		/* "foo$" */ -		else if (*endp == '$') { -			if (strncmp(sym, p, strlen(p) - 1) == 0) { -				if (number_prefix(sym + strlen(p) - 1)) -					return 1; -			} -		}  		/* no wildcards */  		else {  			if (strcmp(p, sym) == 0) @@ -880,20 +851,20 @@ static void check_section(const char *modname, struct elf_info *elf,  #define ALL_INIT_DATA_SECTIONS \ -	".init.setup$", ".init.rodata$", ".meminit.rodata$", \ -	".init.data$", ".meminit.data$" +	".init.setup", ".init.rodata", ".meminit.rodata", \ +	".init.data", ".meminit.data"  #define ALL_EXIT_DATA_SECTIONS \ -	".exit.data$", ".memexit.data$" +	".exit.data", ".memexit.data"  #define ALL_INIT_TEXT_SECTIONS \ -	".init.text$", ".meminit.text$" +	".init.text", ".meminit.text"  #define ALL_EXIT_TEXT_SECTIONS \ -	".exit.text$", ".memexit.text$" +	".exit.text", ".memexit.text"  #define ALL_PCI_INIT_SECTIONS	\ -	".pci_fixup_early$", ".pci_fixup_header$", ".pci_fixup_final$", \ -	".pci_fixup_enable$", ".pci_fixup_resume$", \ -	".pci_fixup_resume_early$", ".pci_fixup_suspend$" +	".pci_fixup_early", ".pci_fixup_header", ".pci_fixup_final", \ +	".pci_fixup_enable", ".pci_fixup_resume", \ +	".pci_fixup_resume_early", ".pci_fixup_suspend"  #define ALL_XXXINIT_SECTIONS MEM_INIT_SECTIONS  #define ALL_XXXEXIT_SECTIONS MEM_EXIT_SECTIONS @@ -901,8 +872,8 @@ static void check_section(const char *modname, struct elf_info *elf,  #define ALL_INIT_SECTIONS INIT_SECTIONS, ALL_XXXINIT_SECTIONS  #define ALL_EXIT_SECTIONS EXIT_SECTIONS, ALL_XXXEXIT_SECTIONS -#define DATA_SECTIONS ".data$", ".data.rel$" -#define TEXT_SECTIONS ".text$", ".text.unlikely$" +#define DATA_SECTIONS ".data", ".data.rel" +#define TEXT_SECTIONS ".text", ".text.unlikely"  #define INIT_SECTIONS      ".init.*"  #define MEM_INIT_SECTIONS  ".meminit.*" @@ -1703,12 +1674,11 @@ static void check_sec_ref(struct module *mod, const char *modname,  static char *remove_dot(char *s)  { -	char *end; -	int n = strcspn(s, "."); +	size_t n = strcspn(s, "."); -	if (n > 0 && s[n] != 0) { -		strtoul(s + n + 1, &end, 10); -		if  (end > s + n + 1 && (*end == '.' || *end == 0)) +	if (n && s[n]) { +		size_t m = strspn(s + n + 1, "0123456789"); +		if (m && (s[n + m] == '.' || s[n + m] == 0))  			s[n] = 0;  	}  	return s;  | 
