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