diff options
Diffstat (limited to 'scripts/mod/modpost.c')
| -rw-r--r-- | scripts/mod/modpost.c | 32 |
1 files changed, 7 insertions, 25 deletions
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index f22c8b4911bc..1ef78753db97 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c | |||
| @@ -612,14 +612,10 @@ static int strrcmp(const char *s, const char *sub) | |||
| 612 | * atsym = *driver, *_template, *_sht, *_ops, *_probe, *probe_one, *_console | 612 | * atsym = *driver, *_template, *_sht, *_ops, *_probe, *probe_one, *_console |
| 613 | * | 613 | * |
| 614 | * Pattern 3: | 614 | * Pattern 3: |
| 615 | * Whitelist all references from .pci_fixup* section to .init.text | ||
| 616 | * This is part of the PCI init when built-in | ||
| 617 | * | ||
| 618 | * Pattern 4: | ||
| 619 | * Whitelist all refereces from .text.head to .init.data | 615 | * Whitelist all refereces from .text.head to .init.data |
| 620 | * Whitelist all refereces from .text.head to .init.text | 616 | * Whitelist all refereces from .text.head to .init.text |
| 621 | * | 617 | * |
| 622 | * Pattern 5: | 618 | * Pattern 4: |
| 623 | * Some symbols belong to init section but still it is ok to reference | 619 | * Some symbols belong to init section but still it is ok to reference |
| 624 | * these from non-init sections as these symbols don't have any memory | 620 | * these from non-init sections as these symbols don't have any memory |
| 625 | * allocated for them and symbol address and value are same. So even | 621 | * allocated for them and symbol address and value are same. So even |
| @@ -628,7 +624,7 @@ static int strrcmp(const char *s, const char *sub) | |||
| 628 | * This pattern is identified by | 624 | * This pattern is identified by |
| 629 | * refsymname = __init_begin, _sinittext, _einittext | 625 | * refsymname = __init_begin, _sinittext, _einittext |
| 630 | * | 626 | * |
| 631 | * Pattern 7: | 627 | * Pattern 5: |
| 632 | * Logos used in drivers/video/logo reside in __initdata but the | 628 | * Logos used in drivers/video/logo reside in __initdata but the |
| 633 | * funtion that references them are EXPORT_SYMBOL() so cannot be | 629 | * funtion that references them are EXPORT_SYMBOL() so cannot be |
| 634 | * marker __init. So we whitelist them here. | 630 | * marker __init. So we whitelist them here. |
| @@ -636,12 +632,6 @@ static int strrcmp(const char *s, const char *sub) | |||
| 636 | * tosec = .init.data | 632 | * tosec = .init.data |
| 637 | * fromsec = .text* | 633 | * fromsec = .text* |
| 638 | * refsymname = logo_ | 634 | * refsymname = logo_ |
| 639 | * | ||
| 640 | * Pattern 10: | ||
| 641 | * ia64 has machvec table for each platform and | ||
| 642 | * powerpc has a machine desc table for each platform. | ||
| 643 | * It is mixture of function pointers of .init.text and .text. | ||
| 644 | * fromsec = .machvec | .machine.desc | ||
| 645 | **/ | 635 | **/ |
| 646 | static int secref_whitelist(const char *modname, const char *tosec, | 636 | static int secref_whitelist(const char *modname, const char *tosec, |
| 647 | const char *fromsec, const char *atsym, | 637 | const char *fromsec, const char *atsym, |
| @@ -699,32 +689,22 @@ static int secref_whitelist(const char *modname, const char *tosec, | |||
| 699 | return 1; | 689 | return 1; |
| 700 | 690 | ||
| 701 | /* Check for pattern 3 */ | 691 | /* Check for pattern 3 */ |
| 702 | if ((strncmp(fromsec, ".pci_fixup", strlen(".pci_fixup")) == 0) && | ||
| 703 | (strcmp(tosec, ".init.text") == 0)) | ||
| 704 | return 1; | ||
| 705 | |||
| 706 | /* Check for pattern 4 */ | ||
| 707 | if ((strcmp(fromsec, ".text.head") == 0) && | 692 | if ((strcmp(fromsec, ".text.head") == 0) && |
| 708 | ((strcmp(tosec, ".init.data") == 0) || | 693 | ((strcmp(tosec, ".init.data") == 0) || |
| 709 | (strcmp(tosec, ".init.text") == 0))) | 694 | (strcmp(tosec, ".init.text") == 0))) |
| 710 | return 1; | 695 | return 1; |
| 711 | 696 | ||
| 712 | /* Check for pattern 5 */ | 697 | /* Check for pattern 4 */ |
| 713 | for (s = pat3refsym; *s; s++) | 698 | for (s = pat3refsym; *s; s++) |
| 714 | if (strcmp(refsymname, *s) == 0) | 699 | if (strcmp(refsymname, *s) == 0) |
| 715 | return 1; | 700 | return 1; |
| 716 | 701 | ||
| 717 | /* Check for pattern 7 */ | 702 | /* Check for pattern 5 */ |
| 718 | if ((strcmp(tosec, ".init.data") == 0) && | 703 | if ((strcmp(tosec, ".init.data") == 0) && |
| 719 | (strncmp(fromsec, ".text", strlen(".text")) == 0) && | 704 | (strncmp(fromsec, ".text", strlen(".text")) == 0) && |
| 720 | (strncmp(refsymname, "logo_", strlen("logo_")) == 0)) | 705 | (strncmp(refsymname, "logo_", strlen("logo_")) == 0)) |
| 721 | return 1; | 706 | return 1; |
| 722 | 707 | ||
| 723 | /* Check for pattern 10 */ | ||
| 724 | if ((strcmp(fromsec, ".machvec") == 0) || | ||
| 725 | (strcmp(fromsec, ".machine.desc") == 0)) | ||
| 726 | return 1; | ||
| 727 | |||
| 728 | return 0; | 708 | return 0; |
| 729 | } | 709 | } |
| 730 | 710 | ||
| @@ -1088,7 +1068,7 @@ static void check_sec_ref(struct module *mod, const char *modname, | |||
| 1088 | * section, not the ia64 .opd section. | 1068 | * section, not the ia64 .opd section. |
| 1089 | * ia64 .opd should not point to discarded sections. | 1069 | * ia64 .opd should not point to discarded sections. |
| 1090 | * [.rodata] like for .init.text we ignore .rodata references -same reason | 1070 | * [.rodata] like for .init.text we ignore .rodata references -same reason |
| 1091 | **/ | 1071 | */ |
| 1092 | static int initexit_section_ref_ok(const char *name) | 1072 | static int initexit_section_ref_ok(const char *name) |
| 1093 | { | 1073 | { |
| 1094 | const char **s; | 1074 | const char **s; |
| @@ -1099,6 +1079,8 @@ static int initexit_section_ref_ok(const char *name) | |||
| 1099 | ".altinstructions", | 1079 | ".altinstructions", |
| 1100 | ".cranges", /* used by sh64 */ | 1080 | ".cranges", /* used by sh64 */ |
| 1101 | ".fixup", | 1081 | ".fixup", |
| 1082 | ".machvec", /* ia64 + powerpc uses these */ | ||
| 1083 | ".machine.desc", | ||
| 1102 | ".opd", /* See comment [OPD] */ | 1084 | ".opd", /* See comment [OPD] */ |
| 1103 | ".parainstructions", | 1085 | ".parainstructions", |
| 1104 | ".pdr", | 1086 | ".pdr", |
