Browse Source

modpost: pass around const struct sectioncheck * instead of enum mismatch

This prepares having a per-check whitelist of symbol names.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Uwe Kleine-König 15 năm trước cách đây
mục cha
commit
0d2a636ee6
1 tập tin đã thay đổi với 9 bổ sung7 xóa
  1. 9 7
      scripts/mod/modpost.c

+ 9 - 7
scripts/mod/modpost.c

@@ -933,7 +933,8 @@ const struct sectioncheck sectioncheck[] = {
 }
 }
 };
 };
 
 
-static int section_mismatch(const char *fromsec, const char *tosec)
+static const struct sectioncheck *section_mismatch(
+		const char *fromsec, const char *tosec)
 {
 {
 	int i;
 	int i;
 	int elems = sizeof(sectioncheck) / sizeof(struct sectioncheck);
 	int elems = sizeof(sectioncheck) / sizeof(struct sectioncheck);
@@ -942,10 +943,10 @@ static int section_mismatch(const char *fromsec, const char *tosec)
 	for (i = 0; i < elems; i++) {
 	for (i = 0; i < elems; i++) {
 		if (match(fromsec, check->fromsec) &&
 		if (match(fromsec, check->fromsec) &&
 		    match(tosec, check->tosec))
 		    match(tosec, check->tosec))
-			return check->mismatch;
+			return check;
 		check++;
 		check++;
 	}
 	}
-	return NO_MISMATCH;
+	return NULL;
 }
 }
 
 
 /**
 /**
@@ -1158,7 +1159,8 @@ static int is_function(Elf_Sym *sym)
  * Try to find symbols near it so user can find it.
  * Try to find symbols near it so user can find it.
  * Check whitelist before warning - it may be a false positive.
  * Check whitelist before warning - it may be a false positive.
  */
  */
-static void report_sec_mismatch(const char *modname, enum mismatch mismatch,
+static void report_sec_mismatch(const char *modname,
+				const struct sectioncheck *mismatch,
                                 const char *fromsec,
                                 const char *fromsec,
                                 unsigned long long fromaddr,
                                 unsigned long long fromaddr,
                                 const char *fromsym,
                                 const char *fromsym,
@@ -1189,7 +1191,7 @@ static void report_sec_mismatch(const char *modname, enum mismatch mismatch,
 	     modname, fromsec, fromaddr, from, fromsym, from_p, to, tosec,
 	     modname, fromsec, fromaddr, from, fromsym, from_p, to, tosec,
 	     tosym, to_p);
 	     tosym, to_p);
 
 
-	switch (mismatch) {
+	switch (mismatch->mismatch) {
 	case TEXT_TO_ANY_INIT:
 	case TEXT_TO_ANY_INIT:
 		fprintf(stderr,
 		fprintf(stderr,
 		"The function %s%s() references\n"
 		"The function %s%s() references\n"
@@ -1289,11 +1291,11 @@ static void check_section_mismatch(const char *modname, struct elf_info *elf,
                                    Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
                                    Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
 {
 {
 	const char *tosec;
 	const char *tosec;
-	enum mismatch mismatch;
+	const struct sectioncheck *mismatch;
 
 
 	tosec = sec_name(elf, sym->st_shndx);
 	tosec = sec_name(elf, sym->st_shndx);
 	mismatch = section_mismatch(fromsec, tosec);
 	mismatch = section_mismatch(fromsec, tosec);
-	if (mismatch != NO_MISMATCH) {
+	if (mismatch) {
 		Elf_Sym *to;
 		Elf_Sym *to;
 		Elf_Sym *from;
 		Elf_Sym *from;
 		const char *tosym;
 		const char *tosym;