Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0d8f803 authored by Rasmus Villemoes's avatar Rasmus Villemoes Committed by Rusty Russell
Browse files

scripts: modpost: Remove numeric suffix pattern matching



For several years, the pattern "foo$" has effectively been treated as
equivalent to "foo" due to a bug in the (misnamed) helper
number_prefix(). This hasn't been observed to cause any problems, so
remove the broken $ functionality and change all foo$ patterns to foo.

Signed-off-by: default avatarRasmus Villemoes <linux@rasmusvillemoes.dk>
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent fcd38ed0
Loading
Loading
Loading
Loading
+10 −39
Original line number Original line Diff line number Diff line
@@ -772,32 +772,10 @@ static const char *sech_name(struct elf_info *elf, Elf_Shdr *sechdr)
		sechdr->sh_name;
		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.
/* The pattern is an array of simple patterns.
 * "foo" will match an exact string equal to "foo"
 * "foo" will match an exact string equal to "foo"
 * "*foo" will match a string that ends with "foo"
 * "*foo" will match a string that ends with "foo"
 * "foo*" will match a string that begins 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[])
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)
			if (strncmp(sym, p, strlen(p) - 1) == 0)
				return 1;
				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 */
		/* no wildcards */
		else {
		else {
			if (strcmp(p, sym) == 0)
			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 \
#define ALL_INIT_DATA_SECTIONS \
	".init.setup$", ".init.rodata$", ".meminit.rodata$", \
	".init.setup", ".init.rodata", ".meminit.rodata", \
	".init.data$", ".meminit.data$"
	".init.data", ".meminit.data"
#define ALL_EXIT_DATA_SECTIONS \
#define ALL_EXIT_DATA_SECTIONS \
	".exit.data$", ".memexit.data$"
	".exit.data", ".memexit.data"


#define ALL_INIT_TEXT_SECTIONS \
#define ALL_INIT_TEXT_SECTIONS \
	".init.text$", ".meminit.text$"
	".init.text", ".meminit.text"
#define ALL_EXIT_TEXT_SECTIONS \
#define ALL_EXIT_TEXT_SECTIONS \
	".exit.text$", ".memexit.text$"
	".exit.text", ".memexit.text"


#define ALL_PCI_INIT_SECTIONS	\
#define ALL_PCI_INIT_SECTIONS	\
	".pci_fixup_early$", ".pci_fixup_header$", ".pci_fixup_final$", \
	".pci_fixup_early", ".pci_fixup_header", ".pci_fixup_final", \
	".pci_fixup_enable$", ".pci_fixup_resume$", \
	".pci_fixup_enable", ".pci_fixup_resume", \
	".pci_fixup_resume_early$", ".pci_fixup_suspend$"
	".pci_fixup_resume_early", ".pci_fixup_suspend"


#define ALL_XXXINIT_SECTIONS MEM_INIT_SECTIONS
#define ALL_XXXINIT_SECTIONS MEM_INIT_SECTIONS
#define ALL_XXXEXIT_SECTIONS MEM_EXIT_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_INIT_SECTIONS INIT_SECTIONS, ALL_XXXINIT_SECTIONS
#define ALL_EXIT_SECTIONS EXIT_SECTIONS, ALL_XXXEXIT_SECTIONS
#define ALL_EXIT_SECTIONS EXIT_SECTIONS, ALL_XXXEXIT_SECTIONS


#define DATA_SECTIONS ".data$", ".data.rel$"
#define DATA_SECTIONS ".data", ".data.rel"
#define TEXT_SECTIONS ".text$", ".text.unlikely$"
#define TEXT_SECTIONS ".text", ".text.unlikely"


#define INIT_SECTIONS      ".init.*"
#define INIT_SECTIONS      ".init.*"
#define MEM_INIT_SECTIONS  ".meminit.*"
#define MEM_INIT_SECTIONS  ".meminit.*"