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)
* warn here.
* the pattern is identified by:
* tosec = .init.text | .exit.text | .init.data
- * fromsec = .data
- * atsym = *driver, *_template, *_sht, *_ops, *_probe, *probe_one, *_console
+ * fromsec = .data | .data.rel | .data.rel.*
+ * atsym = *driver, *_template, *_sht, *_ops, *_probe, *probe_one, *_console, *_timer
*
* Pattern 3:
* Whitelist all refereces from .text.head to .init.data
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",
(strcmp(tosec, ".exit.text") != 0) &&
(strcmp(tosec, ".init.data") != 0))
f2 = 0;
- if (strcmp(fromsec, ".data") != 0)
+ if ((strcmp(fromsec, ".data") != 0) &&
+ (strcmp(fromsec, ".data.rel") != 0) &&
+ (strncmp(fromsec, ".data.rel.", strlen(".data.rel.")) != 0))
f2 = 0;
for (s = pat2sym; *s; s++)
const char **s;
/* Absolute section names */
const char *namelist1[] = {
+ "__dbe_table", /* MIPS generate these */
"__ftr_fixup", /* powerpc cpu feature fixup */
"__fw_ftr_fixup", /* powerpc firmware feature fixup */
"__param",