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