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