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