]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - scripts/mod/modpost.c
Merge tag 'v4.3-rc1' into MTD -next development
[karo-tx-linux.git] / scripts / mod / modpost.c
1 /* Postprocess module symbol versions
2  *
3  * Copyright 2003       Kai Germaschewski
4  * Copyright 2002-2004  Rusty Russell, IBM Corporation
5  * Copyright 2006-2008  Sam Ravnborg
6  * Based in part on module-init-tools/depmod.c,file2alias
7  *
8  * This software may be used and distributed according to the terms
9  * of the GNU General Public License, incorporated herein by reference.
10  *
11  * Usage: modpost vmlinux module1.o module2.o ...
12  */
13
14 #define _GNU_SOURCE
15 #include <stdio.h>
16 #include <ctype.h>
17 #include <string.h>
18 #include <limits.h>
19 #include <stdbool.h>
20 #include <errno.h>
21 #include "modpost.h"
22 #include "../../include/generated/autoconf.h"
23 #include "../../include/linux/license.h"
24 #include "../../include/linux/export.h"
25
26 /* Are we using CONFIG_MODVERSIONS? */
27 static int modversions = 0;
28 /* Warn about undefined symbols? (do so if we have vmlinux) */
29 static int have_vmlinux = 0;
30 /* Is CONFIG_MODULE_SRCVERSION_ALL set? */
31 static int all_versions = 0;
32 /* If we are modposting external module set to 1 */
33 static int external_module = 0;
34 /* Warn about section mismatch in vmlinux if set to 1 */
35 static int vmlinux_section_warnings = 1;
36 /* Only warn about unresolved symbols */
37 static int warn_unresolved = 0;
38 /* How a symbol is exported */
39 static int sec_mismatch_count = 0;
40 static int sec_mismatch_verbose = 1;
41 /* ignore missing files */
42 static int ignore_missing_files;
43
44 enum export {
45         export_plain,      export_unused,     export_gpl,
46         export_unused_gpl, export_gpl_future, export_unknown
47 };
48
49 #define PRINTF __attribute__ ((format (printf, 1, 2)))
50
51 PRINTF void fatal(const char *fmt, ...)
52 {
53         va_list arglist;
54
55         fprintf(stderr, "FATAL: ");
56
57         va_start(arglist, fmt);
58         vfprintf(stderr, fmt, arglist);
59         va_end(arglist);
60
61         exit(1);
62 }
63
64 PRINTF void warn(const char *fmt, ...)
65 {
66         va_list arglist;
67
68         fprintf(stderr, "WARNING: ");
69
70         va_start(arglist, fmt);
71         vfprintf(stderr, fmt, arglist);
72         va_end(arglist);
73 }
74
75 PRINTF void merror(const char *fmt, ...)
76 {
77         va_list arglist;
78
79         fprintf(stderr, "ERROR: ");
80
81         va_start(arglist, fmt);
82         vfprintf(stderr, fmt, arglist);
83         va_end(arglist);
84 }
85
86 static inline bool strends(const char *str, const char *postfix)
87 {
88         if (strlen(str) < strlen(postfix))
89                 return false;
90
91         return strcmp(str + strlen(str) - strlen(postfix), postfix) == 0;
92 }
93
94 static int is_vmlinux(const char *modname)
95 {
96         const char *myname;
97
98         myname = strrchr(modname, '/');
99         if (myname)
100                 myname++;
101         else
102                 myname = modname;
103
104         return (strcmp(myname, "vmlinux") == 0) ||
105                (strcmp(myname, "vmlinux.o") == 0);
106 }
107
108 void *do_nofail(void *ptr, const char *expr)
109 {
110         if (!ptr)
111                 fatal("modpost: Memory allocation failure: %s.\n", expr);
112
113         return ptr;
114 }
115
116 /* A list of all modules we processed */
117 static struct module *modules;
118
119 static struct module *find_module(char *modname)
120 {
121         struct module *mod;
122
123         for (mod = modules; mod; mod = mod->next)
124                 if (strcmp(mod->name, modname) == 0)
125                         break;
126         return mod;
127 }
128
129 static struct module *new_module(const char *modname)
130 {
131         struct module *mod;
132         char *p;
133
134         mod = NOFAIL(malloc(sizeof(*mod)));
135         memset(mod, 0, sizeof(*mod));
136         p = NOFAIL(strdup(modname));
137
138         /* strip trailing .o */
139         if (strends(p, ".o")) {
140                 p[strlen(p) - 2] = '\0';
141                 mod->is_dot_o = 1;
142         }
143
144         /* add to list */
145         mod->name = p;
146         mod->gpl_compatible = -1;
147         mod->next = modules;
148         modules = mod;
149
150         return mod;
151 }
152
153 /* A hash of all exported symbols,
154  * struct symbol is also used for lists of unresolved symbols */
155
156 #define SYMBOL_HASH_SIZE 1024
157
158 struct symbol {
159         struct symbol *next;
160         struct module *module;
161         unsigned int crc;
162         int crc_valid;
163         unsigned int weak:1;
164         unsigned int vmlinux:1;    /* 1 if symbol is defined in vmlinux */
165         unsigned int kernel:1;     /* 1 if symbol is from kernel
166                                     *  (only for external modules) **/
167         unsigned int preloaded:1;  /* 1 if symbol from Module.symvers, or crc */
168         enum export  export;       /* Type of export */
169         char name[0];
170 };
171
172 static struct symbol *symbolhash[SYMBOL_HASH_SIZE];
173
174 /* This is based on the hash agorithm from gdbm, via tdb */
175 static inline unsigned int tdb_hash(const char *name)
176 {
177         unsigned value; /* Used to compute the hash value.  */
178         unsigned   i;   /* Used to cycle through random values. */
179
180         /* Set the initial value from the key size. */
181         for (value = 0x238F13AF * strlen(name), i = 0; name[i]; i++)
182                 value = (value + (((unsigned char *)name)[i] << (i*5 % 24)));
183
184         return (1103515243 * value + 12345);
185 }
186
187 /**
188  * Allocate a new symbols for use in the hash of exported symbols or
189  * the list of unresolved symbols per module
190  **/
191 static struct symbol *alloc_symbol(const char *name, unsigned int weak,
192                                    struct symbol *next)
193 {
194         struct symbol *s = NOFAIL(malloc(sizeof(*s) + strlen(name) + 1));
195
196         memset(s, 0, sizeof(*s));
197         strcpy(s->name, name);
198         s->weak = weak;
199         s->next = next;
200         return s;
201 }
202
203 /* For the hash of exported symbols */
204 static struct symbol *new_symbol(const char *name, struct module *module,
205                                  enum export export)
206 {
207         unsigned int hash;
208         struct symbol *new;
209
210         hash = tdb_hash(name) % SYMBOL_HASH_SIZE;
211         new = symbolhash[hash] = alloc_symbol(name, 0, symbolhash[hash]);
212         new->module = module;
213         new->export = export;
214         return new;
215 }
216
217 static struct symbol *find_symbol(const char *name)
218 {
219         struct symbol *s;
220
221         /* For our purposes, .foo matches foo.  PPC64 needs this. */
222         if (name[0] == '.')
223                 name++;
224
225         for (s = symbolhash[tdb_hash(name) % SYMBOL_HASH_SIZE]; s; s = s->next) {
226                 if (strcmp(s->name, name) == 0)
227                         return s;
228         }
229         return NULL;
230 }
231
232 static const struct {
233         const char *str;
234         enum export export;
235 } export_list[] = {
236         { .str = "EXPORT_SYMBOL",            .export = export_plain },
237         { .str = "EXPORT_UNUSED_SYMBOL",     .export = export_unused },
238         { .str = "EXPORT_SYMBOL_GPL",        .export = export_gpl },
239         { .str = "EXPORT_UNUSED_SYMBOL_GPL", .export = export_unused_gpl },
240         { .str = "EXPORT_SYMBOL_GPL_FUTURE", .export = export_gpl_future },
241         { .str = "(unknown)",                .export = export_unknown },
242 };
243
244
245 static const char *export_str(enum export ex)
246 {
247         return export_list[ex].str;
248 }
249
250 static enum export export_no(const char *s)
251 {
252         int i;
253
254         if (!s)
255                 return export_unknown;
256         for (i = 0; export_list[i].export != export_unknown; i++) {
257                 if (strcmp(export_list[i].str, s) == 0)
258                         return export_list[i].export;
259         }
260         return export_unknown;
261 }
262
263 static const char *sec_name(struct elf_info *elf, int secindex);
264
265 #define strstarts(str, prefix) (strncmp(str, prefix, strlen(prefix)) == 0)
266
267 static enum export export_from_secname(struct elf_info *elf, unsigned int sec)
268 {
269         const char *secname = sec_name(elf, sec);
270
271         if (strstarts(secname, "___ksymtab+"))
272                 return export_plain;
273         else if (strstarts(secname, "___ksymtab_unused+"))
274                 return export_unused;
275         else if (strstarts(secname, "___ksymtab_gpl+"))
276                 return export_gpl;
277         else if (strstarts(secname, "___ksymtab_unused_gpl+"))
278                 return export_unused_gpl;
279         else if (strstarts(secname, "___ksymtab_gpl_future+"))
280                 return export_gpl_future;
281         else
282                 return export_unknown;
283 }
284
285 static enum export export_from_sec(struct elf_info *elf, unsigned int sec)
286 {
287         if (sec == elf->export_sec)
288                 return export_plain;
289         else if (sec == elf->export_unused_sec)
290                 return export_unused;
291         else if (sec == elf->export_gpl_sec)
292                 return export_gpl;
293         else if (sec == elf->export_unused_gpl_sec)
294                 return export_unused_gpl;
295         else if (sec == elf->export_gpl_future_sec)
296                 return export_gpl_future;
297         else
298                 return export_unknown;
299 }
300
301 /**
302  * Add an exported symbol - it may have already been added without a
303  * CRC, in this case just update the CRC
304  **/
305 static struct symbol *sym_add_exported(const char *name, struct module *mod,
306                                        enum export export)
307 {
308         struct symbol *s = find_symbol(name);
309
310         if (!s) {
311                 s = new_symbol(name, mod, export);
312         } else {
313                 if (!s->preloaded) {
314                         warn("%s: '%s' exported twice. Previous export "
315                              "was in %s%s\n", mod->name, name,
316                              s->module->name,
317                              is_vmlinux(s->module->name) ?"":".ko");
318                 } else {
319                         /* In case Module.symvers was out of date */
320                         s->module = mod;
321                 }
322         }
323         s->preloaded = 0;
324         s->vmlinux   = is_vmlinux(mod->name);
325         s->kernel    = 0;
326         s->export    = export;
327         return s;
328 }
329
330 static void sym_update_crc(const char *name, struct module *mod,
331                            unsigned int crc, enum export export)
332 {
333         struct symbol *s = find_symbol(name);
334
335         if (!s) {
336                 s = new_symbol(name, mod, export);
337                 /* Don't complain when we find it later. */
338                 s->preloaded = 1;
339         }
340         s->crc = crc;
341         s->crc_valid = 1;
342 }
343
344 void *grab_file(const char *filename, unsigned long *size)
345 {
346         struct stat st;
347         void *map = MAP_FAILED;
348         int fd;
349
350         fd = open(filename, O_RDONLY);
351         if (fd < 0)
352                 return NULL;
353         if (fstat(fd, &st))
354                 goto failed;
355
356         *size = st.st_size;
357         map = mmap(NULL, *size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
358
359 failed:
360         close(fd);
361         if (map == MAP_FAILED)
362                 return NULL;
363         return map;
364 }
365
366 /**
367   * Return a copy of the next line in a mmap'ed file.
368   * spaces in the beginning of the line is trimmed away.
369   * Return a pointer to a static buffer.
370   **/
371 char *get_next_line(unsigned long *pos, void *file, unsigned long size)
372 {
373         static char line[4096];
374         int skip = 1;
375         size_t len = 0;
376         signed char *p = (signed char *)file + *pos;
377         char *s = line;
378
379         for (; *pos < size ; (*pos)++) {
380                 if (skip && isspace(*p)) {
381                         p++;
382                         continue;
383                 }
384                 skip = 0;
385                 if (*p != '\n' && (*pos < size)) {
386                         len++;
387                         *s++ = *p++;
388                         if (len > 4095)
389                                 break; /* Too long, stop */
390                 } else {
391                         /* End of string */
392                         *s = '\0';
393                         return line;
394                 }
395         }
396         /* End of buffer */
397         return NULL;
398 }
399
400 void release_file(void *file, unsigned long size)
401 {
402         munmap(file, size);
403 }
404
405 static int parse_elf(struct elf_info *info, const char *filename)
406 {
407         unsigned int i;
408         Elf_Ehdr *hdr;
409         Elf_Shdr *sechdrs;
410         Elf_Sym  *sym;
411         const char *secstrings;
412         unsigned int symtab_idx = ~0U, symtab_shndx_idx = ~0U;
413
414         hdr = grab_file(filename, &info->size);
415         if (!hdr) {
416                 if (ignore_missing_files) {
417                         fprintf(stderr, "%s: %s (ignored)\n", filename,
418                                 strerror(errno));
419                         return 0;
420                 }
421                 perror(filename);
422                 exit(1);
423         }
424         info->hdr = hdr;
425         if (info->size < sizeof(*hdr)) {
426                 /* file too small, assume this is an empty .o file */
427                 return 0;
428         }
429         /* Is this a valid ELF file? */
430         if ((hdr->e_ident[EI_MAG0] != ELFMAG0) ||
431             (hdr->e_ident[EI_MAG1] != ELFMAG1) ||
432             (hdr->e_ident[EI_MAG2] != ELFMAG2) ||
433             (hdr->e_ident[EI_MAG3] != ELFMAG3)) {
434                 /* Not an ELF file - silently ignore it */
435                 return 0;
436         }
437         /* Fix endianness in ELF header */
438         hdr->e_type      = TO_NATIVE(hdr->e_type);
439         hdr->e_machine   = TO_NATIVE(hdr->e_machine);
440         hdr->e_version   = TO_NATIVE(hdr->e_version);
441         hdr->e_entry     = TO_NATIVE(hdr->e_entry);
442         hdr->e_phoff     = TO_NATIVE(hdr->e_phoff);
443         hdr->e_shoff     = TO_NATIVE(hdr->e_shoff);
444         hdr->e_flags     = TO_NATIVE(hdr->e_flags);
445         hdr->e_ehsize    = TO_NATIVE(hdr->e_ehsize);
446         hdr->e_phentsize = TO_NATIVE(hdr->e_phentsize);
447         hdr->e_phnum     = TO_NATIVE(hdr->e_phnum);
448         hdr->e_shentsize = TO_NATIVE(hdr->e_shentsize);
449         hdr->e_shnum     = TO_NATIVE(hdr->e_shnum);
450         hdr->e_shstrndx  = TO_NATIVE(hdr->e_shstrndx);
451         sechdrs = (void *)hdr + hdr->e_shoff;
452         info->sechdrs = sechdrs;
453
454         /* Check if file offset is correct */
455         if (hdr->e_shoff > info->size) {
456                 fatal("section header offset=%lu in file '%s' is bigger than "
457                       "filesize=%lu\n", (unsigned long)hdr->e_shoff,
458                       filename, info->size);
459                 return 0;
460         }
461
462         if (hdr->e_shnum == SHN_UNDEF) {
463                 /*
464                  * There are more than 64k sections,
465                  * read count from .sh_size.
466                  */
467                 info->num_sections = TO_NATIVE(sechdrs[0].sh_size);
468         }
469         else {
470                 info->num_sections = hdr->e_shnum;
471         }
472         if (hdr->e_shstrndx == SHN_XINDEX) {
473                 info->secindex_strings = TO_NATIVE(sechdrs[0].sh_link);
474         }
475         else {
476                 info->secindex_strings = hdr->e_shstrndx;
477         }
478
479         /* Fix endianness in section headers */
480         for (i = 0; i < info->num_sections; i++) {
481                 sechdrs[i].sh_name      = TO_NATIVE(sechdrs[i].sh_name);
482                 sechdrs[i].sh_type      = TO_NATIVE(sechdrs[i].sh_type);
483                 sechdrs[i].sh_flags     = TO_NATIVE(sechdrs[i].sh_flags);
484                 sechdrs[i].sh_addr      = TO_NATIVE(sechdrs[i].sh_addr);
485                 sechdrs[i].sh_offset    = TO_NATIVE(sechdrs[i].sh_offset);
486                 sechdrs[i].sh_size      = TO_NATIVE(sechdrs[i].sh_size);
487                 sechdrs[i].sh_link      = TO_NATIVE(sechdrs[i].sh_link);
488                 sechdrs[i].sh_info      = TO_NATIVE(sechdrs[i].sh_info);
489                 sechdrs[i].sh_addralign = TO_NATIVE(sechdrs[i].sh_addralign);
490                 sechdrs[i].sh_entsize   = TO_NATIVE(sechdrs[i].sh_entsize);
491         }
492         /* Find symbol table. */
493         secstrings = (void *)hdr + sechdrs[info->secindex_strings].sh_offset;
494         for (i = 1; i < info->num_sections; i++) {
495                 const char *secname;
496                 int nobits = sechdrs[i].sh_type == SHT_NOBITS;
497
498                 if (!nobits && sechdrs[i].sh_offset > info->size) {
499                         fatal("%s is truncated. sechdrs[i].sh_offset=%lu > "
500                               "sizeof(*hrd)=%zu\n", filename,
501                               (unsigned long)sechdrs[i].sh_offset,
502                               sizeof(*hdr));
503                         return 0;
504                 }
505                 secname = secstrings + sechdrs[i].sh_name;
506                 if (strcmp(secname, ".modinfo") == 0) {
507                         if (nobits)
508                                 fatal("%s has NOBITS .modinfo\n", filename);
509                         info->modinfo = (void *)hdr + sechdrs[i].sh_offset;
510                         info->modinfo_len = sechdrs[i].sh_size;
511                 } else if (strcmp(secname, "__ksymtab") == 0)
512                         info->export_sec = i;
513                 else if (strcmp(secname, "__ksymtab_unused") == 0)
514                         info->export_unused_sec = i;
515                 else if (strcmp(secname, "__ksymtab_gpl") == 0)
516                         info->export_gpl_sec = i;
517                 else if (strcmp(secname, "__ksymtab_unused_gpl") == 0)
518                         info->export_unused_gpl_sec = i;
519                 else if (strcmp(secname, "__ksymtab_gpl_future") == 0)
520                         info->export_gpl_future_sec = i;
521
522                 if (sechdrs[i].sh_type == SHT_SYMTAB) {
523                         unsigned int sh_link_idx;
524                         symtab_idx = i;
525                         info->symtab_start = (void *)hdr +
526                             sechdrs[i].sh_offset;
527                         info->symtab_stop  = (void *)hdr +
528                             sechdrs[i].sh_offset + sechdrs[i].sh_size;
529                         sh_link_idx = sechdrs[i].sh_link;
530                         info->strtab       = (void *)hdr +
531                             sechdrs[sh_link_idx].sh_offset;
532                 }
533
534                 /* 32bit section no. table? ("more than 64k sections") */
535                 if (sechdrs[i].sh_type == SHT_SYMTAB_SHNDX) {
536                         symtab_shndx_idx = i;
537                         info->symtab_shndx_start = (void *)hdr +
538                             sechdrs[i].sh_offset;
539                         info->symtab_shndx_stop  = (void *)hdr +
540                             sechdrs[i].sh_offset + sechdrs[i].sh_size;
541                 }
542         }
543         if (!info->symtab_start)
544                 fatal("%s has no symtab?\n", filename);
545
546         /* Fix endianness in symbols */
547         for (sym = info->symtab_start; sym < info->symtab_stop; sym++) {
548                 sym->st_shndx = TO_NATIVE(sym->st_shndx);
549                 sym->st_name  = TO_NATIVE(sym->st_name);
550                 sym->st_value = TO_NATIVE(sym->st_value);
551                 sym->st_size  = TO_NATIVE(sym->st_size);
552         }
553
554         if (symtab_shndx_idx != ~0U) {
555                 Elf32_Word *p;
556                 if (symtab_idx != sechdrs[symtab_shndx_idx].sh_link)
557                         fatal("%s: SYMTAB_SHNDX has bad sh_link: %u!=%u\n",
558                               filename, sechdrs[symtab_shndx_idx].sh_link,
559                               symtab_idx);
560                 /* Fix endianness */
561                 for (p = info->symtab_shndx_start; p < info->symtab_shndx_stop;
562                      p++)
563                         *p = TO_NATIVE(*p);
564         }
565
566         return 1;
567 }
568
569 static void parse_elf_finish(struct elf_info *info)
570 {
571         release_file(info->hdr, info->size);
572 }
573
574 static int ignore_undef_symbol(struct elf_info *info, const char *symname)
575 {
576         /* ignore __this_module, it will be resolved shortly */
577         if (strcmp(symname, VMLINUX_SYMBOL_STR(__this_module)) == 0)
578                 return 1;
579         /* ignore global offset table */
580         if (strcmp(symname, "_GLOBAL_OFFSET_TABLE_") == 0)
581                 return 1;
582         if (info->hdr->e_machine == EM_PPC)
583                 /* Special register function linked on all modules during final link of .ko */
584                 if (strncmp(symname, "_restgpr_", sizeof("_restgpr_") - 1) == 0 ||
585                     strncmp(symname, "_savegpr_", sizeof("_savegpr_") - 1) == 0 ||
586                     strncmp(symname, "_rest32gpr_", sizeof("_rest32gpr_") - 1) == 0 ||
587                     strncmp(symname, "_save32gpr_", sizeof("_save32gpr_") - 1) == 0 ||
588                     strncmp(symname, "_restvr_", sizeof("_restvr_") - 1) == 0 ||
589                     strncmp(symname, "_savevr_", sizeof("_savevr_") - 1) == 0)
590                         return 1;
591         if (info->hdr->e_machine == EM_PPC64)
592                 /* Special register function linked on all modules during final link of .ko */
593                 if (strncmp(symname, "_restgpr0_", sizeof("_restgpr0_") - 1) == 0 ||
594                     strncmp(symname, "_savegpr0_", sizeof("_savegpr0_") - 1) == 0 ||
595                     strncmp(symname, "_restvr_", sizeof("_restvr_") - 1) == 0 ||
596                     strncmp(symname, "_savevr_", sizeof("_savevr_") - 1) == 0)
597                         return 1;
598         /* Do not ignore this symbol */
599         return 0;
600 }
601
602 #define CRC_PFX     VMLINUX_SYMBOL_STR(__crc_)
603 #define KSYMTAB_PFX VMLINUX_SYMBOL_STR(__ksymtab_)
604
605 static void handle_modversions(struct module *mod, struct elf_info *info,
606                                Elf_Sym *sym, const char *symname)
607 {
608         unsigned int crc;
609         enum export export;
610
611         if ((!is_vmlinux(mod->name) || mod->is_dot_o) &&
612             strncmp(symname, "__ksymtab", 9) == 0)
613                 export = export_from_secname(info, get_secindex(info, sym));
614         else
615                 export = export_from_sec(info, get_secindex(info, sym));
616
617         /* CRC'd symbol */
618         if (strncmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) {
619                 crc = (unsigned int) sym->st_value;
620                 sym_update_crc(symname + strlen(CRC_PFX), mod, crc,
621                                 export);
622         }
623
624         switch (sym->st_shndx) {
625         case SHN_COMMON:
626                 if (!strncmp(symname, "__gnu_lto_", sizeof("__gnu_lto_")-1)) {
627                         /* Should warn here, but modpost runs before the linker */
628                 } else
629                         warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name);
630                 break;
631         case SHN_UNDEF:
632                 /* undefined symbol */
633                 if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL &&
634                     ELF_ST_BIND(sym->st_info) != STB_WEAK)
635                         break;
636                 if (ignore_undef_symbol(info, symname))
637                         break;
638 /* cope with newer glibc (2.3.4 or higher) STT_ definition in elf.h */
639 #if defined(STT_REGISTER) || defined(STT_SPARC_REGISTER)
640 /* add compatibility with older glibc */
641 #ifndef STT_SPARC_REGISTER
642 #define STT_SPARC_REGISTER STT_REGISTER
643 #endif
644                 if (info->hdr->e_machine == EM_SPARC ||
645                     info->hdr->e_machine == EM_SPARCV9) {
646                         /* Ignore register directives. */
647                         if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER)
648                                 break;
649                         if (symname[0] == '.') {
650                                 char *munged = strdup(symname);
651                                 munged[0] = '_';
652                                 munged[1] = toupper(munged[1]);
653                                 symname = munged;
654                         }
655                 }
656 #endif
657
658 #ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
659                 if (symname[0] != '_')
660                         break;
661                 else
662                         symname++;
663 #endif
664                 mod->unres = alloc_symbol(symname,
665                                           ELF_ST_BIND(sym->st_info) == STB_WEAK,
666                                           mod->unres);
667                 break;
668         default:
669                 /* All exported symbols */
670                 if (strncmp(symname, KSYMTAB_PFX, strlen(KSYMTAB_PFX)) == 0) {
671                         sym_add_exported(symname + strlen(KSYMTAB_PFX), mod,
672                                         export);
673                 }
674                 if (strcmp(symname, VMLINUX_SYMBOL_STR(init_module)) == 0)
675                         mod->has_init = 1;
676                 if (strcmp(symname, VMLINUX_SYMBOL_STR(cleanup_module)) == 0)
677                         mod->has_cleanup = 1;
678                 break;
679         }
680 }
681
682 /**
683  * Parse tag=value strings from .modinfo section
684  **/
685 static char *next_string(char *string, unsigned long *secsize)
686 {
687         /* Skip non-zero chars */
688         while (string[0]) {
689                 string++;
690                 if ((*secsize)-- <= 1)
691                         return NULL;
692         }
693
694         /* Skip any zero padding. */
695         while (!string[0]) {
696                 string++;
697                 if ((*secsize)-- <= 1)
698                         return NULL;
699         }
700         return string;
701 }
702
703 static char *get_next_modinfo(void *modinfo, unsigned long modinfo_len,
704                               const char *tag, char *info)
705 {
706         char *p;
707         unsigned int taglen = strlen(tag);
708         unsigned long size = modinfo_len;
709
710         if (info) {
711                 size -= info - (char *)modinfo;
712                 modinfo = next_string(info, &size);
713         }
714
715         for (p = modinfo; p; p = next_string(p, &size)) {
716                 if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')
717                         return p + taglen + 1;
718         }
719         return NULL;
720 }
721
722 static char *get_modinfo(void *modinfo, unsigned long modinfo_len,
723                          const char *tag)
724
725 {
726         return get_next_modinfo(modinfo, modinfo_len, tag, NULL);
727 }
728
729 /**
730  * Test if string s ends in string sub
731  * return 0 if match
732  **/
733 static int strrcmp(const char *s, const char *sub)
734 {
735         int slen, sublen;
736
737         if (!s || !sub)
738                 return 1;
739
740         slen = strlen(s);
741         sublen = strlen(sub);
742
743         if ((slen == 0) || (sublen == 0))
744                 return 1;
745
746         if (sublen > slen)
747                 return 1;
748
749         return memcmp(s + slen - sublen, sub, sublen);
750 }
751
752 static const char *sym_name(struct elf_info *elf, Elf_Sym *sym)
753 {
754         if (sym)
755                 return elf->strtab + sym->st_name;
756         else
757                 return "(unknown)";
758 }
759
760 static const char *sec_name(struct elf_info *elf, int secindex)
761 {
762         Elf_Shdr *sechdrs = elf->sechdrs;
763         return (void *)elf->hdr +
764                 elf->sechdrs[elf->secindex_strings].sh_offset +
765                 sechdrs[secindex].sh_name;
766 }
767
768 static const char *sech_name(struct elf_info *elf, Elf_Shdr *sechdr)
769 {
770         return (void *)elf->hdr +
771                 elf->sechdrs[elf->secindex_strings].sh_offset +
772                 sechdr->sh_name;
773 }
774
775 /* The pattern is an array of simple patterns.
776  * "foo" will match an exact string equal to "foo"
777  * "*foo" will match a string that ends with "foo"
778  * "foo*" will match a string that begins with "foo"
779  * "*foo*" will match a string that contains "foo"
780  */
781 static int match(const char *sym, const char * const pat[])
782 {
783         const char *p;
784         while (*pat) {
785                 p = *pat++;
786                 const char *endp = p + strlen(p) - 1;
787
788                 /* "*foo*" */
789                 if (*p == '*' && *endp == '*') {
790                         char *here, *bare = strndup(p + 1, strlen(p) - 2);
791
792                         here = strstr(sym, bare);
793                         free(bare);
794                         if (here != NULL)
795                                 return 1;
796                 }
797                 /* "*foo" */
798                 else if (*p == '*') {
799                         if (strrcmp(sym, p + 1) == 0)
800                                 return 1;
801                 }
802                 /* "foo*" */
803                 else if (*endp == '*') {
804                         if (strncmp(sym, p, strlen(p) - 1) == 0)
805                                 return 1;
806                 }
807                 /* no wildcards */
808                 else {
809                         if (strcmp(p, sym) == 0)
810                                 return 1;
811                 }
812         }
813         /* no match */
814         return 0;
815 }
816
817 /* sections that we do not want to do full section mismatch check on */
818 static const char *const section_white_list[] =
819 {
820         ".comment*",
821         ".debug*",
822         ".cranges",             /* sh64 */
823         ".zdebug*",             /* Compressed debug sections. */
824         ".GCC-command-line",    /* mn10300 */
825         ".GCC.command.line",    /* record-gcc-switches, non mn10300 */
826         ".mdebug*",        /* alpha, score, mips etc. */
827         ".pdr",            /* alpha, score, mips etc. */
828         ".stab*",
829         ".note*",
830         ".got*",
831         ".toc*",
832         ".xt.prop",                              /* xtensa */
833         ".xt.lit",         /* xtensa */
834         ".arcextmap*",                  /* arc */
835         ".gnu.linkonce.arcext*",        /* arc : modules */
836         ".gnu.lto*",
837         NULL
838 };
839
840 /*
841  * This is used to find sections missing the SHF_ALLOC flag.
842  * The cause of this is often a section specified in assembler
843  * without "ax" / "aw".
844  */
845 static void check_section(const char *modname, struct elf_info *elf,
846                           Elf_Shdr *sechdr)
847 {
848         const char *sec = sech_name(elf, sechdr);
849
850         if (sechdr->sh_type == SHT_PROGBITS &&
851             !(sechdr->sh_flags & SHF_ALLOC) &&
852             !match(sec, section_white_list)) {
853                 warn("%s (%s): unexpected non-allocatable section.\n"
854                      "Did you forget to use \"ax\"/\"aw\" in a .S file?\n"
855                      "Note that for example <linux/init.h> contains\n"
856                      "section definitions for use in .S files.\n\n",
857                      modname, sec);
858         }
859 }
860
861
862
863 #define ALL_INIT_DATA_SECTIONS \
864         ".init.setup", ".init.rodata", ".meminit.rodata", \
865         ".init.data", ".meminit.data"
866 #define ALL_EXIT_DATA_SECTIONS \
867         ".exit.data", ".memexit.data"
868
869 #define ALL_INIT_TEXT_SECTIONS \
870         ".init.text", ".meminit.text"
871 #define ALL_EXIT_TEXT_SECTIONS \
872         ".exit.text", ".memexit.text"
873
874 #define ALL_PCI_INIT_SECTIONS   \
875         ".pci_fixup_early", ".pci_fixup_header", ".pci_fixup_final", \
876         ".pci_fixup_enable", ".pci_fixup_resume", \
877         ".pci_fixup_resume_early", ".pci_fixup_suspend"
878
879 #define ALL_XXXINIT_SECTIONS MEM_INIT_SECTIONS
880 #define ALL_XXXEXIT_SECTIONS MEM_EXIT_SECTIONS
881
882 #define ALL_INIT_SECTIONS INIT_SECTIONS, ALL_XXXINIT_SECTIONS
883 #define ALL_EXIT_SECTIONS EXIT_SECTIONS, ALL_XXXEXIT_SECTIONS
884
885 #define DATA_SECTIONS ".data", ".data.rel"
886 #define TEXT_SECTIONS ".text", ".text.unlikely", ".sched.text", \
887                 ".kprobes.text"
888 #define OTHER_TEXT_SECTIONS ".ref.text", ".head.text", ".spinlock.text", \
889                 ".fixup", ".entry.text", ".exception.text", ".text.*", \
890                 ".coldtext"
891
892 #define INIT_SECTIONS      ".init.*"
893 #define MEM_INIT_SECTIONS  ".meminit.*"
894
895 #define EXIT_SECTIONS      ".exit.*"
896 #define MEM_EXIT_SECTIONS  ".memexit.*"
897
898 #define ALL_TEXT_SECTIONS  ALL_INIT_TEXT_SECTIONS, ALL_EXIT_TEXT_SECTIONS, \
899                 TEXT_SECTIONS, OTHER_TEXT_SECTIONS
900
901 /* init data sections */
902 static const char *const init_data_sections[] =
903         { ALL_INIT_DATA_SECTIONS, NULL };
904
905 /* all init sections */
906 static const char *const init_sections[] = { ALL_INIT_SECTIONS, NULL };
907
908 /* All init and exit sections (code + data) */
909 static const char *const init_exit_sections[] =
910         {ALL_INIT_SECTIONS, ALL_EXIT_SECTIONS, NULL };
911
912 /* all text sections */
913 static const char *const text_sections[] = { ALL_TEXT_SECTIONS, NULL };
914
915 /* data section */
916 static const char *const data_sections[] = { DATA_SECTIONS, NULL };
917
918
919 /* symbols in .data that may refer to init/exit sections */
920 #define DEFAULT_SYMBOL_WHITE_LIST                                       \
921         "*driver",                                                      \
922         "*_template", /* scsi uses *_template a lot */                  \
923         "*_timer",    /* arm uses ops structures named _timer a lot */  \
924         "*_sht",      /* scsi also used *_sht to some extent */         \
925         "*_ops",                                                        \
926         "*_probe",                                                      \
927         "*_probe_one",                                                  \
928         "*_console"
929
930 static const char *const head_sections[] = { ".head.text*", NULL };
931 static const char *const linker_symbols[] =
932         { "__init_begin", "_sinittext", "_einittext", NULL };
933 static const char *const optim_symbols[] = { "*.constprop.*", NULL };
934
935 enum mismatch {
936         TEXT_TO_ANY_INIT,
937         DATA_TO_ANY_INIT,
938         TEXT_TO_ANY_EXIT,
939         DATA_TO_ANY_EXIT,
940         XXXINIT_TO_SOME_INIT,
941         XXXEXIT_TO_SOME_EXIT,
942         ANY_INIT_TO_ANY_EXIT,
943         ANY_EXIT_TO_ANY_INIT,
944         EXPORT_TO_INIT_EXIT,
945         EXTABLE_TO_NON_TEXT,
946 };
947
948 /**
949  * Describe how to match sections on different criterias:
950  *
951  * @fromsec: Array of sections to be matched.
952  *
953  * @bad_tosec: Relocations applied to a section in @fromsec to a section in
954  * this array is forbidden (black-list).  Can be empty.
955  *
956  * @good_tosec: Relocations applied to a section in @fromsec must be
957  * targetting sections in this array (white-list).  Can be empty.
958  *
959  * @mismatch: Type of mismatch.
960  *
961  * @symbol_white_list: Do not match a relocation to a symbol in this list
962  * even if it is targetting a section in @bad_to_sec.
963  *
964  * @handler: Specific handler to call when a match is found.  If NULL,
965  * default_mismatch_handler() will be called.
966  *
967  */
968 struct sectioncheck {
969         const char *fromsec[20];
970         const char *bad_tosec[20];
971         const char *good_tosec[20];
972         enum mismatch mismatch;
973         const char *symbol_white_list[20];
974         void (*handler)(const char *modname, struct elf_info *elf,
975                         const struct sectioncheck* const mismatch,
976                         Elf_Rela *r, Elf_Sym *sym, const char *fromsec);
977
978 };
979
980 static void extable_mismatch_handler(const char *modname, struct elf_info *elf,
981                                      const struct sectioncheck* const mismatch,
982                                      Elf_Rela *r, Elf_Sym *sym,
983                                      const char *fromsec);
984
985 static const struct sectioncheck sectioncheck[] = {
986 /* Do not reference init/exit code/data from
987  * normal code and data
988  */
989 {
990         .fromsec = { TEXT_SECTIONS, NULL },
991         .bad_tosec = { ALL_INIT_SECTIONS, NULL },
992         .mismatch = TEXT_TO_ANY_INIT,
993         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
994 },
995 {
996         .fromsec = { DATA_SECTIONS, NULL },
997         .bad_tosec = { ALL_XXXINIT_SECTIONS, NULL },
998         .mismatch = DATA_TO_ANY_INIT,
999         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1000 },
1001 {
1002         .fromsec = { DATA_SECTIONS, NULL },
1003         .bad_tosec = { INIT_SECTIONS, NULL },
1004         .mismatch = DATA_TO_ANY_INIT,
1005         .symbol_white_list = {
1006                 "*_template", "*_timer", "*_sht", "*_ops",
1007                 "*_probe", "*_probe_one", "*_console", NULL
1008         },
1009 },
1010 {
1011         .fromsec = { TEXT_SECTIONS, NULL },
1012         .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1013         .mismatch = TEXT_TO_ANY_EXIT,
1014         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1015 },
1016 {
1017         .fromsec = { DATA_SECTIONS, NULL },
1018         .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1019         .mismatch = DATA_TO_ANY_EXIT,
1020         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1021 },
1022 /* Do not reference init code/data from meminit code/data */
1023 {
1024         .fromsec = { ALL_XXXINIT_SECTIONS, NULL },
1025         .bad_tosec = { INIT_SECTIONS, NULL },
1026         .mismatch = XXXINIT_TO_SOME_INIT,
1027         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1028 },
1029 /* Do not reference exit code/data from memexit code/data */
1030 {
1031         .fromsec = { ALL_XXXEXIT_SECTIONS, NULL },
1032         .bad_tosec = { EXIT_SECTIONS, NULL },
1033         .mismatch = XXXEXIT_TO_SOME_EXIT,
1034         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1035 },
1036 /* Do not use exit code/data from init code */
1037 {
1038         .fromsec = { ALL_INIT_SECTIONS, NULL },
1039         .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1040         .mismatch = ANY_INIT_TO_ANY_EXIT,
1041         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1042 },
1043 /* Do not use init code/data from exit code */
1044 {
1045         .fromsec = { ALL_EXIT_SECTIONS, NULL },
1046         .bad_tosec = { ALL_INIT_SECTIONS, NULL },
1047         .mismatch = ANY_EXIT_TO_ANY_INIT,
1048         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1049 },
1050 {
1051         .fromsec = { ALL_PCI_INIT_SECTIONS, NULL },
1052         .bad_tosec = { INIT_SECTIONS, NULL },
1053         .mismatch = ANY_INIT_TO_ANY_EXIT,
1054         .symbol_white_list = { NULL },
1055 },
1056 /* Do not export init/exit functions or data */
1057 {
1058         .fromsec = { "__ksymtab*", NULL },
1059         .bad_tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL },
1060         .mismatch = EXPORT_TO_INIT_EXIT,
1061         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1062 },
1063 {
1064         .fromsec = { "__ex_table", NULL },
1065         /* If you're adding any new black-listed sections in here, consider
1066          * adding a special 'printer' for them in scripts/check_extable.
1067          */
1068         .bad_tosec = { ".altinstr_replacement", NULL },
1069         .good_tosec = {ALL_TEXT_SECTIONS , NULL},
1070         .mismatch = EXTABLE_TO_NON_TEXT,
1071         .handler = extable_mismatch_handler,
1072 }
1073 };
1074
1075 static const struct sectioncheck *section_mismatch(
1076                 const char *fromsec, const char *tosec)
1077 {
1078         int i;
1079         int elems = sizeof(sectioncheck) / sizeof(struct sectioncheck);
1080         const struct sectioncheck *check = &sectioncheck[0];
1081
1082         /*
1083          * The target section could be the SHT_NUL section when we're
1084          * handling relocations to un-resolved symbols, trying to match it
1085          * doesn't make much sense and causes build failures on parisc and
1086          * mn10300 architectures.
1087          */
1088         if (*tosec == '\0')
1089                 return NULL;
1090
1091         for (i = 0; i < elems; i++) {
1092                 if (match(fromsec, check->fromsec)) {
1093                         if (check->bad_tosec[0] && match(tosec, check->bad_tosec))
1094                                 return check;
1095                         if (check->good_tosec[0] && !match(tosec, check->good_tosec))
1096                                 return check;
1097                 }
1098                 check++;
1099         }
1100         return NULL;
1101 }
1102
1103 /**
1104  * Whitelist to allow certain references to pass with no warning.
1105  *
1106  * Pattern 1:
1107  *   If a module parameter is declared __initdata and permissions=0
1108  *   then this is legal despite the warning generated.
1109  *   We cannot see value of permissions here, so just ignore
1110  *   this pattern.
1111  *   The pattern is identified by:
1112  *   tosec   = .init.data
1113  *   fromsec = .data*
1114  *   atsym   =__param*
1115  *
1116  * Pattern 1a:
1117  *   module_param_call() ops can refer to __init set function if permissions=0
1118  *   The pattern is identified by:
1119  *   tosec   = .init.text
1120  *   fromsec = .data*
1121  *   atsym   = __param_ops_*
1122  *
1123  * Pattern 2:
1124  *   Many drivers utilise a *driver container with references to
1125  *   add, remove, probe functions etc.
1126  *   the pattern is identified by:
1127  *   tosec   = init or exit section
1128  *   fromsec = data section
1129  *   atsym = *driver, *_template, *_sht, *_ops, *_probe,
1130  *           *probe_one, *_console, *_timer
1131  *
1132  * Pattern 3:
1133  *   Whitelist all references from .head.text to any init section
1134  *
1135  * Pattern 4:
1136  *   Some symbols belong to init section but still it is ok to reference
1137  *   these from non-init sections as these symbols don't have any memory
1138  *   allocated for them and symbol address and value are same. So even
1139  *   if init section is freed, its ok to reference those symbols.
1140  *   For ex. symbols marking the init section boundaries.
1141  *   This pattern is identified by
1142  *   refsymname = __init_begin, _sinittext, _einittext
1143  *
1144  * Pattern 5:
1145  *   GCC may optimize static inlines when fed constant arg(s) resulting
1146  *   in functions like cpumask_empty() -- generating an associated symbol
1147  *   cpumask_empty.constprop.3 that appears in the audit.  If the const that
1148  *   is passed in comes from __init, like say nmi_ipi_mask, we get a
1149  *   meaningless section warning.  May need to add isra symbols too...
1150  *   This pattern is identified by
1151  *   tosec   = init section
1152  *   fromsec = text section
1153  *   refsymname = *.constprop.*
1154  *
1155  **/
1156 static int secref_whitelist(const struct sectioncheck *mismatch,
1157                             const char *fromsec, const char *fromsym,
1158                             const char *tosec, const char *tosym)
1159 {
1160         /* Check for pattern 1 */
1161         if (match(tosec, init_data_sections) &&
1162             match(fromsec, data_sections) &&
1163             (strncmp(fromsym, "__param", strlen("__param")) == 0))
1164                 return 0;
1165
1166         /* Check for pattern 1a */
1167         if (strcmp(tosec, ".init.text") == 0 &&
1168             match(fromsec, data_sections) &&
1169             (strncmp(fromsym, "__param_ops_", strlen("__param_ops_")) == 0))
1170                 return 0;
1171
1172         /* Check for pattern 2 */
1173         if (match(tosec, init_exit_sections) &&
1174             match(fromsec, data_sections) &&
1175             match(fromsym, mismatch->symbol_white_list))
1176                 return 0;
1177
1178         /* Check for pattern 3 */
1179         if (match(fromsec, head_sections) &&
1180             match(tosec, init_sections))
1181                 return 0;
1182
1183         /* Check for pattern 4 */
1184         if (match(tosym, linker_symbols))
1185                 return 0;
1186
1187         /* Check for pattern 5 */
1188         if (match(fromsec, text_sections) &&
1189             match(tosec, init_sections) &&
1190             match(fromsym, optim_symbols))
1191                 return 0;
1192
1193         return 1;
1194 }
1195
1196 /**
1197  * Find symbol based on relocation record info.
1198  * In some cases the symbol supplied is a valid symbol so
1199  * return refsym. If st_name != 0 we assume this is a valid symbol.
1200  * In other cases the symbol needs to be looked up in the symbol table
1201  * based on section and address.
1202  *  **/
1203 static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
1204                                 Elf_Sym *relsym)
1205 {
1206         Elf_Sym *sym;
1207         Elf_Sym *near = NULL;
1208         Elf64_Sword distance = 20;
1209         Elf64_Sword d;
1210         unsigned int relsym_secindex;
1211
1212         if (relsym->st_name != 0)
1213                 return relsym;
1214
1215         relsym_secindex = get_secindex(elf, relsym);
1216         for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1217                 if (get_secindex(elf, sym) != relsym_secindex)
1218                         continue;
1219                 if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
1220                         continue;
1221                 if (sym->st_value == addr)
1222                         return sym;
1223                 /* Find a symbol nearby - addr are maybe negative */
1224                 d = sym->st_value - addr;
1225                 if (d < 0)
1226                         d = addr - sym->st_value;
1227                 if (d < distance) {
1228                         distance = d;
1229                         near = sym;
1230                 }
1231         }
1232         /* We need a close match */
1233         if (distance < 20)
1234                 return near;
1235         else
1236                 return NULL;
1237 }
1238
1239 static inline int is_arm_mapping_symbol(const char *str)
1240 {
1241         return str[0] == '$' && strchr("axtd", str[1])
1242                && (str[2] == '\0' || str[2] == '.');
1243 }
1244
1245 /*
1246  * If there's no name there, ignore it; likewise, ignore it if it's
1247  * one of the magic symbols emitted used by current ARM tools.
1248  *
1249  * Otherwise if find_symbols_between() returns those symbols, they'll
1250  * fail the whitelist tests and cause lots of false alarms ... fixable
1251  * only by merging __exit and __init sections into __text, bloating
1252  * the kernel (which is especially evil on embedded platforms).
1253  */
1254 static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym)
1255 {
1256         const char *name = elf->strtab + sym->st_name;
1257
1258         if (!name || !strlen(name))
1259                 return 0;
1260         return !is_arm_mapping_symbol(name);
1261 }
1262
1263 /*
1264  * Find symbols before or equal addr and after addr - in the section sec.
1265  * If we find two symbols with equal offset prefer one with a valid name.
1266  * The ELF format may have a better way to detect what type of symbol
1267  * it is, but this works for now.
1268  **/
1269 static Elf_Sym *find_elf_symbol2(struct elf_info *elf, Elf_Addr addr,
1270                                  const char *sec)
1271 {
1272         Elf_Sym *sym;
1273         Elf_Sym *near = NULL;
1274         Elf_Addr distance = ~0;
1275
1276         for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1277                 const char *symsec;
1278
1279                 if (is_shndx_special(sym->st_shndx))
1280                         continue;
1281                 symsec = sec_name(elf, get_secindex(elf, sym));
1282                 if (strcmp(symsec, sec) != 0)
1283                         continue;
1284                 if (!is_valid_name(elf, sym))
1285                         continue;
1286                 if (sym->st_value <= addr) {
1287                         if ((addr - sym->st_value) < distance) {
1288                                 distance = addr - sym->st_value;
1289                                 near = sym;
1290                         } else if ((addr - sym->st_value) == distance) {
1291                                 near = sym;
1292                         }
1293                 }
1294         }
1295         return near;
1296 }
1297
1298 /*
1299  * Convert a section name to the function/data attribute
1300  * .init.text => __init
1301  * .memexitconst => __memconst
1302  * etc.
1303  *
1304  * The memory of returned value has been allocated on a heap. The user of this
1305  * method should free it after usage.
1306 */
1307 static char *sec2annotation(const char *s)
1308 {
1309         if (match(s, init_exit_sections)) {
1310                 char *p = malloc(20);
1311                 char *r = p;
1312
1313                 *p++ = '_';
1314                 *p++ = '_';
1315                 if (*s == '.')
1316                         s++;
1317                 while (*s && *s != '.')
1318                         *p++ = *s++;
1319                 *p = '\0';
1320                 if (*s == '.')
1321                         s++;
1322                 if (strstr(s, "rodata") != NULL)
1323                         strcat(p, "const ");
1324                 else if (strstr(s, "data") != NULL)
1325                         strcat(p, "data ");
1326                 else
1327                         strcat(p, " ");
1328                 return r;
1329         } else {
1330                 return strdup("");
1331         }
1332 }
1333
1334 static int is_function(Elf_Sym *sym)
1335 {
1336         if (sym)
1337                 return ELF_ST_TYPE(sym->st_info) == STT_FUNC;
1338         else
1339                 return -1;
1340 }
1341
1342 static void print_section_list(const char * const list[20])
1343 {
1344         const char *const *s = list;
1345
1346         while (*s) {
1347                 fprintf(stderr, "%s", *s);
1348                 s++;
1349                 if (*s)
1350                         fprintf(stderr, ", ");
1351         }
1352         fprintf(stderr, "\n");
1353 }
1354
1355 static inline void get_pretty_name(int is_func, const char** name, const char** name_p)
1356 {
1357         switch (is_func) {
1358         case 0: *name = "variable"; *name_p = ""; break;
1359         case 1: *name = "function"; *name_p = "()"; break;
1360         default: *name = "(unknown reference)"; *name_p = ""; break;
1361         }
1362 }
1363
1364 /*
1365  * Print a warning about a section mismatch.
1366  * Try to find symbols near it so user can find it.
1367  * Check whitelist before warning - it may be a false positive.
1368  */
1369 static void report_sec_mismatch(const char *modname,
1370                                 const struct sectioncheck *mismatch,
1371                                 const char *fromsec,
1372                                 unsigned long long fromaddr,
1373                                 const char *fromsym,
1374                                 int from_is_func,
1375                                 const char *tosec, const char *tosym,
1376                                 int to_is_func)
1377 {
1378         const char *from, *from_p;
1379         const char *to, *to_p;
1380         char *prl_from;
1381         char *prl_to;
1382
1383         sec_mismatch_count++;
1384         if (!sec_mismatch_verbose)
1385                 return;
1386
1387         get_pretty_name(from_is_func, &from, &from_p);
1388         get_pretty_name(to_is_func, &to, &to_p);
1389
1390         warn("%s(%s+0x%llx): Section mismatch in reference from the %s %s%s "
1391              "to the %s %s:%s%s\n",
1392              modname, fromsec, fromaddr, from, fromsym, from_p, to, tosec,
1393              tosym, to_p);
1394
1395         switch (mismatch->mismatch) {
1396         case TEXT_TO_ANY_INIT:
1397                 prl_from = sec2annotation(fromsec);
1398                 prl_to = sec2annotation(tosec);
1399                 fprintf(stderr,
1400                 "The function %s%s() references\n"
1401                 "the %s %s%s%s.\n"
1402                 "This is often because %s lacks a %s\n"
1403                 "annotation or the annotation of %s is wrong.\n",
1404                 prl_from, fromsym,
1405                 to, prl_to, tosym, to_p,
1406                 fromsym, prl_to, tosym);
1407                 free(prl_from);
1408                 free(prl_to);
1409                 break;
1410         case DATA_TO_ANY_INIT: {
1411                 prl_to = sec2annotation(tosec);
1412                 fprintf(stderr,
1413                 "The variable %s references\n"
1414                 "the %s %s%s%s\n"
1415                 "If the reference is valid then annotate the\n"
1416                 "variable with __init* or __refdata (see linux/init.h) "
1417                 "or name the variable:\n",
1418                 fromsym, to, prl_to, tosym, to_p);
1419                 print_section_list(mismatch->symbol_white_list);
1420                 free(prl_to);
1421                 break;
1422         }
1423         case TEXT_TO_ANY_EXIT:
1424                 prl_to = sec2annotation(tosec);
1425                 fprintf(stderr,
1426                 "The function %s() references a %s in an exit section.\n"
1427                 "Often the %s %s%s has valid usage outside the exit section\n"
1428                 "and the fix is to remove the %sannotation of %s.\n",
1429                 fromsym, to, to, tosym, to_p, prl_to, tosym);
1430                 free(prl_to);
1431                 break;
1432         case DATA_TO_ANY_EXIT: {
1433                 prl_to = sec2annotation(tosec);
1434                 fprintf(stderr,
1435                 "The variable %s references\n"
1436                 "the %s %s%s%s\n"
1437                 "If the reference is valid then annotate the\n"
1438                 "variable with __exit* (see linux/init.h) or "
1439                 "name the variable:\n",
1440                 fromsym, to, prl_to, tosym, to_p);
1441                 print_section_list(mismatch->symbol_white_list);
1442                 free(prl_to);
1443                 break;
1444         }
1445         case XXXINIT_TO_SOME_INIT:
1446         case XXXEXIT_TO_SOME_EXIT:
1447                 prl_from = sec2annotation(fromsec);
1448                 prl_to = sec2annotation(tosec);
1449                 fprintf(stderr,
1450                 "The %s %s%s%s references\n"
1451                 "a %s %s%s%s.\n"
1452                 "If %s is only used by %s then\n"
1453                 "annotate %s with a matching annotation.\n",
1454                 from, prl_from, fromsym, from_p,
1455                 to, prl_to, tosym, to_p,
1456                 tosym, fromsym, tosym);
1457                 free(prl_from);
1458                 free(prl_to);
1459                 break;
1460         case ANY_INIT_TO_ANY_EXIT:
1461                 prl_from = sec2annotation(fromsec);
1462                 prl_to = sec2annotation(tosec);
1463                 fprintf(stderr,
1464                 "The %s %s%s%s references\n"
1465                 "a %s %s%s%s.\n"
1466                 "This is often seen when error handling "
1467                 "in the init function\n"
1468                 "uses functionality in the exit path.\n"
1469                 "The fix is often to remove the %sannotation of\n"
1470                 "%s%s so it may be used outside an exit section.\n",
1471                 from, prl_from, fromsym, from_p,
1472                 to, prl_to, tosym, to_p,
1473                 prl_to, tosym, to_p);
1474                 free(prl_from);
1475                 free(prl_to);
1476                 break;
1477         case ANY_EXIT_TO_ANY_INIT:
1478                 prl_from = sec2annotation(fromsec);
1479                 prl_to = sec2annotation(tosec);
1480                 fprintf(stderr,
1481                 "The %s %s%s%s references\n"
1482                 "a %s %s%s%s.\n"
1483                 "This is often seen when error handling "
1484                 "in the exit function\n"
1485                 "uses functionality in the init path.\n"
1486                 "The fix is often to remove the %sannotation of\n"
1487                 "%s%s so it may be used outside an init section.\n",
1488                 from, prl_from, fromsym, from_p,
1489                 to, prl_to, tosym, to_p,
1490                 prl_to, tosym, to_p);
1491                 free(prl_from);
1492                 free(prl_to);
1493                 break;
1494         case EXPORT_TO_INIT_EXIT:
1495                 prl_to = sec2annotation(tosec);
1496                 fprintf(stderr,
1497                 "The symbol %s is exported and annotated %s\n"
1498                 "Fix this by removing the %sannotation of %s "
1499                 "or drop the export.\n",
1500                 tosym, prl_to, prl_to, tosym);
1501                 free(prl_to);
1502                 break;
1503         case EXTABLE_TO_NON_TEXT:
1504                 fatal("There's a special handler for this mismatch type, "
1505                       "we should never get here.");
1506                 break;
1507         }
1508         fprintf(stderr, "\n");
1509 }
1510
1511 static void default_mismatch_handler(const char *modname, struct elf_info *elf,
1512                                      const struct sectioncheck* const mismatch,
1513                                      Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1514 {
1515         const char *tosec;
1516         Elf_Sym *to;
1517         Elf_Sym *from;
1518         const char *tosym;
1519         const char *fromsym;
1520
1521         from = find_elf_symbol2(elf, r->r_offset, fromsec);
1522         fromsym = sym_name(elf, from);
1523
1524         if (!strncmp(fromsym, "reference___initcall",
1525                      sizeof("reference___initcall")-1))
1526                 return;
1527
1528         tosec = sec_name(elf, get_secindex(elf, sym));
1529         to = find_elf_symbol(elf, r->r_addend, sym);
1530         tosym = sym_name(elf, to);
1531
1532         /* check whitelist - we may ignore it */
1533         if (secref_whitelist(mismatch,
1534                              fromsec, fromsym, tosec, tosym)) {
1535                 report_sec_mismatch(modname, mismatch,
1536                                     fromsec, r->r_offset, fromsym,
1537                                     is_function(from), tosec, tosym,
1538                                     is_function(to));
1539         }
1540 }
1541
1542 static int is_executable_section(struct elf_info* elf, unsigned int section_index)
1543 {
1544         if (section_index > elf->num_sections)
1545                 fatal("section_index is outside elf->num_sections!\n");
1546
1547         return ((elf->sechdrs[section_index].sh_flags & SHF_EXECINSTR) == SHF_EXECINSTR);
1548 }
1549
1550 /*
1551  * We rely on a gross hack in section_rel[a]() calling find_extable_entry_size()
1552  * to know the sizeof(struct exception_table_entry) for the target architecture.
1553  */
1554 static unsigned int extable_entry_size = 0;
1555 static void find_extable_entry_size(const char* const sec, const Elf_Rela* r)
1556 {
1557         /*
1558          * If we're currently checking the second relocation within __ex_table,
1559          * that relocation offset tells us the offsetof(struct
1560          * exception_table_entry, fixup) which is equal to sizeof(struct
1561          * exception_table_entry) divided by two.  We use that to our advantage
1562          * since there's no portable way to get that size as every architecture
1563          * seems to go with different sized types.  Not pretty but better than
1564          * hard-coding the size for every architecture..
1565          */
1566         if (!extable_entry_size)
1567                 extable_entry_size = r->r_offset * 2;
1568 }
1569
1570 static inline bool is_extable_fault_address(Elf_Rela *r)
1571 {
1572         /*
1573          * extable_entry_size is only discovered after we've handled the
1574          * _second_ relocation in __ex_table, so only abort when we're not
1575          * handling the first reloc and extable_entry_size is zero.
1576          */
1577         if (r->r_offset && extable_entry_size == 0)
1578                 fatal("extable_entry size hasn't been discovered!\n");
1579
1580         return ((r->r_offset == 0) ||
1581                 (r->r_offset % extable_entry_size == 0));
1582 }
1583
1584 #define is_second_extable_reloc(Start, Cur, Sec)                        \
1585         (((Cur) == (Start) + 1) && (strcmp("__ex_table", (Sec)) == 0))
1586
1587 static void report_extable_warnings(const char* modname, struct elf_info* elf,
1588                                     const struct sectioncheck* const mismatch,
1589                                     Elf_Rela* r, Elf_Sym* sym,
1590                                     const char* fromsec, const char* tosec)
1591 {
1592         Elf_Sym* fromsym = find_elf_symbol2(elf, r->r_offset, fromsec);
1593         const char* fromsym_name = sym_name(elf, fromsym);
1594         Elf_Sym* tosym = find_elf_symbol(elf, r->r_addend, sym);
1595         const char* tosym_name = sym_name(elf, tosym);
1596         const char* from_pretty_name;
1597         const char* from_pretty_name_p;
1598         const char* to_pretty_name;
1599         const char* to_pretty_name_p;
1600
1601         get_pretty_name(is_function(fromsym),
1602                         &from_pretty_name, &from_pretty_name_p);
1603         get_pretty_name(is_function(tosym),
1604                         &to_pretty_name, &to_pretty_name_p);
1605
1606         warn("%s(%s+0x%lx): Section mismatch in reference"
1607              " from the %s %s%s to the %s %s:%s%s\n",
1608              modname, fromsec, (long)r->r_offset, from_pretty_name,
1609              fromsym_name, from_pretty_name_p,
1610              to_pretty_name, tosec, tosym_name, to_pretty_name_p);
1611
1612         if (!match(tosec, mismatch->bad_tosec) &&
1613             is_executable_section(elf, get_secindex(elf, sym)))
1614                 fprintf(stderr,
1615                         "The relocation at %s+0x%lx references\n"
1616                         "section \"%s\" which is not in the list of\n"
1617                         "authorized sections.  If you're adding a new section\n"
1618                         "and/or if this reference is valid, add \"%s\" to the\n"
1619                         "list of authorized sections to jump to on fault.\n"
1620                         "This can be achieved by adding \"%s\" to \n"
1621                         "OTHER_TEXT_SECTIONS in scripts/mod/modpost.c.\n",
1622                         fromsec, (long)r->r_offset, tosec, tosec, tosec);
1623 }
1624
1625 static void extable_mismatch_handler(const char* modname, struct elf_info *elf,
1626                                      const struct sectioncheck* const mismatch,
1627                                      Elf_Rela* r, Elf_Sym* sym,
1628                                      const char *fromsec)
1629 {
1630         const char* tosec = sec_name(elf, get_secindex(elf, sym));
1631
1632         sec_mismatch_count++;
1633
1634         if (sec_mismatch_verbose)
1635                 report_extable_warnings(modname, elf, mismatch, r, sym,
1636                                         fromsec, tosec);
1637
1638         if (match(tosec, mismatch->bad_tosec))
1639                 fatal("The relocation at %s+0x%lx references\n"
1640                       "section \"%s\" which is black-listed.\n"
1641                       "Something is seriously wrong and should be fixed.\n"
1642                       "You might get more information about where this is\n"
1643                       "coming from by using scripts/check_extable.sh %s\n",
1644                       fromsec, (long)r->r_offset, tosec, modname);
1645         else if (!is_executable_section(elf, get_secindex(elf, sym))) {
1646                 if (is_extable_fault_address(r))
1647                         fatal("The relocation at %s+0x%lx references\n"
1648                               "section \"%s\" which is not executable, IOW\n"
1649                               "it is not possible for the kernel to fault\n"
1650                               "at that address.  Something is seriously wrong\n"
1651                               "and should be fixed.\n",
1652                               fromsec, (long)r->r_offset, tosec);
1653                 else
1654                         fatal("The relocation at %s+0x%lx references\n"
1655                               "section \"%s\" which is not executable, IOW\n"
1656                               "the kernel will fault if it ever tries to\n"
1657                               "jump to it.  Something is seriously wrong\n"
1658                               "and should be fixed.\n",
1659                               fromsec, (long)r->r_offset, tosec);
1660         }
1661 }
1662
1663 static void check_section_mismatch(const char *modname, struct elf_info *elf,
1664                                    Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1665 {
1666         const char *tosec = sec_name(elf, get_secindex(elf, sym));;
1667         const struct sectioncheck *mismatch = section_mismatch(fromsec, tosec);
1668
1669         if (mismatch) {
1670                 if (mismatch->handler)
1671                         mismatch->handler(modname, elf,  mismatch,
1672                                           r, sym, fromsec);
1673                 else
1674                         default_mismatch_handler(modname, elf, mismatch,
1675                                                  r, sym, fromsec);
1676         }
1677 }
1678
1679 static unsigned int *reloc_location(struct elf_info *elf,
1680                                     Elf_Shdr *sechdr, Elf_Rela *r)
1681 {
1682         Elf_Shdr *sechdrs = elf->sechdrs;
1683         int section = sechdr->sh_info;
1684
1685         return (void *)elf->hdr + sechdrs[section].sh_offset +
1686                 r->r_offset;
1687 }
1688
1689 static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1690 {
1691         unsigned int r_typ = ELF_R_TYPE(r->r_info);
1692         unsigned int *location = reloc_location(elf, sechdr, r);
1693
1694         switch (r_typ) {
1695         case R_386_32:
1696                 r->r_addend = TO_NATIVE(*location);
1697                 break;
1698         case R_386_PC32:
1699                 r->r_addend = TO_NATIVE(*location) + 4;
1700                 /* For CONFIG_RELOCATABLE=y */
1701                 if (elf->hdr->e_type == ET_EXEC)
1702                         r->r_addend += r->r_offset;
1703                 break;
1704         }
1705         return 0;
1706 }
1707
1708 #ifndef R_ARM_CALL
1709 #define R_ARM_CALL      28
1710 #endif
1711 #ifndef R_ARM_JUMP24
1712 #define R_ARM_JUMP24    29
1713 #endif
1714
1715 #ifndef R_ARM_THM_CALL
1716 #define R_ARM_THM_CALL          10
1717 #endif
1718 #ifndef R_ARM_THM_JUMP24
1719 #define R_ARM_THM_JUMP24        30
1720 #endif
1721 #ifndef R_ARM_THM_JUMP19
1722 #define R_ARM_THM_JUMP19        51
1723 #endif
1724
1725 static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1726 {
1727         unsigned int r_typ = ELF_R_TYPE(r->r_info);
1728
1729         switch (r_typ) {
1730         case R_ARM_ABS32:
1731                 /* From ARM ABI: (S + A) | T */
1732                 r->r_addend = (int)(long)
1733                               (elf->symtab_start + ELF_R_SYM(r->r_info));
1734                 break;
1735         case R_ARM_PC24:
1736         case R_ARM_CALL:
1737         case R_ARM_JUMP24:
1738         case R_ARM_THM_CALL:
1739         case R_ARM_THM_JUMP24:
1740         case R_ARM_THM_JUMP19:
1741                 /* From ARM ABI: ((S + A) | T) - P */
1742                 r->r_addend = (int)(long)(elf->hdr +
1743                               sechdr->sh_offset +
1744                               (r->r_offset - sechdr->sh_addr));
1745                 break;
1746         default:
1747                 return 1;
1748         }
1749         return 0;
1750 }
1751
1752 static int addend_mips_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1753 {
1754         unsigned int r_typ = ELF_R_TYPE(r->r_info);
1755         unsigned int *location = reloc_location(elf, sechdr, r);
1756         unsigned int inst;
1757
1758         if (r_typ == R_MIPS_HI16)
1759                 return 1;       /* skip this */
1760         inst = TO_NATIVE(*location);
1761         switch (r_typ) {
1762         case R_MIPS_LO16:
1763                 r->r_addend = inst & 0xffff;
1764                 break;
1765         case R_MIPS_26:
1766                 r->r_addend = (inst & 0x03ffffff) << 2;
1767                 break;
1768         case R_MIPS_32:
1769                 r->r_addend = inst;
1770                 break;
1771         }
1772         return 0;
1773 }
1774
1775 static void section_rela(const char *modname, struct elf_info *elf,
1776                          Elf_Shdr *sechdr)
1777 {
1778         Elf_Sym  *sym;
1779         Elf_Rela *rela;
1780         Elf_Rela r;
1781         unsigned int r_sym;
1782         const char *fromsec;
1783
1784         Elf_Rela *start = (void *)elf->hdr + sechdr->sh_offset;
1785         Elf_Rela *stop  = (void *)start + sechdr->sh_size;
1786
1787         fromsec = sech_name(elf, sechdr);
1788         fromsec += strlen(".rela");
1789         /* if from section (name) is know good then skip it */
1790         if (match(fromsec, section_white_list))
1791                 return;
1792
1793         for (rela = start; rela < stop; rela++) {
1794                 r.r_offset = TO_NATIVE(rela->r_offset);
1795 #if KERNEL_ELFCLASS == ELFCLASS64
1796                 if (elf->hdr->e_machine == EM_MIPS) {
1797                         unsigned int r_typ;
1798                         r_sym = ELF64_MIPS_R_SYM(rela->r_info);
1799                         r_sym = TO_NATIVE(r_sym);
1800                         r_typ = ELF64_MIPS_R_TYPE(rela->r_info);
1801                         r.r_info = ELF64_R_INFO(r_sym, r_typ);
1802                 } else {
1803                         r.r_info = TO_NATIVE(rela->r_info);
1804                         r_sym = ELF_R_SYM(r.r_info);
1805                 }
1806 #else
1807                 r.r_info = TO_NATIVE(rela->r_info);
1808                 r_sym = ELF_R_SYM(r.r_info);
1809 #endif
1810                 r.r_addend = TO_NATIVE(rela->r_addend);
1811                 sym = elf->symtab_start + r_sym;
1812                 /* Skip special sections */
1813                 if (is_shndx_special(sym->st_shndx))
1814                         continue;
1815                 if (is_second_extable_reloc(start, rela, fromsec))
1816                         find_extable_entry_size(fromsec, &r);
1817                 check_section_mismatch(modname, elf, &r, sym, fromsec);
1818         }
1819 }
1820
1821 static void section_rel(const char *modname, struct elf_info *elf,
1822                         Elf_Shdr *sechdr)
1823 {
1824         Elf_Sym *sym;
1825         Elf_Rel *rel;
1826         Elf_Rela r;
1827         unsigned int r_sym;
1828         const char *fromsec;
1829
1830         Elf_Rel *start = (void *)elf->hdr + sechdr->sh_offset;
1831         Elf_Rel *stop  = (void *)start + sechdr->sh_size;
1832
1833         fromsec = sech_name(elf, sechdr);
1834         fromsec += strlen(".rel");
1835         /* if from section (name) is know good then skip it */
1836         if (match(fromsec, section_white_list))
1837                 return;
1838
1839         for (rel = start; rel < stop; rel++) {
1840                 r.r_offset = TO_NATIVE(rel->r_offset);
1841 #if KERNEL_ELFCLASS == ELFCLASS64
1842                 if (elf->hdr->e_machine == EM_MIPS) {
1843                         unsigned int r_typ;
1844                         r_sym = ELF64_MIPS_R_SYM(rel->r_info);
1845                         r_sym = TO_NATIVE(r_sym);
1846                         r_typ = ELF64_MIPS_R_TYPE(rel->r_info);
1847                         r.r_info = ELF64_R_INFO(r_sym, r_typ);
1848                 } else {
1849                         r.r_info = TO_NATIVE(rel->r_info);
1850                         r_sym = ELF_R_SYM(r.r_info);
1851                 }
1852 #else
1853                 r.r_info = TO_NATIVE(rel->r_info);
1854                 r_sym = ELF_R_SYM(r.r_info);
1855 #endif
1856                 r.r_addend = 0;
1857                 switch (elf->hdr->e_machine) {
1858                 case EM_386:
1859                         if (addend_386_rel(elf, sechdr, &r))
1860                                 continue;
1861                         break;
1862                 case EM_ARM:
1863                         if (addend_arm_rel(elf, sechdr, &r))
1864                                 continue;
1865                         break;
1866                 case EM_MIPS:
1867                         if (addend_mips_rel(elf, sechdr, &r))
1868                                 continue;
1869                         break;
1870                 }
1871                 sym = elf->symtab_start + r_sym;
1872                 /* Skip special sections */
1873                 if (is_shndx_special(sym->st_shndx))
1874                         continue;
1875                 if (is_second_extable_reloc(start, rel, fromsec))
1876                         find_extable_entry_size(fromsec, &r);
1877                 check_section_mismatch(modname, elf, &r, sym, fromsec);
1878         }
1879 }
1880
1881 /**
1882  * A module includes a number of sections that are discarded
1883  * either when loaded or when used as built-in.
1884  * For loaded modules all functions marked __init and all data
1885  * marked __initdata will be discarded when the module has been initialized.
1886  * Likewise for modules used built-in the sections marked __exit
1887  * are discarded because __exit marked function are supposed to be called
1888  * only when a module is unloaded which never happens for built-in modules.
1889  * The check_sec_ref() function traverses all relocation records
1890  * to find all references to a section that reference a section that will
1891  * be discarded and warns about it.
1892  **/
1893 static void check_sec_ref(struct module *mod, const char *modname,
1894                           struct elf_info *elf)
1895 {
1896         int i;
1897         Elf_Shdr *sechdrs = elf->sechdrs;
1898
1899         /* Walk through all sections */
1900         for (i = 0; i < elf->num_sections; i++) {
1901                 check_section(modname, elf, &elf->sechdrs[i]);
1902                 /* We want to process only relocation sections and not .init */
1903                 if (sechdrs[i].sh_type == SHT_RELA)
1904                         section_rela(modname, elf, &elf->sechdrs[i]);
1905                 else if (sechdrs[i].sh_type == SHT_REL)
1906                         section_rel(modname, elf, &elf->sechdrs[i]);
1907         }
1908 }
1909
1910 static char *remove_dot(char *s)
1911 {
1912         size_t n = strcspn(s, ".");
1913
1914         if (n && s[n]) {
1915                 size_t m = strspn(s + n + 1, "0123456789");
1916                 if (m && (s[n + m] == '.' || s[n + m] == 0))
1917                         s[n] = 0;
1918         }
1919         return s;
1920 }
1921
1922 static void read_symbols(char *modname)
1923 {
1924         const char *symname;
1925         char *version;
1926         char *license;
1927         struct module *mod;
1928         struct elf_info info = { };
1929         Elf_Sym *sym;
1930
1931         if (!parse_elf(&info, modname))
1932                 return;
1933
1934         mod = new_module(modname);
1935
1936         /* When there's no vmlinux, don't print warnings about
1937          * unresolved symbols (since there'll be too many ;) */
1938         if (is_vmlinux(modname)) {
1939                 have_vmlinux = 1;
1940                 mod->skip = 1;
1941         }
1942
1943         license = get_modinfo(info.modinfo, info.modinfo_len, "license");
1944         if (info.modinfo && !license && !is_vmlinux(modname))
1945                 warn("modpost: missing MODULE_LICENSE() in %s\n"
1946                      "see include/linux/module.h for "
1947                      "more information\n", modname);
1948         while (license) {
1949                 if (license_is_gpl_compatible(license))
1950                         mod->gpl_compatible = 1;
1951                 else {
1952                         mod->gpl_compatible = 0;
1953                         break;
1954                 }
1955                 license = get_next_modinfo(info.modinfo, info.modinfo_len,
1956                                            "license", license);
1957         }
1958
1959         for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
1960                 symname = remove_dot(info.strtab + sym->st_name);
1961
1962                 handle_modversions(mod, &info, sym, symname);
1963                 handle_moddevtable(mod, &info, sym, symname);
1964         }
1965         if (!is_vmlinux(modname) ||
1966              (is_vmlinux(modname) && vmlinux_section_warnings))
1967                 check_sec_ref(mod, modname, &info);
1968
1969         version = get_modinfo(info.modinfo, info.modinfo_len, "version");
1970         if (version)
1971                 maybe_frob_rcs_version(modname, version, info.modinfo,
1972                                        version - (char *)info.hdr);
1973         if (version || (all_versions && !is_vmlinux(modname)))
1974                 get_src_version(modname, mod->srcversion,
1975                                 sizeof(mod->srcversion)-1);
1976
1977         parse_elf_finish(&info);
1978
1979         /* Our trick to get versioning for module struct etc. - it's
1980          * never passed as an argument to an exported function, so
1981          * the automatic versioning doesn't pick it up, but it's really
1982          * important anyhow */
1983         if (modversions)
1984                 mod->unres = alloc_symbol("module_layout", 0, mod->unres);
1985 }
1986
1987 static void read_symbols_from_files(const char *filename)
1988 {
1989         FILE *in = stdin;
1990         char fname[PATH_MAX];
1991
1992         if (strcmp(filename, "-") != 0) {
1993                 in = fopen(filename, "r");
1994                 if (!in)
1995                         fatal("Can't open filenames file %s: %m", filename);
1996         }
1997
1998         while (fgets(fname, PATH_MAX, in) != NULL) {
1999                 if (strends(fname, "\n"))
2000                         fname[strlen(fname)-1] = '\0';
2001                 read_symbols(fname);
2002         }
2003
2004         if (in != stdin)
2005                 fclose(in);
2006 }
2007
2008 #define SZ 500
2009
2010 /* We first write the generated file into memory using the
2011  * following helper, then compare to the file on disk and
2012  * only update the later if anything changed */
2013
2014 void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
2015                                                       const char *fmt, ...)
2016 {
2017         char tmp[SZ];
2018         int len;
2019         va_list ap;
2020
2021         va_start(ap, fmt);
2022         len = vsnprintf(tmp, SZ, fmt, ap);
2023         buf_write(buf, tmp, len);
2024         va_end(ap);
2025 }
2026
2027 void buf_write(struct buffer *buf, const char *s, int len)
2028 {
2029         if (buf->size - buf->pos < len) {
2030                 buf->size += len + SZ;
2031                 buf->p = realloc(buf->p, buf->size);
2032         }
2033         strncpy(buf->p + buf->pos, s, len);
2034         buf->pos += len;
2035 }
2036
2037 static void check_for_gpl_usage(enum export exp, const char *m, const char *s)
2038 {
2039         const char *e = is_vmlinux(m) ?"":".ko";
2040
2041         switch (exp) {
2042         case export_gpl:
2043                 fatal("modpost: GPL-incompatible module %s%s "
2044                       "uses GPL-only symbol '%s'\n", m, e, s);
2045                 break;
2046         case export_unused_gpl:
2047                 fatal("modpost: GPL-incompatible module %s%s "
2048                       "uses GPL-only symbol marked UNUSED '%s'\n", m, e, s);
2049                 break;
2050         case export_gpl_future:
2051                 warn("modpost: GPL-incompatible module %s%s "
2052                       "uses future GPL-only symbol '%s'\n", m, e, s);
2053                 break;
2054         case export_plain:
2055         case export_unused:
2056         case export_unknown:
2057                 /* ignore */
2058                 break;
2059         }
2060 }
2061
2062 static void check_for_unused(enum export exp, const char *m, const char *s)
2063 {
2064         const char *e = is_vmlinux(m) ?"":".ko";
2065
2066         switch (exp) {
2067         case export_unused:
2068         case export_unused_gpl:
2069                 warn("modpost: module %s%s "
2070                       "uses symbol '%s' marked UNUSED\n", m, e, s);
2071                 break;
2072         default:
2073                 /* ignore */
2074                 break;
2075         }
2076 }
2077
2078 static void check_exports(struct module *mod)
2079 {
2080         struct symbol *s, *exp;
2081
2082         for (s = mod->unres; s; s = s->next) {
2083                 const char *basename;
2084                 exp = find_symbol(s->name);
2085                 if (!exp || exp->module == mod)
2086                         continue;
2087                 basename = strrchr(mod->name, '/');
2088                 if (basename)
2089                         basename++;
2090                 else
2091                         basename = mod->name;
2092                 if (!mod->gpl_compatible)
2093                         check_for_gpl_usage(exp->export, basename, exp->name);
2094                 check_for_unused(exp->export, basename, exp->name);
2095         }
2096 }
2097
2098 /**
2099  * Header for the generated file
2100  **/
2101 static void add_header(struct buffer *b, struct module *mod)
2102 {
2103         buf_printf(b, "#include <linux/module.h>\n");
2104         buf_printf(b, "#include <linux/vermagic.h>\n");
2105         buf_printf(b, "#include <linux/compiler.h>\n");
2106         buf_printf(b, "\n");
2107         buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
2108         buf_printf(b, "\n");
2109         buf_printf(b, "__visible struct module __this_module\n");
2110         buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n");
2111         buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
2112         if (mod->has_init)
2113                 buf_printf(b, "\t.init = init_module,\n");
2114         if (mod->has_cleanup)
2115                 buf_printf(b, "#ifdef CONFIG_MODULE_UNLOAD\n"
2116                               "\t.exit = cleanup_module,\n"
2117                               "#endif\n");
2118         buf_printf(b, "\t.arch = MODULE_ARCH_INIT,\n");
2119         buf_printf(b, "};\n");
2120 }
2121
2122 static void add_intree_flag(struct buffer *b, int is_intree)
2123 {
2124         if (is_intree)
2125                 buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
2126 }
2127
2128 static void add_staging_flag(struct buffer *b, const char *name)
2129 {
2130         static const char *staging_dir = "drivers/staging";
2131
2132         if (strncmp(staging_dir, name, strlen(staging_dir)) == 0)
2133                 buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
2134 }
2135
2136 /**
2137  * Record CRCs for unresolved symbols
2138  **/
2139 static int add_versions(struct buffer *b, struct module *mod)
2140 {
2141         struct symbol *s, *exp;
2142         int err = 0;
2143
2144         for (s = mod->unres; s; s = s->next) {
2145                 exp = find_symbol(s->name);
2146                 if (!exp || exp->module == mod) {
2147                         if (have_vmlinux && !s->weak) {
2148                                 if (warn_unresolved) {
2149                                         warn("\"%s\" [%s.ko] undefined!\n",
2150                                              s->name, mod->name);
2151                                 } else {
2152                                         merror("\"%s\" [%s.ko] undefined!\n",
2153                                                s->name, mod->name);
2154                                         err = 1;
2155                                 }
2156                         }
2157                         continue;
2158                 }
2159                 s->module = exp->module;
2160                 s->crc_valid = exp->crc_valid;
2161                 s->crc = exp->crc;
2162         }
2163
2164         if (!modversions)
2165                 return err;
2166
2167         buf_printf(b, "\n");
2168         buf_printf(b, "static const struct modversion_info ____versions[]\n");
2169         buf_printf(b, "__used\n");
2170         buf_printf(b, "__attribute__((section(\"__versions\"))) = {\n");
2171
2172         for (s = mod->unres; s; s = s->next) {
2173                 if (!s->module)
2174                         continue;
2175                 if (!s->crc_valid) {
2176                         warn("\"%s\" [%s.ko] has no CRC!\n",
2177                                 s->name, mod->name);
2178                         continue;
2179                 }
2180                 buf_printf(b, "\t{ %#8x, __VMLINUX_SYMBOL_STR(%s) },\n",
2181                            s->crc, s->name);
2182         }
2183
2184         buf_printf(b, "};\n");
2185
2186         return err;
2187 }
2188
2189 static void add_depends(struct buffer *b, struct module *mod,
2190                         struct module *modules)
2191 {
2192         struct symbol *s;
2193         struct module *m;
2194         int first = 1;
2195
2196         for (m = modules; m; m = m->next)
2197                 m->seen = is_vmlinux(m->name);
2198
2199         buf_printf(b, "\n");
2200         buf_printf(b, "static const char __module_depends[]\n");
2201         buf_printf(b, "__used\n");
2202         buf_printf(b, "__attribute__((section(\".modinfo\"))) =\n");
2203         buf_printf(b, "\"depends=");
2204         for (s = mod->unres; s; s = s->next) {
2205                 const char *p;
2206                 if (!s->module)
2207                         continue;
2208
2209                 if (s->module->seen)
2210                         continue;
2211
2212                 s->module->seen = 1;
2213                 p = strrchr(s->module->name, '/');
2214                 if (p)
2215                         p++;
2216                 else
2217                         p = s->module->name;
2218                 buf_printf(b, "%s%s", first ? "" : ",", p);
2219                 first = 0;
2220         }
2221         buf_printf(b, "\";\n");
2222 }
2223
2224 static void add_srcversion(struct buffer *b, struct module *mod)
2225 {
2226         if (mod->srcversion[0]) {
2227                 buf_printf(b, "\n");
2228                 buf_printf(b, "MODULE_INFO(srcversion, \"%s\");\n",
2229                            mod->srcversion);
2230         }
2231 }
2232
2233 static void write_if_changed(struct buffer *b, const char *fname)
2234 {
2235         char *tmp;
2236         FILE *file;
2237         struct stat st;
2238
2239         file = fopen(fname, "r");
2240         if (!file)
2241                 goto write;
2242
2243         if (fstat(fileno(file), &st) < 0)
2244                 goto close_write;
2245
2246         if (st.st_size != b->pos)
2247                 goto close_write;
2248
2249         tmp = NOFAIL(malloc(b->pos));
2250         if (fread(tmp, 1, b->pos, file) != b->pos)
2251                 goto free_write;
2252
2253         if (memcmp(tmp, b->p, b->pos) != 0)
2254                 goto free_write;
2255
2256         free(tmp);
2257         fclose(file);
2258         return;
2259
2260  free_write:
2261         free(tmp);
2262  close_write:
2263         fclose(file);
2264  write:
2265         file = fopen(fname, "w");
2266         if (!file) {
2267                 perror(fname);
2268                 exit(1);
2269         }
2270         if (fwrite(b->p, 1, b->pos, file) != b->pos) {
2271                 perror(fname);
2272                 exit(1);
2273         }
2274         fclose(file);
2275 }
2276
2277 /* parse Module.symvers file. line format:
2278  * 0x12345678<tab>symbol<tab>module[[<tab>export]<tab>something]
2279  **/
2280 static void read_dump(const char *fname, unsigned int kernel)
2281 {
2282         unsigned long size, pos = 0;
2283         void *file = grab_file(fname, &size);
2284         char *line;
2285
2286         if (!file)
2287                 /* No symbol versions, silently ignore */
2288                 return;
2289
2290         while ((line = get_next_line(&pos, file, size))) {
2291                 char *symname, *modname, *d, *export, *end;
2292                 unsigned int crc;
2293                 struct module *mod;
2294                 struct symbol *s;
2295
2296                 if (!(symname = strchr(line, '\t')))
2297                         goto fail;
2298                 *symname++ = '\0';
2299                 if (!(modname = strchr(symname, '\t')))
2300                         goto fail;
2301                 *modname++ = '\0';
2302                 if ((export = strchr(modname, '\t')) != NULL)
2303                         *export++ = '\0';
2304                 if (export && ((end = strchr(export, '\t')) != NULL))
2305                         *end = '\0';
2306                 crc = strtoul(line, &d, 16);
2307                 if (*symname == '\0' || *modname == '\0' || *d != '\0')
2308                         goto fail;
2309                 mod = find_module(modname);
2310                 if (!mod) {
2311                         if (is_vmlinux(modname))
2312                                 have_vmlinux = 1;
2313                         mod = new_module(modname);
2314                         mod->skip = 1;
2315                 }
2316                 s = sym_add_exported(symname, mod, export_no(export));
2317                 s->kernel    = kernel;
2318                 s->preloaded = 1;
2319                 sym_update_crc(symname, mod, crc, export_no(export));
2320         }
2321         release_file(file, size);
2322         return;
2323 fail:
2324         release_file(file, size);
2325         fatal("parse error in symbol dump file\n");
2326 }
2327
2328 /* For normal builds always dump all symbols.
2329  * For external modules only dump symbols
2330  * that are not read from kernel Module.symvers.
2331  **/
2332 static int dump_sym(struct symbol *sym)
2333 {
2334         if (!external_module)
2335                 return 1;
2336         if (sym->vmlinux || sym->kernel)
2337                 return 0;
2338         return 1;
2339 }
2340
2341 static void write_dump(const char *fname)
2342 {
2343         struct buffer buf = { };
2344         struct symbol *symbol;
2345         int n;
2346
2347         for (n = 0; n < SYMBOL_HASH_SIZE ; n++) {
2348                 symbol = symbolhash[n];
2349                 while (symbol) {
2350                         if (dump_sym(symbol))
2351                                 buf_printf(&buf, "0x%08x\t%s\t%s\t%s\n",
2352                                         symbol->crc, symbol->name,
2353                                         symbol->module->name,
2354                                         export_str(symbol->export));
2355                         symbol = symbol->next;
2356                 }
2357         }
2358         write_if_changed(&buf, fname);
2359 }
2360
2361 struct ext_sym_list {
2362         struct ext_sym_list *next;
2363         const char *file;
2364 };
2365
2366 int main(int argc, char **argv)
2367 {
2368         struct module *mod;
2369         struct buffer buf = { };
2370         char *kernel_read = NULL, *module_read = NULL;
2371         char *dump_write = NULL, *files_source = NULL;
2372         int opt;
2373         int err;
2374         struct ext_sym_list *extsym_iter;
2375         struct ext_sym_list *extsym_start = NULL;
2376
2377         while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:")) != -1) {
2378                 switch (opt) {
2379                 case 'i':
2380                         kernel_read = optarg;
2381                         break;
2382                 case 'I':
2383                         module_read = optarg;
2384                         external_module = 1;
2385                         break;
2386                 case 'e':
2387                         external_module = 1;
2388                         extsym_iter =
2389                            NOFAIL(malloc(sizeof(*extsym_iter)));
2390                         extsym_iter->next = extsym_start;
2391                         extsym_iter->file = optarg;
2392                         extsym_start = extsym_iter;
2393                         break;
2394                 case 'm':
2395                         modversions = 1;
2396                         break;
2397                 case 'n':
2398                         ignore_missing_files = 1;
2399                         break;
2400                 case 'o':
2401                         dump_write = optarg;
2402                         break;
2403                 case 'a':
2404                         all_versions = 1;
2405                         break;
2406                 case 's':
2407                         vmlinux_section_warnings = 0;
2408                         break;
2409                 case 'S':
2410                         sec_mismatch_verbose = 0;
2411                         break;
2412                 case 'T':
2413                         files_source = optarg;
2414                         break;
2415                 case 'w':
2416                         warn_unresolved = 1;
2417                         break;
2418                 default:
2419                         exit(1);
2420                 }
2421         }
2422
2423         if (kernel_read)
2424                 read_dump(kernel_read, 1);
2425         if (module_read)
2426                 read_dump(module_read, 0);
2427         while (extsym_start) {
2428                 read_dump(extsym_start->file, 0);
2429                 extsym_iter = extsym_start->next;
2430                 free(extsym_start);
2431                 extsym_start = extsym_iter;
2432         }
2433
2434         while (optind < argc)
2435                 read_symbols(argv[optind++]);
2436
2437         if (files_source)
2438                 read_symbols_from_files(files_source);
2439
2440         for (mod = modules; mod; mod = mod->next) {
2441                 if (mod->skip)
2442                         continue;
2443                 check_exports(mod);
2444         }
2445
2446         err = 0;
2447
2448         for (mod = modules; mod; mod = mod->next) {
2449                 char fname[PATH_MAX];
2450
2451                 if (mod->skip)
2452                         continue;
2453
2454                 buf.pos = 0;
2455
2456                 add_header(&buf, mod);
2457                 add_intree_flag(&buf, !external_module);
2458                 add_staging_flag(&buf, mod->name);
2459                 err |= add_versions(&buf, mod);
2460                 add_depends(&buf, mod, modules);
2461                 add_moddevtable(&buf, mod);
2462                 add_srcversion(&buf, mod);
2463
2464                 sprintf(fname, "%s.mod.c", mod->name);
2465                 write_if_changed(&buf, fname);
2466         }
2467
2468         if (dump_write)
2469                 write_dump(dump_write);
2470         if (sec_mismatch_count && !sec_mismatch_verbose)
2471                 warn("modpost: Found %d section mismatch(es).\n"
2472                      "To see full details build your kernel with:\n"
2473                      "'make CONFIG_DEBUG_SECTION_MISMATCH=y'\n",
2474                      sec_mismatch_count);
2475
2476         return err;
2477 }