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