diff options
Diffstat (limited to 'scripts/mod')
-rw-r--r-- | scripts/mod/modpost.c | 36 |
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) && |