1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | /* Generate kernel symbol version hashes. |
3 | Copyright 1996, 1997 Linux International. |
4 | |
5 | New implementation contributed by Richard Henderson <rth@tamu.edu> |
6 | Based on original work by Bjorn Ekwall <bj0rn@blox.se> |
7 | |
8 | This file is part of the Linux modutils. |
9 | |
10 | */ |
11 | |
12 | #ifndef MODUTILS_GENKSYMS_H |
13 | #define MODUTILS_GENKSYMS_H 1 |
14 | |
15 | #include <stdio.h> |
16 | |
17 | enum symbol_type { |
18 | SYM_NORMAL, SYM_TYPEDEF, SYM_ENUM, SYM_STRUCT, SYM_UNION, |
19 | SYM_ENUM_CONST |
20 | }; |
21 | |
22 | enum symbol_status { |
23 | STATUS_UNCHANGED, STATUS_DEFINED, STATUS_MODIFIED |
24 | }; |
25 | |
26 | struct string_list { |
27 | struct string_list *next; |
28 | enum symbol_type tag; |
29 | int in_source_file; |
30 | char *string; |
31 | }; |
32 | |
33 | struct symbol { |
34 | struct symbol *hash_next; |
35 | const char *name; |
36 | enum symbol_type type; |
37 | struct string_list *defn; |
38 | struct symbol *expansion_trail; |
39 | struct symbol *visited; |
40 | int is_extern; |
41 | int is_declared; |
42 | enum symbol_status status; |
43 | int is_override; |
44 | }; |
45 | |
46 | typedef struct string_list **yystype; |
47 | #define YYSTYPE yystype |
48 | |
49 | extern int cur_line; |
50 | extern char *cur_filename; |
51 | extern int in_source_file; |
52 | |
53 | struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact); |
54 | struct symbol *add_symbol(const char *name, enum symbol_type type, |
55 | struct string_list *defn, int is_extern); |
56 | void export_symbol(const char *); |
57 | |
58 | void free_node(struct string_list *list); |
59 | void free_list(struct string_list *s, struct string_list *e); |
60 | struct string_list *copy_node(struct string_list *); |
61 | struct string_list *copy_list_range(struct string_list *start, |
62 | struct string_list *end); |
63 | |
64 | int yylex(void); |
65 | int yyparse(void); |
66 | |
67 | void error_with_pos(const char *, ...) __attribute__ ((format(printf, 1, 2))); |
68 | |
69 | /*----------------------------------------------------------------------*/ |
70 | #define xmalloc(size) ({ void *__ptr = malloc(size); \ |
71 | if(!__ptr && size != 0) { \ |
72 | fprintf(stderr, "out of memory\n"); \ |
73 | exit(1); \ |
74 | } \ |
75 | __ptr; }) |
76 | #define xstrdup(str) ({ char *__str = strdup(str); \ |
77 | if (!__str) { \ |
78 | fprintf(stderr, "out of memory\n"); \ |
79 | exit(1); \ |
80 | } \ |
81 | __str; }) |
82 | |
83 | #endif /* genksyms.h */ |
84 | |