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