File: ksymoops.h

package info (click to toggle)
kernel-source-2.2.19 2.2.19.1-4
  • links: PTS
  • area: main
  • in suites: potato
  • size: 92,116 kB
  • ctags: 276,892
  • sloc: ansic: 1,710,377; asm: 58,705; makefile: 10,198; sh: 2,398; perl: 907; tcl: 570; lisp: 218; cpp: 186; awk: 133; sed: 72
file content (146 lines) | stat: -rw-r--r-- 4,894 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/*
	ksymoops.h.

	Copyright Keith Owens <kaos@ocs.com.au>.
	Released under the GNU Public Licence, Version 2.

	Tue Nov  3 02:31:01 EST 1998
	Version 0.6
	Read lsmod (/proc/modules).
	Convert from a.out to bfd, using same format as ksymoops.
	PPC trace addresses are not bracketed, add new re.

	Wed Oct 28 13:47:23 EST 1998
	Version 0.4
	Split into separate sources.
*/

#include <sys/types.h>
#include <regex.h>
#include <stdio.h>


/* Pity this is not externalised, see binfmt_elf.c */
#define elf_addr_t unsigned long

extern char *prefix;
extern char *path_nm;		/* env KSYMOOPS_NM */
extern char *path_find;		/* env KSYMOOPS_FIND */
extern char *path_objdump;	/* env KSYMOOPS_OBJDUMP */
extern int debug;
extern int errors;
extern int warnings;

typedef struct symbol SYMBOL;

struct symbol {
	char *name;		/* name of symbol */
	char type;		/* type of symbol from nm/System.map */
	char keep;		/* keep this symbol in merged map? */
	elf_addr_t address;	/* address in kernel */
};

/* Header for symbols from one particular source */

typedef struct symbol_set SYMBOL_SET;

struct symbol_set {
	char *source;			/* where the symbols came from */
	int used;			/* number of symbols used */
	int alloc;			/* number of symbols allocated */
	SYMBOL *symbol;			/* dynamic array of symbols */
	SYMBOL_SET *related;		/* any related symbol set */
};

extern SYMBOL_SET  ss_vmlinux;
extern SYMBOL_SET  ss_ksyms_base;
extern SYMBOL_SET *ss_ksyms_module;
extern int         ss_ksyms_modules;
extern SYMBOL_SET  ss_lsmod;
extern SYMBOL_SET *ss_object;
extern int         ss_objects;
extern SYMBOL_SET  ss_system_map;

extern SYMBOL_SET  ss_merged;	/* merged map with info from all sources */
extern SYMBOL_SET  ss_Version;	/* Version_ numbers where available */

/* Regular expression stuff */

extern regex_t     re_nm;
extern regmatch_t *re_nm_pmatch;
extern regex_t     re_bracketed_address;
extern regmatch_t *re_bracketed_address_pmatch;
extern regex_t     re_unbracketed_address;
extern regmatch_t *re_unbracketed_address_pmatch;

/* Bracketed address: optional '[', required '<', at least 4 hex characters,
 * required '>', optional ']', optional white space.
 */
#define BRACKETED_ADDRESS	"\\[*<([0-9a-fA-F]{4,})>\\]*[ \t]*"

#define UNBRACKETED_ADDRESS	"([0-9a-fA-F]{4,})[ \t]*"

/* io.c */
extern int regular_file(const char *file, const char *msg);
extern FILE *fopen_local(const char *file, const char *mode, const char *msg);
extern void fclose_local(FILE *f, const char *msg);
extern char *fgets_local(char **line, int *size, FILE *f, const char *msg);
extern int fwrite_local(void const *ptr, size_t size, size_t nmemb,
			FILE *stream, const char *msg);
extern FILE *popen_local(const char *cmd, const char *msg);
extern void pclose_local(FILE *f, const char *msg);

/* ksyms.c */
extern void read_ksyms(const char *ksyms);
extern void map_ksyms_to_modules(void);
extern void read_lsmod(const char *lsmod);
extern void compare_ksyms_lsmod(void);

/* misc.c */
extern void malloc_error(const char *msg);
extern const char *format_address(elf_addr_t address);
extern char *find_fullpath(const char *program);

/* map.c */
extern void read_system_map(const char *system_map);
extern void merge_maps(const char *save_system_map);
extern void compare_maps(const SYMBOL_SET *ss1, const SYMBOL_SET *ss2,
			 int precedence);


/* object.c */
extern SYMBOL_SET *adjust_object_offsets(SYMBOL_SET *ss);
extern void read_vmlinux(const char *vmlinux);
extern void expand_objects(char * const *object, int objects);
extern void read_object(const char *object, int i);

/* oops.c */
extern int Oops_read(int filecount, char * const *filename, int code_bytes,
		     int one_shot);

/* re.c */
extern void re_compile(regex_t *preg, const char *regex, int cflags,
		       regmatch_t **pmatch);
extern void re_compile_common(void);
extern void re_strings(regex_t *preg, const char *text, regmatch_t *pmatch,
		       char ***string);
extern void re_strings_free(const regex_t *preg, char ***string);
extern void re_string_check(int need, int available, const char *msg);

/* symbol.c */
extern void ss_init(SYMBOL_SET *ss, const char *msg);
extern void ss_free(SYMBOL_SET *ss);
extern void ss_init_common(void);
extern SYMBOL *find_symbol_name(const SYMBOL_SET *ss, const char *symbol,
				int *start);
extern void add_symbol_n(SYMBOL_SET *ss, const elf_addr_t address,
			 const char type, const char keep, const char *symbol);
extern void add_symbol(SYMBOL_SET *ss, const char *address, const char type,
		       const char keep, const char *symbol);
extern char *map_address(const SYMBOL_SET *ss, const elf_addr_t address);
extern void ss_sort_atn(SYMBOL_SET *ss);
extern void ss_sort_na(SYMBOL_SET *ss);
extern SYMBOL_SET *ss_copy(const SYMBOL_SET *ss);
extern void add_Version(const char *version, const char *source);
extern void extract_Version(SYMBOL_SET *ss);
extern void compare_Version(void);