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