diff options
Diffstat (limited to 'scripts/mod/modpost.c')
-rw-r--r-- | scripts/mod/modpost.c | 54 |
1 files changed, 39 insertions, 15 deletions
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 986513dcd700..730b321680cd 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c | |||
@@ -670,27 +670,41 @@ int match(const char *sym, const char * const pat[]) | |||
670 | static const char *section_white_list[] = | 670 | static const char *section_white_list[] = |
671 | { ".debug*", ".stab*", ".note*", ".got*", ".toc*", NULL }; | 671 | { ".debug*", ".stab*", ".note*", ".got*", ".toc*", NULL }; |
672 | 672 | ||
673 | #define INIT_DATA_SECTIONS ".init.data$" | 673 | #define ALL_INIT_DATA_SECTIONS \ |
674 | #define EXIT_DATA_SECTIONS ".exit.data$" | 674 | ".init.data$", ".devinit.data$", ".cpuinit.data$", ".meminit.data$" |
675 | #define ALL_EXIT_DATA_SECTIONS \ | ||
676 | ".exit.data$", ".devexit.data$", ".cpuexit.data$", ".memexit.data$" | ||
675 | 677 | ||
676 | #define INIT_TEXT_SECTIONS ".init.text$" | 678 | #define ALL_INIT_TEXT_SECTIONS \ |
677 | #define EXIT_TEXT_SECTIONS ".exit.text$" | 679 | ".init.text$", ".devinit.text$", ".cpuinit.text$", ".meminit.text$" |
680 | #define ALL_EXIT_TEXT_SECTIONS \ | ||
681 | ".exit.text$", ".devexit.text$", ".cpuexit.text$", ".memexit.text$" | ||
678 | 682 | ||
679 | #define INIT_SECTIONS INIT_DATA_SECTIONS, INIT_TEXT_SECTIONS | 683 | #define ALL_INIT_SECTIONS ALL_INIT_DATA_SECTIONS, ALL_INIT_TEXT_SECTIONS |
680 | #define EXIT_SECTIONS EXIT_DATA_SECTIONS, EXIT_TEXT_SECTIONS | 684 | #define ALL_EXIT_SECTIONS ALL_EXIT_DATA_SECTIONS, ALL_EXIT_TEXT_SECTIONS |
681 | 685 | ||
682 | #define DATA_SECTIONS ".data$", ".data.rel$" | 686 | #define DATA_SECTIONS ".data$", ".data.rel$" |
683 | #define TEXT_SECTIONS ".text$" | 687 | #define TEXT_SECTIONS ".text$" |
684 | 688 | ||
689 | #define INIT_SECTIONS ".init.data$", ".init.text$" | ||
690 | #define DEV_INIT_SECTIONS ".devinit.data$", ".devinit.text$" | ||
691 | #define CPU_INIT_SECTIONS ".cpuinit.data$", ".cpuinit.text$" | ||
692 | #define MEM_INIT_SECTIONS ".meminit.data$", ".meminit.text$" | ||
693 | |||
694 | #define EXIT_SECTIONS ".exit.data$", ".exit.text$" | ||
695 | #define DEV_EXIT_SECTIONS ".devexit.data$", ".devexit.text$" | ||
696 | #define CPU_EXIT_SECTIONS ".cpuexit.data$", ".cpuexit.text$" | ||
697 | #define MEM_EXIT_SECTIONS ".memexit.data$", ".memexit.text$" | ||
698 | |||
685 | /* init data sections */ | 699 | /* init data sections */ |
686 | static const char *init_data_sections[] = { INIT_DATA_SECTIONS, NULL }; | 700 | static const char *init_data_sections[] = { ALL_INIT_DATA_SECTIONS, NULL }; |
687 | 701 | ||
688 | /* all init sections */ | 702 | /* all init sections */ |
689 | static const char *init_sections[] = { INIT_SECTIONS, NULL }; | 703 | static const char *init_sections[] = { ALL_INIT_SECTIONS, NULL }; |
690 | 704 | ||
691 | /* All init and exit sections (code + data) */ | 705 | /* All init and exit sections (code + data) */ |
692 | static const char *init_exit_sections[] = | 706 | static const char *init_exit_sections[] = |
693 | {INIT_SECTIONS, EXIT_SECTIONS, NULL }; | 707 | {ALL_INIT_SECTIONS, ALL_EXIT_SECTIONS, NULL }; |
694 | 708 | ||
695 | /* data section */ | 709 | /* data section */ |
696 | static const char *data_sections[] = { DATA_SECTIONS, NULL }; | 710 | static const char *data_sections[] = { DATA_SECTIONS, NULL }; |
@@ -734,22 +748,32 @@ const struct sectioncheck sectioncheck[] = { | |||
734 | */ | 748 | */ |
735 | { | 749 | { |
736 | .fromsec = { TEXT_SECTIONS, DATA_SECTIONS, NULL }, | 750 | .fromsec = { TEXT_SECTIONS, DATA_SECTIONS, NULL }, |
737 | .tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL } | 751 | .tosec = { ALL_INIT_SECTIONS, ALL_EXIT_SECTIONS, NULL } |
752 | }, | ||
753 | /* Do not reference init code/data from devinit/cpuinit/meminit code/data */ | ||
754 | { | ||
755 | .fromsec = { DEV_INIT_SECTIONS, CPU_INIT_SECTIONS, MEM_INIT_SECTIONS, NULL }, | ||
756 | .tosec = { INIT_SECTIONS, NULL } | ||
757 | }, | ||
758 | /* Do not reference exit code/data from devexit/cpuexit/memexit code/data */ | ||
759 | { | ||
760 | .fromsec = { DEV_EXIT_SECTIONS, CPU_EXIT_SECTIONS, MEM_EXIT_SECTIONS, NULL }, | ||
761 | .tosec = { EXIT_SECTIONS, NULL } | ||
738 | }, | 762 | }, |
739 | /* Do not use exit code/data from init code */ | 763 | /* Do not use exit code/data from init code */ |
740 | { | 764 | { |
741 | .fromsec = { INIT_SECTIONS, NULL }, | 765 | .fromsec = { ALL_INIT_SECTIONS, NULL }, |
742 | .tosec = { EXIT_SECTIONS, NULL }, | 766 | .tosec = { ALL_EXIT_SECTIONS, NULL }, |
743 | }, | 767 | }, |
744 | /* Do not use init code/data from exit code */ | 768 | /* Do not use init code/data from exit code */ |
745 | { | 769 | { |
746 | .fromsec = { EXIT_SECTIONS, NULL }, | 770 | .fromsec = { ALL_EXIT_SECTIONS, NULL }, |
747 | .tosec = { INIT_SECTIONS, NULL } | 771 | .tosec = { ALL_INIT_SECTIONS, NULL } |
748 | }, | 772 | }, |
749 | /* Do not export init/exit functions or data */ | 773 | /* Do not export init/exit functions or data */ |
750 | { | 774 | { |
751 | .fromsec = { "__ksymtab*", NULL }, | 775 | .fromsec = { "__ksymtab*", NULL }, |
752 | .tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL } | 776 | .tosec = { ALL_INIT_SECTIONS, ALL_EXIT_SECTIONS, NULL } |
753 | } | 777 | } |
754 | }; | 778 | }; |
755 | 779 | ||