aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/genksyms/genksyms.c3
-rw-r--r--scripts/genksyms/genksyms.h4
-rw-r--r--scripts/genksyms/lex.l8
-rw-r--r--scripts/genksyms/parse.y7
4 files changed, 20 insertions, 2 deletions
diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c
index 6d3fda0ce2ae..8a106499ec4f 100644
--- a/scripts/genksyms/genksyms.c
+++ b/scripts/genksyms/genksyms.c
@@ -40,7 +40,8 @@ static struct symbol *symtab[HASH_BUCKETS];
40static FILE *debugfile; 40static FILE *debugfile;
41 41
42int cur_line = 1; 42int cur_line = 1;
43char *cur_filename; 43char *cur_filename, *source_file;
44int in_source_file;
44 45
45static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types, 46static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types,
46 flag_preserve, flag_warnings; 47 flag_preserve, flag_warnings;
diff --git a/scripts/genksyms/genksyms.h b/scripts/genksyms/genksyms.h
index 7ec52ae3846a..3bffdcaaa274 100644
--- a/scripts/genksyms/genksyms.h
+++ b/scripts/genksyms/genksyms.h
@@ -37,6 +37,7 @@ enum symbol_status {
37struct string_list { 37struct string_list {
38 struct string_list *next; 38 struct string_list *next;
39 enum symbol_type tag; 39 enum symbol_type tag;
40 int in_source_file;
40 char *string; 41 char *string;
41}; 42};
42 43
@@ -57,7 +58,8 @@ typedef struct string_list **yystype;
57#define YYSTYPE yystype 58#define YYSTYPE yystype
58 59
59extern int cur_line; 60extern int cur_line;
60extern char *cur_filename; 61extern char *cur_filename, *source_file;
62extern int in_source_file;
61 63
62struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact); 64struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact);
63struct symbol *add_symbol(const char *name, enum symbol_type type, 65struct symbol *add_symbol(const char *name, enum symbol_type type,
diff --git a/scripts/genksyms/lex.l b/scripts/genksyms/lex.l
index 400ae06a70df..f770071719cb 100644
--- a/scripts/genksyms/lex.l
+++ b/scripts/genksyms/lex.l
@@ -116,6 +116,7 @@ MC_TOKEN ([~%^&*+=|<>/-]=)|(&&)|("||")|(->)|(<<)|(>>)
116 cur_node->tag = \ 116 cur_node->tag = \
117 find_symbol(cur_node->string, SYM_ENUM_CONST, 1)?\ 117 find_symbol(cur_node->string, SYM_ENUM_CONST, 1)?\
118 SYM_ENUM_CONST : SYM_NORMAL ; \ 118 SYM_ENUM_CONST : SYM_NORMAL ; \
119 cur_node->in_source_file = in_source_file; \
119 } while (0) 120 } while (0)
120 121
121#define APP _APP(yytext, yyleng) 122#define APP _APP(yytext, yyleng)
@@ -166,6 +167,13 @@ repeat:
166 cur_filename = memcpy(xmalloc(e-file+1), file, e-file+1); 167 cur_filename = memcpy(xmalloc(e-file+1), file, e-file+1);
167 cur_line = atoi(yytext+2); 168 cur_line = atoi(yytext+2);
168 169
170 if (!source_file) {
171 source_file = xstrdup(cur_filename);
172 in_source_file = 1;
173 } else {
174 in_source_file = (strcmp(cur_filename, source_file) == 0);
175 }
176
169 goto repeat; 177 goto repeat;
170 } 178 }
171 179
diff --git a/scripts/genksyms/parse.y b/scripts/genksyms/parse.y
index a783ad4e2b51..23c39998ad86 100644
--- a/scripts/genksyms/parse.y
+++ b/scripts/genksyms/parse.y
@@ -58,6 +58,13 @@ static void record_compound(struct string_list **keyw,
58 enum symbol_type type) 58 enum symbol_type type)
59{ 59{
60 struct string_list *b = *body, *i = *ident, *r; 60 struct string_list *b = *body, *i = *ident, *r;
61
62 if (i->in_source_file) {
63 remove_node(keyw);
64 (*ident)->tag = type;
65 remove_list(body, ident);
66 return;
67 }
61 r = copy_node(i); r->tag = type; 68 r = copy_node(i); r->tag = type;
62 r->next = (*keyw)->next; *body = r; (*keyw)->next = NULL; 69 r->next = (*keyw)->next; *body = r; (*keyw)->next = NULL;
63 add_symbol(i->string, type, b, is_extern); 70 add_symbol(i->string, type, b, is_extern);