xref: /openbmc/linux/scripts/mod/modpost.c (revision b9df3997)
1 /* Postprocess module symbol versions
2  *
3  * Copyright 2003       Kai Germaschewski
4  * Copyright 2002-2004  Rusty Russell, IBM Corporation
5  * Copyright 2006-2008  Sam Ravnborg
6  * Based in part on module-init-tools/depmod.c,file2alias
7  *
8  * This software may be used and distributed according to the terms
9  * of the GNU General Public License, incorporated herein by reference.
10  *
11  * Usage: modpost vmlinux module1.o module2.o ...
12  */
13 
14 #define _GNU_SOURCE
15 #include <stdio.h>
16 #include <ctype.h>
17 #include <string.h>
18 #include <limits.h>
19 #include <stdbool.h>
20 #include <errno.h>
21 #include "modpost.h"
22 #include "../../include/linux/license.h"
23 
24 /* Are we using CONFIG_MODVERSIONS? */
25 static int modversions = 0;
26 /* Warn about undefined symbols? (do so if we have vmlinux) */
27 static int have_vmlinux = 0;
28 /* Is CONFIG_MODULE_SRCVERSION_ALL set? */
29 static int all_versions = 0;
30 /* If we are modposting external module set to 1 */
31 static int external_module = 0;
32 /* Warn about section mismatch in vmlinux if set to 1 */
33 static int vmlinux_section_warnings = 1;
34 /* Only warn about unresolved symbols */
35 static int warn_unresolved = 0;
36 /* How a symbol is exported */
37 static int sec_mismatch_count = 0;
38 static int sec_mismatch_fatal = 0;
39 /* ignore missing files */
40 static int ignore_missing_files;
41 /* write namespace dependencies */
42 static int write_namespace_deps;
43 
44 enum export {
45 	export_plain,      export_unused,     export_gpl,
46 	export_unused_gpl, export_gpl_future, export_unknown
47 };
48 
49 /* In kernel, this size is defined in linux/module.h;
50  * here we use Elf_Addr instead of long for covering cross-compile
51  */
52 
53 #define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
54 
55 #define PRINTF __attribute__ ((format (printf, 1, 2)))
56 
57 PRINTF void fatal(const char *fmt, ...)
58 {
59 	va_list arglist;
60 
61 	fprintf(stderr, "FATAL: ");
62 
63 	va_start(arglist, fmt);
64 	vfprintf(stderr, fmt, arglist);
65 	va_end(arglist);
66 
67 	exit(1);
68 }
69 
70 PRINTF void warn(const char *fmt, ...)
71 {
72 	va_list arglist;
73 
74 	fprintf(stderr, "WARNING: ");
75 
76 	va_start(arglist, fmt);
77 	vfprintf(stderr, fmt, arglist);
78 	va_end(arglist);
79 }
80 
81 PRINTF void merror(const char *fmt, ...)
82 {
83 	va_list arglist;
84 
85 	fprintf(stderr, "ERROR: ");
86 
87 	va_start(arglist, fmt);
88 	vfprintf(stderr, fmt, arglist);
89 	va_end(arglist);
90 }
91 
92 static inline bool strends(const char *str, const char *postfix)
93 {
94 	if (strlen(str) < strlen(postfix))
95 		return false;
96 
97 	return strcmp(str + strlen(str) - strlen(postfix), postfix) == 0;
98 }
99 
100 static int is_vmlinux(const char *modname)
101 {
102 	const char *myname;
103 
104 	myname = strrchr(modname, '/');
105 	if (myname)
106 		myname++;
107 	else
108 		myname = modname;
109 
110 	return (strcmp(myname, "vmlinux") == 0) ||
111 	       (strcmp(myname, "vmlinux.o") == 0);
112 }
113 
114 void *do_nofail(void *ptr, const char *expr)
115 {
116 	if (!ptr)
117 		fatal("modpost: Memory allocation failure: %s.\n", expr);
118 
119 	return ptr;
120 }
121 
122 /* A list of all modules we processed */
123 static struct module *modules;
124 
125 static struct module *find_module(const char *modname)
126 {
127 	struct module *mod;
128 
129 	for (mod = modules; mod; mod = mod->next)
130 		if (strcmp(mod->name, modname) == 0)
131 			break;
132 	return mod;
133 }
134 
135 static struct module *new_module(const char *modname)
136 {
137 	struct module *mod;
138 	char *p;
139 
140 	mod = NOFAIL(malloc(sizeof(*mod)));
141 	memset(mod, 0, sizeof(*mod));
142 	p = NOFAIL(strdup(modname));
143 
144 	/* strip trailing .o */
145 	if (strends(p, ".o")) {
146 		p[strlen(p) - 2] = '\0';
147 		mod->is_dot_o = 1;
148 	}
149 
150 	/* add to list */
151 	mod->name = p;
152 	mod->gpl_compatible = -1;
153 	mod->next = modules;
154 	modules = mod;
155 
156 	return mod;
157 }
158 
159 /* A hash of all exported symbols,
160  * struct symbol is also used for lists of unresolved symbols */
161 
162 #define SYMBOL_HASH_SIZE 1024
163 
164 struct symbol {
165 	struct symbol *next;
166 	struct module *module;
167 	unsigned int crc;
168 	int crc_valid;
169 	const char *namespace;
170 	unsigned int weak:1;
171 	unsigned int vmlinux:1;    /* 1 if symbol is defined in vmlinux */
172 	unsigned int kernel:1;     /* 1 if symbol is from kernel
173 				    *  (only for external modules) **/
174 	unsigned int preloaded:1;  /* 1 if symbol from Module.symvers, or crc */
175 	unsigned int is_static:1;  /* 1 if symbol is not global */
176 	enum export  export;       /* Type of export */
177 	char name[0];
178 };
179 
180 static struct symbol *symbolhash[SYMBOL_HASH_SIZE];
181 
182 /* This is based on the hash agorithm from gdbm, via tdb */
183 static inline unsigned int tdb_hash(const char *name)
184 {
185 	unsigned value;	/* Used to compute the hash value.  */
186 	unsigned   i;	/* Used to cycle through random values. */
187 
188 	/* Set the initial value from the key size. */
189 	for (value = 0x238F13AF * strlen(name), i = 0; name[i]; i++)
190 		value = (value + (((unsigned char *)name)[i] << (i*5 % 24)));
191 
192 	return (1103515243 * value + 12345);
193 }
194 
195 /**
196  * Allocate a new symbols for use in the hash of exported symbols or
197  * the list of unresolved symbols per module
198  **/
199 static struct symbol *alloc_symbol(const char *name, unsigned int weak,
200 				   struct symbol *next)
201 {
202 	struct symbol *s = NOFAIL(malloc(sizeof(*s) + strlen(name) + 1));
203 
204 	memset(s, 0, sizeof(*s));
205 	strcpy(s->name, name);
206 	s->weak = weak;
207 	s->next = next;
208 	s->is_static = 1;
209 	return s;
210 }
211 
212 /* For the hash of exported symbols */
213 static struct symbol *new_symbol(const char *name, struct module *module,
214 				 enum export export)
215 {
216 	unsigned int hash;
217 	struct symbol *new;
218 
219 	hash = tdb_hash(name) % SYMBOL_HASH_SIZE;
220 	new = symbolhash[hash] = alloc_symbol(name, 0, symbolhash[hash]);
221 	new->module = module;
222 	new->export = export;
223 	return new;
224 }
225 
226 static struct symbol *find_symbol(const char *name)
227 {
228 	struct symbol *s;
229 
230 	/* For our purposes, .foo matches foo.  PPC64 needs this. */
231 	if (name[0] == '.')
232 		name++;
233 
234 	for (s = symbolhash[tdb_hash(name) % SYMBOL_HASH_SIZE]; s; s = s->next) {
235 		if (strcmp(s->name, name) == 0)
236 			return s;
237 	}
238 	return NULL;
239 }
240 
241 static bool contains_namespace(struct namespace_list *list,
242 			       const char *namespace)
243 {
244 	struct namespace_list *ns_entry;
245 
246 	for (ns_entry = list; ns_entry != NULL; ns_entry = ns_entry->next)
247 		if (strcmp(ns_entry->namespace, namespace) == 0)
248 			return true;
249 
250 	return false;
251 }
252 
253 static void add_namespace(struct namespace_list **list, const char *namespace)
254 {
255 	struct namespace_list *ns_entry;
256 
257 	if (!contains_namespace(*list, namespace)) {
258 		ns_entry = NOFAIL(malloc(sizeof(struct namespace_list) +
259 					 strlen(namespace) + 1));
260 		strcpy(ns_entry->namespace, namespace);
261 		ns_entry->next = *list;
262 		*list = ns_entry;
263 	}
264 }
265 
266 static bool module_imports_namespace(struct module *module,
267 				     const char *namespace)
268 {
269 	return contains_namespace(module->imported_namespaces, namespace);
270 }
271 
272 static const struct {
273 	const char *str;
274 	enum export export;
275 } export_list[] = {
276 	{ .str = "EXPORT_SYMBOL",            .export = export_plain },
277 	{ .str = "EXPORT_UNUSED_SYMBOL",     .export = export_unused },
278 	{ .str = "EXPORT_SYMBOL_GPL",        .export = export_gpl },
279 	{ .str = "EXPORT_UNUSED_SYMBOL_GPL", .export = export_unused_gpl },
280 	{ .str = "EXPORT_SYMBOL_GPL_FUTURE", .export = export_gpl_future },
281 	{ .str = "(unknown)",                .export = export_unknown },
282 };
283 
284 
285 static const char *export_str(enum export ex)
286 {
287 	return export_list[ex].str;
288 }
289 
290 static enum export export_no(const char *s)
291 {
292 	int i;
293 
294 	if (!s)
295 		return export_unknown;
296 	for (i = 0; export_list[i].export != export_unknown; i++) {
297 		if (strcmp(export_list[i].str, s) == 0)
298 			return export_list[i].export;
299 	}
300 	return export_unknown;
301 }
302 
303 static const char *sech_name(struct elf_info *elf, Elf_Shdr *sechdr)
304 {
305 	return (void *)elf->hdr +
306 		elf->sechdrs[elf->secindex_strings].sh_offset +
307 		sechdr->sh_name;
308 }
309 
310 static const char *sec_name(struct elf_info *elf, int secindex)
311 {
312 	return sech_name(elf, &elf->sechdrs[secindex]);
313 }
314 
315 #define strstarts(str, prefix) (strncmp(str, prefix, strlen(prefix)) == 0)
316 
317 static enum export export_from_secname(struct elf_info *elf, unsigned int sec)
318 {
319 	const char *secname = sec_name(elf, sec);
320 
321 	if (strstarts(secname, "___ksymtab+"))
322 		return export_plain;
323 	else if (strstarts(secname, "___ksymtab_unused+"))
324 		return export_unused;
325 	else if (strstarts(secname, "___ksymtab_gpl+"))
326 		return export_gpl;
327 	else if (strstarts(secname, "___ksymtab_unused_gpl+"))
328 		return export_unused_gpl;
329 	else if (strstarts(secname, "___ksymtab_gpl_future+"))
330 		return export_gpl_future;
331 	else
332 		return export_unknown;
333 }
334 
335 static enum export export_from_sec(struct elf_info *elf, unsigned int sec)
336 {
337 	if (sec == elf->export_sec)
338 		return export_plain;
339 	else if (sec == elf->export_unused_sec)
340 		return export_unused;
341 	else if (sec == elf->export_gpl_sec)
342 		return export_gpl;
343 	else if (sec == elf->export_unused_gpl_sec)
344 		return export_unused_gpl;
345 	else if (sec == elf->export_gpl_future_sec)
346 		return export_gpl_future;
347 	else
348 		return export_unknown;
349 }
350 
351 static const char *sym_extract_namespace(const char **symname)
352 {
353 	size_t n;
354 	char *dupsymname;
355 
356 	n = strcspn(*symname, ".");
357 	if (n < strlen(*symname) - 1) {
358 		dupsymname = NOFAIL(strdup(*symname));
359 		dupsymname[n] = '\0';
360 		*symname = dupsymname;
361 		return dupsymname + n + 1;
362 	}
363 
364 	return NULL;
365 }
366 
367 /**
368  * Add an exported symbol - it may have already been added without a
369  * CRC, in this case just update the CRC
370  **/
371 static struct symbol *sym_add_exported(const char *name, const char *namespace,
372 				       struct module *mod, enum export export)
373 {
374 	struct symbol *s = find_symbol(name);
375 
376 	if (!s) {
377 		s = new_symbol(name, mod, export);
378 		s->namespace = namespace;
379 	} else {
380 		if (!s->preloaded) {
381 			warn("%s: '%s' exported twice. Previous export was in %s%s\n",
382 			     mod->name, name, s->module->name,
383 			     is_vmlinux(s->module->name) ? "" : ".ko");
384 		} else {
385 			/* In case Module.symvers was out of date */
386 			s->module = mod;
387 		}
388 	}
389 	s->preloaded = 0;
390 	s->vmlinux   = is_vmlinux(mod->name);
391 	s->kernel    = 0;
392 	s->export    = export;
393 	return s;
394 }
395 
396 static void sym_update_crc(const char *name, struct module *mod,
397 			   unsigned int crc, enum export export)
398 {
399 	struct symbol *s = find_symbol(name);
400 
401 	if (!s) {
402 		s = new_symbol(name, mod, export);
403 		/* Don't complain when we find it later. */
404 		s->preloaded = 1;
405 	}
406 	s->crc = crc;
407 	s->crc_valid = 1;
408 }
409 
410 void *grab_file(const char *filename, unsigned long *size)
411 {
412 	struct stat st;
413 	void *map = MAP_FAILED;
414 	int fd;
415 
416 	fd = open(filename, O_RDONLY);
417 	if (fd < 0)
418 		return NULL;
419 	if (fstat(fd, &st))
420 		goto failed;
421 
422 	*size = st.st_size;
423 	map = mmap(NULL, *size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
424 
425 failed:
426 	close(fd);
427 	if (map == MAP_FAILED)
428 		return NULL;
429 	return map;
430 }
431 
432 /**
433   * Return a copy of the next line in a mmap'ed file.
434   * spaces in the beginning of the line is trimmed away.
435   * Return a pointer to a static buffer.
436   **/
437 char *get_next_line(unsigned long *pos, void *file, unsigned long size)
438 {
439 	static char line[4096];
440 	int skip = 1;
441 	size_t len = 0;
442 	signed char *p = (signed char *)file + *pos;
443 	char *s = line;
444 
445 	for (; *pos < size ; (*pos)++) {
446 		if (skip && isspace(*p)) {
447 			p++;
448 			continue;
449 		}
450 		skip = 0;
451 		if (*p != '\n' && (*pos < size)) {
452 			len++;
453 			*s++ = *p++;
454 			if (len > 4095)
455 				break; /* Too long, stop */
456 		} else {
457 			/* End of string */
458 			*s = '\0';
459 			return line;
460 		}
461 	}
462 	/* End of buffer */
463 	return NULL;
464 }
465 
466 void release_file(void *file, unsigned long size)
467 {
468 	munmap(file, size);
469 }
470 
471 static int parse_elf(struct elf_info *info, const char *filename)
472 {
473 	unsigned int i;
474 	Elf_Ehdr *hdr;
475 	Elf_Shdr *sechdrs;
476 	Elf_Sym  *sym;
477 	const char *secstrings;
478 	unsigned int symtab_idx = ~0U, symtab_shndx_idx = ~0U;
479 
480 	hdr = grab_file(filename, &info->size);
481 	if (!hdr) {
482 		if (ignore_missing_files) {
483 			fprintf(stderr, "%s: %s (ignored)\n", filename,
484 				strerror(errno));
485 			return 0;
486 		}
487 		perror(filename);
488 		exit(1);
489 	}
490 	info->hdr = hdr;
491 	if (info->size < sizeof(*hdr)) {
492 		/* file too small, assume this is an empty .o file */
493 		return 0;
494 	}
495 	/* Is this a valid ELF file? */
496 	if ((hdr->e_ident[EI_MAG0] != ELFMAG0) ||
497 	    (hdr->e_ident[EI_MAG1] != ELFMAG1) ||
498 	    (hdr->e_ident[EI_MAG2] != ELFMAG2) ||
499 	    (hdr->e_ident[EI_MAG3] != ELFMAG3)) {
500 		/* Not an ELF file - silently ignore it */
501 		return 0;
502 	}
503 	/* Fix endianness in ELF header */
504 	hdr->e_type      = TO_NATIVE(hdr->e_type);
505 	hdr->e_machine   = TO_NATIVE(hdr->e_machine);
506 	hdr->e_version   = TO_NATIVE(hdr->e_version);
507 	hdr->e_entry     = TO_NATIVE(hdr->e_entry);
508 	hdr->e_phoff     = TO_NATIVE(hdr->e_phoff);
509 	hdr->e_shoff     = TO_NATIVE(hdr->e_shoff);
510 	hdr->e_flags     = TO_NATIVE(hdr->e_flags);
511 	hdr->e_ehsize    = TO_NATIVE(hdr->e_ehsize);
512 	hdr->e_phentsize = TO_NATIVE(hdr->e_phentsize);
513 	hdr->e_phnum     = TO_NATIVE(hdr->e_phnum);
514 	hdr->e_shentsize = TO_NATIVE(hdr->e_shentsize);
515 	hdr->e_shnum     = TO_NATIVE(hdr->e_shnum);
516 	hdr->e_shstrndx  = TO_NATIVE(hdr->e_shstrndx);
517 	sechdrs = (void *)hdr + hdr->e_shoff;
518 	info->sechdrs = sechdrs;
519 
520 	/* Check if file offset is correct */
521 	if (hdr->e_shoff > info->size) {
522 		fatal("section header offset=%lu in file '%s' is bigger than "
523 		      "filesize=%lu\n", (unsigned long)hdr->e_shoff,
524 		      filename, info->size);
525 		return 0;
526 	}
527 
528 	if (hdr->e_shnum == SHN_UNDEF) {
529 		/*
530 		 * There are more than 64k sections,
531 		 * read count from .sh_size.
532 		 */
533 		info->num_sections = TO_NATIVE(sechdrs[0].sh_size);
534 	}
535 	else {
536 		info->num_sections = hdr->e_shnum;
537 	}
538 	if (hdr->e_shstrndx == SHN_XINDEX) {
539 		info->secindex_strings = TO_NATIVE(sechdrs[0].sh_link);
540 	}
541 	else {
542 		info->secindex_strings = hdr->e_shstrndx;
543 	}
544 
545 	/* Fix endianness in section headers */
546 	for (i = 0; i < info->num_sections; i++) {
547 		sechdrs[i].sh_name      = TO_NATIVE(sechdrs[i].sh_name);
548 		sechdrs[i].sh_type      = TO_NATIVE(sechdrs[i].sh_type);
549 		sechdrs[i].sh_flags     = TO_NATIVE(sechdrs[i].sh_flags);
550 		sechdrs[i].sh_addr      = TO_NATIVE(sechdrs[i].sh_addr);
551 		sechdrs[i].sh_offset    = TO_NATIVE(sechdrs[i].sh_offset);
552 		sechdrs[i].sh_size      = TO_NATIVE(sechdrs[i].sh_size);
553 		sechdrs[i].sh_link      = TO_NATIVE(sechdrs[i].sh_link);
554 		sechdrs[i].sh_info      = TO_NATIVE(sechdrs[i].sh_info);
555 		sechdrs[i].sh_addralign = TO_NATIVE(sechdrs[i].sh_addralign);
556 		sechdrs[i].sh_entsize   = TO_NATIVE(sechdrs[i].sh_entsize);
557 	}
558 	/* Find symbol table. */
559 	secstrings = (void *)hdr + sechdrs[info->secindex_strings].sh_offset;
560 	for (i = 1; i < info->num_sections; i++) {
561 		const char *secname;
562 		int nobits = sechdrs[i].sh_type == SHT_NOBITS;
563 
564 		if (!nobits && sechdrs[i].sh_offset > info->size) {
565 			fatal("%s is truncated. sechdrs[i].sh_offset=%lu > "
566 			      "sizeof(*hrd)=%zu\n", filename,
567 			      (unsigned long)sechdrs[i].sh_offset,
568 			      sizeof(*hdr));
569 			return 0;
570 		}
571 		secname = secstrings + sechdrs[i].sh_name;
572 		if (strcmp(secname, ".modinfo") == 0) {
573 			if (nobits)
574 				fatal("%s has NOBITS .modinfo\n", filename);
575 			info->modinfo = (void *)hdr + sechdrs[i].sh_offset;
576 			info->modinfo_len = sechdrs[i].sh_size;
577 		} else if (strcmp(secname, "__ksymtab") == 0)
578 			info->export_sec = i;
579 		else if (strcmp(secname, "__ksymtab_unused") == 0)
580 			info->export_unused_sec = i;
581 		else if (strcmp(secname, "__ksymtab_gpl") == 0)
582 			info->export_gpl_sec = i;
583 		else if (strcmp(secname, "__ksymtab_unused_gpl") == 0)
584 			info->export_unused_gpl_sec = i;
585 		else if (strcmp(secname, "__ksymtab_gpl_future") == 0)
586 			info->export_gpl_future_sec = i;
587 
588 		if (sechdrs[i].sh_type == SHT_SYMTAB) {
589 			unsigned int sh_link_idx;
590 			symtab_idx = i;
591 			info->symtab_start = (void *)hdr +
592 			    sechdrs[i].sh_offset;
593 			info->symtab_stop  = (void *)hdr +
594 			    sechdrs[i].sh_offset + sechdrs[i].sh_size;
595 			sh_link_idx = sechdrs[i].sh_link;
596 			info->strtab       = (void *)hdr +
597 			    sechdrs[sh_link_idx].sh_offset;
598 		}
599 
600 		/* 32bit section no. table? ("more than 64k sections") */
601 		if (sechdrs[i].sh_type == SHT_SYMTAB_SHNDX) {
602 			symtab_shndx_idx = i;
603 			info->symtab_shndx_start = (void *)hdr +
604 			    sechdrs[i].sh_offset;
605 			info->symtab_shndx_stop  = (void *)hdr +
606 			    sechdrs[i].sh_offset + sechdrs[i].sh_size;
607 		}
608 	}
609 	if (!info->symtab_start)
610 		fatal("%s has no symtab?\n", filename);
611 
612 	/* Fix endianness in symbols */
613 	for (sym = info->symtab_start; sym < info->symtab_stop; sym++) {
614 		sym->st_shndx = TO_NATIVE(sym->st_shndx);
615 		sym->st_name  = TO_NATIVE(sym->st_name);
616 		sym->st_value = TO_NATIVE(sym->st_value);
617 		sym->st_size  = TO_NATIVE(sym->st_size);
618 	}
619 
620 	if (symtab_shndx_idx != ~0U) {
621 		Elf32_Word *p;
622 		if (symtab_idx != sechdrs[symtab_shndx_idx].sh_link)
623 			fatal("%s: SYMTAB_SHNDX has bad sh_link: %u!=%u\n",
624 			      filename, sechdrs[symtab_shndx_idx].sh_link,
625 			      symtab_idx);
626 		/* Fix endianness */
627 		for (p = info->symtab_shndx_start; p < info->symtab_shndx_stop;
628 		     p++)
629 			*p = TO_NATIVE(*p);
630 	}
631 
632 	return 1;
633 }
634 
635 static void parse_elf_finish(struct elf_info *info)
636 {
637 	release_file(info->hdr, info->size);
638 }
639 
640 static int ignore_undef_symbol(struct elf_info *info, const char *symname)
641 {
642 	/* ignore __this_module, it will be resolved shortly */
643 	if (strcmp(symname, "__this_module") == 0)
644 		return 1;
645 	/* ignore global offset table */
646 	if (strcmp(symname, "_GLOBAL_OFFSET_TABLE_") == 0)
647 		return 1;
648 	if (info->hdr->e_machine == EM_PPC)
649 		/* Special register function linked on all modules during final link of .ko */
650 		if (strstarts(symname, "_restgpr_") ||
651 		    strstarts(symname, "_savegpr_") ||
652 		    strstarts(symname, "_rest32gpr_") ||
653 		    strstarts(symname, "_save32gpr_") ||
654 		    strstarts(symname, "_restvr_") ||
655 		    strstarts(symname, "_savevr_"))
656 			return 1;
657 	if (info->hdr->e_machine == EM_PPC64)
658 		/* Special register function linked on all modules during final link of .ko */
659 		if (strstarts(symname, "_restgpr0_") ||
660 		    strstarts(symname, "_savegpr0_") ||
661 		    strstarts(symname, "_restvr_") ||
662 		    strstarts(symname, "_savevr_") ||
663 		    strcmp(symname, ".TOC.") == 0)
664 			return 1;
665 	/* Do not ignore this symbol */
666 	return 0;
667 }
668 
669 static void handle_modversions(struct module *mod, struct elf_info *info,
670 			       Elf_Sym *sym, const char *symname)
671 {
672 	unsigned int crc;
673 	enum export export;
674 	bool is_crc = false;
675 	const char *name, *namespace;
676 
677 	if ((!is_vmlinux(mod->name) || mod->is_dot_o) &&
678 	    strstarts(symname, "__ksymtab"))
679 		export = export_from_secname(info, get_secindex(info, sym));
680 	else
681 		export = export_from_sec(info, get_secindex(info, sym));
682 
683 	/* CRC'd symbol */
684 	if (strstarts(symname, "__crc_")) {
685 		is_crc = true;
686 		crc = (unsigned int) sym->st_value;
687 		if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS) {
688 			unsigned int *crcp;
689 
690 			/* symbol points to the CRC in the ELF object */
691 			crcp = (void *)info->hdr + sym->st_value +
692 			       info->sechdrs[sym->st_shndx].sh_offset -
693 			       (info->hdr->e_type != ET_REL ?
694 				info->sechdrs[sym->st_shndx].sh_addr : 0);
695 			crc = TO_NATIVE(*crcp);
696 		}
697 		sym_update_crc(symname + strlen("__crc_"), mod, crc,
698 				export);
699 	}
700 
701 	switch (sym->st_shndx) {
702 	case SHN_COMMON:
703 		if (strstarts(symname, "__gnu_lto_")) {
704 			/* Should warn here, but modpost runs before the linker */
705 		} else
706 			warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name);
707 		break;
708 	case SHN_UNDEF:
709 		/* undefined symbol */
710 		if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL &&
711 		    ELF_ST_BIND(sym->st_info) != STB_WEAK)
712 			break;
713 		if (ignore_undef_symbol(info, symname))
714 			break;
715 /* cope with newer glibc (2.3.4 or higher) STT_ definition in elf.h */
716 #if defined(STT_REGISTER) || defined(STT_SPARC_REGISTER)
717 /* add compatibility with older glibc */
718 #ifndef STT_SPARC_REGISTER
719 #define STT_SPARC_REGISTER STT_REGISTER
720 #endif
721 		if (info->hdr->e_machine == EM_SPARC ||
722 		    info->hdr->e_machine == EM_SPARCV9) {
723 			/* Ignore register directives. */
724 			if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER)
725 				break;
726 			if (symname[0] == '.') {
727 				char *munged = NOFAIL(strdup(symname));
728 				munged[0] = '_';
729 				munged[1] = toupper(munged[1]);
730 				symname = munged;
731 			}
732 		}
733 #endif
734 
735 		if (is_crc) {
736 			const char *e = is_vmlinux(mod->name) ?"":".ko";
737 			warn("EXPORT symbol \"%s\" [%s%s] version generation failed, symbol will not be versioned.\n",
738 			     symname + strlen("__crc_"), mod->name, e);
739 		}
740 		mod->unres = alloc_symbol(symname,
741 					  ELF_ST_BIND(sym->st_info) == STB_WEAK,
742 					  mod->unres);
743 		break;
744 	default:
745 		/* All exported symbols */
746 		if (strstarts(symname, "__ksymtab_")) {
747 			name = symname + strlen("__ksymtab_");
748 			namespace = sym_extract_namespace(&name);
749 			sym_add_exported(name, namespace, mod, export);
750 		}
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"
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 	Elf_Shdr *sechdrs = elf->sechdrs;
1756 	int section = sechdr->sh_info;
1757 
1758 	return (void *)elf->hdr + sechdrs[section].sh_offset +
1759 		r->r_offset;
1760 }
1761 
1762 static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1763 {
1764 	unsigned int r_typ = ELF_R_TYPE(r->r_info);
1765 	unsigned int *location = reloc_location(elf, sechdr, r);
1766 
1767 	switch (r_typ) {
1768 	case R_386_32:
1769 		r->r_addend = TO_NATIVE(*location);
1770 		break;
1771 	case R_386_PC32:
1772 		r->r_addend = TO_NATIVE(*location) + 4;
1773 		/* For CONFIG_RELOCATABLE=y */
1774 		if (elf->hdr->e_type == ET_EXEC)
1775 			r->r_addend += r->r_offset;
1776 		break;
1777 	}
1778 	return 0;
1779 }
1780 
1781 #ifndef R_ARM_CALL
1782 #define R_ARM_CALL	28
1783 #endif
1784 #ifndef R_ARM_JUMP24
1785 #define R_ARM_JUMP24	29
1786 #endif
1787 
1788 #ifndef	R_ARM_THM_CALL
1789 #define	R_ARM_THM_CALL		10
1790 #endif
1791 #ifndef	R_ARM_THM_JUMP24
1792 #define	R_ARM_THM_JUMP24	30
1793 #endif
1794 #ifndef	R_ARM_THM_JUMP19
1795 #define	R_ARM_THM_JUMP19	51
1796 #endif
1797 
1798 static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1799 {
1800 	unsigned int r_typ = ELF_R_TYPE(r->r_info);
1801 
1802 	switch (r_typ) {
1803 	case R_ARM_ABS32:
1804 		/* From ARM ABI: (S + A) | T */
1805 		r->r_addend = (int)(long)
1806 			      (elf->symtab_start + ELF_R_SYM(r->r_info));
1807 		break;
1808 	case R_ARM_PC24:
1809 	case R_ARM_CALL:
1810 	case R_ARM_JUMP24:
1811 	case R_ARM_THM_CALL:
1812 	case R_ARM_THM_JUMP24:
1813 	case R_ARM_THM_JUMP19:
1814 		/* From ARM ABI: ((S + A) | T) - P */
1815 		r->r_addend = (int)(long)(elf->hdr +
1816 			      sechdr->sh_offset +
1817 			      (r->r_offset - sechdr->sh_addr));
1818 		break;
1819 	default:
1820 		return 1;
1821 	}
1822 	return 0;
1823 }
1824 
1825 static int addend_mips_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1826 {
1827 	unsigned int r_typ = ELF_R_TYPE(r->r_info);
1828 	unsigned int *location = reloc_location(elf, sechdr, r);
1829 	unsigned int inst;
1830 
1831 	if (r_typ == R_MIPS_HI16)
1832 		return 1;	/* skip this */
1833 	inst = TO_NATIVE(*location);
1834 	switch (r_typ) {
1835 	case R_MIPS_LO16:
1836 		r->r_addend = inst & 0xffff;
1837 		break;
1838 	case R_MIPS_26:
1839 		r->r_addend = (inst & 0x03ffffff) << 2;
1840 		break;
1841 	case R_MIPS_32:
1842 		r->r_addend = inst;
1843 		break;
1844 	}
1845 	return 0;
1846 }
1847 
1848 static void section_rela(const char *modname, struct elf_info *elf,
1849 			 Elf_Shdr *sechdr)
1850 {
1851 	Elf_Sym  *sym;
1852 	Elf_Rela *rela;
1853 	Elf_Rela r;
1854 	unsigned int r_sym;
1855 	const char *fromsec;
1856 
1857 	Elf_Rela *start = (void *)elf->hdr + sechdr->sh_offset;
1858 	Elf_Rela *stop  = (void *)start + sechdr->sh_size;
1859 
1860 	fromsec = sech_name(elf, sechdr);
1861 	fromsec += strlen(".rela");
1862 	/* if from section (name) is know good then skip it */
1863 	if (match(fromsec, section_white_list))
1864 		return;
1865 
1866 	for (rela = start; rela < stop; rela++) {
1867 		r.r_offset = TO_NATIVE(rela->r_offset);
1868 #if KERNEL_ELFCLASS == ELFCLASS64
1869 		if (elf->hdr->e_machine == EM_MIPS) {
1870 			unsigned int r_typ;
1871 			r_sym = ELF64_MIPS_R_SYM(rela->r_info);
1872 			r_sym = TO_NATIVE(r_sym);
1873 			r_typ = ELF64_MIPS_R_TYPE(rela->r_info);
1874 			r.r_info = ELF64_R_INFO(r_sym, r_typ);
1875 		} else {
1876 			r.r_info = TO_NATIVE(rela->r_info);
1877 			r_sym = ELF_R_SYM(r.r_info);
1878 		}
1879 #else
1880 		r.r_info = TO_NATIVE(rela->r_info);
1881 		r_sym = ELF_R_SYM(r.r_info);
1882 #endif
1883 		r.r_addend = TO_NATIVE(rela->r_addend);
1884 		sym = elf->symtab_start + r_sym;
1885 		/* Skip special sections */
1886 		if (is_shndx_special(sym->st_shndx))
1887 			continue;
1888 		if (is_second_extable_reloc(start, rela, fromsec))
1889 			find_extable_entry_size(fromsec, &r);
1890 		check_section_mismatch(modname, elf, &r, sym, fromsec);
1891 	}
1892 }
1893 
1894 static void section_rel(const char *modname, struct elf_info *elf,
1895 			Elf_Shdr *sechdr)
1896 {
1897 	Elf_Sym *sym;
1898 	Elf_Rel *rel;
1899 	Elf_Rela r;
1900 	unsigned int r_sym;
1901 	const char *fromsec;
1902 
1903 	Elf_Rel *start = (void *)elf->hdr + sechdr->sh_offset;
1904 	Elf_Rel *stop  = (void *)start + sechdr->sh_size;
1905 
1906 	fromsec = sech_name(elf, sechdr);
1907 	fromsec += strlen(".rel");
1908 	/* if from section (name) is know good then skip it */
1909 	if (match(fromsec, section_white_list))
1910 		return;
1911 
1912 	for (rel = start; rel < stop; rel++) {
1913 		r.r_offset = TO_NATIVE(rel->r_offset);
1914 #if KERNEL_ELFCLASS == ELFCLASS64
1915 		if (elf->hdr->e_machine == EM_MIPS) {
1916 			unsigned int r_typ;
1917 			r_sym = ELF64_MIPS_R_SYM(rel->r_info);
1918 			r_sym = TO_NATIVE(r_sym);
1919 			r_typ = ELF64_MIPS_R_TYPE(rel->r_info);
1920 			r.r_info = ELF64_R_INFO(r_sym, r_typ);
1921 		} else {
1922 			r.r_info = TO_NATIVE(rel->r_info);
1923 			r_sym = ELF_R_SYM(r.r_info);
1924 		}
1925 #else
1926 		r.r_info = TO_NATIVE(rel->r_info);
1927 		r_sym = ELF_R_SYM(r.r_info);
1928 #endif
1929 		r.r_addend = 0;
1930 		switch (elf->hdr->e_machine) {
1931 		case EM_386:
1932 			if (addend_386_rel(elf, sechdr, &r))
1933 				continue;
1934 			break;
1935 		case EM_ARM:
1936 			if (addend_arm_rel(elf, sechdr, &r))
1937 				continue;
1938 			break;
1939 		case EM_MIPS:
1940 			if (addend_mips_rel(elf, sechdr, &r))
1941 				continue;
1942 			break;
1943 		}
1944 		sym = elf->symtab_start + r_sym;
1945 		/* Skip special sections */
1946 		if (is_shndx_special(sym->st_shndx))
1947 			continue;
1948 		if (is_second_extable_reloc(start, rel, fromsec))
1949 			find_extable_entry_size(fromsec, &r);
1950 		check_section_mismatch(modname, elf, &r, sym, fromsec);
1951 	}
1952 }
1953 
1954 /**
1955  * A module includes a number of sections that are discarded
1956  * either when loaded or when used as built-in.
1957  * For loaded modules all functions marked __init and all data
1958  * marked __initdata will be discarded when the module has been initialized.
1959  * Likewise for modules used built-in the sections marked __exit
1960  * are discarded because __exit marked function are supposed to be called
1961  * only when a module is unloaded which never happens for built-in modules.
1962  * The check_sec_ref() function traverses all relocation records
1963  * to find all references to a section that reference a section that will
1964  * be discarded and warns about it.
1965  **/
1966 static void check_sec_ref(struct module *mod, const char *modname,
1967 			  struct elf_info *elf)
1968 {
1969 	int i;
1970 	Elf_Shdr *sechdrs = elf->sechdrs;
1971 
1972 	/* Walk through all sections */
1973 	for (i = 0; i < elf->num_sections; i++) {
1974 		check_section(modname, elf, &elf->sechdrs[i]);
1975 		/* We want to process only relocation sections and not .init */
1976 		if (sechdrs[i].sh_type == SHT_RELA)
1977 			section_rela(modname, elf, &elf->sechdrs[i]);
1978 		else if (sechdrs[i].sh_type == SHT_REL)
1979 			section_rel(modname, elf, &elf->sechdrs[i]);
1980 	}
1981 }
1982 
1983 static char *remove_dot(char *s)
1984 {
1985 	size_t n = strcspn(s, ".");
1986 
1987 	if (n && s[n]) {
1988 		size_t m = strspn(s + n + 1, "0123456789");
1989 		if (m && (s[n + m] == '.' || s[n + m] == 0))
1990 			s[n] = 0;
1991 	}
1992 	return s;
1993 }
1994 
1995 static void read_symbols(const char *modname)
1996 {
1997 	const char *symname;
1998 	char *version;
1999 	char *license;
2000 	char *namespace;
2001 	struct module *mod;
2002 	struct elf_info info = { };
2003 	Elf_Sym *sym;
2004 
2005 	if (!parse_elf(&info, modname))
2006 		return;
2007 
2008 	mod = new_module(modname);
2009 
2010 	/* When there's no vmlinux, don't print warnings about
2011 	 * unresolved symbols (since there'll be too many ;) */
2012 	if (is_vmlinux(modname)) {
2013 		have_vmlinux = 1;
2014 		mod->skip = 1;
2015 	}
2016 
2017 	license = get_modinfo(&info, "license");
2018 	if (!license && !is_vmlinux(modname))
2019 		warn("modpost: missing MODULE_LICENSE() in %s\n"
2020 		     "see include/linux/module.h for "
2021 		     "more information\n", modname);
2022 	while (license) {
2023 		if (license_is_gpl_compatible(license))
2024 			mod->gpl_compatible = 1;
2025 		else {
2026 			mod->gpl_compatible = 0;
2027 			break;
2028 		}
2029 		license = get_next_modinfo(&info, "license", license);
2030 	}
2031 
2032 	namespace = get_modinfo(&info, "import_ns");
2033 	while (namespace) {
2034 		add_namespace(&mod->imported_namespaces, namespace);
2035 		namespace = get_next_modinfo(&info, "import_ns", namespace);
2036 	}
2037 
2038 	for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
2039 		symname = remove_dot(info.strtab + sym->st_name);
2040 
2041 		handle_modversions(mod, &info, sym, symname);
2042 		handle_moddevtable(mod, &info, sym, symname);
2043 	}
2044 
2045 	// check for static EXPORT_SYMBOL_* functions && global vars
2046 	for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
2047 		unsigned char bind = ELF_ST_BIND(sym->st_info);
2048 
2049 		if (bind == STB_GLOBAL || bind == STB_WEAK) {
2050 			struct symbol *s =
2051 				find_symbol(remove_dot(info.strtab +
2052 						       sym->st_name));
2053 
2054 			if (s)
2055 				s->is_static = 0;
2056 		}
2057 	}
2058 
2059 	if (!is_vmlinux(modname) || vmlinux_section_warnings)
2060 		check_sec_ref(mod, modname, &info);
2061 
2062 	version = get_modinfo(&info, "version");
2063 	if (version)
2064 		maybe_frob_rcs_version(modname, version, info.modinfo,
2065 				       version - (char *)info.hdr);
2066 	if (version || (all_versions && !is_vmlinux(modname)))
2067 		get_src_version(modname, mod->srcversion,
2068 				sizeof(mod->srcversion)-1);
2069 
2070 	parse_elf_finish(&info);
2071 
2072 	/* Our trick to get versioning for module struct etc. - it's
2073 	 * never passed as an argument to an exported function, so
2074 	 * the automatic versioning doesn't pick it up, but it's really
2075 	 * important anyhow */
2076 	if (modversions)
2077 		mod->unres = alloc_symbol("module_layout", 0, mod->unres);
2078 }
2079 
2080 static void read_symbols_from_files(const char *filename)
2081 {
2082 	FILE *in = stdin;
2083 	char fname[PATH_MAX];
2084 
2085 	if (strcmp(filename, "-") != 0) {
2086 		in = fopen(filename, "r");
2087 		if (!in)
2088 			fatal("Can't open filenames file %s: %m", filename);
2089 	}
2090 
2091 	while (fgets(fname, PATH_MAX, in) != NULL) {
2092 		if (strends(fname, "\n"))
2093 			fname[strlen(fname)-1] = '\0';
2094 		read_symbols(fname);
2095 	}
2096 
2097 	if (in != stdin)
2098 		fclose(in);
2099 }
2100 
2101 #define SZ 500
2102 
2103 /* We first write the generated file into memory using the
2104  * following helper, then compare to the file on disk and
2105  * only update the later if anything changed */
2106 
2107 void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
2108 						      const char *fmt, ...)
2109 {
2110 	char tmp[SZ];
2111 	int len;
2112 	va_list ap;
2113 
2114 	va_start(ap, fmt);
2115 	len = vsnprintf(tmp, SZ, fmt, ap);
2116 	buf_write(buf, tmp, len);
2117 	va_end(ap);
2118 }
2119 
2120 void buf_write(struct buffer *buf, const char *s, int len)
2121 {
2122 	if (buf->size - buf->pos < len) {
2123 		buf->size += len + SZ;
2124 		buf->p = NOFAIL(realloc(buf->p, buf->size));
2125 	}
2126 	strncpy(buf->p + buf->pos, s, len);
2127 	buf->pos += len;
2128 }
2129 
2130 static void check_for_gpl_usage(enum export exp, const char *m, const char *s)
2131 {
2132 	const char *e = is_vmlinux(m) ?"":".ko";
2133 
2134 	switch (exp) {
2135 	case export_gpl:
2136 		fatal("modpost: GPL-incompatible module %s%s "
2137 		      "uses GPL-only symbol '%s'\n", m, e, s);
2138 		break;
2139 	case export_unused_gpl:
2140 		fatal("modpost: GPL-incompatible module %s%s "
2141 		      "uses GPL-only symbol marked UNUSED '%s'\n", m, e, s);
2142 		break;
2143 	case export_gpl_future:
2144 		warn("modpost: GPL-incompatible module %s%s "
2145 		      "uses future GPL-only symbol '%s'\n", m, e, s);
2146 		break;
2147 	case export_plain:
2148 	case export_unused:
2149 	case export_unknown:
2150 		/* ignore */
2151 		break;
2152 	}
2153 }
2154 
2155 static void check_for_unused(enum export exp, const char *m, const char *s)
2156 {
2157 	const char *e = is_vmlinux(m) ?"":".ko";
2158 
2159 	switch (exp) {
2160 	case export_unused:
2161 	case export_unused_gpl:
2162 		warn("modpost: module %s%s "
2163 		      "uses symbol '%s' marked UNUSED\n", m, e, s);
2164 		break;
2165 	default:
2166 		/* ignore */
2167 		break;
2168 	}
2169 }
2170 
2171 static int check_exports(struct module *mod)
2172 {
2173 	struct symbol *s, *exp;
2174 	int err = 0;
2175 
2176 	for (s = mod->unres; s; s = s->next) {
2177 		const char *basename;
2178 		exp = find_symbol(s->name);
2179 		if (!exp || exp->module == mod) {
2180 			if (have_vmlinux && !s->weak) {
2181 				if (warn_unresolved) {
2182 					warn("\"%s\" [%s.ko] undefined!\n",
2183 					     s->name, mod->name);
2184 				} else {
2185 					merror("\"%s\" [%s.ko] undefined!\n",
2186 					       s->name, mod->name);
2187 					err = 1;
2188 				}
2189 			}
2190 			continue;
2191 		}
2192 		basename = strrchr(mod->name, '/');
2193 		if (basename)
2194 			basename++;
2195 		else
2196 			basename = mod->name;
2197 
2198 		if (exp->namespace) {
2199 			add_namespace(&mod->required_namespaces,
2200 				      exp->namespace);
2201 
2202 			if (!write_namespace_deps &&
2203 			    !module_imports_namespace(mod, exp->namespace)) {
2204 				warn("module %s uses symbol %s from namespace %s, but does not import it.\n",
2205 				     basename, exp->name, exp->namespace);
2206 			}
2207 		}
2208 
2209 		if (!mod->gpl_compatible)
2210 			check_for_gpl_usage(exp->export, basename, exp->name);
2211 		check_for_unused(exp->export, basename, exp->name);
2212 	}
2213 
2214 	return err;
2215 }
2216 
2217 static int check_modname_len(struct module *mod)
2218 {
2219 	const char *mod_name;
2220 
2221 	mod_name = strrchr(mod->name, '/');
2222 	if (mod_name == NULL)
2223 		mod_name = mod->name;
2224 	else
2225 		mod_name++;
2226 	if (strlen(mod_name) >= MODULE_NAME_LEN) {
2227 		merror("module name is too long [%s.ko]\n", mod->name);
2228 		return 1;
2229 	}
2230 
2231 	return 0;
2232 }
2233 
2234 /**
2235  * Header for the generated file
2236  **/
2237 static void add_header(struct buffer *b, struct module *mod)
2238 {
2239 	buf_printf(b, "#include <linux/build-salt.h>\n");
2240 	buf_printf(b, "#include <linux/module.h>\n");
2241 	buf_printf(b, "#include <linux/vermagic.h>\n");
2242 	buf_printf(b, "#include <linux/compiler.h>\n");
2243 	buf_printf(b, "\n");
2244 	buf_printf(b, "BUILD_SALT;\n");
2245 	buf_printf(b, "\n");
2246 	buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
2247 	buf_printf(b, "MODULE_INFO(name, KBUILD_MODNAME);\n");
2248 	buf_printf(b, "\n");
2249 	buf_printf(b, "__visible struct module __this_module\n");
2250 	buf_printf(b, "__section(.gnu.linkonce.this_module) = {\n");
2251 	buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
2252 	if (mod->has_init)
2253 		buf_printf(b, "\t.init = init_module,\n");
2254 	if (mod->has_cleanup)
2255 		buf_printf(b, "#ifdef CONFIG_MODULE_UNLOAD\n"
2256 			      "\t.exit = cleanup_module,\n"
2257 			      "#endif\n");
2258 	buf_printf(b, "\t.arch = MODULE_ARCH_INIT,\n");
2259 	buf_printf(b, "};\n");
2260 }
2261 
2262 static void add_intree_flag(struct buffer *b, int is_intree)
2263 {
2264 	if (is_intree)
2265 		buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
2266 }
2267 
2268 /* Cannot check for assembler */
2269 static void add_retpoline(struct buffer *b)
2270 {
2271 	buf_printf(b, "\n#ifdef CONFIG_RETPOLINE\n");
2272 	buf_printf(b, "MODULE_INFO(retpoline, \"Y\");\n");
2273 	buf_printf(b, "#endif\n");
2274 }
2275 
2276 static void add_staging_flag(struct buffer *b, const char *name)
2277 {
2278 	if (strstarts(name, "drivers/staging"))
2279 		buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
2280 }
2281 
2282 /**
2283  * Record CRCs for unresolved symbols
2284  **/
2285 static int add_versions(struct buffer *b, struct module *mod)
2286 {
2287 	struct symbol *s, *exp;
2288 	int err = 0;
2289 
2290 	for (s = mod->unres; s; s = s->next) {
2291 		exp = find_symbol(s->name);
2292 		if (!exp || exp->module == mod)
2293 			continue;
2294 		s->module = exp->module;
2295 		s->crc_valid = exp->crc_valid;
2296 		s->crc = exp->crc;
2297 	}
2298 
2299 	if (!modversions)
2300 		return err;
2301 
2302 	buf_printf(b, "\n");
2303 	buf_printf(b, "static const struct modversion_info ____versions[]\n");
2304 	buf_printf(b, "__used __section(__versions) = {\n");
2305 
2306 	for (s = mod->unres; s; s = s->next) {
2307 		if (!s->module)
2308 			continue;
2309 		if (!s->crc_valid) {
2310 			warn("\"%s\" [%s.ko] has no CRC!\n",
2311 				s->name, mod->name);
2312 			continue;
2313 		}
2314 		if (strlen(s->name) >= MODULE_NAME_LEN) {
2315 			merror("too long symbol \"%s\" [%s.ko]\n",
2316 			       s->name, mod->name);
2317 			err = 1;
2318 			break;
2319 		}
2320 		buf_printf(b, "\t{ %#8x, \"%s\" },\n",
2321 			   s->crc, s->name);
2322 	}
2323 
2324 	buf_printf(b, "};\n");
2325 
2326 	return err;
2327 }
2328 
2329 static void add_depends(struct buffer *b, struct module *mod)
2330 {
2331 	struct symbol *s;
2332 	int first = 1;
2333 
2334 	/* Clear ->seen flag of modules that own symbols needed by this. */
2335 	for (s = mod->unres; s; s = s->next)
2336 		if (s->module)
2337 			s->module->seen = is_vmlinux(s->module->name);
2338 
2339 	buf_printf(b, "\n");
2340 	buf_printf(b, "MODULE_INFO(depends, \"");
2341 	for (s = mod->unres; s; s = s->next) {
2342 		const char *p;
2343 		if (!s->module)
2344 			continue;
2345 
2346 		if (s->module->seen)
2347 			continue;
2348 
2349 		s->module->seen = 1;
2350 		p = strrchr(s->module->name, '/');
2351 		if (p)
2352 			p++;
2353 		else
2354 			p = s->module->name;
2355 		buf_printf(b, "%s%s", first ? "" : ",", p);
2356 		first = 0;
2357 	}
2358 	buf_printf(b, "\");\n");
2359 }
2360 
2361 static void add_srcversion(struct buffer *b, struct module *mod)
2362 {
2363 	if (mod->srcversion[0]) {
2364 		buf_printf(b, "\n");
2365 		buf_printf(b, "MODULE_INFO(srcversion, \"%s\");\n",
2366 			   mod->srcversion);
2367 	}
2368 }
2369 
2370 static void write_if_changed(struct buffer *b, const char *fname)
2371 {
2372 	char *tmp;
2373 	FILE *file;
2374 	struct stat st;
2375 
2376 	file = fopen(fname, "r");
2377 	if (!file)
2378 		goto write;
2379 
2380 	if (fstat(fileno(file), &st) < 0)
2381 		goto close_write;
2382 
2383 	if (st.st_size != b->pos)
2384 		goto close_write;
2385 
2386 	tmp = NOFAIL(malloc(b->pos));
2387 	if (fread(tmp, 1, b->pos, file) != b->pos)
2388 		goto free_write;
2389 
2390 	if (memcmp(tmp, b->p, b->pos) != 0)
2391 		goto free_write;
2392 
2393 	free(tmp);
2394 	fclose(file);
2395 	return;
2396 
2397  free_write:
2398 	free(tmp);
2399  close_write:
2400 	fclose(file);
2401  write:
2402 	file = fopen(fname, "w");
2403 	if (!file) {
2404 		perror(fname);
2405 		exit(1);
2406 	}
2407 	if (fwrite(b->p, 1, b->pos, file) != b->pos) {
2408 		perror(fname);
2409 		exit(1);
2410 	}
2411 	fclose(file);
2412 }
2413 
2414 /* parse Module.symvers file. line format:
2415  * 0x12345678<tab>symbol<tab>module[[<tab>export]<tab>something]
2416  **/
2417 static void read_dump(const char *fname, unsigned int kernel)
2418 {
2419 	unsigned long size, pos = 0;
2420 	void *file = grab_file(fname, &size);
2421 	char *line;
2422 
2423 	if (!file)
2424 		/* No symbol versions, silently ignore */
2425 		return;
2426 
2427 	while ((line = get_next_line(&pos, file, size))) {
2428 		char *symname, *namespace, *modname, *d, *export, *end;
2429 		unsigned int crc;
2430 		struct module *mod;
2431 		struct symbol *s;
2432 
2433 		if (!(symname = strchr(line, '\t')))
2434 			goto fail;
2435 		*symname++ = '\0';
2436 		if (!(namespace = strchr(symname, '\t')))
2437 			goto fail;
2438 		*namespace++ = '\0';
2439 		if (!(modname = strchr(namespace, '\t')))
2440 			goto fail;
2441 		*modname++ = '\0';
2442 		if ((export = strchr(modname, '\t')) != NULL)
2443 			*export++ = '\0';
2444 		if (export && ((end = strchr(export, '\t')) != NULL))
2445 			*end = '\0';
2446 		crc = strtoul(line, &d, 16);
2447 		if (*symname == '\0' || *modname == '\0' || *d != '\0')
2448 			goto fail;
2449 		mod = find_module(modname);
2450 		if (!mod) {
2451 			if (is_vmlinux(modname))
2452 				have_vmlinux = 1;
2453 			mod = new_module(modname);
2454 			mod->skip = 1;
2455 		}
2456 		s = sym_add_exported(symname, namespace, mod,
2457 				     export_no(export));
2458 		s->kernel    = kernel;
2459 		s->preloaded = 1;
2460 		s->is_static = 0;
2461 		sym_update_crc(symname, mod, crc, export_no(export));
2462 	}
2463 	release_file(file, size);
2464 	return;
2465 fail:
2466 	release_file(file, size);
2467 	fatal("parse error in symbol dump file\n");
2468 }
2469 
2470 /* For normal builds always dump all symbols.
2471  * For external modules only dump symbols
2472  * that are not read from kernel Module.symvers.
2473  **/
2474 static int dump_sym(struct symbol *sym)
2475 {
2476 	if (!external_module)
2477 		return 1;
2478 	if (sym->vmlinux || sym->kernel)
2479 		return 0;
2480 	return 1;
2481 }
2482 
2483 static void write_dump(const char *fname)
2484 {
2485 	struct buffer buf = { };
2486 	struct symbol *symbol;
2487 	const char *namespace;
2488 	int n;
2489 
2490 	for (n = 0; n < SYMBOL_HASH_SIZE ; n++) {
2491 		symbol = symbolhash[n];
2492 		while (symbol) {
2493 			if (dump_sym(symbol)) {
2494 				namespace = symbol->namespace;
2495 				buf_printf(&buf, "0x%08x\t%s\t%s\t%s\t%s\n",
2496 					   symbol->crc, symbol->name,
2497 					   namespace ? namespace : "",
2498 					   symbol->module->name,
2499 					   export_str(symbol->export));
2500 			}
2501 			symbol = symbol->next;
2502 		}
2503 	}
2504 	write_if_changed(&buf, fname);
2505 	free(buf.p);
2506 }
2507 
2508 static void write_namespace_deps_files(void)
2509 {
2510 	struct module *mod;
2511 	struct namespace_list *ns;
2512 	struct buffer ns_deps_buf = {};
2513 
2514 	for (mod = modules; mod; mod = mod->next) {
2515 		char fname[PATH_MAX];
2516 
2517 		if (mod->skip)
2518 			continue;
2519 
2520 		ns_deps_buf.pos = 0;
2521 
2522 		for (ns = mod->required_namespaces; ns; ns = ns->next)
2523 			buf_printf(&ns_deps_buf, "%s\n", ns->namespace);
2524 
2525 		if (ns_deps_buf.pos == 0)
2526 			continue;
2527 
2528 		sprintf(fname, "%s.ns_deps", mod->name);
2529 		write_if_changed(&ns_deps_buf, fname);
2530 	}
2531 }
2532 
2533 struct ext_sym_list {
2534 	struct ext_sym_list *next;
2535 	const char *file;
2536 };
2537 
2538 int main(int argc, char **argv)
2539 {
2540 	struct module *mod;
2541 	struct buffer buf = { };
2542 	char *kernel_read = NULL, *module_read = NULL;
2543 	char *dump_write = NULL, *files_source = NULL;
2544 	int opt;
2545 	int err;
2546 	int n;
2547 	struct ext_sym_list *extsym_iter;
2548 	struct ext_sym_list *extsym_start = NULL;
2549 
2550 	while ((opt = getopt(argc, argv, "i:I:e:mnsT:o:awEd")) != -1) {
2551 		switch (opt) {
2552 		case 'i':
2553 			kernel_read = optarg;
2554 			break;
2555 		case 'I':
2556 			module_read = optarg;
2557 			external_module = 1;
2558 			break;
2559 		case 'e':
2560 			external_module = 1;
2561 			extsym_iter =
2562 			   NOFAIL(malloc(sizeof(*extsym_iter)));
2563 			extsym_iter->next = extsym_start;
2564 			extsym_iter->file = optarg;
2565 			extsym_start = extsym_iter;
2566 			break;
2567 		case 'm':
2568 			modversions = 1;
2569 			break;
2570 		case 'n':
2571 			ignore_missing_files = 1;
2572 			break;
2573 		case 'o':
2574 			dump_write = optarg;
2575 			break;
2576 		case 'a':
2577 			all_versions = 1;
2578 			break;
2579 		case 's':
2580 			vmlinux_section_warnings = 0;
2581 			break;
2582 		case 'T':
2583 			files_source = optarg;
2584 			break;
2585 		case 'w':
2586 			warn_unresolved = 1;
2587 			break;
2588 		case 'E':
2589 			sec_mismatch_fatal = 1;
2590 			break;
2591 		case 'd':
2592 			write_namespace_deps = 1;
2593 			break;
2594 		default:
2595 			exit(1);
2596 		}
2597 	}
2598 
2599 	if (kernel_read)
2600 		read_dump(kernel_read, 1);
2601 	if (module_read)
2602 		read_dump(module_read, 0);
2603 	while (extsym_start) {
2604 		read_dump(extsym_start->file, 0);
2605 		extsym_iter = extsym_start->next;
2606 		free(extsym_start);
2607 		extsym_start = extsym_iter;
2608 	}
2609 
2610 	while (optind < argc)
2611 		read_symbols(argv[optind++]);
2612 
2613 	if (files_source)
2614 		read_symbols_from_files(files_source);
2615 
2616 	err = 0;
2617 
2618 	for (mod = modules; mod; mod = mod->next) {
2619 		char fname[PATH_MAX];
2620 
2621 		if (mod->skip)
2622 			continue;
2623 
2624 		buf.pos = 0;
2625 
2626 		err |= check_modname_len(mod);
2627 		err |= check_exports(mod);
2628 		if (write_namespace_deps)
2629 			continue;
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 (write_namespace_deps) {
2645 		write_namespace_deps_files();
2646 		return 0;
2647 	}
2648 
2649 	if (dump_write)
2650 		write_dump(dump_write);
2651 	if (sec_mismatch_count && sec_mismatch_fatal)
2652 		fatal("modpost: Section mismatches detected.\n"
2653 		      "Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");
2654 	for (n = 0; n < SYMBOL_HASH_SIZE; n++) {
2655 		struct symbol *s = symbolhash[n];
2656 
2657 		while (s) {
2658 			if (s->is_static)
2659 				warn("\"%s\" [%s] is a static %s\n",
2660 				     s->name, s->module->name,
2661 				     export_str(s->export));
2662 
2663 			s = s->next;
2664 		}
2665 	}
2666 
2667 	free(buf.p);
2668 
2669 	return err;
2670 }
2671