]> git.karo-electronics.de Git - karo-tx-linux.git/blob - scripts/mod/modpost.c
Merge branches 'pm-core', 'pm-qos', 'pm-domains' and 'pm-opp'
[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                     strcmp(symname, ".TOC.") == 0)
599                         return 1;
600         /* Do not ignore this symbol */
601         return 0;
602 }
603
604 #define CRC_PFX     VMLINUX_SYMBOL_STR(__crc_)
605 #define KSYMTAB_PFX VMLINUX_SYMBOL_STR(__ksymtab_)
606
607 static void handle_modversions(struct module *mod, struct elf_info *info,
608                                Elf_Sym *sym, const char *symname)
609 {
610         unsigned int crc;
611         enum export export;
612         bool is_crc = false;
613
614         if ((!is_vmlinux(mod->name) || mod->is_dot_o) &&
615             strncmp(symname, "__ksymtab", 9) == 0)
616                 export = export_from_secname(info, get_secindex(info, sym));
617         else
618                 export = export_from_sec(info, get_secindex(info, sym));
619
620         /* CRC'd symbol */
621         if (strncmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) {
622                 is_crc = true;
623                 crc = (unsigned int) sym->st_value;
624                 if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS) {
625                         unsigned int *crcp;
626
627                         /* symbol points to the CRC in the ELF object */
628                         crcp = (void *)info->hdr + sym->st_value +
629                                info->sechdrs[sym->st_shndx].sh_offset -
630                                (info->hdr->e_type != ET_REL ?
631                                 info->sechdrs[sym->st_shndx].sh_addr : 0);
632                         crc = *crcp;
633                 }
634                 sym_update_crc(symname + strlen(CRC_PFX), mod, crc,
635                                 export);
636         }
637
638         switch (sym->st_shndx) {
639         case SHN_COMMON:
640                 if (!strncmp(symname, "__gnu_lto_", sizeof("__gnu_lto_")-1)) {
641                         /* Should warn here, but modpost runs before the linker */
642                 } else
643                         warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name);
644                 break;
645         case SHN_UNDEF:
646                 /* undefined symbol */
647                 if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL &&
648                     ELF_ST_BIND(sym->st_info) != STB_WEAK)
649                         break;
650                 if (ignore_undef_symbol(info, symname))
651                         break;
652 /* cope with newer glibc (2.3.4 or higher) STT_ definition in elf.h */
653 #if defined(STT_REGISTER) || defined(STT_SPARC_REGISTER)
654 /* add compatibility with older glibc */
655 #ifndef STT_SPARC_REGISTER
656 #define STT_SPARC_REGISTER STT_REGISTER
657 #endif
658                 if (info->hdr->e_machine == EM_SPARC ||
659                     info->hdr->e_machine == EM_SPARCV9) {
660                         /* Ignore register directives. */
661                         if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER)
662                                 break;
663                         if (symname[0] == '.') {
664                                 char *munged = strdup(symname);
665                                 munged[0] = '_';
666                                 munged[1] = toupper(munged[1]);
667                                 symname = munged;
668                         }
669                 }
670 #endif
671
672 #ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
673                 if (symname[0] != '_')
674                         break;
675                 else
676                         symname++;
677 #endif
678                 if (is_crc) {
679                         const char *e = is_vmlinux(mod->name) ?"":".ko";
680                         warn("EXPORT symbol \"%s\" [%s%s] version generation failed, symbol will not be versioned.\n", symname + strlen(CRC_PFX), mod->name, e);
681                 }
682                 mod->unres = alloc_symbol(symname,
683                                           ELF_ST_BIND(sym->st_info) == STB_WEAK,
684                                           mod->unres);
685                 break;
686         default:
687                 /* All exported symbols */
688                 if (strncmp(symname, KSYMTAB_PFX, strlen(KSYMTAB_PFX)) == 0) {
689                         sym_add_exported(symname + strlen(KSYMTAB_PFX), mod,
690                                         export);
691                 }
692                 if (strcmp(symname, VMLINUX_SYMBOL_STR(init_module)) == 0)
693                         mod->has_init = 1;
694                 if (strcmp(symname, VMLINUX_SYMBOL_STR(cleanup_module)) == 0)
695                         mod->has_cleanup = 1;
696                 break;
697         }
698 }
699
700 /**
701  * Parse tag=value strings from .modinfo section
702  **/
703 static char *next_string(char *string, unsigned long *secsize)
704 {
705         /* Skip non-zero chars */
706         while (string[0]) {
707                 string++;
708                 if ((*secsize)-- <= 1)
709                         return NULL;
710         }
711
712         /* Skip any zero padding. */
713         while (!string[0]) {
714                 string++;
715                 if ((*secsize)-- <= 1)
716                         return NULL;
717         }
718         return string;
719 }
720
721 static char *get_next_modinfo(void *modinfo, unsigned long modinfo_len,
722                               const char *tag, char *info)
723 {
724         char *p;
725         unsigned int taglen = strlen(tag);
726         unsigned long size = modinfo_len;
727
728         if (info) {
729                 size -= info - (char *)modinfo;
730                 modinfo = next_string(info, &size);
731         }
732
733         for (p = modinfo; p; p = next_string(p, &size)) {
734                 if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')
735                         return p + taglen + 1;
736         }
737         return NULL;
738 }
739
740 static char *get_modinfo(void *modinfo, unsigned long modinfo_len,
741                          const char *tag)
742
743 {
744         return get_next_modinfo(modinfo, modinfo_len, tag, NULL);
745 }
746
747 /**
748  * Test if string s ends in string sub
749  * return 0 if match
750  **/
751 static int strrcmp(const char *s, const char *sub)
752 {
753         int slen, sublen;
754
755         if (!s || !sub)
756                 return 1;
757
758         slen = strlen(s);
759         sublen = strlen(sub);
760
761         if ((slen == 0) || (sublen == 0))
762                 return 1;
763
764         if (sublen > slen)
765                 return 1;
766
767         return memcmp(s + slen - sublen, sub, sublen);
768 }
769
770 static const char *sym_name(struct elf_info *elf, Elf_Sym *sym)
771 {
772         if (sym)
773                 return elf->strtab + sym->st_name;
774         else
775                 return "(unknown)";
776 }
777
778 static const char *sec_name(struct elf_info *elf, int secindex)
779 {
780         Elf_Shdr *sechdrs = elf->sechdrs;
781         return (void *)elf->hdr +
782                 elf->sechdrs[elf->secindex_strings].sh_offset +
783                 sechdrs[secindex].sh_name;
784 }
785
786 static const char *sech_name(struct elf_info *elf, Elf_Shdr *sechdr)
787 {
788         return (void *)elf->hdr +
789                 elf->sechdrs[elf->secindex_strings].sh_offset +
790                 sechdr->sh_name;
791 }
792
793 /* The pattern is an array of simple patterns.
794  * "foo" will match an exact string equal to "foo"
795  * "*foo" will match a string that ends with "foo"
796  * "foo*" will match a string that begins with "foo"
797  * "*foo*" will match a string that contains "foo"
798  */
799 static int match(const char *sym, const char * const pat[])
800 {
801         const char *p;
802         while (*pat) {
803                 p = *pat++;
804                 const char *endp = p + strlen(p) - 1;
805
806                 /* "*foo*" */
807                 if (*p == '*' && *endp == '*') {
808                         char *here, *bare = strndup(p + 1, strlen(p) - 2);
809
810                         here = strstr(sym, bare);
811                         free(bare);
812                         if (here != NULL)
813                                 return 1;
814                 }
815                 /* "*foo" */
816                 else if (*p == '*') {
817                         if (strrcmp(sym, p + 1) == 0)
818                                 return 1;
819                 }
820                 /* "foo*" */
821                 else if (*endp == '*') {
822                         if (strncmp(sym, p, strlen(p) - 1) == 0)
823                                 return 1;
824                 }
825                 /* no wildcards */
826                 else {
827                         if (strcmp(p, sym) == 0)
828                                 return 1;
829                 }
830         }
831         /* no match */
832         return 0;
833 }
834
835 /* sections that we do not want to do full section mismatch check on */
836 static const char *const section_white_list[] =
837 {
838         ".comment*",
839         ".debug*",
840         ".cranges",             /* sh64 */
841         ".zdebug*",             /* Compressed debug sections. */
842         ".GCC-command-line",    /* mn10300 */
843         ".GCC.command.line",    /* record-gcc-switches, non mn10300 */
844         ".mdebug*",        /* alpha, score, mips etc. */
845         ".pdr",            /* alpha, score, mips etc. */
846         ".stab*",
847         ".note*",
848         ".got*",
849         ".toc*",
850         ".xt.prop",                              /* xtensa */
851         ".xt.lit",         /* xtensa */
852         ".arcextmap*",                  /* arc */
853         ".gnu.linkonce.arcext*",        /* arc : modules */
854         ".cmem*",                       /* EZchip */
855         ".fmt_slot*",                   /* EZchip */
856         ".gnu.lto*",
857         NULL
858 };
859
860 /*
861  * This is used to find sections missing the SHF_ALLOC flag.
862  * The cause of this is often a section specified in assembler
863  * without "ax" / "aw".
864  */
865 static void check_section(const char *modname, struct elf_info *elf,
866                           Elf_Shdr *sechdr)
867 {
868         const char *sec = sech_name(elf, sechdr);
869
870         if (sechdr->sh_type == SHT_PROGBITS &&
871             !(sechdr->sh_flags & SHF_ALLOC) &&
872             !match(sec, section_white_list)) {
873                 warn("%s (%s): unexpected non-allocatable section.\n"
874                      "Did you forget to use \"ax\"/\"aw\" in a .S file?\n"
875                      "Note that for example <linux/init.h> contains\n"
876                      "section definitions for use in .S files.\n\n",
877                      modname, sec);
878         }
879 }
880
881
882
883 #define ALL_INIT_DATA_SECTIONS \
884         ".init.setup", ".init.rodata", ".meminit.rodata", \
885         ".init.data", ".meminit.data"
886 #define ALL_EXIT_DATA_SECTIONS \
887         ".exit.data", ".memexit.data"
888
889 #define ALL_INIT_TEXT_SECTIONS \
890         ".init.text", ".meminit.text"
891 #define ALL_EXIT_TEXT_SECTIONS \
892         ".exit.text", ".memexit.text"
893
894 #define ALL_PCI_INIT_SECTIONS   \
895         ".pci_fixup_early", ".pci_fixup_header", ".pci_fixup_final", \
896         ".pci_fixup_enable", ".pci_fixup_resume", \
897         ".pci_fixup_resume_early", ".pci_fixup_suspend"
898
899 #define ALL_XXXINIT_SECTIONS MEM_INIT_SECTIONS
900 #define ALL_XXXEXIT_SECTIONS MEM_EXIT_SECTIONS
901
902 #define ALL_INIT_SECTIONS INIT_SECTIONS, ALL_XXXINIT_SECTIONS
903 #define ALL_EXIT_SECTIONS EXIT_SECTIONS, ALL_XXXEXIT_SECTIONS
904
905 #define DATA_SECTIONS ".data", ".data.rel"
906 #define TEXT_SECTIONS ".text", ".text.unlikely", ".sched.text", \
907                 ".kprobes.text", ".cpuidle.text"
908 #define OTHER_TEXT_SECTIONS ".ref.text", ".head.text", ".spinlock.text", \
909                 ".fixup", ".entry.text", ".exception.text", ".text.*", \
910                 ".coldtext"
911
912 #define INIT_SECTIONS      ".init.*"
913 #define MEM_INIT_SECTIONS  ".meminit.*"
914
915 #define EXIT_SECTIONS      ".exit.*"
916 #define MEM_EXIT_SECTIONS  ".memexit.*"
917
918 #define ALL_TEXT_SECTIONS  ALL_INIT_TEXT_SECTIONS, ALL_EXIT_TEXT_SECTIONS, \
919                 TEXT_SECTIONS, OTHER_TEXT_SECTIONS
920
921 /* init data sections */
922 static const char *const init_data_sections[] =
923         { ALL_INIT_DATA_SECTIONS, NULL };
924
925 /* all init sections */
926 static const char *const init_sections[] = { ALL_INIT_SECTIONS, NULL };
927
928 /* All init and exit sections (code + data) */
929 static const char *const init_exit_sections[] =
930         {ALL_INIT_SECTIONS, ALL_EXIT_SECTIONS, NULL };
931
932 /* all text sections */
933 static const char *const text_sections[] = { ALL_TEXT_SECTIONS, NULL };
934
935 /* data section */
936 static const char *const data_sections[] = { DATA_SECTIONS, NULL };
937
938
939 /* symbols in .data that may refer to init/exit sections */
940 #define DEFAULT_SYMBOL_WHITE_LIST                                       \
941         "*driver",                                                      \
942         "*_template", /* scsi uses *_template a lot */                  \
943         "*_timer",    /* arm uses ops structures named _timer a lot */  \
944         "*_sht",      /* scsi also used *_sht to some extent */         \
945         "*_ops",                                                        \
946         "*_probe",                                                      \
947         "*_probe_one",                                                  \
948         "*_console"
949
950 static const char *const head_sections[] = { ".head.text*", NULL };
951 static const char *const linker_symbols[] =
952         { "__init_begin", "_sinittext", "_einittext", NULL };
953 static const char *const optim_symbols[] = { "*.constprop.*", NULL };
954
955 enum mismatch {
956         TEXT_TO_ANY_INIT,
957         DATA_TO_ANY_INIT,
958         TEXT_TO_ANY_EXIT,
959         DATA_TO_ANY_EXIT,
960         XXXINIT_TO_SOME_INIT,
961         XXXEXIT_TO_SOME_EXIT,
962         ANY_INIT_TO_ANY_EXIT,
963         ANY_EXIT_TO_ANY_INIT,
964         EXPORT_TO_INIT_EXIT,
965         EXTABLE_TO_NON_TEXT,
966 };
967
968 /**
969  * Describe how to match sections on different criterias:
970  *
971  * @fromsec: Array of sections to be matched.
972  *
973  * @bad_tosec: Relocations applied to a section in @fromsec to a section in
974  * this array is forbidden (black-list).  Can be empty.
975  *
976  * @good_tosec: Relocations applied to a section in @fromsec must be
977  * targetting sections in this array (white-list).  Can be empty.
978  *
979  * @mismatch: Type of mismatch.
980  *
981  * @symbol_white_list: Do not match a relocation to a symbol in this list
982  * even if it is targetting a section in @bad_to_sec.
983  *
984  * @handler: Specific handler to call when a match is found.  If NULL,
985  * default_mismatch_handler() will be called.
986  *
987  */
988 struct sectioncheck {
989         const char *fromsec[20];
990         const char *bad_tosec[20];
991         const char *good_tosec[20];
992         enum mismatch mismatch;
993         const char *symbol_white_list[20];
994         void (*handler)(const char *modname, struct elf_info *elf,
995                         const struct sectioncheck* const mismatch,
996                         Elf_Rela *r, Elf_Sym *sym, const char *fromsec);
997
998 };
999
1000 static void extable_mismatch_handler(const char *modname, struct elf_info *elf,
1001                                      const struct sectioncheck* const mismatch,
1002                                      Elf_Rela *r, Elf_Sym *sym,
1003                                      const char *fromsec);
1004
1005 static const struct sectioncheck sectioncheck[] = {
1006 /* Do not reference init/exit code/data from
1007  * normal code and data
1008  */
1009 {
1010         .fromsec = { TEXT_SECTIONS, NULL },
1011         .bad_tosec = { ALL_INIT_SECTIONS, NULL },
1012         .mismatch = TEXT_TO_ANY_INIT,
1013         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1014 },
1015 {
1016         .fromsec = { DATA_SECTIONS, NULL },
1017         .bad_tosec = { ALL_XXXINIT_SECTIONS, NULL },
1018         .mismatch = DATA_TO_ANY_INIT,
1019         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1020 },
1021 {
1022         .fromsec = { DATA_SECTIONS, NULL },
1023         .bad_tosec = { INIT_SECTIONS, NULL },
1024         .mismatch = DATA_TO_ANY_INIT,
1025         .symbol_white_list = {
1026                 "*_template", "*_timer", "*_sht", "*_ops",
1027                 "*_probe", "*_probe_one", "*_console", NULL
1028         },
1029 },
1030 {
1031         .fromsec = { TEXT_SECTIONS, NULL },
1032         .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1033         .mismatch = TEXT_TO_ANY_EXIT,
1034         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1035 },
1036 {
1037         .fromsec = { DATA_SECTIONS, NULL },
1038         .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1039         .mismatch = DATA_TO_ANY_EXIT,
1040         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1041 },
1042 /* Do not reference init code/data from meminit code/data */
1043 {
1044         .fromsec = { ALL_XXXINIT_SECTIONS, NULL },
1045         .bad_tosec = { INIT_SECTIONS, NULL },
1046         .mismatch = XXXINIT_TO_SOME_INIT,
1047         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1048 },
1049 /* Do not reference exit code/data from memexit code/data */
1050 {
1051         .fromsec = { ALL_XXXEXIT_SECTIONS, NULL },
1052         .bad_tosec = { EXIT_SECTIONS, NULL },
1053         .mismatch = XXXEXIT_TO_SOME_EXIT,
1054         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1055 },
1056 /* Do not use exit code/data from init code */
1057 {
1058         .fromsec = { ALL_INIT_SECTIONS, NULL },
1059         .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1060         .mismatch = ANY_INIT_TO_ANY_EXIT,
1061         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1062 },
1063 /* Do not use init code/data from exit code */
1064 {
1065         .fromsec = { ALL_EXIT_SECTIONS, NULL },
1066         .bad_tosec = { ALL_INIT_SECTIONS, NULL },
1067         .mismatch = ANY_EXIT_TO_ANY_INIT,
1068         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1069 },
1070 {
1071         .fromsec = { ALL_PCI_INIT_SECTIONS, NULL },
1072         .bad_tosec = { INIT_SECTIONS, NULL },
1073         .mismatch = ANY_INIT_TO_ANY_EXIT,
1074         .symbol_white_list = { NULL },
1075 },
1076 /* Do not export init/exit functions or data */
1077 {
1078         .fromsec = { "__ksymtab*", NULL },
1079         .bad_tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL },
1080         .mismatch = EXPORT_TO_INIT_EXIT,
1081         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1082 },
1083 {
1084         .fromsec = { "__ex_table", NULL },
1085         /* If you're adding any new black-listed sections in here, consider
1086          * adding a special 'printer' for them in scripts/check_extable.
1087          */
1088         .bad_tosec = { ".altinstr_replacement", NULL },
1089         .good_tosec = {ALL_TEXT_SECTIONS , NULL},
1090         .mismatch = EXTABLE_TO_NON_TEXT,
1091         .handler = extable_mismatch_handler,
1092 }
1093 };
1094
1095 static const struct sectioncheck *section_mismatch(
1096                 const char *fromsec, const char *tosec)
1097 {
1098         int i;
1099         int elems = sizeof(sectioncheck) / sizeof(struct sectioncheck);
1100         const struct sectioncheck *check = &sectioncheck[0];
1101
1102         /*
1103          * The target section could be the SHT_NUL section when we're
1104          * handling relocations to un-resolved symbols, trying to match it
1105          * doesn't make much sense and causes build failures on parisc and
1106          * mn10300 architectures.
1107          */
1108         if (*tosec == '\0')
1109                 return NULL;
1110
1111         for (i = 0; i < elems; i++) {
1112                 if (match(fromsec, check->fromsec)) {
1113                         if (check->bad_tosec[0] && match(tosec, check->bad_tosec))
1114                                 return check;
1115                         if (check->good_tosec[0] && !match(tosec, check->good_tosec))
1116                                 return check;
1117                 }
1118                 check++;
1119         }
1120         return NULL;
1121 }
1122
1123 /**
1124  * Whitelist to allow certain references to pass with no warning.
1125  *
1126  * Pattern 1:
1127  *   If a module parameter is declared __initdata and permissions=0
1128  *   then this is legal despite the warning generated.
1129  *   We cannot see value of permissions here, so just ignore
1130  *   this pattern.
1131  *   The pattern is identified by:
1132  *   tosec   = .init.data
1133  *   fromsec = .data*
1134  *   atsym   =__param*
1135  *
1136  * Pattern 1a:
1137  *   module_param_call() ops can refer to __init set function if permissions=0
1138  *   The pattern is identified by:
1139  *   tosec   = .init.text
1140  *   fromsec = .data*
1141  *   atsym   = __param_ops_*
1142  *
1143  * Pattern 2:
1144  *   Many drivers utilise a *driver container with references to
1145  *   add, remove, probe functions etc.
1146  *   the pattern is identified by:
1147  *   tosec   = init or exit section
1148  *   fromsec = data section
1149  *   atsym = *driver, *_template, *_sht, *_ops, *_probe,
1150  *           *probe_one, *_console, *_timer
1151  *
1152  * Pattern 3:
1153  *   Whitelist all references from .head.text to any init section
1154  *
1155  * Pattern 4:
1156  *   Some symbols belong to init section but still it is ok to reference
1157  *   these from non-init sections as these symbols don't have any memory
1158  *   allocated for them and symbol address and value are same. So even
1159  *   if init section is freed, its ok to reference those symbols.
1160  *   For ex. symbols marking the init section boundaries.
1161  *   This pattern is identified by
1162  *   refsymname = __init_begin, _sinittext, _einittext
1163  *
1164  * Pattern 5:
1165  *   GCC may optimize static inlines when fed constant arg(s) resulting
1166  *   in functions like cpumask_empty() -- generating an associated symbol
1167  *   cpumask_empty.constprop.3 that appears in the audit.  If the const that
1168  *   is passed in comes from __init, like say nmi_ipi_mask, we get a
1169  *   meaningless section warning.  May need to add isra symbols too...
1170  *   This pattern is identified by
1171  *   tosec   = init section
1172  *   fromsec = text section
1173  *   refsymname = *.constprop.*
1174  *
1175  **/
1176 static int secref_whitelist(const struct sectioncheck *mismatch,
1177                             const char *fromsec, const char *fromsym,
1178                             const char *tosec, const char *tosym)
1179 {
1180         /* Check for pattern 1 */
1181         if (match(tosec, init_data_sections) &&
1182             match(fromsec, data_sections) &&
1183             (strncmp(fromsym, "__param", strlen("__param")) == 0))
1184                 return 0;
1185
1186         /* Check for pattern 1a */
1187         if (strcmp(tosec, ".init.text") == 0 &&
1188             match(fromsec, data_sections) &&
1189             (strncmp(fromsym, "__param_ops_", strlen("__param_ops_")) == 0))
1190                 return 0;
1191
1192         /* Check for pattern 2 */
1193         if (match(tosec, init_exit_sections) &&
1194             match(fromsec, data_sections) &&
1195             match(fromsym, mismatch->symbol_white_list))
1196                 return 0;
1197
1198         /* Check for pattern 3 */
1199         if (match(fromsec, head_sections) &&
1200             match(tosec, init_sections))
1201                 return 0;
1202
1203         /* Check for pattern 4 */
1204         if (match(tosym, linker_symbols))
1205                 return 0;
1206
1207         /* Check for pattern 5 */
1208         if (match(fromsec, text_sections) &&
1209             match(tosec, init_sections) &&
1210             match(fromsym, optim_symbols))
1211                 return 0;
1212
1213         return 1;
1214 }
1215
1216 /**
1217  * Find symbol based on relocation record info.
1218  * In some cases the symbol supplied is a valid symbol so
1219  * return refsym. If st_name != 0 we assume this is a valid symbol.
1220  * In other cases the symbol needs to be looked up in the symbol table
1221  * based on section and address.
1222  *  **/
1223 static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
1224                                 Elf_Sym *relsym)
1225 {
1226         Elf_Sym *sym;
1227         Elf_Sym *near = NULL;
1228         Elf64_Sword distance = 20;
1229         Elf64_Sword d;
1230         unsigned int relsym_secindex;
1231
1232         if (relsym->st_name != 0)
1233                 return relsym;
1234
1235         relsym_secindex = get_secindex(elf, relsym);
1236         for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1237                 if (get_secindex(elf, sym) != relsym_secindex)
1238                         continue;
1239                 if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
1240                         continue;
1241                 if (sym->st_value == addr)
1242                         return sym;
1243                 /* Find a symbol nearby - addr are maybe negative */
1244                 d = sym->st_value - addr;
1245                 if (d < 0)
1246                         d = addr - sym->st_value;
1247                 if (d < distance) {
1248                         distance = d;
1249                         near = sym;
1250                 }
1251         }
1252         /* We need a close match */
1253         if (distance < 20)
1254                 return near;
1255         else
1256                 return NULL;
1257 }
1258
1259 static inline int is_arm_mapping_symbol(const char *str)
1260 {
1261         return str[0] == '$' && strchr("axtd", str[1])
1262                && (str[2] == '\0' || str[2] == '.');
1263 }
1264
1265 /*
1266  * If there's no name there, ignore it; likewise, ignore it if it's
1267  * one of the magic symbols emitted used by current ARM tools.
1268  *
1269  * Otherwise if find_symbols_between() returns those symbols, they'll
1270  * fail the whitelist tests and cause lots of false alarms ... fixable
1271  * only by merging __exit and __init sections into __text, bloating
1272  * the kernel (which is especially evil on embedded platforms).
1273  */
1274 static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym)
1275 {
1276         const char *name = elf->strtab + sym->st_name;
1277
1278         if (!name || !strlen(name))
1279                 return 0;
1280         return !is_arm_mapping_symbol(name);
1281 }
1282
1283 /*
1284  * Find symbols before or equal addr and after addr - in the section sec.
1285  * If we find two symbols with equal offset prefer one with a valid name.
1286  * The ELF format may have a better way to detect what type of symbol
1287  * it is, but this works for now.
1288  **/
1289 static Elf_Sym *find_elf_symbol2(struct elf_info *elf, Elf_Addr addr,
1290                                  const char *sec)
1291 {
1292         Elf_Sym *sym;
1293         Elf_Sym *near = NULL;
1294         Elf_Addr distance = ~0;
1295
1296         for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1297                 const char *symsec;
1298
1299                 if (is_shndx_special(sym->st_shndx))
1300                         continue;
1301                 symsec = sec_name(elf, get_secindex(elf, sym));
1302                 if (strcmp(symsec, sec) != 0)
1303                         continue;
1304                 if (!is_valid_name(elf, sym))
1305                         continue;
1306                 if (sym->st_value <= addr) {
1307                         if ((addr - sym->st_value) < distance) {
1308                                 distance = addr - sym->st_value;
1309                                 near = sym;
1310                         } else if ((addr - sym->st_value) == distance) {
1311                                 near = sym;
1312                         }
1313                 }
1314         }
1315         return near;
1316 }
1317
1318 /*
1319  * Convert a section name to the function/data attribute
1320  * .init.text => __init
1321  * .memexitconst => __memconst
1322  * etc.
1323  *
1324  * The memory of returned value has been allocated on a heap. The user of this
1325  * method should free it after usage.
1326 */
1327 static char *sec2annotation(const char *s)
1328 {
1329         if (match(s, init_exit_sections)) {
1330                 char *p = malloc(20);
1331                 char *r = p;
1332
1333                 *p++ = '_';
1334                 *p++ = '_';
1335                 if (*s == '.')
1336                         s++;
1337                 while (*s && *s != '.')
1338                         *p++ = *s++;
1339                 *p = '\0';
1340                 if (*s == '.')
1341                         s++;
1342                 if (strstr(s, "rodata") != NULL)
1343                         strcat(p, "const ");
1344                 else if (strstr(s, "data") != NULL)
1345                         strcat(p, "data ");
1346                 else
1347                         strcat(p, " ");
1348                 return r;
1349         } else {
1350                 return strdup("");
1351         }
1352 }
1353
1354 static int is_function(Elf_Sym *sym)
1355 {
1356         if (sym)
1357                 return ELF_ST_TYPE(sym->st_info) == STT_FUNC;
1358         else
1359                 return -1;
1360 }
1361
1362 static void print_section_list(const char * const list[20])
1363 {
1364         const char *const *s = list;
1365
1366         while (*s) {
1367                 fprintf(stderr, "%s", *s);
1368                 s++;
1369                 if (*s)
1370                         fprintf(stderr, ", ");
1371         }
1372         fprintf(stderr, "\n");
1373 }
1374
1375 static inline void get_pretty_name(int is_func, const char** name, const char** name_p)
1376 {
1377         switch (is_func) {
1378         case 0: *name = "variable"; *name_p = ""; break;
1379         case 1: *name = "function"; *name_p = "()"; break;
1380         default: *name = "(unknown reference)"; *name_p = ""; break;
1381         }
1382 }
1383
1384 /*
1385  * Print a warning about a section mismatch.
1386  * Try to find symbols near it so user can find it.
1387  * Check whitelist before warning - it may be a false positive.
1388  */
1389 static void report_sec_mismatch(const char *modname,
1390                                 const struct sectioncheck *mismatch,
1391                                 const char *fromsec,
1392                                 unsigned long long fromaddr,
1393                                 const char *fromsym,
1394                                 int from_is_func,
1395                                 const char *tosec, const char *tosym,
1396                                 int to_is_func)
1397 {
1398         const char *from, *from_p;
1399         const char *to, *to_p;
1400         char *prl_from;
1401         char *prl_to;
1402
1403         sec_mismatch_count++;
1404         if (!sec_mismatch_verbose)
1405                 return;
1406
1407         get_pretty_name(from_is_func, &from, &from_p);
1408         get_pretty_name(to_is_func, &to, &to_p);
1409
1410         warn("%s(%s+0x%llx): Section mismatch in reference from the %s %s%s "
1411              "to the %s %s:%s%s\n",
1412              modname, fromsec, fromaddr, from, fromsym, from_p, to, tosec,
1413              tosym, to_p);
1414
1415         switch (mismatch->mismatch) {
1416         case TEXT_TO_ANY_INIT:
1417                 prl_from = sec2annotation(fromsec);
1418                 prl_to = sec2annotation(tosec);
1419                 fprintf(stderr,
1420                 "The function %s%s() references\n"
1421                 "the %s %s%s%s.\n"
1422                 "This is often because %s lacks a %s\n"
1423                 "annotation or the annotation of %s is wrong.\n",
1424                 prl_from, fromsym,
1425                 to, prl_to, tosym, to_p,
1426                 fromsym, prl_to, tosym);
1427                 free(prl_from);
1428                 free(prl_to);
1429                 break;
1430         case DATA_TO_ANY_INIT: {
1431                 prl_to = sec2annotation(tosec);
1432                 fprintf(stderr,
1433                 "The variable %s references\n"
1434                 "the %s %s%s%s\n"
1435                 "If the reference is valid then annotate the\n"
1436                 "variable with __init* or __refdata (see linux/init.h) "
1437                 "or name the variable:\n",
1438                 fromsym, to, prl_to, tosym, to_p);
1439                 print_section_list(mismatch->symbol_white_list);
1440                 free(prl_to);
1441                 break;
1442         }
1443         case TEXT_TO_ANY_EXIT:
1444                 prl_to = sec2annotation(tosec);
1445                 fprintf(stderr,
1446                 "The function %s() references a %s in an exit section.\n"
1447                 "Often the %s %s%s has valid usage outside the exit section\n"
1448                 "and the fix is to remove the %sannotation of %s.\n",
1449                 fromsym, to, to, tosym, to_p, prl_to, tosym);
1450                 free(prl_to);
1451                 break;
1452         case DATA_TO_ANY_EXIT: {
1453                 prl_to = sec2annotation(tosec);
1454                 fprintf(stderr,
1455                 "The variable %s references\n"
1456                 "the %s %s%s%s\n"
1457                 "If the reference is valid then annotate the\n"
1458                 "variable with __exit* (see linux/init.h) or "
1459                 "name the variable:\n",
1460                 fromsym, to, prl_to, tosym, to_p);
1461                 print_section_list(mismatch->symbol_white_list);
1462                 free(prl_to);
1463                 break;
1464         }
1465         case XXXINIT_TO_SOME_INIT:
1466         case XXXEXIT_TO_SOME_EXIT:
1467                 prl_from = sec2annotation(fromsec);
1468                 prl_to = sec2annotation(tosec);
1469                 fprintf(stderr,
1470                 "The %s %s%s%s references\n"
1471                 "a %s %s%s%s.\n"
1472                 "If %s is only used by %s then\n"
1473                 "annotate %s with a matching annotation.\n",
1474                 from, prl_from, fromsym, from_p,
1475                 to, prl_to, tosym, to_p,
1476                 tosym, fromsym, tosym);
1477                 free(prl_from);
1478                 free(prl_to);
1479                 break;
1480         case ANY_INIT_TO_ANY_EXIT:
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 init function\n"
1488                 "uses functionality in the exit path.\n"
1489                 "The fix is often to remove the %sannotation of\n"
1490                 "%s%s so it may be used outside an exit 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 ANY_EXIT_TO_ANY_INIT:
1498                 prl_from = sec2annotation(fromsec);
1499                 prl_to = sec2annotation(tosec);
1500                 fprintf(stderr,
1501                 "The %s %s%s%s references\n"
1502                 "a %s %s%s%s.\n"
1503                 "This is often seen when error handling "
1504                 "in the exit function\n"
1505                 "uses functionality in the init path.\n"
1506                 "The fix is often to remove the %sannotation of\n"
1507                 "%s%s so it may be used outside an init section.\n",
1508                 from, prl_from, fromsym, from_p,
1509                 to, prl_to, tosym, to_p,
1510                 prl_to, tosym, to_p);
1511                 free(prl_from);
1512                 free(prl_to);
1513                 break;
1514         case EXPORT_TO_INIT_EXIT:
1515                 prl_to = sec2annotation(tosec);
1516                 fprintf(stderr,
1517                 "The symbol %s is exported and annotated %s\n"
1518                 "Fix this by removing the %sannotation of %s "
1519                 "or drop the export.\n",
1520                 tosym, prl_to, prl_to, tosym);
1521                 free(prl_to);
1522                 break;
1523         case EXTABLE_TO_NON_TEXT:
1524                 fatal("There's a special handler for this mismatch type, "
1525                       "we should never get here.");
1526                 break;
1527         }
1528         fprintf(stderr, "\n");
1529 }
1530
1531 static void default_mismatch_handler(const char *modname, struct elf_info *elf,
1532                                      const struct sectioncheck* const mismatch,
1533                                      Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1534 {
1535         const char *tosec;
1536         Elf_Sym *to;
1537         Elf_Sym *from;
1538         const char *tosym;
1539         const char *fromsym;
1540
1541         from = find_elf_symbol2(elf, r->r_offset, fromsec);
1542         fromsym = sym_name(elf, from);
1543
1544         if (!strncmp(fromsym, "reference___initcall",
1545                      sizeof("reference___initcall")-1))
1546                 return;
1547
1548         tosec = sec_name(elf, get_secindex(elf, sym));
1549         to = find_elf_symbol(elf, r->r_addend, sym);
1550         tosym = sym_name(elf, to);
1551
1552         /* check whitelist - we may ignore it */
1553         if (secref_whitelist(mismatch,
1554                              fromsec, fromsym, tosec, tosym)) {
1555                 report_sec_mismatch(modname, mismatch,
1556                                     fromsec, r->r_offset, fromsym,
1557                                     is_function(from), tosec, tosym,
1558                                     is_function(to));
1559         }
1560 }
1561
1562 static int is_executable_section(struct elf_info* elf, unsigned int section_index)
1563 {
1564         if (section_index > elf->num_sections)
1565                 fatal("section_index is outside elf->num_sections!\n");
1566
1567         return ((elf->sechdrs[section_index].sh_flags & SHF_EXECINSTR) == SHF_EXECINSTR);
1568 }
1569
1570 /*
1571  * We rely on a gross hack in section_rel[a]() calling find_extable_entry_size()
1572  * to know the sizeof(struct exception_table_entry) for the target architecture.
1573  */
1574 static unsigned int extable_entry_size = 0;
1575 static void find_extable_entry_size(const char* const sec, const Elf_Rela* r)
1576 {
1577         /*
1578          * If we're currently checking the second relocation within __ex_table,
1579          * that relocation offset tells us the offsetof(struct
1580          * exception_table_entry, fixup) which is equal to sizeof(struct
1581          * exception_table_entry) divided by two.  We use that to our advantage
1582          * since there's no portable way to get that size as every architecture
1583          * seems to go with different sized types.  Not pretty but better than
1584          * hard-coding the size for every architecture..
1585          */
1586         if (!extable_entry_size)
1587                 extable_entry_size = r->r_offset * 2;
1588 }
1589
1590 static inline bool is_extable_fault_address(Elf_Rela *r)
1591 {
1592         /*
1593          * extable_entry_size is only discovered after we've handled the
1594          * _second_ relocation in __ex_table, so only abort when we're not
1595          * handling the first reloc and extable_entry_size is zero.
1596          */
1597         if (r->r_offset && extable_entry_size == 0)
1598                 fatal("extable_entry size hasn't been discovered!\n");
1599
1600         return ((r->r_offset == 0) ||
1601                 (r->r_offset % extable_entry_size == 0));
1602 }
1603
1604 #define is_second_extable_reloc(Start, Cur, Sec)                        \
1605         (((Cur) == (Start) + 1) && (strcmp("__ex_table", (Sec)) == 0))
1606
1607 static void report_extable_warnings(const char* modname, struct elf_info* elf,
1608                                     const struct sectioncheck* const mismatch,
1609                                     Elf_Rela* r, Elf_Sym* sym,
1610                                     const char* fromsec, const char* tosec)
1611 {
1612         Elf_Sym* fromsym = find_elf_symbol2(elf, r->r_offset, fromsec);
1613         const char* fromsym_name = sym_name(elf, fromsym);
1614         Elf_Sym* tosym = find_elf_symbol(elf, r->r_addend, sym);
1615         const char* tosym_name = sym_name(elf, tosym);
1616         const char* from_pretty_name;
1617         const char* from_pretty_name_p;
1618         const char* to_pretty_name;
1619         const char* to_pretty_name_p;
1620
1621         get_pretty_name(is_function(fromsym),
1622                         &from_pretty_name, &from_pretty_name_p);
1623         get_pretty_name(is_function(tosym),
1624                         &to_pretty_name, &to_pretty_name_p);
1625
1626         warn("%s(%s+0x%lx): Section mismatch in reference"
1627              " from the %s %s%s to the %s %s:%s%s\n",
1628              modname, fromsec, (long)r->r_offset, from_pretty_name,
1629              fromsym_name, from_pretty_name_p,
1630              to_pretty_name, tosec, tosym_name, to_pretty_name_p);
1631
1632         if (!match(tosec, mismatch->bad_tosec) &&
1633             is_executable_section(elf, get_secindex(elf, sym)))
1634                 fprintf(stderr,
1635                         "The relocation at %s+0x%lx references\n"
1636                         "section \"%s\" which is not in the list of\n"
1637                         "authorized sections.  If you're adding a new section\n"
1638                         "and/or if this reference is valid, add \"%s\" to the\n"
1639                         "list of authorized sections to jump to on fault.\n"
1640                         "This can be achieved by adding \"%s\" to \n"
1641                         "OTHER_TEXT_SECTIONS in scripts/mod/modpost.c.\n",
1642                         fromsec, (long)r->r_offset, tosec, tosec, tosec);
1643 }
1644
1645 static void extable_mismatch_handler(const char* modname, struct elf_info *elf,
1646                                      const struct sectioncheck* const mismatch,
1647                                      Elf_Rela* r, Elf_Sym* sym,
1648                                      const char *fromsec)
1649 {
1650         const char* tosec = sec_name(elf, get_secindex(elf, sym));
1651
1652         sec_mismatch_count++;
1653
1654         if (sec_mismatch_verbose)
1655                 report_extable_warnings(modname, elf, mismatch, r, sym,
1656                                         fromsec, tosec);
1657
1658         if (match(tosec, mismatch->bad_tosec))
1659                 fatal("The relocation at %s+0x%lx references\n"
1660                       "section \"%s\" which is black-listed.\n"
1661                       "Something is seriously wrong and should be fixed.\n"
1662                       "You might get more information about where this is\n"
1663                       "coming from by using scripts/check_extable.sh %s\n",
1664                       fromsec, (long)r->r_offset, tosec, modname);
1665         else if (!is_executable_section(elf, get_secindex(elf, sym))) {
1666                 if (is_extable_fault_address(r))
1667                         fatal("The relocation at %s+0x%lx references\n"
1668                               "section \"%s\" which is not executable, IOW\n"
1669                               "it is not possible for the kernel to fault\n"
1670                               "at that address.  Something is seriously wrong\n"
1671                               "and should be fixed.\n",
1672                               fromsec, (long)r->r_offset, tosec);
1673                 else
1674                         fatal("The relocation at %s+0x%lx references\n"
1675                               "section \"%s\" which is not executable, IOW\n"
1676                               "the kernel will fault if it ever tries to\n"
1677                               "jump to it.  Something is seriously wrong\n"
1678                               "and should be fixed.\n",
1679                               fromsec, (long)r->r_offset, tosec);
1680         }
1681 }
1682
1683 static void check_section_mismatch(const char *modname, struct elf_info *elf,
1684                                    Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1685 {
1686         const char *tosec = sec_name(elf, get_secindex(elf, sym));;
1687         const struct sectioncheck *mismatch = section_mismatch(fromsec, tosec);
1688
1689         if (mismatch) {
1690                 if (mismatch->handler)
1691                         mismatch->handler(modname, elf,  mismatch,
1692                                           r, sym, fromsec);
1693                 else
1694                         default_mismatch_handler(modname, elf, mismatch,
1695                                                  r, sym, fromsec);
1696         }
1697 }
1698
1699 static unsigned int *reloc_location(struct elf_info *elf,
1700                                     Elf_Shdr *sechdr, Elf_Rela *r)
1701 {
1702         Elf_Shdr *sechdrs = elf->sechdrs;
1703         int section = sechdr->sh_info;
1704
1705         return (void *)elf->hdr + sechdrs[section].sh_offset +
1706                 r->r_offset;
1707 }
1708
1709 static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1710 {
1711         unsigned int r_typ = ELF_R_TYPE(r->r_info);
1712         unsigned int *location = reloc_location(elf, sechdr, r);
1713
1714         switch (r_typ) {
1715         case R_386_32:
1716                 r->r_addend = TO_NATIVE(*location);
1717                 break;
1718         case R_386_PC32:
1719                 r->r_addend = TO_NATIVE(*location) + 4;
1720                 /* For CONFIG_RELOCATABLE=y */
1721                 if (elf->hdr->e_type == ET_EXEC)
1722                         r->r_addend += r->r_offset;
1723                 break;
1724         }
1725         return 0;
1726 }
1727
1728 #ifndef R_ARM_CALL
1729 #define R_ARM_CALL      28
1730 #endif
1731 #ifndef R_ARM_JUMP24
1732 #define R_ARM_JUMP24    29
1733 #endif
1734
1735 #ifndef R_ARM_THM_CALL
1736 #define R_ARM_THM_CALL          10
1737 #endif
1738 #ifndef R_ARM_THM_JUMP24
1739 #define R_ARM_THM_JUMP24        30
1740 #endif
1741 #ifndef R_ARM_THM_JUMP19
1742 #define R_ARM_THM_JUMP19        51
1743 #endif
1744
1745 static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1746 {
1747         unsigned int r_typ = ELF_R_TYPE(r->r_info);
1748
1749         switch (r_typ) {
1750         case R_ARM_ABS32:
1751                 /* From ARM ABI: (S + A) | T */
1752                 r->r_addend = (int)(long)
1753                               (elf->symtab_start + ELF_R_SYM(r->r_info));
1754                 break;
1755         case R_ARM_PC24:
1756         case R_ARM_CALL:
1757         case R_ARM_JUMP24:
1758         case R_ARM_THM_CALL:
1759         case R_ARM_THM_JUMP24:
1760         case R_ARM_THM_JUMP19:
1761                 /* From ARM ABI: ((S + A) | T) - P */
1762                 r->r_addend = (int)(long)(elf->hdr +
1763                               sechdr->sh_offset +
1764                               (r->r_offset - sechdr->sh_addr));
1765                 break;
1766         default:
1767                 return 1;
1768         }
1769         return 0;
1770 }
1771
1772 static int addend_mips_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1773 {
1774         unsigned int r_typ = ELF_R_TYPE(r->r_info);
1775         unsigned int *location = reloc_location(elf, sechdr, r);
1776         unsigned int inst;
1777
1778         if (r_typ == R_MIPS_HI16)
1779                 return 1;       /* skip this */
1780         inst = TO_NATIVE(*location);
1781         switch (r_typ) {
1782         case R_MIPS_LO16:
1783                 r->r_addend = inst & 0xffff;
1784                 break;
1785         case R_MIPS_26:
1786                 r->r_addend = (inst & 0x03ffffff) << 2;
1787                 break;
1788         case R_MIPS_32:
1789                 r->r_addend = inst;
1790                 break;
1791         }
1792         return 0;
1793 }
1794
1795 static void section_rela(const char *modname, struct elf_info *elf,
1796                          Elf_Shdr *sechdr)
1797 {
1798         Elf_Sym  *sym;
1799         Elf_Rela *rela;
1800         Elf_Rela r;
1801         unsigned int r_sym;
1802         const char *fromsec;
1803
1804         Elf_Rela *start = (void *)elf->hdr + sechdr->sh_offset;
1805         Elf_Rela *stop  = (void *)start + sechdr->sh_size;
1806
1807         fromsec = sech_name(elf, sechdr);
1808         fromsec += strlen(".rela");
1809         /* if from section (name) is know good then skip it */
1810         if (match(fromsec, section_white_list))
1811                 return;
1812
1813         for (rela = start; rela < stop; rela++) {
1814                 r.r_offset = TO_NATIVE(rela->r_offset);
1815 #if KERNEL_ELFCLASS == ELFCLASS64
1816                 if (elf->hdr->e_machine == EM_MIPS) {
1817                         unsigned int r_typ;
1818                         r_sym = ELF64_MIPS_R_SYM(rela->r_info);
1819                         r_sym = TO_NATIVE(r_sym);
1820                         r_typ = ELF64_MIPS_R_TYPE(rela->r_info);
1821                         r.r_info = ELF64_R_INFO(r_sym, r_typ);
1822                 } else {
1823                         r.r_info = TO_NATIVE(rela->r_info);
1824                         r_sym = ELF_R_SYM(r.r_info);
1825                 }
1826 #else
1827                 r.r_info = TO_NATIVE(rela->r_info);
1828                 r_sym = ELF_R_SYM(r.r_info);
1829 #endif
1830                 r.r_addend = TO_NATIVE(rela->r_addend);
1831                 sym = elf->symtab_start + r_sym;
1832                 /* Skip special sections */
1833                 if (is_shndx_special(sym->st_shndx))
1834                         continue;
1835                 if (is_second_extable_reloc(start, rela, fromsec))
1836                         find_extable_entry_size(fromsec, &r);
1837                 check_section_mismatch(modname, elf, &r, sym, fromsec);
1838         }
1839 }
1840
1841 static void section_rel(const char *modname, struct elf_info *elf,
1842                         Elf_Shdr *sechdr)
1843 {
1844         Elf_Sym *sym;
1845         Elf_Rel *rel;
1846         Elf_Rela r;
1847         unsigned int r_sym;
1848         const char *fromsec;
1849
1850         Elf_Rel *start = (void *)elf->hdr + sechdr->sh_offset;
1851         Elf_Rel *stop  = (void *)start + sechdr->sh_size;
1852
1853         fromsec = sech_name(elf, sechdr);
1854         fromsec += strlen(".rel");
1855         /* if from section (name) is know good then skip it */
1856         if (match(fromsec, section_white_list))
1857                 return;
1858
1859         for (rel = start; rel < stop; rel++) {
1860                 r.r_offset = TO_NATIVE(rel->r_offset);
1861 #if KERNEL_ELFCLASS == ELFCLASS64
1862                 if (elf->hdr->e_machine == EM_MIPS) {
1863                         unsigned int r_typ;
1864                         r_sym = ELF64_MIPS_R_SYM(rel->r_info);
1865                         r_sym = TO_NATIVE(r_sym);
1866                         r_typ = ELF64_MIPS_R_TYPE(rel->r_info);
1867                         r.r_info = ELF64_R_INFO(r_sym, r_typ);
1868                 } else {
1869                         r.r_info = TO_NATIVE(rel->r_info);
1870                         r_sym = ELF_R_SYM(r.r_info);
1871                 }
1872 #else
1873                 r.r_info = TO_NATIVE(rel->r_info);
1874                 r_sym = ELF_R_SYM(r.r_info);
1875 #endif
1876                 r.r_addend = 0;
1877                 switch (elf->hdr->e_machine) {
1878                 case EM_386:
1879                         if (addend_386_rel(elf, sechdr, &r))
1880                                 continue;
1881                         break;
1882                 case EM_ARM:
1883                         if (addend_arm_rel(elf, sechdr, &r))
1884                                 continue;
1885                         break;
1886                 case EM_MIPS:
1887                         if (addend_mips_rel(elf, sechdr, &r))
1888                                 continue;
1889                         break;
1890                 }
1891                 sym = elf->symtab_start + r_sym;
1892                 /* Skip special sections */
1893                 if (is_shndx_special(sym->st_shndx))
1894                         continue;
1895                 if (is_second_extable_reloc(start, rel, fromsec))
1896                         find_extable_entry_size(fromsec, &r);
1897                 check_section_mismatch(modname, elf, &r, sym, fromsec);
1898         }
1899 }
1900
1901 /**
1902  * A module includes a number of sections that are discarded
1903  * either when loaded or when used as built-in.
1904  * For loaded modules all functions marked __init and all data
1905  * marked __initdata will be discarded when the module has been initialized.
1906  * Likewise for modules used built-in the sections marked __exit
1907  * are discarded because __exit marked function are supposed to be called
1908  * only when a module is unloaded which never happens for built-in modules.
1909  * The check_sec_ref() function traverses all relocation records
1910  * to find all references to a section that reference a section that will
1911  * be discarded and warns about it.
1912  **/
1913 static void check_sec_ref(struct module *mod, const char *modname,
1914                           struct elf_info *elf)
1915 {
1916         int i;
1917         Elf_Shdr *sechdrs = elf->sechdrs;
1918
1919         /* Walk through all sections */
1920         for (i = 0; i < elf->num_sections; i++) {
1921                 check_section(modname, elf, &elf->sechdrs[i]);
1922                 /* We want to process only relocation sections and not .init */
1923                 if (sechdrs[i].sh_type == SHT_RELA)
1924                         section_rela(modname, elf, &elf->sechdrs[i]);
1925                 else if (sechdrs[i].sh_type == SHT_REL)
1926                         section_rel(modname, elf, &elf->sechdrs[i]);
1927         }
1928 }
1929
1930 static char *remove_dot(char *s)
1931 {
1932         size_t n = strcspn(s, ".");
1933
1934         if (n && s[n]) {
1935                 size_t m = strspn(s + n + 1, "0123456789");
1936                 if (m && (s[n + m] == '.' || s[n + m] == 0))
1937                         s[n] = 0;
1938         }
1939         return s;
1940 }
1941
1942 static void read_symbols(char *modname)
1943 {
1944         const char *symname;
1945         char *version;
1946         char *license;
1947         struct module *mod;
1948         struct elf_info info = { };
1949         Elf_Sym *sym;
1950
1951         if (!parse_elf(&info, modname))
1952                 return;
1953
1954         mod = new_module(modname);
1955
1956         /* When there's no vmlinux, don't print warnings about
1957          * unresolved symbols (since there'll be too many ;) */
1958         if (is_vmlinux(modname)) {
1959                 have_vmlinux = 1;
1960                 mod->skip = 1;
1961         }
1962
1963         license = get_modinfo(info.modinfo, info.modinfo_len, "license");
1964         if (info.modinfo && !license && !is_vmlinux(modname))
1965                 warn("modpost: missing MODULE_LICENSE() in %s\n"
1966                      "see include/linux/module.h for "
1967                      "more information\n", modname);
1968         while (license) {
1969                 if (license_is_gpl_compatible(license))
1970                         mod->gpl_compatible = 1;
1971                 else {
1972                         mod->gpl_compatible = 0;
1973                         break;
1974                 }
1975                 license = get_next_modinfo(info.modinfo, info.modinfo_len,
1976                                            "license", license);
1977         }
1978
1979         for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
1980                 symname = remove_dot(info.strtab + sym->st_name);
1981
1982                 handle_modversions(mod, &info, sym, symname);
1983                 handle_moddevtable(mod, &info, sym, symname);
1984         }
1985         if (!is_vmlinux(modname) ||
1986              (is_vmlinux(modname) && vmlinux_section_warnings))
1987                 check_sec_ref(mod, modname, &info);
1988
1989         version = get_modinfo(info.modinfo, info.modinfo_len, "version");
1990         if (version)
1991                 maybe_frob_rcs_version(modname, version, info.modinfo,
1992                                        version - (char *)info.hdr);
1993         if (version || (all_versions && !is_vmlinux(modname)))
1994                 get_src_version(modname, mod->srcversion,
1995                                 sizeof(mod->srcversion)-1);
1996
1997         parse_elf_finish(&info);
1998
1999         /* Our trick to get versioning for module struct etc. - it's
2000          * never passed as an argument to an exported function, so
2001          * the automatic versioning doesn't pick it up, but it's really
2002          * important anyhow */
2003         if (modversions)
2004                 mod->unres = alloc_symbol("module_layout", 0, mod->unres);
2005 }
2006
2007 static void read_symbols_from_files(const char *filename)
2008 {
2009         FILE *in = stdin;
2010         char fname[PATH_MAX];
2011
2012         if (strcmp(filename, "-") != 0) {
2013                 in = fopen(filename, "r");
2014                 if (!in)
2015                         fatal("Can't open filenames file %s: %m", filename);
2016         }
2017
2018         while (fgets(fname, PATH_MAX, in) != NULL) {
2019                 if (strends(fname, "\n"))
2020                         fname[strlen(fname)-1] = '\0';
2021                 read_symbols(fname);
2022         }
2023
2024         if (in != stdin)
2025                 fclose(in);
2026 }
2027
2028 #define SZ 500
2029
2030 /* We first write the generated file into memory using the
2031  * following helper, then compare to the file on disk and
2032  * only update the later if anything changed */
2033
2034 void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
2035                                                       const char *fmt, ...)
2036 {
2037         char tmp[SZ];
2038         int len;
2039         va_list ap;
2040
2041         va_start(ap, fmt);
2042         len = vsnprintf(tmp, SZ, fmt, ap);
2043         buf_write(buf, tmp, len);
2044         va_end(ap);
2045 }
2046
2047 void buf_write(struct buffer *buf, const char *s, int len)
2048 {
2049         if (buf->size - buf->pos < len) {
2050                 buf->size += len + SZ;
2051                 buf->p = realloc(buf->p, buf->size);
2052         }
2053         strncpy(buf->p + buf->pos, s, len);
2054         buf->pos += len;
2055 }
2056
2057 static void check_for_gpl_usage(enum export exp, const char *m, const char *s)
2058 {
2059         const char *e = is_vmlinux(m) ?"":".ko";
2060
2061         switch (exp) {
2062         case export_gpl:
2063                 fatal("modpost: GPL-incompatible module %s%s "
2064                       "uses GPL-only symbol '%s'\n", m, e, s);
2065                 break;
2066         case export_unused_gpl:
2067                 fatal("modpost: GPL-incompatible module %s%s "
2068                       "uses GPL-only symbol marked UNUSED '%s'\n", m, e, s);
2069                 break;
2070         case export_gpl_future:
2071                 warn("modpost: GPL-incompatible module %s%s "
2072                       "uses future GPL-only symbol '%s'\n", m, e, s);
2073                 break;
2074         case export_plain:
2075         case export_unused:
2076         case export_unknown:
2077                 /* ignore */
2078                 break;
2079         }
2080 }
2081
2082 static void check_for_unused(enum export exp, const char *m, const char *s)
2083 {
2084         const char *e = is_vmlinux(m) ?"":".ko";
2085
2086         switch (exp) {
2087         case export_unused:
2088         case export_unused_gpl:
2089                 warn("modpost: module %s%s "
2090                       "uses symbol '%s' marked UNUSED\n", m, e, s);
2091                 break;
2092         default:
2093                 /* ignore */
2094                 break;
2095         }
2096 }
2097
2098 static void check_exports(struct module *mod)
2099 {
2100         struct symbol *s, *exp;
2101
2102         for (s = mod->unres; s; s = s->next) {
2103                 const char *basename;
2104                 exp = find_symbol(s->name);
2105                 if (!exp || exp->module == mod)
2106                         continue;
2107                 basename = strrchr(mod->name, '/');
2108                 if (basename)
2109                         basename++;
2110                 else
2111                         basename = mod->name;
2112                 if (!mod->gpl_compatible)
2113                         check_for_gpl_usage(exp->export, basename, exp->name);
2114                 check_for_unused(exp->export, basename, exp->name);
2115         }
2116 }
2117
2118 /**
2119  * Header for the generated file
2120  **/
2121 static void add_header(struct buffer *b, struct module *mod)
2122 {
2123         buf_printf(b, "#include <linux/module.h>\n");
2124         buf_printf(b, "#include <linux/vermagic.h>\n");
2125         buf_printf(b, "#include <linux/compiler.h>\n");
2126         buf_printf(b, "\n");
2127         buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
2128         buf_printf(b, "\n");
2129         buf_printf(b, "__visible struct module __this_module\n");
2130         buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n");
2131         buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
2132         if (mod->has_init)
2133                 buf_printf(b, "\t.init = init_module,\n");
2134         if (mod->has_cleanup)
2135                 buf_printf(b, "#ifdef CONFIG_MODULE_UNLOAD\n"
2136                               "\t.exit = cleanup_module,\n"
2137                               "#endif\n");
2138         buf_printf(b, "\t.arch = MODULE_ARCH_INIT,\n");
2139         buf_printf(b, "};\n");
2140 }
2141
2142 static void add_intree_flag(struct buffer *b, int is_intree)
2143 {
2144         if (is_intree)
2145                 buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
2146 }
2147
2148 static void add_staging_flag(struct buffer *b, const char *name)
2149 {
2150         static const char *staging_dir = "drivers/staging";
2151
2152         if (strncmp(staging_dir, name, strlen(staging_dir)) == 0)
2153                 buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
2154 }
2155
2156 /* In kernel, this size is defined in linux/module.h;
2157  * here we use Elf_Addr instead of long for covering cross-compile
2158  */
2159 #define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
2160
2161 /**
2162  * Record CRCs for unresolved symbols
2163  **/
2164 static int add_versions(struct buffer *b, struct module *mod)
2165 {
2166         struct symbol *s, *exp;
2167         int err = 0;
2168
2169         for (s = mod->unres; s; s = s->next) {
2170                 exp = find_symbol(s->name);
2171                 if (!exp || exp->module == mod) {
2172                         if (have_vmlinux && !s->weak) {
2173                                 if (warn_unresolved) {
2174                                         warn("\"%s\" [%s.ko] undefined!\n",
2175                                              s->name, mod->name);
2176                                 } else {
2177                                         merror("\"%s\" [%s.ko] undefined!\n",
2178                                                s->name, mod->name);
2179                                         err = 1;
2180                                 }
2181                         }
2182                         continue;
2183                 }
2184                 s->module = exp->module;
2185                 s->crc_valid = exp->crc_valid;
2186                 s->crc = exp->crc;
2187         }
2188
2189         if (!modversions)
2190                 return err;
2191
2192         buf_printf(b, "\n");
2193         buf_printf(b, "static const struct modversion_info ____versions[]\n");
2194         buf_printf(b, "__used\n");
2195         buf_printf(b, "__attribute__((section(\"__versions\"))) = {\n");
2196
2197         for (s = mod->unres; s; s = s->next) {
2198                 if (!s->module)
2199                         continue;
2200                 if (!s->crc_valid) {
2201                         warn("\"%s\" [%s.ko] has no CRC!\n",
2202                                 s->name, mod->name);
2203                         continue;
2204                 }
2205                 if (strlen(s->name) >= MODULE_NAME_LEN) {
2206                         merror("too long symbol \"%s\" [%s.ko]\n",
2207                                s->name, mod->name);
2208                         err = 1;
2209                         break;
2210                 }
2211                 buf_printf(b, "\t{ %#8x, __VMLINUX_SYMBOL_STR(%s) },\n",
2212                            s->crc, s->name);
2213         }
2214
2215         buf_printf(b, "};\n");
2216
2217         return err;
2218 }
2219
2220 static void add_depends(struct buffer *b, struct module *mod,
2221                         struct module *modules)
2222 {
2223         struct symbol *s;
2224         struct module *m;
2225         int first = 1;
2226
2227         for (m = modules; m; m = m->next)
2228                 m->seen = is_vmlinux(m->name);
2229
2230         buf_printf(b, "\n");
2231         buf_printf(b, "static const char __module_depends[]\n");
2232         buf_printf(b, "__used\n");
2233         buf_printf(b, "__attribute__((section(\".modinfo\"))) =\n");
2234         buf_printf(b, "\"depends=");
2235         for (s = mod->unres; s; s = s->next) {
2236                 const char *p;
2237                 if (!s->module)
2238                         continue;
2239
2240                 if (s->module->seen)
2241                         continue;
2242
2243                 s->module->seen = 1;
2244                 p = strrchr(s->module->name, '/');
2245                 if (p)
2246                         p++;
2247                 else
2248                         p = s->module->name;
2249                 buf_printf(b, "%s%s", first ? "" : ",", p);
2250                 first = 0;
2251         }
2252         buf_printf(b, "\";\n");
2253 }
2254
2255 static void add_srcversion(struct buffer *b, struct module *mod)
2256 {
2257         if (mod->srcversion[0]) {
2258                 buf_printf(b, "\n");
2259                 buf_printf(b, "MODULE_INFO(srcversion, \"%s\");\n",
2260                            mod->srcversion);
2261         }
2262 }
2263
2264 static void write_if_changed(struct buffer *b, const char *fname)
2265 {
2266         char *tmp;
2267         FILE *file;
2268         struct stat st;
2269
2270         file = fopen(fname, "r");
2271         if (!file)
2272                 goto write;
2273
2274         if (fstat(fileno(file), &st) < 0)
2275                 goto close_write;
2276
2277         if (st.st_size != b->pos)
2278                 goto close_write;
2279
2280         tmp = NOFAIL(malloc(b->pos));
2281         if (fread(tmp, 1, b->pos, file) != b->pos)
2282                 goto free_write;
2283
2284         if (memcmp(tmp, b->p, b->pos) != 0)
2285                 goto free_write;
2286
2287         free(tmp);
2288         fclose(file);
2289         return;
2290
2291  free_write:
2292         free(tmp);
2293  close_write:
2294         fclose(file);
2295  write:
2296         file = fopen(fname, "w");
2297         if (!file) {
2298                 perror(fname);
2299                 exit(1);
2300         }
2301         if (fwrite(b->p, 1, b->pos, file) != b->pos) {
2302                 perror(fname);
2303                 exit(1);
2304         }
2305         fclose(file);
2306 }
2307
2308 /* parse Module.symvers file. line format:
2309  * 0x12345678<tab>symbol<tab>module[[<tab>export]<tab>something]
2310  **/
2311 static void read_dump(const char *fname, unsigned int kernel)
2312 {
2313         unsigned long size, pos = 0;
2314         void *file = grab_file(fname, &size);
2315         char *line;
2316
2317         if (!file)
2318                 /* No symbol versions, silently ignore */
2319                 return;
2320
2321         while ((line = get_next_line(&pos, file, size))) {
2322                 char *symname, *modname, *d, *export, *end;
2323                 unsigned int crc;
2324                 struct module *mod;
2325                 struct symbol *s;
2326
2327                 if (!(symname = strchr(line, '\t')))
2328                         goto fail;
2329                 *symname++ = '\0';
2330                 if (!(modname = strchr(symname, '\t')))
2331                         goto fail;
2332                 *modname++ = '\0';
2333                 if ((export = strchr(modname, '\t')) != NULL)
2334                         *export++ = '\0';
2335                 if (export && ((end = strchr(export, '\t')) != NULL))
2336                         *end = '\0';
2337                 crc = strtoul(line, &d, 16);
2338                 if (*symname == '\0' || *modname == '\0' || *d != '\0')
2339                         goto fail;
2340                 mod = find_module(modname);
2341                 if (!mod) {
2342                         if (is_vmlinux(modname))
2343                                 have_vmlinux = 1;
2344                         mod = new_module(modname);
2345                         mod->skip = 1;
2346                 }
2347                 s = sym_add_exported(symname, mod, export_no(export));
2348                 s->kernel    = kernel;
2349                 s->preloaded = 1;
2350                 sym_update_crc(symname, mod, crc, export_no(export));
2351         }
2352         release_file(file, size);
2353         return;
2354 fail:
2355         release_file(file, size);
2356         fatal("parse error in symbol dump file\n");
2357 }
2358
2359 /* For normal builds always dump all symbols.
2360  * For external modules only dump symbols
2361  * that are not read from kernel Module.symvers.
2362  **/
2363 static int dump_sym(struct symbol *sym)
2364 {
2365         if (!external_module)
2366                 return 1;
2367         if (sym->vmlinux || sym->kernel)
2368                 return 0;
2369         return 1;
2370 }
2371
2372 static void write_dump(const char *fname)
2373 {
2374         struct buffer buf = { };
2375         struct symbol *symbol;
2376         int n;
2377
2378         for (n = 0; n < SYMBOL_HASH_SIZE ; n++) {
2379                 symbol = symbolhash[n];
2380                 while (symbol) {
2381                         if (dump_sym(symbol))
2382                                 buf_printf(&buf, "0x%08x\t%s\t%s\t%s\n",
2383                                         symbol->crc, symbol->name,
2384                                         symbol->module->name,
2385                                         export_str(symbol->export));
2386                         symbol = symbol->next;
2387                 }
2388         }
2389         write_if_changed(&buf, fname);
2390         free(buf.p);
2391 }
2392
2393 struct ext_sym_list {
2394         struct ext_sym_list *next;
2395         const char *file;
2396 };
2397
2398 int main(int argc, char **argv)
2399 {
2400         struct module *mod;
2401         struct buffer buf = { };
2402         char *kernel_read = NULL, *module_read = NULL;
2403         char *dump_write = NULL, *files_source = NULL;
2404         int opt;
2405         int err;
2406         struct ext_sym_list *extsym_iter;
2407         struct ext_sym_list *extsym_start = NULL;
2408
2409         while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:E")) != -1) {
2410                 switch (opt) {
2411                 case 'i':
2412                         kernel_read = optarg;
2413                         break;
2414                 case 'I':
2415                         module_read = optarg;
2416                         external_module = 1;
2417                         break;
2418                 case 'e':
2419                         external_module = 1;
2420                         extsym_iter =
2421                            NOFAIL(malloc(sizeof(*extsym_iter)));
2422                         extsym_iter->next = extsym_start;
2423                         extsym_iter->file = optarg;
2424                         extsym_start = extsym_iter;
2425                         break;
2426                 case 'm':
2427                         modversions = 1;
2428                         break;
2429                 case 'n':
2430                         ignore_missing_files = 1;
2431                         break;
2432                 case 'o':
2433                         dump_write = optarg;
2434                         break;
2435                 case 'a':
2436                         all_versions = 1;
2437                         break;
2438                 case 's':
2439                         vmlinux_section_warnings = 0;
2440                         break;
2441                 case 'S':
2442                         sec_mismatch_verbose = 0;
2443                         break;
2444                 case 'T':
2445                         files_source = optarg;
2446                         break;
2447                 case 'w':
2448                         warn_unresolved = 1;
2449                         break;
2450                 case 'E':
2451                         sec_mismatch_fatal = 1;
2452                         break;
2453                 default:
2454                         exit(1);
2455                 }
2456         }
2457
2458         if (kernel_read)
2459                 read_dump(kernel_read, 1);
2460         if (module_read)
2461                 read_dump(module_read, 0);
2462         while (extsym_start) {
2463                 read_dump(extsym_start->file, 0);
2464                 extsym_iter = extsym_start->next;
2465                 free(extsym_start);
2466                 extsym_start = extsym_iter;
2467         }
2468
2469         while (optind < argc)
2470                 read_symbols(argv[optind++]);
2471
2472         if (files_source)
2473                 read_symbols_from_files(files_source);
2474
2475         for (mod = modules; mod; mod = mod->next) {
2476                 if (mod->skip)
2477                         continue;
2478                 check_exports(mod);
2479         }
2480
2481         err = 0;
2482
2483         for (mod = modules; mod; mod = mod->next) {
2484                 char fname[PATH_MAX];
2485
2486                 if (mod->skip)
2487                         continue;
2488
2489                 buf.pos = 0;
2490
2491                 add_header(&buf, mod);
2492                 add_intree_flag(&buf, !external_module);
2493                 add_staging_flag(&buf, mod->name);
2494                 err |= add_versions(&buf, mod);
2495                 add_depends(&buf, mod, modules);
2496                 add_moddevtable(&buf, mod);
2497                 add_srcversion(&buf, mod);
2498
2499                 sprintf(fname, "%s.mod.c", mod->name);
2500                 write_if_changed(&buf, fname);
2501         }
2502         if (dump_write)
2503                 write_dump(dump_write);
2504         if (sec_mismatch_count) {
2505                 if (!sec_mismatch_verbose) {
2506                         warn("modpost: Found %d section mismatch(es).\n"
2507                              "To see full details build your kernel with:\n"
2508                              "'make CONFIG_DEBUG_SECTION_MISMATCH=y'\n",
2509                              sec_mismatch_count);
2510                 }
2511                 if (sec_mismatch_fatal) {
2512                         fatal("modpost: Section mismatches detected.\n"
2513                               "Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");
2514                 }
2515         }
2516         free(buf.p);
2517
2518         return err;
2519 }