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