else
myname = modname;
- return strcmp(myname, "vmlinux") == 0;
+ return (strcmp(myname, "vmlinux") == 0) ||
+ (strcmp(myname, "vmlinux.o") == 0);
}
void *do_nofail(void *ptr, const char *expr)
* the pattern is identified by:
* tosec = .init.text | .exit.text | .init.data
* fromsec = .data
- * atsym = *driver, *_template, *_sht, *_ops, *_probe, *probe_one, *_console
+ * atsym = *driver, *_template, *_sht, *_ops, *_probe, *probe_one, *_console, *_timer
*
* Pattern 3:
* Whitelist all refereces from .text.head to .init.data
* This pattern is identified by
* refsymname = __init_begin, _sinittext, _einittext
*
- * Pattern 5:
- * Logos used in drivers/video/logo reside in __initdata but the
- * funtion that references them are EXPORT_SYMBOL() so cannot be
- * marker __init. So we whitelist them here.
- * The pattern is:
- * tosec = .init.data
- * fromsec = .text*
- * refsymname = logo_
**/
static int secref_whitelist(const char *modname, const char *tosec,
const char *fromsec, const char *atsym,
const char *pat2sym[] = {
"driver",
"_template", /* scsi uses *_template a lot */
+ "_timer", /* arm uses ops structures named _timer a lot */
"_sht", /* scsi also used *_sht to some extent */
"_ops",
"_probe",
if (strcmp(refsymname, *s) == 0)
return 1;
- /* Check for pattern 5 */
- if ((strcmp(tosec, ".init.data") == 0) &&
- (strncmp(fromsec, ".text", strlen(".text")) == 0) &&
- (strncmp(refsymname, "logo_", strlen("logo_")) == 0))
- return 1;
-
return 0;
}