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