diff options
author | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2010-01-30 10:56:20 -0500 |
---|---|---|
committer | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2010-01-30 11:20:52 -0500 |
commit | 0d2a636ee6c3b8c292fbaae05976fe1537b70958 (patch) | |
tree | 6c77f15a0b2d9db1a4f1a19a0e741c0c02e40cd4 | |
parent | bbd3f4fb84f8c4a04f22c9c6dc119b0c4856c7d9 (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.c | 16 |
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 | ||
936 | static int section_mismatch(const char *fromsec, const char *tosec) | 936 | static 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 | */ |
1161 | static void report_sec_mismatch(const char *modname, enum mismatch mismatch, | 1162 | static 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; |