xref: /linux/scripts/mod/modpost.c (revision 8c749ce93ee69e789e46b3be98de9e0cbfcf8ed8)
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 			return 1;
599 	/* Do not ignore this symbol */
600 	return 0;
601 }
602 
603 #define CRC_PFX     VMLINUX_SYMBOL_STR(__crc_)
604 #define KSYMTAB_PFX VMLINUX_SYMBOL_STR(__ksymtab_)
605 
606 static void handle_modversions(struct module *mod, struct elf_info *info,
607 			       Elf_Sym *sym, const char *symname)
608 {
609 	unsigned int crc;
610 	enum export export;
611 
612 	if ((!is_vmlinux(mod->name) || mod->is_dot_o) &&
613 	    strncmp(symname, "__ksymtab", 9) == 0)
614 		export = export_from_secname(info, get_secindex(info, sym));
615 	else
616 		export = export_from_sec(info, get_secindex(info, sym));
617 
618 	/* CRC'd symbol */
619 	if (strncmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) {
620 		crc = (unsigned int) sym->st_value;
621 		sym_update_crc(symname + strlen(CRC_PFX), mod, crc,
622 				export);
623 	}
624 
625 	switch (sym->st_shndx) {
626 	case SHN_COMMON:
627 		if (!strncmp(symname, "__gnu_lto_", sizeof("__gnu_lto_")-1)) {
628 			/* Should warn here, but modpost runs before the linker */
629 		} else
630 			warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name);
631 		break;
632 	case SHN_UNDEF:
633 		/* undefined symbol */
634 		if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL &&
635 		    ELF_ST_BIND(sym->st_info) != STB_WEAK)
636 			break;
637 		if (ignore_undef_symbol(info, symname))
638 			break;
639 /* cope with newer glibc (2.3.4 or higher) STT_ definition in elf.h */
640 #if defined(STT_REGISTER) || defined(STT_SPARC_REGISTER)
641 /* add compatibility with older glibc */
642 #ifndef STT_SPARC_REGISTER
643 #define STT_SPARC_REGISTER STT_REGISTER
644 #endif
645 		if (info->hdr->e_machine == EM_SPARC ||
646 		    info->hdr->e_machine == EM_SPARCV9) {
647 			/* Ignore register directives. */
648 			if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER)
649 				break;
650 			if (symname[0] == '.') {
651 				char *munged = strdup(symname);
652 				munged[0] = '_';
653 				munged[1] = toupper(munged[1]);
654 				symname = munged;
655 			}
656 		}
657 #endif
658 
659 #ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
660 		if (symname[0] != '_')
661 			break;
662 		else
663 			symname++;
664 #endif
665 		mod->unres = alloc_symbol(symname,
666 					  ELF_ST_BIND(sym->st_info) == STB_WEAK,
667 					  mod->unres);
668 		break;
669 	default:
670 		/* All exported symbols */
671 		if (strncmp(symname, KSYMTAB_PFX, strlen(KSYMTAB_PFX)) == 0) {
672 			sym_add_exported(symname + strlen(KSYMTAB_PFX), mod,
673 					export);
674 		}
675 		if (strcmp(symname, VMLINUX_SYMBOL_STR(init_module)) == 0)
676 			mod->has_init = 1;
677 		if (strcmp(symname, VMLINUX_SYMBOL_STR(cleanup_module)) == 0)
678 			mod->has_cleanup = 1;
679 		break;
680 	}
681 }
682 
683 /**
684  * Parse tag=value strings from .modinfo section
685  **/
686 static char *next_string(char *string, unsigned long *secsize)
687 {
688 	/* Skip non-zero chars */
689 	while (string[0]) {
690 		string++;
691 		if ((*secsize)-- <= 1)
692 			return NULL;
693 	}
694 
695 	/* Skip any zero padding. */
696 	while (!string[0]) {
697 		string++;
698 		if ((*secsize)-- <= 1)
699 			return NULL;
700 	}
701 	return string;
702 }
703 
704 static char *get_next_modinfo(void *modinfo, unsigned long modinfo_len,
705 			      const char *tag, char *info)
706 {
707 	char *p;
708 	unsigned int taglen = strlen(tag);
709 	unsigned long size = modinfo_len;
710 
711 	if (info) {
712 		size -= info - (char *)modinfo;
713 		modinfo = next_string(info, &size);
714 	}
715 
716 	for (p = modinfo; p; p = next_string(p, &size)) {
717 		if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')
718 			return p + taglen + 1;
719 	}
720 	return NULL;
721 }
722 
723 static char *get_modinfo(void *modinfo, unsigned long modinfo_len,
724 			 const char *tag)
725 
726 {
727 	return get_next_modinfo(modinfo, modinfo_len, tag, NULL);
728 }
729 
730 /**
731  * Test if string s ends in string sub
732  * return 0 if match
733  **/
734 static int strrcmp(const char *s, const char *sub)
735 {
736 	int slen, sublen;
737 
738 	if (!s || !sub)
739 		return 1;
740 
741 	slen = strlen(s);
742 	sublen = strlen(sub);
743 
744 	if ((slen == 0) || (sublen == 0))
745 		return 1;
746 
747 	if (sublen > slen)
748 		return 1;
749 
750 	return memcmp(s + slen - sublen, sub, sublen);
751 }
752 
753 static const char *sym_name(struct elf_info *elf, Elf_Sym *sym)
754 {
755 	if (sym)
756 		return elf->strtab + sym->st_name;
757 	else
758 		return "(unknown)";
759 }
760 
761 static const char *sec_name(struct elf_info *elf, int secindex)
762 {
763 	Elf_Shdr *sechdrs = elf->sechdrs;
764 	return (void *)elf->hdr +
765 		elf->sechdrs[elf->secindex_strings].sh_offset +
766 		sechdrs[secindex].sh_name;
767 }
768 
769 static const char *sech_name(struct elf_info *elf, Elf_Shdr *sechdr)
770 {
771 	return (void *)elf->hdr +
772 		elf->sechdrs[elf->secindex_strings].sh_offset +
773 		sechdr->sh_name;
774 }
775 
776 /* The pattern is an array of simple patterns.
777  * "foo" will match an exact string equal to "foo"
778  * "*foo" will match a string that ends with "foo"
779  * "foo*" will match a string that begins with "foo"
780  * "*foo*" will match a string that contains "foo"
781  */
782 static int match(const char *sym, const char * const pat[])
783 {
784 	const char *p;
785 	while (*pat) {
786 		p = *pat++;
787 		const char *endp = p + strlen(p) - 1;
788 
789 		/* "*foo*" */
790 		if (*p == '*' && *endp == '*') {
791 			char *here, *bare = strndup(p + 1, strlen(p) - 2);
792 
793 			here = strstr(sym, bare);
794 			free(bare);
795 			if (here != NULL)
796 				return 1;
797 		}
798 		/* "*foo" */
799 		else if (*p == '*') {
800 			if (strrcmp(sym, p + 1) == 0)
801 				return 1;
802 		}
803 		/* "foo*" */
804 		else if (*endp == '*') {
805 			if (strncmp(sym, p, strlen(p) - 1) == 0)
806 				return 1;
807 		}
808 		/* no wildcards */
809 		else {
810 			if (strcmp(p, sym) == 0)
811 				return 1;
812 		}
813 	}
814 	/* no match */
815 	return 0;
816 }
817 
818 /* sections that we do not want to do full section mismatch check on */
819 static const char *const section_white_list[] =
820 {
821 	".comment*",
822 	".debug*",
823 	".cranges",		/* sh64 */
824 	".zdebug*",		/* Compressed debug sections. */
825 	".GCC-command-line",	/* mn10300 */
826 	".GCC.command.line",	/* record-gcc-switches, non mn10300 */
827 	".mdebug*",        /* alpha, score, mips etc. */
828 	".pdr",            /* alpha, score, mips etc. */
829 	".stab*",
830 	".note*",
831 	".got*",
832 	".toc*",
833 	".xt.prop",				 /* xtensa */
834 	".xt.lit",         /* xtensa */
835 	".arcextmap*",			/* arc */
836 	".gnu.linkonce.arcext*",	/* arc : modules */
837 	".cmem*",			/* EZchip */
838 	".fmt_slot*",			/* EZchip */
839 	".gnu.lto*",
840 	NULL
841 };
842 
843 /*
844  * This is used to find sections missing the SHF_ALLOC flag.
845  * The cause of this is often a section specified in assembler
846  * without "ax" / "aw".
847  */
848 static void check_section(const char *modname, struct elf_info *elf,
849 			  Elf_Shdr *sechdr)
850 {
851 	const char *sec = sech_name(elf, sechdr);
852 
853 	if (sechdr->sh_type == SHT_PROGBITS &&
854 	    !(sechdr->sh_flags & SHF_ALLOC) &&
855 	    !match(sec, section_white_list)) {
856 		warn("%s (%s): unexpected non-allocatable section.\n"
857 		     "Did you forget to use \"ax\"/\"aw\" in a .S file?\n"
858 		     "Note that for example <linux/init.h> contains\n"
859 		     "section definitions for use in .S files.\n\n",
860 		     modname, sec);
861 	}
862 }
863 
864 
865 
866 #define ALL_INIT_DATA_SECTIONS \
867 	".init.setup", ".init.rodata", ".meminit.rodata", \
868 	".init.data", ".meminit.data"
869 #define ALL_EXIT_DATA_SECTIONS \
870 	".exit.data", ".memexit.data"
871 
872 #define ALL_INIT_TEXT_SECTIONS \
873 	".init.text", ".meminit.text"
874 #define ALL_EXIT_TEXT_SECTIONS \
875 	".exit.text", ".memexit.text"
876 
877 #define ALL_PCI_INIT_SECTIONS	\
878 	".pci_fixup_early", ".pci_fixup_header", ".pci_fixup_final", \
879 	".pci_fixup_enable", ".pci_fixup_resume", \
880 	".pci_fixup_resume_early", ".pci_fixup_suspend"
881 
882 #define ALL_XXXINIT_SECTIONS MEM_INIT_SECTIONS
883 #define ALL_XXXEXIT_SECTIONS MEM_EXIT_SECTIONS
884 
885 #define ALL_INIT_SECTIONS INIT_SECTIONS, ALL_XXXINIT_SECTIONS
886 #define ALL_EXIT_SECTIONS EXIT_SECTIONS, ALL_XXXEXIT_SECTIONS
887 
888 #define DATA_SECTIONS ".data", ".data.rel"
889 #define TEXT_SECTIONS ".text", ".text.unlikely", ".sched.text", \
890 		".kprobes.text"
891 #define OTHER_TEXT_SECTIONS ".ref.text", ".head.text", ".spinlock.text", \
892 		".fixup", ".entry.text", ".exception.text", ".text.*", \
893 		".coldtext"
894 
895 #define INIT_SECTIONS      ".init.*"
896 #define MEM_INIT_SECTIONS  ".meminit.*"
897 
898 #define EXIT_SECTIONS      ".exit.*"
899 #define MEM_EXIT_SECTIONS  ".memexit.*"
900 
901 #define ALL_TEXT_SECTIONS  ALL_INIT_TEXT_SECTIONS, ALL_EXIT_TEXT_SECTIONS, \
902 		TEXT_SECTIONS, OTHER_TEXT_SECTIONS
903 
904 /* init data sections */
905 static const char *const init_data_sections[] =
906 	{ ALL_INIT_DATA_SECTIONS, NULL };
907 
908 /* all init sections */
909 static const char *const init_sections[] = { ALL_INIT_SECTIONS, NULL };
910 
911 /* All init and exit sections (code + data) */
912 static const char *const init_exit_sections[] =
913 	{ALL_INIT_SECTIONS, ALL_EXIT_SECTIONS, NULL };
914 
915 /* all text sections */
916 static const char *const text_sections[] = { ALL_TEXT_SECTIONS, NULL };
917 
918 /* data section */
919 static const char *const data_sections[] = { DATA_SECTIONS, NULL };
920 
921 
922 /* symbols in .data that may refer to init/exit sections */
923 #define DEFAULT_SYMBOL_WHITE_LIST					\
924 	"*driver",							\
925 	"*_template", /* scsi uses *_template a lot */			\
926 	"*_timer",    /* arm uses ops structures named _timer a lot */	\
927 	"*_sht",      /* scsi also used *_sht to some extent */		\
928 	"*_ops",							\
929 	"*_probe",							\
930 	"*_probe_one",							\
931 	"*_console"
932 
933 static const char *const head_sections[] = { ".head.text*", NULL };
934 static const char *const linker_symbols[] =
935 	{ "__init_begin", "_sinittext", "_einittext", NULL };
936 static const char *const optim_symbols[] = { "*.constprop.*", NULL };
937 
938 enum mismatch {
939 	TEXT_TO_ANY_INIT,
940 	DATA_TO_ANY_INIT,
941 	TEXT_TO_ANY_EXIT,
942 	DATA_TO_ANY_EXIT,
943 	XXXINIT_TO_SOME_INIT,
944 	XXXEXIT_TO_SOME_EXIT,
945 	ANY_INIT_TO_ANY_EXIT,
946 	ANY_EXIT_TO_ANY_INIT,
947 	EXPORT_TO_INIT_EXIT,
948 	EXTABLE_TO_NON_TEXT,
949 };
950 
951 /**
952  * Describe how to match sections on different criterias:
953  *
954  * @fromsec: Array of sections to be matched.
955  *
956  * @bad_tosec: Relocations applied to a section in @fromsec to a section in
957  * this array is forbidden (black-list).  Can be empty.
958  *
959  * @good_tosec: Relocations applied to a section in @fromsec must be
960  * targetting sections in this array (white-list).  Can be empty.
961  *
962  * @mismatch: Type of mismatch.
963  *
964  * @symbol_white_list: Do not match a relocation to a symbol in this list
965  * even if it is targetting a section in @bad_to_sec.
966  *
967  * @handler: Specific handler to call when a match is found.  If NULL,
968  * default_mismatch_handler() will be called.
969  *
970  */
971 struct sectioncheck {
972 	const char *fromsec[20];
973 	const char *bad_tosec[20];
974 	const char *good_tosec[20];
975 	enum mismatch mismatch;
976 	const char *symbol_white_list[20];
977 	void (*handler)(const char *modname, struct elf_info *elf,
978 			const struct sectioncheck* const mismatch,
979 			Elf_Rela *r, Elf_Sym *sym, const char *fromsec);
980 
981 };
982 
983 static void extable_mismatch_handler(const char *modname, struct elf_info *elf,
984 				     const struct sectioncheck* const mismatch,
985 				     Elf_Rela *r, Elf_Sym *sym,
986 				     const char *fromsec);
987 
988 static const struct sectioncheck sectioncheck[] = {
989 /* Do not reference init/exit code/data from
990  * normal code and data
991  */
992 {
993 	.fromsec = { TEXT_SECTIONS, NULL },
994 	.bad_tosec = { ALL_INIT_SECTIONS, NULL },
995 	.mismatch = TEXT_TO_ANY_INIT,
996 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
997 },
998 {
999 	.fromsec = { DATA_SECTIONS, NULL },
1000 	.bad_tosec = { ALL_XXXINIT_SECTIONS, NULL },
1001 	.mismatch = DATA_TO_ANY_INIT,
1002 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1003 },
1004 {
1005 	.fromsec = { DATA_SECTIONS, NULL },
1006 	.bad_tosec = { INIT_SECTIONS, NULL },
1007 	.mismatch = DATA_TO_ANY_INIT,
1008 	.symbol_white_list = {
1009 		"*_template", "*_timer", "*_sht", "*_ops",
1010 		"*_probe", "*_probe_one", "*_console", NULL
1011 	},
1012 },
1013 {
1014 	.fromsec = { TEXT_SECTIONS, NULL },
1015 	.bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1016 	.mismatch = TEXT_TO_ANY_EXIT,
1017 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1018 },
1019 {
1020 	.fromsec = { DATA_SECTIONS, NULL },
1021 	.bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1022 	.mismatch = DATA_TO_ANY_EXIT,
1023 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1024 },
1025 /* Do not reference init code/data from meminit code/data */
1026 {
1027 	.fromsec = { ALL_XXXINIT_SECTIONS, NULL },
1028 	.bad_tosec = { INIT_SECTIONS, NULL },
1029 	.mismatch = XXXINIT_TO_SOME_INIT,
1030 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1031 },
1032 /* Do not reference exit code/data from memexit code/data */
1033 {
1034 	.fromsec = { ALL_XXXEXIT_SECTIONS, NULL },
1035 	.bad_tosec = { EXIT_SECTIONS, NULL },
1036 	.mismatch = XXXEXIT_TO_SOME_EXIT,
1037 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1038 },
1039 /* Do not use exit code/data from init code */
1040 {
1041 	.fromsec = { ALL_INIT_SECTIONS, NULL },
1042 	.bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1043 	.mismatch = ANY_INIT_TO_ANY_EXIT,
1044 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1045 },
1046 /* Do not use init code/data from exit code */
1047 {
1048 	.fromsec = { ALL_EXIT_SECTIONS, NULL },
1049 	.bad_tosec = { ALL_INIT_SECTIONS, NULL },
1050 	.mismatch = ANY_EXIT_TO_ANY_INIT,
1051 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1052 },
1053 {
1054 	.fromsec = { ALL_PCI_INIT_SECTIONS, NULL },
1055 	.bad_tosec = { INIT_SECTIONS, NULL },
1056 	.mismatch = ANY_INIT_TO_ANY_EXIT,
1057 	.symbol_white_list = { NULL },
1058 },
1059 /* Do not export init/exit functions or data */
1060 {
1061 	.fromsec = { "__ksymtab*", NULL },
1062 	.bad_tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL },
1063 	.mismatch = EXPORT_TO_INIT_EXIT,
1064 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1065 },
1066 {
1067 	.fromsec = { "__ex_table", NULL },
1068 	/* If you're adding any new black-listed sections in here, consider
1069 	 * adding a special 'printer' for them in scripts/check_extable.
1070 	 */
1071 	.bad_tosec = { ".altinstr_replacement", NULL },
1072 	.good_tosec = {ALL_TEXT_SECTIONS , NULL},
1073 	.mismatch = EXTABLE_TO_NON_TEXT,
1074 	.handler = extable_mismatch_handler,
1075 }
1076 };
1077 
1078 static const struct sectioncheck *section_mismatch(
1079 		const char *fromsec, const char *tosec)
1080 {
1081 	int i;
1082 	int elems = sizeof(sectioncheck) / sizeof(struct sectioncheck);
1083 	const struct sectioncheck *check = &sectioncheck[0];
1084 
1085 	/*
1086 	 * The target section could be the SHT_NUL section when we're
1087 	 * handling relocations to un-resolved symbols, trying to match it
1088 	 * doesn't make much sense and causes build failures on parisc and
1089 	 * mn10300 architectures.
1090 	 */
1091 	if (*tosec == '\0')
1092 		return NULL;
1093 
1094 	for (i = 0; i < elems; i++) {
1095 		if (match(fromsec, check->fromsec)) {
1096 			if (check->bad_tosec[0] && match(tosec, check->bad_tosec))
1097 				return check;
1098 			if (check->good_tosec[0] && !match(tosec, check->good_tosec))
1099 				return check;
1100 		}
1101 		check++;
1102 	}
1103 	return NULL;
1104 }
1105 
1106 /**
1107  * Whitelist to allow certain references to pass with no warning.
1108  *
1109  * Pattern 1:
1110  *   If a module parameter is declared __initdata and permissions=0
1111  *   then this is legal despite the warning generated.
1112  *   We cannot see value of permissions here, so just ignore
1113  *   this pattern.
1114  *   The pattern is identified by:
1115  *   tosec   = .init.data
1116  *   fromsec = .data*
1117  *   atsym   =__param*
1118  *
1119  * Pattern 1a:
1120  *   module_param_call() ops can refer to __init set function if permissions=0
1121  *   The pattern is identified by:
1122  *   tosec   = .init.text
1123  *   fromsec = .data*
1124  *   atsym   = __param_ops_*
1125  *
1126  * Pattern 2:
1127  *   Many drivers utilise a *driver container with references to
1128  *   add, remove, probe functions etc.
1129  *   the pattern is identified by:
1130  *   tosec   = init or exit section
1131  *   fromsec = data section
1132  *   atsym = *driver, *_template, *_sht, *_ops, *_probe,
1133  *           *probe_one, *_console, *_timer
1134  *
1135  * Pattern 3:
1136  *   Whitelist all references from .head.text to any init section
1137  *
1138  * Pattern 4:
1139  *   Some symbols belong to init section but still it is ok to reference
1140  *   these from non-init sections as these symbols don't have any memory
1141  *   allocated for them and symbol address and value are same. So even
1142  *   if init section is freed, its ok to reference those symbols.
1143  *   For ex. symbols marking the init section boundaries.
1144  *   This pattern is identified by
1145  *   refsymname = __init_begin, _sinittext, _einittext
1146  *
1147  * Pattern 5:
1148  *   GCC may optimize static inlines when fed constant arg(s) resulting
1149  *   in functions like cpumask_empty() -- generating an associated symbol
1150  *   cpumask_empty.constprop.3 that appears in the audit.  If the const that
1151  *   is passed in comes from __init, like say nmi_ipi_mask, we get a
1152  *   meaningless section warning.  May need to add isra symbols too...
1153  *   This pattern is identified by
1154  *   tosec   = init section
1155  *   fromsec = text section
1156  *   refsymname = *.constprop.*
1157  *
1158  **/
1159 static int secref_whitelist(const struct sectioncheck *mismatch,
1160 			    const char *fromsec, const char *fromsym,
1161 			    const char *tosec, const char *tosym)
1162 {
1163 	/* Check for pattern 1 */
1164 	if (match(tosec, init_data_sections) &&
1165 	    match(fromsec, data_sections) &&
1166 	    (strncmp(fromsym, "__param", strlen("__param")) == 0))
1167 		return 0;
1168 
1169 	/* Check for pattern 1a */
1170 	if (strcmp(tosec, ".init.text") == 0 &&
1171 	    match(fromsec, data_sections) &&
1172 	    (strncmp(fromsym, "__param_ops_", strlen("__param_ops_")) == 0))
1173 		return 0;
1174 
1175 	/* Check for pattern 2 */
1176 	if (match(tosec, init_exit_sections) &&
1177 	    match(fromsec, data_sections) &&
1178 	    match(fromsym, mismatch->symbol_white_list))
1179 		return 0;
1180 
1181 	/* Check for pattern 3 */
1182 	if (match(fromsec, head_sections) &&
1183 	    match(tosec, init_sections))
1184 		return 0;
1185 
1186 	/* Check for pattern 4 */
1187 	if (match(tosym, linker_symbols))
1188 		return 0;
1189 
1190 	/* Check for pattern 5 */
1191 	if (match(fromsec, text_sections) &&
1192 	    match(tosec, init_sections) &&
1193 	    match(fromsym, optim_symbols))
1194 		return 0;
1195 
1196 	return 1;
1197 }
1198 
1199 /**
1200  * Find symbol based on relocation record info.
1201  * In some cases the symbol supplied is a valid symbol so
1202  * return refsym. If st_name != 0 we assume this is a valid symbol.
1203  * In other cases the symbol needs to be looked up in the symbol table
1204  * based on section and address.
1205  *  **/
1206 static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
1207 				Elf_Sym *relsym)
1208 {
1209 	Elf_Sym *sym;
1210 	Elf_Sym *near = NULL;
1211 	Elf64_Sword distance = 20;
1212 	Elf64_Sword d;
1213 	unsigned int relsym_secindex;
1214 
1215 	if (relsym->st_name != 0)
1216 		return relsym;
1217 
1218 	relsym_secindex = get_secindex(elf, relsym);
1219 	for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1220 		if (get_secindex(elf, sym) != relsym_secindex)
1221 			continue;
1222 		if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
1223 			continue;
1224 		if (sym->st_value == addr)
1225 			return sym;
1226 		/* Find a symbol nearby - addr are maybe negative */
1227 		d = sym->st_value - addr;
1228 		if (d < 0)
1229 			d = addr - sym->st_value;
1230 		if (d < distance) {
1231 			distance = d;
1232 			near = sym;
1233 		}
1234 	}
1235 	/* We need a close match */
1236 	if (distance < 20)
1237 		return near;
1238 	else
1239 		return NULL;
1240 }
1241 
1242 static inline int is_arm_mapping_symbol(const char *str)
1243 {
1244 	return str[0] == '$' && strchr("axtd", str[1])
1245 	       && (str[2] == '\0' || str[2] == '.');
1246 }
1247 
1248 /*
1249  * If there's no name there, ignore it; likewise, ignore it if it's
1250  * one of the magic symbols emitted used by current ARM tools.
1251  *
1252  * Otherwise if find_symbols_between() returns those symbols, they'll
1253  * fail the whitelist tests and cause lots of false alarms ... fixable
1254  * only by merging __exit and __init sections into __text, bloating
1255  * the kernel (which is especially evil on embedded platforms).
1256  */
1257 static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym)
1258 {
1259 	const char *name = elf->strtab + sym->st_name;
1260 
1261 	if (!name || !strlen(name))
1262 		return 0;
1263 	return !is_arm_mapping_symbol(name);
1264 }
1265 
1266 /*
1267  * Find symbols before or equal addr and after addr - in the section sec.
1268  * If we find two symbols with equal offset prefer one with a valid name.
1269  * The ELF format may have a better way to detect what type of symbol
1270  * it is, but this works for now.
1271  **/
1272 static Elf_Sym *find_elf_symbol2(struct elf_info *elf, Elf_Addr addr,
1273 				 const char *sec)
1274 {
1275 	Elf_Sym *sym;
1276 	Elf_Sym *near = NULL;
1277 	Elf_Addr distance = ~0;
1278 
1279 	for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1280 		const char *symsec;
1281 
1282 		if (is_shndx_special(sym->st_shndx))
1283 			continue;
1284 		symsec = sec_name(elf, get_secindex(elf, sym));
1285 		if (strcmp(symsec, sec) != 0)
1286 			continue;
1287 		if (!is_valid_name(elf, sym))
1288 			continue;
1289 		if (sym->st_value <= addr) {
1290 			if ((addr - sym->st_value) < distance) {
1291 				distance = addr - sym->st_value;
1292 				near = sym;
1293 			} else if ((addr - sym->st_value) == distance) {
1294 				near = sym;
1295 			}
1296 		}
1297 	}
1298 	return near;
1299 }
1300 
1301 /*
1302  * Convert a section name to the function/data attribute
1303  * .init.text => __init
1304  * .memexitconst => __memconst
1305  * etc.
1306  *
1307  * The memory of returned value has been allocated on a heap. The user of this
1308  * method should free it after usage.
1309 */
1310 static char *sec2annotation(const char *s)
1311 {
1312 	if (match(s, init_exit_sections)) {
1313 		char *p = malloc(20);
1314 		char *r = p;
1315 
1316 		*p++ = '_';
1317 		*p++ = '_';
1318 		if (*s == '.')
1319 			s++;
1320 		while (*s && *s != '.')
1321 			*p++ = *s++;
1322 		*p = '\0';
1323 		if (*s == '.')
1324 			s++;
1325 		if (strstr(s, "rodata") != NULL)
1326 			strcat(p, "const ");
1327 		else if (strstr(s, "data") != NULL)
1328 			strcat(p, "data ");
1329 		else
1330 			strcat(p, " ");
1331 		return r;
1332 	} else {
1333 		return strdup("");
1334 	}
1335 }
1336 
1337 static int is_function(Elf_Sym *sym)
1338 {
1339 	if (sym)
1340 		return ELF_ST_TYPE(sym->st_info) == STT_FUNC;
1341 	else
1342 		return -1;
1343 }
1344 
1345 static void print_section_list(const char * const list[20])
1346 {
1347 	const char *const *s = list;
1348 
1349 	while (*s) {
1350 		fprintf(stderr, "%s", *s);
1351 		s++;
1352 		if (*s)
1353 			fprintf(stderr, ", ");
1354 	}
1355 	fprintf(stderr, "\n");
1356 }
1357 
1358 static inline void get_pretty_name(int is_func, const char** name, const char** name_p)
1359 {
1360 	switch (is_func) {
1361 	case 0:	*name = "variable"; *name_p = ""; break;
1362 	case 1:	*name = "function"; *name_p = "()"; break;
1363 	default: *name = "(unknown reference)"; *name_p = ""; break;
1364 	}
1365 }
1366 
1367 /*
1368  * Print a warning about a section mismatch.
1369  * Try to find symbols near it so user can find it.
1370  * Check whitelist before warning - it may be a false positive.
1371  */
1372 static void report_sec_mismatch(const char *modname,
1373 				const struct sectioncheck *mismatch,
1374 				const char *fromsec,
1375 				unsigned long long fromaddr,
1376 				const char *fromsym,
1377 				int from_is_func,
1378 				const char *tosec, const char *tosym,
1379 				int to_is_func)
1380 {
1381 	const char *from, *from_p;
1382 	const char *to, *to_p;
1383 	char *prl_from;
1384 	char *prl_to;
1385 
1386 	sec_mismatch_count++;
1387 	if (!sec_mismatch_verbose)
1388 		return;
1389 
1390 	get_pretty_name(from_is_func, &from, &from_p);
1391 	get_pretty_name(to_is_func, &to, &to_p);
1392 
1393 	warn("%s(%s+0x%llx): Section mismatch in reference from the %s %s%s "
1394 	     "to the %s %s:%s%s\n",
1395 	     modname, fromsec, fromaddr, from, fromsym, from_p, to, tosec,
1396 	     tosym, to_p);
1397 
1398 	switch (mismatch->mismatch) {
1399 	case TEXT_TO_ANY_INIT:
1400 		prl_from = sec2annotation(fromsec);
1401 		prl_to = sec2annotation(tosec);
1402 		fprintf(stderr,
1403 		"The function %s%s() references\n"
1404 		"the %s %s%s%s.\n"
1405 		"This is often because %s lacks a %s\n"
1406 		"annotation or the annotation of %s is wrong.\n",
1407 		prl_from, fromsym,
1408 		to, prl_to, tosym, to_p,
1409 		fromsym, prl_to, tosym);
1410 		free(prl_from);
1411 		free(prl_to);
1412 		break;
1413 	case DATA_TO_ANY_INIT: {
1414 		prl_to = sec2annotation(tosec);
1415 		fprintf(stderr,
1416 		"The variable %s references\n"
1417 		"the %s %s%s%s\n"
1418 		"If the reference is valid then annotate the\n"
1419 		"variable with __init* or __refdata (see linux/init.h) "
1420 		"or name the variable:\n",
1421 		fromsym, to, prl_to, tosym, to_p);
1422 		print_section_list(mismatch->symbol_white_list);
1423 		free(prl_to);
1424 		break;
1425 	}
1426 	case TEXT_TO_ANY_EXIT:
1427 		prl_to = sec2annotation(tosec);
1428 		fprintf(stderr,
1429 		"The function %s() references a %s in an exit section.\n"
1430 		"Often the %s %s%s has valid usage outside the exit section\n"
1431 		"and the fix is to remove the %sannotation of %s.\n",
1432 		fromsym, to, to, tosym, to_p, prl_to, tosym);
1433 		free(prl_to);
1434 		break;
1435 	case DATA_TO_ANY_EXIT: {
1436 		prl_to = sec2annotation(tosec);
1437 		fprintf(stderr,
1438 		"The variable %s references\n"
1439 		"the %s %s%s%s\n"
1440 		"If the reference is valid then annotate the\n"
1441 		"variable with __exit* (see linux/init.h) or "
1442 		"name the variable:\n",
1443 		fromsym, to, prl_to, tosym, to_p);
1444 		print_section_list(mismatch->symbol_white_list);
1445 		free(prl_to);
1446 		break;
1447 	}
1448 	case XXXINIT_TO_SOME_INIT:
1449 	case XXXEXIT_TO_SOME_EXIT:
1450 		prl_from = sec2annotation(fromsec);
1451 		prl_to = sec2annotation(tosec);
1452 		fprintf(stderr,
1453 		"The %s %s%s%s references\n"
1454 		"a %s %s%s%s.\n"
1455 		"If %s is only used by %s then\n"
1456 		"annotate %s with a matching annotation.\n",
1457 		from, prl_from, fromsym, from_p,
1458 		to, prl_to, tosym, to_p,
1459 		tosym, fromsym, tosym);
1460 		free(prl_from);
1461 		free(prl_to);
1462 		break;
1463 	case ANY_INIT_TO_ANY_EXIT:
1464 		prl_from = sec2annotation(fromsec);
1465 		prl_to = sec2annotation(tosec);
1466 		fprintf(stderr,
1467 		"The %s %s%s%s references\n"
1468 		"a %s %s%s%s.\n"
1469 		"This is often seen when error handling "
1470 		"in the init function\n"
1471 		"uses functionality in the exit path.\n"
1472 		"The fix is often to remove the %sannotation of\n"
1473 		"%s%s so it may be used outside an exit section.\n",
1474 		from, prl_from, fromsym, from_p,
1475 		to, prl_to, tosym, to_p,
1476 		prl_to, tosym, to_p);
1477 		free(prl_from);
1478 		free(prl_to);
1479 		break;
1480 	case ANY_EXIT_TO_ANY_INIT:
1481 		prl_from = sec2annotation(fromsec);
1482 		prl_to = sec2annotation(tosec);
1483 		fprintf(stderr,
1484 		"The %s %s%s%s references\n"
1485 		"a %s %s%s%s.\n"
1486 		"This is often seen when error handling "
1487 		"in the exit function\n"
1488 		"uses functionality in the init path.\n"
1489 		"The fix is often to remove the %sannotation of\n"
1490 		"%s%s so it may be used outside an init section.\n",
1491 		from, prl_from, fromsym, from_p,
1492 		to, prl_to, tosym, to_p,
1493 		prl_to, tosym, to_p);
1494 		free(prl_from);
1495 		free(prl_to);
1496 		break;
1497 	case EXPORT_TO_INIT_EXIT:
1498 		prl_to = sec2annotation(tosec);
1499 		fprintf(stderr,
1500 		"The symbol %s is exported and annotated %s\n"
1501 		"Fix this by removing the %sannotation of %s "
1502 		"or drop the export.\n",
1503 		tosym, prl_to, prl_to, tosym);
1504 		free(prl_to);
1505 		break;
1506 	case EXTABLE_TO_NON_TEXT:
1507 		fatal("There's a special handler for this mismatch type, "
1508 		      "we should never get here.");
1509 		break;
1510 	}
1511 	fprintf(stderr, "\n");
1512 }
1513 
1514 static void default_mismatch_handler(const char *modname, struct elf_info *elf,
1515 				     const struct sectioncheck* const mismatch,
1516 				     Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1517 {
1518 	const char *tosec;
1519 	Elf_Sym *to;
1520 	Elf_Sym *from;
1521 	const char *tosym;
1522 	const char *fromsym;
1523 
1524 	from = find_elf_symbol2(elf, r->r_offset, fromsec);
1525 	fromsym = sym_name(elf, from);
1526 
1527 	if (!strncmp(fromsym, "reference___initcall",
1528 		     sizeof("reference___initcall")-1))
1529 		return;
1530 
1531 	tosec = sec_name(elf, get_secindex(elf, sym));
1532 	to = find_elf_symbol(elf, r->r_addend, sym);
1533 	tosym = sym_name(elf, to);
1534 
1535 	/* check whitelist - we may ignore it */
1536 	if (secref_whitelist(mismatch,
1537 			     fromsec, fromsym, tosec, tosym)) {
1538 		report_sec_mismatch(modname, mismatch,
1539 				    fromsec, r->r_offset, fromsym,
1540 				    is_function(from), tosec, tosym,
1541 				    is_function(to));
1542 	}
1543 }
1544 
1545 static int is_executable_section(struct elf_info* elf, unsigned int section_index)
1546 {
1547 	if (section_index > elf->num_sections)
1548 		fatal("section_index is outside elf->num_sections!\n");
1549 
1550 	return ((elf->sechdrs[section_index].sh_flags & SHF_EXECINSTR) == SHF_EXECINSTR);
1551 }
1552 
1553 /*
1554  * We rely on a gross hack in section_rel[a]() calling find_extable_entry_size()
1555  * to know the sizeof(struct exception_table_entry) for the target architecture.
1556  */
1557 static unsigned int extable_entry_size = 0;
1558 static void find_extable_entry_size(const char* const sec, const Elf_Rela* r)
1559 {
1560 	/*
1561 	 * If we're currently checking the second relocation within __ex_table,
1562 	 * that relocation offset tells us the offsetof(struct
1563 	 * exception_table_entry, fixup) which is equal to sizeof(struct
1564 	 * exception_table_entry) divided by two.  We use that to our advantage
1565 	 * since there's no portable way to get that size as every architecture
1566 	 * seems to go with different sized types.  Not pretty but better than
1567 	 * hard-coding the size for every architecture..
1568 	 */
1569 	if (!extable_entry_size)
1570 		extable_entry_size = r->r_offset * 2;
1571 }
1572 
1573 static inline bool is_extable_fault_address(Elf_Rela *r)
1574 {
1575 	/*
1576 	 * extable_entry_size is only discovered after we've handled the
1577 	 * _second_ relocation in __ex_table, so only abort when we're not
1578 	 * handling the first reloc and extable_entry_size is zero.
1579 	 */
1580 	if (r->r_offset && extable_entry_size == 0)
1581 		fatal("extable_entry size hasn't been discovered!\n");
1582 
1583 	return ((r->r_offset == 0) ||
1584 		(r->r_offset % extable_entry_size == 0));
1585 }
1586 
1587 #define is_second_extable_reloc(Start, Cur, Sec)			\
1588 	(((Cur) == (Start) + 1) && (strcmp("__ex_table", (Sec)) == 0))
1589 
1590 static void report_extable_warnings(const char* modname, struct elf_info* elf,
1591 				    const struct sectioncheck* const mismatch,
1592 				    Elf_Rela* r, Elf_Sym* sym,
1593 				    const char* fromsec, const char* tosec)
1594 {
1595 	Elf_Sym* fromsym = find_elf_symbol2(elf, r->r_offset, fromsec);
1596 	const char* fromsym_name = sym_name(elf, fromsym);
1597 	Elf_Sym* tosym = find_elf_symbol(elf, r->r_addend, sym);
1598 	const char* tosym_name = sym_name(elf, tosym);
1599 	const char* from_pretty_name;
1600 	const char* from_pretty_name_p;
1601 	const char* to_pretty_name;
1602 	const char* to_pretty_name_p;
1603 
1604 	get_pretty_name(is_function(fromsym),
1605 			&from_pretty_name, &from_pretty_name_p);
1606 	get_pretty_name(is_function(tosym),
1607 			&to_pretty_name, &to_pretty_name_p);
1608 
1609 	warn("%s(%s+0x%lx): Section mismatch in reference"
1610 	     " from the %s %s%s to the %s %s:%s%s\n",
1611 	     modname, fromsec, (long)r->r_offset, from_pretty_name,
1612 	     fromsym_name, from_pretty_name_p,
1613 	     to_pretty_name, tosec, tosym_name, to_pretty_name_p);
1614 
1615 	if (!match(tosec, mismatch->bad_tosec) &&
1616 	    is_executable_section(elf, get_secindex(elf, sym)))
1617 		fprintf(stderr,
1618 			"The relocation at %s+0x%lx references\n"
1619 			"section \"%s\" which is not in the list of\n"
1620 			"authorized sections.  If you're adding a new section\n"
1621 			"and/or if this reference is valid, add \"%s\" to the\n"
1622 			"list of authorized sections to jump to on fault.\n"
1623 			"This can be achieved by adding \"%s\" to \n"
1624 			"OTHER_TEXT_SECTIONS in scripts/mod/modpost.c.\n",
1625 			fromsec, (long)r->r_offset, tosec, tosec, tosec);
1626 }
1627 
1628 static void extable_mismatch_handler(const char* modname, struct elf_info *elf,
1629 				     const struct sectioncheck* const mismatch,
1630 				     Elf_Rela* r, Elf_Sym* sym,
1631 				     const char *fromsec)
1632 {
1633 	const char* tosec = sec_name(elf, get_secindex(elf, sym));
1634 
1635 	sec_mismatch_count++;
1636 
1637 	if (sec_mismatch_verbose)
1638 		report_extable_warnings(modname, elf, mismatch, r, sym,
1639 					fromsec, tosec);
1640 
1641 	if (match(tosec, mismatch->bad_tosec))
1642 		fatal("The relocation at %s+0x%lx references\n"
1643 		      "section \"%s\" which is black-listed.\n"
1644 		      "Something is seriously wrong and should be fixed.\n"
1645 		      "You might get more information about where this is\n"
1646 		      "coming from by using scripts/check_extable.sh %s\n",
1647 		      fromsec, (long)r->r_offset, tosec, modname);
1648 	else if (!is_executable_section(elf, get_secindex(elf, sym))) {
1649 		if (is_extable_fault_address(r))
1650 			fatal("The relocation at %s+0x%lx references\n"
1651 			      "section \"%s\" which is not executable, IOW\n"
1652 			      "it is not possible for the kernel to fault\n"
1653 			      "at that address.  Something is seriously wrong\n"
1654 			      "and should be fixed.\n",
1655 			      fromsec, (long)r->r_offset, tosec);
1656 		else
1657 			fatal("The relocation at %s+0x%lx references\n"
1658 			      "section \"%s\" which is not executable, IOW\n"
1659 			      "the kernel will fault if it ever tries to\n"
1660 			      "jump to it.  Something is seriously wrong\n"
1661 			      "and should be fixed.\n",
1662 			      fromsec, (long)r->r_offset, tosec);
1663 	}
1664 }
1665 
1666 static void check_section_mismatch(const char *modname, struct elf_info *elf,
1667 				   Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1668 {
1669 	const char *tosec = sec_name(elf, get_secindex(elf, sym));;
1670 	const struct sectioncheck *mismatch = section_mismatch(fromsec, tosec);
1671 
1672 	if (mismatch) {
1673 		if (mismatch->handler)
1674 			mismatch->handler(modname, elf,  mismatch,
1675 					  r, sym, fromsec);
1676 		else
1677 			default_mismatch_handler(modname, elf, mismatch,
1678 						 r, sym, fromsec);
1679 	}
1680 }
1681 
1682 static unsigned int *reloc_location(struct elf_info *elf,
1683 				    Elf_Shdr *sechdr, Elf_Rela *r)
1684 {
1685 	Elf_Shdr *sechdrs = elf->sechdrs;
1686 	int section = sechdr->sh_info;
1687 
1688 	return (void *)elf->hdr + sechdrs[section].sh_offset +
1689 		r->r_offset;
1690 }
1691 
1692 static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1693 {
1694 	unsigned int r_typ = ELF_R_TYPE(r->r_info);
1695 	unsigned int *location = reloc_location(elf, sechdr, r);
1696 
1697 	switch (r_typ) {
1698 	case R_386_32:
1699 		r->r_addend = TO_NATIVE(*location);
1700 		break;
1701 	case R_386_PC32:
1702 		r->r_addend = TO_NATIVE(*location) + 4;
1703 		/* For CONFIG_RELOCATABLE=y */
1704 		if (elf->hdr->e_type == ET_EXEC)
1705 			r->r_addend += r->r_offset;
1706 		break;
1707 	}
1708 	return 0;
1709 }
1710 
1711 #ifndef R_ARM_CALL
1712 #define R_ARM_CALL	28
1713 #endif
1714 #ifndef R_ARM_JUMP24
1715 #define R_ARM_JUMP24	29
1716 #endif
1717 
1718 #ifndef	R_ARM_THM_CALL
1719 #define	R_ARM_THM_CALL		10
1720 #endif
1721 #ifndef	R_ARM_THM_JUMP24
1722 #define	R_ARM_THM_JUMP24	30
1723 #endif
1724 #ifndef	R_ARM_THM_JUMP19
1725 #define	R_ARM_THM_JUMP19	51
1726 #endif
1727 
1728 static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1729 {
1730 	unsigned int r_typ = ELF_R_TYPE(r->r_info);
1731 
1732 	switch (r_typ) {
1733 	case R_ARM_ABS32:
1734 		/* From ARM ABI: (S + A) | T */
1735 		r->r_addend = (int)(long)
1736 			      (elf->symtab_start + ELF_R_SYM(r->r_info));
1737 		break;
1738 	case R_ARM_PC24:
1739 	case R_ARM_CALL:
1740 	case R_ARM_JUMP24:
1741 	case R_ARM_THM_CALL:
1742 	case R_ARM_THM_JUMP24:
1743 	case R_ARM_THM_JUMP19:
1744 		/* From ARM ABI: ((S + A) | T) - P */
1745 		r->r_addend = (int)(long)(elf->hdr +
1746 			      sechdr->sh_offset +
1747 			      (r->r_offset - sechdr->sh_addr));
1748 		break;
1749 	default:
1750 		return 1;
1751 	}
1752 	return 0;
1753 }
1754 
1755 static int addend_mips_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1756 {
1757 	unsigned int r_typ = ELF_R_TYPE(r->r_info);
1758 	unsigned int *location = reloc_location(elf, sechdr, r);
1759 	unsigned int inst;
1760 
1761 	if (r_typ == R_MIPS_HI16)
1762 		return 1;	/* skip this */
1763 	inst = TO_NATIVE(*location);
1764 	switch (r_typ) {
1765 	case R_MIPS_LO16:
1766 		r->r_addend = inst & 0xffff;
1767 		break;
1768 	case R_MIPS_26:
1769 		r->r_addend = (inst & 0x03ffffff) << 2;
1770 		break;
1771 	case R_MIPS_32:
1772 		r->r_addend = inst;
1773 		break;
1774 	}
1775 	return 0;
1776 }
1777 
1778 static void section_rela(const char *modname, struct elf_info *elf,
1779 			 Elf_Shdr *sechdr)
1780 {
1781 	Elf_Sym  *sym;
1782 	Elf_Rela *rela;
1783 	Elf_Rela r;
1784 	unsigned int r_sym;
1785 	const char *fromsec;
1786 
1787 	Elf_Rela *start = (void *)elf->hdr + sechdr->sh_offset;
1788 	Elf_Rela *stop  = (void *)start + sechdr->sh_size;
1789 
1790 	fromsec = sech_name(elf, sechdr);
1791 	fromsec += strlen(".rela");
1792 	/* if from section (name) is know good then skip it */
1793 	if (match(fromsec, section_white_list))
1794 		return;
1795 
1796 	for (rela = start; rela < stop; rela++) {
1797 		r.r_offset = TO_NATIVE(rela->r_offset);
1798 #if KERNEL_ELFCLASS == ELFCLASS64
1799 		if (elf->hdr->e_machine == EM_MIPS) {
1800 			unsigned int r_typ;
1801 			r_sym = ELF64_MIPS_R_SYM(rela->r_info);
1802 			r_sym = TO_NATIVE(r_sym);
1803 			r_typ = ELF64_MIPS_R_TYPE(rela->r_info);
1804 			r.r_info = ELF64_R_INFO(r_sym, r_typ);
1805 		} else {
1806 			r.r_info = TO_NATIVE(rela->r_info);
1807 			r_sym = ELF_R_SYM(r.r_info);
1808 		}
1809 #else
1810 		r.r_info = TO_NATIVE(rela->r_info);
1811 		r_sym = ELF_R_SYM(r.r_info);
1812 #endif
1813 		r.r_addend = TO_NATIVE(rela->r_addend);
1814 		sym = elf->symtab_start + r_sym;
1815 		/* Skip special sections */
1816 		if (is_shndx_special(sym->st_shndx))
1817 			continue;
1818 		if (is_second_extable_reloc(start, rela, fromsec))
1819 			find_extable_entry_size(fromsec, &r);
1820 		check_section_mismatch(modname, elf, &r, sym, fromsec);
1821 	}
1822 }
1823 
1824 static void section_rel(const char *modname, struct elf_info *elf,
1825 			Elf_Shdr *sechdr)
1826 {
1827 	Elf_Sym *sym;
1828 	Elf_Rel *rel;
1829 	Elf_Rela r;
1830 	unsigned int r_sym;
1831 	const char *fromsec;
1832 
1833 	Elf_Rel *start = (void *)elf->hdr + sechdr->sh_offset;
1834 	Elf_Rel *stop  = (void *)start + sechdr->sh_size;
1835 
1836 	fromsec = sech_name(elf, sechdr);
1837 	fromsec += strlen(".rel");
1838 	/* if from section (name) is know good then skip it */
1839 	if (match(fromsec, section_white_list))
1840 		return;
1841 
1842 	for (rel = start; rel < stop; rel++) {
1843 		r.r_offset = TO_NATIVE(rel->r_offset);
1844 #if KERNEL_ELFCLASS == ELFCLASS64
1845 		if (elf->hdr->e_machine == EM_MIPS) {
1846 			unsigned int r_typ;
1847 			r_sym = ELF64_MIPS_R_SYM(rel->r_info);
1848 			r_sym = TO_NATIVE(r_sym);
1849 			r_typ = ELF64_MIPS_R_TYPE(rel->r_info);
1850 			r.r_info = ELF64_R_INFO(r_sym, r_typ);
1851 		} else {
1852 			r.r_info = TO_NATIVE(rel->r_info);
1853 			r_sym = ELF_R_SYM(r.r_info);
1854 		}
1855 #else
1856 		r.r_info = TO_NATIVE(rel->r_info);
1857 		r_sym = ELF_R_SYM(r.r_info);
1858 #endif
1859 		r.r_addend = 0;
1860 		switch (elf->hdr->e_machine) {
1861 		case EM_386:
1862 			if (addend_386_rel(elf, sechdr, &r))
1863 				continue;
1864 			break;
1865 		case EM_ARM:
1866 			if (addend_arm_rel(elf, sechdr, &r))
1867 				continue;
1868 			break;
1869 		case EM_MIPS:
1870 			if (addend_mips_rel(elf, sechdr, &r))
1871 				continue;
1872 			break;
1873 		}
1874 		sym = elf->symtab_start + r_sym;
1875 		/* Skip special sections */
1876 		if (is_shndx_special(sym->st_shndx))
1877 			continue;
1878 		if (is_second_extable_reloc(start, rel, fromsec))
1879 			find_extable_entry_size(fromsec, &r);
1880 		check_section_mismatch(modname, elf, &r, sym, fromsec);
1881 	}
1882 }
1883 
1884 /**
1885  * A module includes a number of sections that are discarded
1886  * either when loaded or when used as built-in.
1887  * For loaded modules all functions marked __init and all data
1888  * marked __initdata will be discarded when the module has been initialized.
1889  * Likewise for modules used built-in the sections marked __exit
1890  * are discarded because __exit marked function are supposed to be called
1891  * only when a module is unloaded which never happens for built-in modules.
1892  * The check_sec_ref() function traverses all relocation records
1893  * to find all references to a section that reference a section that will
1894  * be discarded and warns about it.
1895  **/
1896 static void check_sec_ref(struct module *mod, const char *modname,
1897 			  struct elf_info *elf)
1898 {
1899 	int i;
1900 	Elf_Shdr *sechdrs = elf->sechdrs;
1901 
1902 	/* Walk through all sections */
1903 	for (i = 0; i < elf->num_sections; i++) {
1904 		check_section(modname, elf, &elf->sechdrs[i]);
1905 		/* We want to process only relocation sections and not .init */
1906 		if (sechdrs[i].sh_type == SHT_RELA)
1907 			section_rela(modname, elf, &elf->sechdrs[i]);
1908 		else if (sechdrs[i].sh_type == SHT_REL)
1909 			section_rel(modname, elf, &elf->sechdrs[i]);
1910 	}
1911 }
1912 
1913 static char *remove_dot(char *s)
1914 {
1915 	size_t n = strcspn(s, ".");
1916 
1917 	if (n && s[n]) {
1918 		size_t m = strspn(s + n + 1, "0123456789");
1919 		if (m && (s[n + m] == '.' || s[n + m] == 0))
1920 			s[n] = 0;
1921 	}
1922 	return s;
1923 }
1924 
1925 static void read_symbols(char *modname)
1926 {
1927 	const char *symname;
1928 	char *version;
1929 	char *license;
1930 	struct module *mod;
1931 	struct elf_info info = { };
1932 	Elf_Sym *sym;
1933 
1934 	if (!parse_elf(&info, modname))
1935 		return;
1936 
1937 	mod = new_module(modname);
1938 
1939 	/* When there's no vmlinux, don't print warnings about
1940 	 * unresolved symbols (since there'll be too many ;) */
1941 	if (is_vmlinux(modname)) {
1942 		have_vmlinux = 1;
1943 		mod->skip = 1;
1944 	}
1945 
1946 	license = get_modinfo(info.modinfo, info.modinfo_len, "license");
1947 	if (info.modinfo && !license && !is_vmlinux(modname))
1948 		warn("modpost: missing MODULE_LICENSE() in %s\n"
1949 		     "see include/linux/module.h for "
1950 		     "more information\n", modname);
1951 	while (license) {
1952 		if (license_is_gpl_compatible(license))
1953 			mod->gpl_compatible = 1;
1954 		else {
1955 			mod->gpl_compatible = 0;
1956 			break;
1957 		}
1958 		license = get_next_modinfo(info.modinfo, info.modinfo_len,
1959 					   "license", license);
1960 	}
1961 
1962 	for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
1963 		symname = remove_dot(info.strtab + sym->st_name);
1964 
1965 		handle_modversions(mod, &info, sym, symname);
1966 		handle_moddevtable(mod, &info, sym, symname);
1967 	}
1968 	if (!is_vmlinux(modname) ||
1969 	     (is_vmlinux(modname) && vmlinux_section_warnings))
1970 		check_sec_ref(mod, modname, &info);
1971 
1972 	version = get_modinfo(info.modinfo, info.modinfo_len, "version");
1973 	if (version)
1974 		maybe_frob_rcs_version(modname, version, info.modinfo,
1975 				       version - (char *)info.hdr);
1976 	if (version || (all_versions && !is_vmlinux(modname)))
1977 		get_src_version(modname, mod->srcversion,
1978 				sizeof(mod->srcversion)-1);
1979 
1980 	parse_elf_finish(&info);
1981 
1982 	/* Our trick to get versioning for module struct etc. - it's
1983 	 * never passed as an argument to an exported function, so
1984 	 * the automatic versioning doesn't pick it up, but it's really
1985 	 * important anyhow */
1986 	if (modversions)
1987 		mod->unres = alloc_symbol("module_layout", 0, mod->unres);
1988 }
1989 
1990 static void read_symbols_from_files(const char *filename)
1991 {
1992 	FILE *in = stdin;
1993 	char fname[PATH_MAX];
1994 
1995 	if (strcmp(filename, "-") != 0) {
1996 		in = fopen(filename, "r");
1997 		if (!in)
1998 			fatal("Can't open filenames file %s: %m", filename);
1999 	}
2000 
2001 	while (fgets(fname, PATH_MAX, in) != NULL) {
2002 		if (strends(fname, "\n"))
2003 			fname[strlen(fname)-1] = '\0';
2004 		read_symbols(fname);
2005 	}
2006 
2007 	if (in != stdin)
2008 		fclose(in);
2009 }
2010 
2011 #define SZ 500
2012 
2013 /* We first write the generated file into memory using the
2014  * following helper, then compare to the file on disk and
2015  * only update the later if anything changed */
2016 
2017 void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
2018 						      const char *fmt, ...)
2019 {
2020 	char tmp[SZ];
2021 	int len;
2022 	va_list ap;
2023 
2024 	va_start(ap, fmt);
2025 	len = vsnprintf(tmp, SZ, fmt, ap);
2026 	buf_write(buf, tmp, len);
2027 	va_end(ap);
2028 }
2029 
2030 void buf_write(struct buffer *buf, const char *s, int len)
2031 {
2032 	if (buf->size - buf->pos < len) {
2033 		buf->size += len + SZ;
2034 		buf->p = realloc(buf->p, buf->size);
2035 	}
2036 	strncpy(buf->p + buf->pos, s, len);
2037 	buf->pos += len;
2038 }
2039 
2040 static void check_for_gpl_usage(enum export exp, const char *m, const char *s)
2041 {
2042 	const char *e = is_vmlinux(m) ?"":".ko";
2043 
2044 	switch (exp) {
2045 	case export_gpl:
2046 		fatal("modpost: GPL-incompatible module %s%s "
2047 		      "uses GPL-only symbol '%s'\n", m, e, s);
2048 		break;
2049 	case export_unused_gpl:
2050 		fatal("modpost: GPL-incompatible module %s%s "
2051 		      "uses GPL-only symbol marked UNUSED '%s'\n", m, e, s);
2052 		break;
2053 	case export_gpl_future:
2054 		warn("modpost: GPL-incompatible module %s%s "
2055 		      "uses future GPL-only symbol '%s'\n", m, e, s);
2056 		break;
2057 	case export_plain:
2058 	case export_unused:
2059 	case export_unknown:
2060 		/* ignore */
2061 		break;
2062 	}
2063 }
2064 
2065 static void check_for_unused(enum export exp, const char *m, const char *s)
2066 {
2067 	const char *e = is_vmlinux(m) ?"":".ko";
2068 
2069 	switch (exp) {
2070 	case export_unused:
2071 	case export_unused_gpl:
2072 		warn("modpost: module %s%s "
2073 		      "uses symbol '%s' marked UNUSED\n", m, e, s);
2074 		break;
2075 	default:
2076 		/* ignore */
2077 		break;
2078 	}
2079 }
2080 
2081 static void check_exports(struct module *mod)
2082 {
2083 	struct symbol *s, *exp;
2084 
2085 	for (s = mod->unres; s; s = s->next) {
2086 		const char *basename;
2087 		exp = find_symbol(s->name);
2088 		if (!exp || exp->module == mod)
2089 			continue;
2090 		basename = strrchr(mod->name, '/');
2091 		if (basename)
2092 			basename++;
2093 		else
2094 			basename = mod->name;
2095 		if (!mod->gpl_compatible)
2096 			check_for_gpl_usage(exp->export, basename, exp->name);
2097 		check_for_unused(exp->export, basename, exp->name);
2098 	}
2099 }
2100 
2101 /**
2102  * Header for the generated file
2103  **/
2104 static void add_header(struct buffer *b, struct module *mod)
2105 {
2106 	buf_printf(b, "#include <linux/module.h>\n");
2107 	buf_printf(b, "#include <linux/vermagic.h>\n");
2108 	buf_printf(b, "#include <linux/compiler.h>\n");
2109 	buf_printf(b, "\n");
2110 	buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
2111 	buf_printf(b, "\n");
2112 	buf_printf(b, "__visible struct module __this_module\n");
2113 	buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n");
2114 	buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
2115 	if (mod->has_init)
2116 		buf_printf(b, "\t.init = init_module,\n");
2117 	if (mod->has_cleanup)
2118 		buf_printf(b, "#ifdef CONFIG_MODULE_UNLOAD\n"
2119 			      "\t.exit = cleanup_module,\n"
2120 			      "#endif\n");
2121 	buf_printf(b, "\t.arch = MODULE_ARCH_INIT,\n");
2122 	buf_printf(b, "};\n");
2123 }
2124 
2125 static void add_intree_flag(struct buffer *b, int is_intree)
2126 {
2127 	if (is_intree)
2128 		buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
2129 }
2130 
2131 static void add_staging_flag(struct buffer *b, const char *name)
2132 {
2133 	static const char *staging_dir = "drivers/staging";
2134 
2135 	if (strncmp(staging_dir, name, strlen(staging_dir)) == 0)
2136 		buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
2137 }
2138 
2139 /* In kernel, this size is defined in linux/module.h;
2140  * here we use Elf_Addr instead of long for covering cross-compile
2141  */
2142 #define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
2143 
2144 /**
2145  * Record CRCs for unresolved symbols
2146  **/
2147 static int add_versions(struct buffer *b, struct module *mod)
2148 {
2149 	struct symbol *s, *exp;
2150 	int err = 0;
2151 
2152 	for (s = mod->unres; s; s = s->next) {
2153 		exp = find_symbol(s->name);
2154 		if (!exp || exp->module == mod) {
2155 			if (have_vmlinux && !s->weak) {
2156 				if (warn_unresolved) {
2157 					warn("\"%s\" [%s.ko] undefined!\n",
2158 					     s->name, mod->name);
2159 				} else {
2160 					merror("\"%s\" [%s.ko] undefined!\n",
2161 					       s->name, mod->name);
2162 					err = 1;
2163 				}
2164 			}
2165 			continue;
2166 		}
2167 		s->module = exp->module;
2168 		s->crc_valid = exp->crc_valid;
2169 		s->crc = exp->crc;
2170 	}
2171 
2172 	if (!modversions)
2173 		return err;
2174 
2175 	buf_printf(b, "\n");
2176 	buf_printf(b, "static const struct modversion_info ____versions[]\n");
2177 	buf_printf(b, "__used\n");
2178 	buf_printf(b, "__attribute__((section(\"__versions\"))) = {\n");
2179 
2180 	for (s = mod->unres; s; s = s->next) {
2181 		if (!s->module)
2182 			continue;
2183 		if (!s->crc_valid) {
2184 			warn("\"%s\" [%s.ko] has no CRC!\n",
2185 				s->name, mod->name);
2186 			continue;
2187 		}
2188 		if (strlen(s->name) >= MODULE_NAME_LEN) {
2189 			merror("too long symbol \"%s\" [%s.ko]\n",
2190 			       s->name, mod->name);
2191 			err = 1;
2192 			break;
2193 		}
2194 		buf_printf(b, "\t{ %#8x, __VMLINUX_SYMBOL_STR(%s) },\n",
2195 			   s->crc, s->name);
2196 	}
2197 
2198 	buf_printf(b, "};\n");
2199 
2200 	return err;
2201 }
2202 
2203 static void add_depends(struct buffer *b, struct module *mod,
2204 			struct module *modules)
2205 {
2206 	struct symbol *s;
2207 	struct module *m;
2208 	int first = 1;
2209 
2210 	for (m = modules; m; m = m->next)
2211 		m->seen = is_vmlinux(m->name);
2212 
2213 	buf_printf(b, "\n");
2214 	buf_printf(b, "static const char __module_depends[]\n");
2215 	buf_printf(b, "__used\n");
2216 	buf_printf(b, "__attribute__((section(\".modinfo\"))) =\n");
2217 	buf_printf(b, "\"depends=");
2218 	for (s = mod->unres; s; s = s->next) {
2219 		const char *p;
2220 		if (!s->module)
2221 			continue;
2222 
2223 		if (s->module->seen)
2224 			continue;
2225 
2226 		s->module->seen = 1;
2227 		p = strrchr(s->module->name, '/');
2228 		if (p)
2229 			p++;
2230 		else
2231 			p = s->module->name;
2232 		buf_printf(b, "%s%s", first ? "" : ",", p);
2233 		first = 0;
2234 	}
2235 	buf_printf(b, "\";\n");
2236 }
2237 
2238 static void add_srcversion(struct buffer *b, struct module *mod)
2239 {
2240 	if (mod->srcversion[0]) {
2241 		buf_printf(b, "\n");
2242 		buf_printf(b, "MODULE_INFO(srcversion, \"%s\");\n",
2243 			   mod->srcversion);
2244 	}
2245 }
2246 
2247 static void write_if_changed(struct buffer *b, const char *fname)
2248 {
2249 	char *tmp;
2250 	FILE *file;
2251 	struct stat st;
2252 
2253 	file = fopen(fname, "r");
2254 	if (!file)
2255 		goto write;
2256 
2257 	if (fstat(fileno(file), &st) < 0)
2258 		goto close_write;
2259 
2260 	if (st.st_size != b->pos)
2261 		goto close_write;
2262 
2263 	tmp = NOFAIL(malloc(b->pos));
2264 	if (fread(tmp, 1, b->pos, file) != b->pos)
2265 		goto free_write;
2266 
2267 	if (memcmp(tmp, b->p, b->pos) != 0)
2268 		goto free_write;
2269 
2270 	free(tmp);
2271 	fclose(file);
2272 	return;
2273 
2274  free_write:
2275 	free(tmp);
2276  close_write:
2277 	fclose(file);
2278  write:
2279 	file = fopen(fname, "w");
2280 	if (!file) {
2281 		perror(fname);
2282 		exit(1);
2283 	}
2284 	if (fwrite(b->p, 1, b->pos, file) != b->pos) {
2285 		perror(fname);
2286 		exit(1);
2287 	}
2288 	fclose(file);
2289 }
2290 
2291 /* parse Module.symvers file. line format:
2292  * 0x12345678<tab>symbol<tab>module[[<tab>export]<tab>something]
2293  **/
2294 static void read_dump(const char *fname, unsigned int kernel)
2295 {
2296 	unsigned long size, pos = 0;
2297 	void *file = grab_file(fname, &size);
2298 	char *line;
2299 
2300 	if (!file)
2301 		/* No symbol versions, silently ignore */
2302 		return;
2303 
2304 	while ((line = get_next_line(&pos, file, size))) {
2305 		char *symname, *modname, *d, *export, *end;
2306 		unsigned int crc;
2307 		struct module *mod;
2308 		struct symbol *s;
2309 
2310 		if (!(symname = strchr(line, '\t')))
2311 			goto fail;
2312 		*symname++ = '\0';
2313 		if (!(modname = strchr(symname, '\t')))
2314 			goto fail;
2315 		*modname++ = '\0';
2316 		if ((export = strchr(modname, '\t')) != NULL)
2317 			*export++ = '\0';
2318 		if (export && ((end = strchr(export, '\t')) != NULL))
2319 			*end = '\0';
2320 		crc = strtoul(line, &d, 16);
2321 		if (*symname == '\0' || *modname == '\0' || *d != '\0')
2322 			goto fail;
2323 		mod = find_module(modname);
2324 		if (!mod) {
2325 			if (is_vmlinux(modname))
2326 				have_vmlinux = 1;
2327 			mod = new_module(modname);
2328 			mod->skip = 1;
2329 		}
2330 		s = sym_add_exported(symname, mod, export_no(export));
2331 		s->kernel    = kernel;
2332 		s->preloaded = 1;
2333 		sym_update_crc(symname, mod, crc, export_no(export));
2334 	}
2335 	release_file(file, size);
2336 	return;
2337 fail:
2338 	release_file(file, size);
2339 	fatal("parse error in symbol dump file\n");
2340 }
2341 
2342 /* For normal builds always dump all symbols.
2343  * For external modules only dump symbols
2344  * that are not read from kernel Module.symvers.
2345  **/
2346 static int dump_sym(struct symbol *sym)
2347 {
2348 	if (!external_module)
2349 		return 1;
2350 	if (sym->vmlinux || sym->kernel)
2351 		return 0;
2352 	return 1;
2353 }
2354 
2355 static void write_dump(const char *fname)
2356 {
2357 	struct buffer buf = { };
2358 	struct symbol *symbol;
2359 	int n;
2360 
2361 	for (n = 0; n < SYMBOL_HASH_SIZE ; n++) {
2362 		symbol = symbolhash[n];
2363 		while (symbol) {
2364 			if (dump_sym(symbol))
2365 				buf_printf(&buf, "0x%08x\t%s\t%s\t%s\n",
2366 					symbol->crc, symbol->name,
2367 					symbol->module->name,
2368 					export_str(symbol->export));
2369 			symbol = symbol->next;
2370 		}
2371 	}
2372 	write_if_changed(&buf, fname);
2373 }
2374 
2375 struct ext_sym_list {
2376 	struct ext_sym_list *next;
2377 	const char *file;
2378 };
2379 
2380 int main(int argc, char **argv)
2381 {
2382 	struct module *mod;
2383 	struct buffer buf = { };
2384 	char *kernel_read = NULL, *module_read = NULL;
2385 	char *dump_write = NULL, *files_source = NULL;
2386 	int opt;
2387 	int err;
2388 	struct ext_sym_list *extsym_iter;
2389 	struct ext_sym_list *extsym_start = NULL;
2390 
2391 	while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:E")) != -1) {
2392 		switch (opt) {
2393 		case 'i':
2394 			kernel_read = optarg;
2395 			break;
2396 		case 'I':
2397 			module_read = optarg;
2398 			external_module = 1;
2399 			break;
2400 		case 'e':
2401 			external_module = 1;
2402 			extsym_iter =
2403 			   NOFAIL(malloc(sizeof(*extsym_iter)));
2404 			extsym_iter->next = extsym_start;
2405 			extsym_iter->file = optarg;
2406 			extsym_start = extsym_iter;
2407 			break;
2408 		case 'm':
2409 			modversions = 1;
2410 			break;
2411 		case 'n':
2412 			ignore_missing_files = 1;
2413 			break;
2414 		case 'o':
2415 			dump_write = optarg;
2416 			break;
2417 		case 'a':
2418 			all_versions = 1;
2419 			break;
2420 		case 's':
2421 			vmlinux_section_warnings = 0;
2422 			break;
2423 		case 'S':
2424 			sec_mismatch_verbose = 0;
2425 			break;
2426 		case 'T':
2427 			files_source = optarg;
2428 			break;
2429 		case 'w':
2430 			warn_unresolved = 1;
2431 			break;
2432 		case 'E':
2433 			sec_mismatch_fatal = 1;
2434 			break;
2435 		default:
2436 			exit(1);
2437 		}
2438 	}
2439 
2440 	if (kernel_read)
2441 		read_dump(kernel_read, 1);
2442 	if (module_read)
2443 		read_dump(module_read, 0);
2444 	while (extsym_start) {
2445 		read_dump(extsym_start->file, 0);
2446 		extsym_iter = extsym_start->next;
2447 		free(extsym_start);
2448 		extsym_start = extsym_iter;
2449 	}
2450 
2451 	while (optind < argc)
2452 		read_symbols(argv[optind++]);
2453 
2454 	if (files_source)
2455 		read_symbols_from_files(files_source);
2456 
2457 	for (mod = modules; mod; mod = mod->next) {
2458 		if (mod->skip)
2459 			continue;
2460 		check_exports(mod);
2461 	}
2462 
2463 	err = 0;
2464 
2465 	for (mod = modules; mod; mod = mod->next) {
2466 		char fname[PATH_MAX];
2467 
2468 		if (mod->skip)
2469 			continue;
2470 
2471 		buf.pos = 0;
2472 
2473 		add_header(&buf, mod);
2474 		add_intree_flag(&buf, !external_module);
2475 		add_staging_flag(&buf, mod->name);
2476 		err |= add_versions(&buf, mod);
2477 		add_depends(&buf, mod, modules);
2478 		add_moddevtable(&buf, mod);
2479 		add_srcversion(&buf, mod);
2480 
2481 		sprintf(fname, "%s.mod.c", mod->name);
2482 		write_if_changed(&buf, fname);
2483 	}
2484 	if (dump_write)
2485 		write_dump(dump_write);
2486 	if (sec_mismatch_count) {
2487 		if (!sec_mismatch_verbose) {
2488 			warn("modpost: Found %d section mismatch(es).\n"
2489 			     "To see full details build your kernel with:\n"
2490 			     "'make CONFIG_DEBUG_SECTION_MISMATCH=y'\n",
2491 			     sec_mismatch_count);
2492 		}
2493 		if (sec_mismatch_fatal) {
2494 			fatal("modpost: Section mismatches detected.\n"
2495 			      "Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");
2496 		}
2497 	}
2498 
2499 	return err;
2500 }
2501