aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2010-01-30 10:56:20 -0500
committerUwe Kleine-König <u.kleine-koenig@pengutronix.de>2010-01-30 11:20:52 -0500
commit0d2a636ee6c3b8c292fbaae05976fe1537b70958 (patch)
tree6c77f15a0b2d9db1a4f1a19a0e741c0c02e40cd4
parentbbd3f4fb84f8c4a04f22c9c6dc119b0c4856c7d9 (diff)
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>
-rw-r--r--scripts/mod/modpost.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 598d54a0fefb..3f0380b8d8f7 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -933,7 +933,8 @@ const struct sectioncheck sectioncheck[] = {
933} 933}
934}; 934};
935 935
936static int section_mismatch(const char *fromsec, const char *tosec) 936static const struct sectioncheck *section_mismatch(
937 const char *fromsec, const char *tosec)
937{ 938{
938 int i; 939 int i;
939 int elems = sizeof(sectioncheck) / sizeof(struct sectioncheck); 940 int elems = sizeof(sectioncheck) / sizeof(struct sectioncheck);
@@ -942,10 +943,10 @@ static int section_mismatch(const char *fromsec, const char *tosec)
942 for (i = 0; i < elems; i++) { 943 for (i = 0; i < elems; i++) {
943 if (match(fromsec, check->fromsec) && 944 if (match(fromsec, check->fromsec) &&
944 match(tosec, check->tosec)) 945 match(tosec, check->tosec))
945 return check->mismatch; 946 return check;
946 check++; 947 check++;
947 } 948 }
948 return NO_MISMATCH; 949 return NULL;
949} 950}
950 951
951/** 952/**
@@ -1158,7 +1159,8 @@ static int is_function(Elf_Sym *sym)
1158 * Try to find symbols near it so user can find it. 1159 * Try to find symbols near it so user can find it.
1159 * Check whitelist before warning - it may be a false positive. 1160 * Check whitelist before warning - it may be a false positive.
1160 */ 1161 */
1161static void report_sec_mismatch(const char *modname, enum mismatch mismatch, 1162static void report_sec_mismatch(const char *modname,
1163 const struct sectioncheck *mismatch,
1162 const char *fromsec, 1164 const char *fromsec,
1163 unsigned long long fromaddr, 1165 unsigned long long fromaddr,
1164 const char *fromsym, 1166 const char *fromsym,
@@ -1189,7 +1191,7 @@ static void report_sec_mismatch(const char *modname, enum mismatch mismatch,
1189 modname, fromsec, fromaddr, from, fromsym, from_p, to, tosec, 1191 modname, fromsec, fromaddr, from, fromsym, from_p, to, tosec,
1190 tosym, to_p); 1192 tosym, to_p);
1191 1193
1192 switch (mismatch) { 1194 switch (mismatch->mismatch) {
1193 case TEXT_TO_ANY_INIT: 1195 case TEXT_TO_ANY_INIT:
1194 fprintf(stderr, 1196 fprintf(stderr,
1195 "The function %s%s() references\n" 1197 "The function %s%s() references\n"
@@ -1289,11 +1291,11 @@ static void check_section_mismatch(const char *modname, struct elf_info *elf,
1289 Elf_Rela *r, Elf_Sym *sym, const char *fromsec) 1291 Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1290{ 1292{
1291 const char *tosec; 1293 const char *tosec;
1292 enum mismatch mismatch; 1294 const struct sectioncheck *mismatch;
1293 1295
1294 tosec = sec_name(elf, sym->st_shndx); 1296 tosec = sec_name(elf, sym->st_shndx);
1295 mismatch = section_mismatch(fromsec, tosec); 1297 mismatch = section_mismatch(fromsec, tosec);
1296 if (mismatch != NO_MISMATCH) { 1298 if (mismatch) {
1297 Elf_Sym *to; 1299 Elf_Sym *to;
1298 Elf_Sym *from; 1300 Elf_Sym *from;
1299 const char *tosym; 1301 const char *tosym;