1*53ee8cc1Swenshuai.xi /* Generate kernel symbol version hashes. 2*53ee8cc1Swenshuai.xi Copyright 1996, 1997 Linux International. 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi New implementation contributed by Richard Henderson <rth@tamu.edu> 5*53ee8cc1Swenshuai.xi Based on original work by Bjorn Ekwall <bj0rn@blox.se> 6*53ee8cc1Swenshuai.xi 7*53ee8cc1Swenshuai.xi This file is part of the Linux modutils. 8*53ee8cc1Swenshuai.xi 9*53ee8cc1Swenshuai.xi This program is free software; you can redistribute it and/or modify it 10*53ee8cc1Swenshuai.xi under the terms of the GNU General Public License as published by the 11*53ee8cc1Swenshuai.xi Free Software Foundation; either version 2 of the License, or (at your 12*53ee8cc1Swenshuai.xi option) any later version. 13*53ee8cc1Swenshuai.xi 14*53ee8cc1Swenshuai.xi This program is distributed in the hope that it will be useful, but 15*53ee8cc1Swenshuai.xi WITHOUT ANY WARRANTY; without even the implied warranty of 16*53ee8cc1Swenshuai.xi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17*53ee8cc1Swenshuai.xi General Public License for more details. 18*53ee8cc1Swenshuai.xi 19*53ee8cc1Swenshuai.xi You should have received a copy of the GNU General Public License 20*53ee8cc1Swenshuai.xi along with this program; if not, write to the Free Software Foundation, 21*53ee8cc1Swenshuai.xi Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 22*53ee8cc1Swenshuai.xi 23*53ee8cc1Swenshuai.xi #ifndef MODUTILS_GENKSYMS_H 24*53ee8cc1Swenshuai.xi #define MODUTILS_GENKSYMS_H 1 25*53ee8cc1Swenshuai.xi 26*53ee8cc1Swenshuai.xi #include <stdio.h> 27*53ee8cc1Swenshuai.xi 28*53ee8cc1Swenshuai.xi enum symbol_type { 29*53ee8cc1Swenshuai.xi SYM_NORMAL, SYM_TYPEDEF, SYM_ENUM, SYM_STRUCT, SYM_UNION, 30*53ee8cc1Swenshuai.xi SYM_ENUM_CONST 31*53ee8cc1Swenshuai.xi }; 32*53ee8cc1Swenshuai.xi 33*53ee8cc1Swenshuai.xi enum symbol_status { 34*53ee8cc1Swenshuai.xi STATUS_UNCHANGED, STATUS_DEFINED, STATUS_MODIFIED 35*53ee8cc1Swenshuai.xi }; 36*53ee8cc1Swenshuai.xi 37*53ee8cc1Swenshuai.xi struct string_list { 38*53ee8cc1Swenshuai.xi struct string_list *next; 39*53ee8cc1Swenshuai.xi enum symbol_type tag; 40*53ee8cc1Swenshuai.xi char *string; 41*53ee8cc1Swenshuai.xi }; 42*53ee8cc1Swenshuai.xi 43*53ee8cc1Swenshuai.xi struct symbol { 44*53ee8cc1Swenshuai.xi struct symbol *hash_next; 45*53ee8cc1Swenshuai.xi const char *name; 46*53ee8cc1Swenshuai.xi enum symbol_type type; 47*53ee8cc1Swenshuai.xi struct string_list *defn; 48*53ee8cc1Swenshuai.xi struct symbol *expansion_trail; 49*53ee8cc1Swenshuai.xi struct symbol *visited; 50*53ee8cc1Swenshuai.xi int is_extern; 51*53ee8cc1Swenshuai.xi int is_declared; 52*53ee8cc1Swenshuai.xi enum symbol_status status; 53*53ee8cc1Swenshuai.xi int is_override; 54*53ee8cc1Swenshuai.xi }; 55*53ee8cc1Swenshuai.xi 56*53ee8cc1Swenshuai.xi typedef struct string_list **yystype; 57*53ee8cc1Swenshuai.xi #define YYSTYPE yystype 58*53ee8cc1Swenshuai.xi 59*53ee8cc1Swenshuai.xi extern int cur_line; 60*53ee8cc1Swenshuai.xi extern char *cur_filename; 61*53ee8cc1Swenshuai.xi 62*53ee8cc1Swenshuai.xi struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact); 63*53ee8cc1Swenshuai.xi struct symbol *add_symbol(const char *name, enum symbol_type type, 64*53ee8cc1Swenshuai.xi struct string_list *defn, int is_extern); 65*53ee8cc1Swenshuai.xi void export_symbol(const char *); 66*53ee8cc1Swenshuai.xi 67*53ee8cc1Swenshuai.xi void free_node(struct string_list *list); 68*53ee8cc1Swenshuai.xi void free_list(struct string_list *s, struct string_list *e); 69*53ee8cc1Swenshuai.xi struct string_list *copy_node(struct string_list *); 70*53ee8cc1Swenshuai.xi struct string_list *copy_list_range(struct string_list *start, 71*53ee8cc1Swenshuai.xi struct string_list *end); 72*53ee8cc1Swenshuai.xi 73*53ee8cc1Swenshuai.xi int yylex(void); 74*53ee8cc1Swenshuai.xi int yyparse(void); 75*53ee8cc1Swenshuai.xi 76*53ee8cc1Swenshuai.xi void error_with_pos(const char *, ...); 77*53ee8cc1Swenshuai.xi 78*53ee8cc1Swenshuai.xi /*----------------------------------------------------------------------*/ 79*53ee8cc1Swenshuai.xi #define xmalloc(size) ({ void *__ptr = malloc(size); \ 80*53ee8cc1Swenshuai.xi if(!__ptr && size != 0) { \ 81*53ee8cc1Swenshuai.xi fprintf(stderr, "out of memory\n"); \ 82*53ee8cc1Swenshuai.xi exit(1); \ 83*53ee8cc1Swenshuai.xi } \ 84*53ee8cc1Swenshuai.xi __ptr; }) 85*53ee8cc1Swenshuai.xi #define xstrdup(str) ({ char *__str = strdup(str); \ 86*53ee8cc1Swenshuai.xi if (!__str) { \ 87*53ee8cc1Swenshuai.xi fprintf(stderr, "out of memory\n"); \ 88*53ee8cc1Swenshuai.xi exit(1); \ 89*53ee8cc1Swenshuai.xi } \ 90*53ee8cc1Swenshuai.xi __str; }) 91*53ee8cc1Swenshuai.xi 92*53ee8cc1Swenshuai.xi #endif /* genksyms.h */ 93