Commit 6a841528d288ac420052f5c98fd426b0fcdc5b52
1 parent
549a8a0306
Exists in
master
and in
4 other branches
param: silence .init.text references from param ops
Ideally, we'd check that it was only the "set" function which was __init, and that the permissions were r/o. But that's a little hard. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Acked-by: Sam Ravnborg <sam@ravnborg.org> Tested-by: Phil Carmody <ext-phil.2.carmody@nokia.com>
Showing 1 changed file with 13 additions and 0 deletions Side-by-side Diff
scripts/mod/modpost.c
... | ... | @@ -1033,6 +1033,13 @@ |
1033 | 1033 | * fromsec = .data* |
1034 | 1034 | * atsym =__param* |
1035 | 1035 | * |
1036 | + * Pattern 1a: | |
1037 | + * module_param_call() ops can refer to __init set function if permissions=0 | |
1038 | + * The pattern is identified by: | |
1039 | + * tosec = .init.text | |
1040 | + * fromsec = .data* | |
1041 | + * atsym = __param_ops_* | |
1042 | + * | |
1036 | 1043 | * Pattern 2: |
1037 | 1044 | * Many drivers utilise a *driver container with references to |
1038 | 1045 | * add, remove, probe functions etc. |
... | ... | @@ -1065,6 +1072,12 @@ |
1065 | 1072 | if (match(tosec, init_data_sections) && |
1066 | 1073 | match(fromsec, data_sections) && |
1067 | 1074 | (strncmp(fromsym, "__param", strlen("__param")) == 0)) |
1075 | + return 0; | |
1076 | + | |
1077 | + /* Check for pattern 1a */ | |
1078 | + if (strcmp(tosec, ".init.text") == 0 && | |
1079 | + match(fromsec, data_sections) && | |
1080 | + (strncmp(fromsym, "__param_ops_", strlen("__param_ops_")) == 0)) | |
1068 | 1081 | return 0; |
1069 | 1082 | |
1070 | 1083 | /* Check for pattern 2 */ |