aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scripts/mod/modpost.c36
1 files changed, 10 insertions, 26 deletions
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index c903a16ba0e6..3db4edcc5a12 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -658,8 +658,8 @@ static int data_section(const char *name)
658 * These functions may often be marked __init and we do not want to 658 * These functions may often be marked __init and we do not want to
659 * warn here. 659 * warn here.
660 * the pattern is identified by: 660 * the pattern is identified by:
661 * tosec = .init.text | .exit.text | .init.data 661 * tosec = init or exit section
662 * fromsec = .data | .data.rel | .data.rel.* 662 * fromsec = data section
663 * atsym = *driver, *_template, *_sht, *_ops, *_probe, *probe_one, *_console, *_timer 663 * atsym = *driver, *_template, *_sht, *_ops, *_probe, *probe_one, *_console, *_timer
664 * 664 *
665 * Pattern 3: 665 * Pattern 3:
@@ -680,7 +680,6 @@ static int secref_whitelist(const char *modname, const char *tosec,
680 const char *fromsec, const char *atsym, 680 const char *fromsec, const char *atsym,
681 const char *refsymname) 681 const char *refsymname)
682{ 682{
683 int f1 = 1, f2 = 1;
684 const char **s; 683 const char **s;
685 const char *pat2sym[] = { 684 const char *pat2sym[] = {
686 "driver", 685 "driver",
@@ -707,31 +706,16 @@ static int secref_whitelist(const char *modname, const char *tosec,
707 return 1; 706 return 1;
708 707
709 /* Check for pattern 1 */ 708 /* Check for pattern 1 */
710 if (strcmp(tosec, ".init.data") != 0) 709 if ((strcmp(tosec, ".init.data") == 0) &&
711 f1 = 0; 710 (strncmp(fromsec, ".data", strlen(".data")) == 0) &&
712 if (strncmp(fromsec, ".data", strlen(".data")) != 0) 711 (strncmp(atsym, "__param", strlen("__param")) == 0))
713 f1 = 0; 712 return 1;
714 if (strncmp(atsym, "__param", strlen("__param")) != 0)
715 f1 = 0;
716
717 if (f1)
718 return f1;
719 713
720 /* Check for pattern 2 */ 714 /* Check for pattern 2 */
721 if ((strcmp(tosec, ".init.text") != 0) && 715 if ((init_section(tosec) || exit_section(tosec)) && data_section(fromsec))
722 (strcmp(tosec, ".exit.text") != 0) && 716 for (s = pat2sym; *s; s++)
723 (strcmp(tosec, ".init.data") != 0)) 717 if (strrcmp(atsym, *s) == 0)
724 f2 = 0; 718 return 1;
725 if ((strcmp(fromsec, ".data") != 0) &&
726 (strcmp(fromsec, ".data.rel") != 0) &&
727 (strncmp(fromsec, ".data.rel.", strlen(".data.rel.")) != 0))
728 f2 = 0;
729
730 for (s = pat2sym; *s; s++)
731 if (strrcmp(atsym, *s) == 0)
732 f1 = 1;
733 if (f1 && f2)
734 return 1;
735 719
736 /* Check for pattern 3 */ 720 /* Check for pattern 3 */
737 if ((strcmp(fromsec, ".text.head") == 0) && 721 if ((strcmp(fromsec, ".text.head") == 0) &&