xref: /openbmc/linux/scripts/genksyms/genksyms.h (revision 060f35a317ef09101b128f399dce7ed13d019461)
11a59d1b8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
21da177e4SLinus Torvalds /* Generate kernel symbol version hashes.
31da177e4SLinus Torvalds    Copyright 1996, 1997 Linux International.
41da177e4SLinus Torvalds 
51da177e4SLinus Torvalds    New implementation contributed by Richard Henderson <rth@tamu.edu>
61da177e4SLinus Torvalds    Based on original work by Bjorn Ekwall <bj0rn@blox.se>
71da177e4SLinus Torvalds 
81da177e4SLinus Torvalds    This file is part of the Linux modutils.
91da177e4SLinus Torvalds 
101a59d1b8SThomas Gleixner  */
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds #ifndef MODUTILS_GENKSYMS_H
131da177e4SLinus Torvalds #define MODUTILS_GENKSYMS_H 1
141da177e4SLinus Torvalds 
151da177e4SLinus Torvalds #include <stdio.h>
161da177e4SLinus Torvalds 
17ce560686SSam Ravnborg enum symbol_type {
18e37ddb82SMichal Marek 	SYM_NORMAL, SYM_TYPEDEF, SYM_ENUM, SYM_STRUCT, SYM_UNION,
19e37ddb82SMichal Marek 	SYM_ENUM_CONST
201da177e4SLinus Torvalds };
211da177e4SLinus Torvalds 
2264e6c1e1SAndreas Gruenbacher enum symbol_status {
2364e6c1e1SAndreas Gruenbacher 	STATUS_UNCHANGED, STATUS_DEFINED, STATUS_MODIFIED
2464e6c1e1SAndreas Gruenbacher };
2564e6c1e1SAndreas Gruenbacher 
26ce560686SSam Ravnborg struct string_list {
271da177e4SLinus Torvalds 	struct string_list *next;
281da177e4SLinus Torvalds 	enum symbol_type tag;
292c5925d6SMichal Marek 	int in_source_file;
301da177e4SLinus Torvalds 	char *string;
311da177e4SLinus Torvalds };
321da177e4SLinus Torvalds 
33ce560686SSam Ravnborg struct symbol {
341da177e4SLinus Torvalds 	struct symbol *hash_next;
35*4517f37bSMasahiro Yamada 	char *name;
361da177e4SLinus Torvalds 	enum symbol_type type;
371da177e4SLinus Torvalds 	struct string_list *defn;
381da177e4SLinus Torvalds 	struct symbol *expansion_trail;
3915fde675SAndreas Gruenbacher 	struct symbol *visited;
401da177e4SLinus Torvalds 	int is_extern;
4164e6c1e1SAndreas Gruenbacher 	int is_declared;
4264e6c1e1SAndreas Gruenbacher 	enum symbol_status status;
435dae9a55SAndreas Gruenbacher 	int is_override;
441da177e4SLinus Torvalds };
451da177e4SLinus Torvalds 
461da177e4SLinus Torvalds typedef struct string_list **yystype;
471da177e4SLinus Torvalds #define YYSTYPE yystype
481da177e4SLinus Torvalds 
491da177e4SLinus Torvalds extern int cur_line;
50ab37d5a4SMasahiro Yamada extern char *cur_filename;
512c5925d6SMichal Marek extern int in_source_file;
521da177e4SLinus Torvalds 
5301762c4eSMichal Marek struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact);
541da177e4SLinus Torvalds struct symbol *add_symbol(const char *name, enum symbol_type type,
551da177e4SLinus Torvalds 			  struct string_list *defn, int is_extern);
561da177e4SLinus Torvalds void export_symbol(const char *);
571da177e4SLinus Torvalds 
581da177e4SLinus Torvalds void free_node(struct string_list *list);
59ce560686SSam Ravnborg void free_list(struct string_list *s, struct string_list *e);
601da177e4SLinus Torvalds struct string_list *copy_node(struct string_list *);
61e37ddb82SMichal Marek struct string_list *copy_list_range(struct string_list *start,
62e37ddb82SMichal Marek 				    struct string_list *end);
631da177e4SLinus Torvalds 
641da177e4SLinus Torvalds int yylex(void);
651da177e4SLinus Torvalds int yyparse(void);
661da177e4SLinus Torvalds 
673def0344SNicolas Iooss void error_with_pos(const char *, ...) __attribute__ ((format(printf, 1, 2)));
681da177e4SLinus Torvalds 
691da177e4SLinus Torvalds /*----------------------------------------------------------------------*/
701da177e4SLinus Torvalds #define xmalloc(size) ({ void *__ptr = malloc(size);		\
711da177e4SLinus Torvalds 	if(!__ptr && size != 0) {				\
721da177e4SLinus Torvalds 		fprintf(stderr, "out of memory\n");		\
731da177e4SLinus Torvalds 		exit(1);					\
741da177e4SLinus Torvalds 	}							\
751da177e4SLinus Torvalds 	__ptr; })
761da177e4SLinus Torvalds #define xstrdup(str)  ({ char *__str = strdup(str);		\
771da177e4SLinus Torvalds 	if (!__str) {						\
781da177e4SLinus Torvalds 		fprintf(stderr, "out of memory\n");		\
791da177e4SLinus Torvalds 		exit(1);					\
801da177e4SLinus Torvalds 	}							\
811da177e4SLinus Torvalds 	__str; })
821da177e4SLinus Torvalds 
831da177e4SLinus Torvalds #endif				/* genksyms.h */
84