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>
This commit is contained in:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user