Commit 0d2a636e authored by Uwe Kleine-König's avatar Uwe Kleine-König

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

This prepares having a per-check whitelist of symbol names.
Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
parent bbd3f4fb
...@@ -933,7 +933,8 @@ const struct sectioncheck sectioncheck[] = { ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment