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