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