diff options
| author | Michal Marek <mmarek@suse.cz> | 2011-02-15 09:11:36 -0500 |
|---|---|---|
| committer | Michal Marek <mmarek@suse.cz> | 2011-03-17 10:13:55 -0400 |
| commit | 01762c4ec5f6f62c550304b9c70e824293cefdd0 (patch) | |
| tree | 4a457cec48321f5b591966e56ddaea33733df5cc /scripts/genksyms | |
| parent | 68eb8563a1adf27fae18dde4c95fb796c17563df (diff) | |
genksyms: simplify usage of find_symbol()
Allow searching for symbols of an exact type. The lexer does this and a
subsequent patch will add one more usage.
Signed-off-by: Michal Marek <mmarek@suse.cz>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Diffstat (limited to 'scripts/genksyms')
| -rw-r--r-- | scripts/genksyms/genksyms.c | 10 | ||||
| -rw-r--r-- | scripts/genksyms/genksyms.h | 2 | ||||
| -rw-r--r-- | scripts/genksyms/lex.c_shipped | 3 | ||||
| -rw-r--r-- | scripts/genksyms/lex.l | 3 |
4 files changed, 9 insertions, 9 deletions
diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c index d17b7a2b941f..4a350816a9e8 100644 --- a/scripts/genksyms/genksyms.c +++ b/scripts/genksyms/genksyms.c | |||
| @@ -156,7 +156,7 @@ static enum symbol_type map_to_ns(enum symbol_type t) | |||
| 156 | return t; | 156 | return t; |
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | struct symbol *find_symbol(const char *name, enum symbol_type ns) | 159 | struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact) |
| 160 | { | 160 | { |
| 161 | unsigned long h = crc32(name) % HASH_BUCKETS; | 161 | unsigned long h = crc32(name) % HASH_BUCKETS; |
| 162 | struct symbol *sym; | 162 | struct symbol *sym; |
| @@ -167,6 +167,8 @@ struct symbol *find_symbol(const char *name, enum symbol_type ns) | |||
| 167 | sym->is_declared) | 167 | sym->is_declared) |
| 168 | break; | 168 | break; |
| 169 | 169 | ||
| 170 | if (exact && sym && sym->type != ns) | ||
| 171 | return NULL; | ||
| 170 | return sym; | 172 | return sym; |
| 171 | } | 173 | } |
| 172 | 174 | ||
| @@ -511,7 +513,7 @@ static unsigned long expand_and_crc_sym(struct symbol *sym, unsigned long crc) | |||
| 511 | break; | 513 | break; |
| 512 | 514 | ||
| 513 | case SYM_TYPEDEF: | 515 | case SYM_TYPEDEF: |
| 514 | subsym = find_symbol(cur->string, cur->tag); | 516 | subsym = find_symbol(cur->string, cur->tag, 0); |
| 515 | /* FIXME: Bad reference files can segfault here. */ | 517 | /* FIXME: Bad reference files can segfault here. */ |
| 516 | if (subsym->expansion_trail) { | 518 | if (subsym->expansion_trail) { |
| 517 | if (flag_dump_defs) | 519 | if (flag_dump_defs) |
| @@ -528,7 +530,7 @@ static unsigned long expand_and_crc_sym(struct symbol *sym, unsigned long crc) | |||
| 528 | case SYM_STRUCT: | 530 | case SYM_STRUCT: |
| 529 | case SYM_UNION: | 531 | case SYM_UNION: |
| 530 | case SYM_ENUM: | 532 | case SYM_ENUM: |
| 531 | subsym = find_symbol(cur->string, cur->tag); | 533 | subsym = find_symbol(cur->string, cur->tag, 0); |
| 532 | if (!subsym) { | 534 | if (!subsym) { |
| 533 | struct string_list *n; | 535 | struct string_list *n; |
| 534 | 536 | ||
| @@ -582,7 +584,7 @@ void export_symbol(const char *name) | |||
| 582 | { | 584 | { |
| 583 | struct symbol *sym; | 585 | struct symbol *sym; |
| 584 | 586 | ||
| 585 | sym = find_symbol(name, SYM_NORMAL); | 587 | sym = find_symbol(name, SYM_NORMAL, 0); |
| 586 | if (!sym) | 588 | if (!sym) |
| 587 | error_with_pos("export undefined symbol %s", name); | 589 | error_with_pos("export undefined symbol %s", name); |
| 588 | else { | 590 | else { |
diff --git a/scripts/genksyms/genksyms.h b/scripts/genksyms/genksyms.h index 25c4d40cefc1..9fdafb667e76 100644 --- a/scripts/genksyms/genksyms.h +++ b/scripts/genksyms/genksyms.h | |||
| @@ -58,7 +58,7 @@ typedef struct string_list **yystype; | |||
| 58 | extern int cur_line; | 58 | extern int cur_line; |
| 59 | extern char *cur_filename; | 59 | extern char *cur_filename; |
| 60 | 60 | ||
| 61 | struct symbol *find_symbol(const char *name, enum symbol_type ns); | 61 | struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact); |
| 62 | struct symbol *add_symbol(const char *name, enum symbol_type type, | 62 | struct symbol *add_symbol(const char *name, enum symbol_type type, |
| 63 | struct string_list *defn, int is_extern); | 63 | struct string_list *defn, int is_extern); |
| 64 | void export_symbol(const char *); | 64 | void export_symbol(const char *); |
diff --git a/scripts/genksyms/lex.c_shipped b/scripts/genksyms/lex.c_shipped index d0a0423361fd..f231c0810c60 100644 --- a/scripts/genksyms/lex.c_shipped +++ b/scripts/genksyms/lex.c_shipped | |||
| @@ -2347,8 +2347,7 @@ repeat: | |||
| 2347 | } | 2347 | } |
| 2348 | if (!suppress_type_lookup) | 2348 | if (!suppress_type_lookup) |
| 2349 | { | 2349 | { |
| 2350 | struct symbol *sym = find_symbol(yytext, SYM_TYPEDEF); | 2350 | if (find_symbol(yytext, SYM_TYPEDEF, 1)) |
| 2351 | if (sym && sym->type == SYM_TYPEDEF) | ||
| 2352 | token = TYPE; | 2351 | token = TYPE; |
| 2353 | } | 2352 | } |
| 2354 | } | 2353 | } |
diff --git a/scripts/genksyms/lex.l b/scripts/genksyms/lex.l index 4687b1d147de..c125d06fbd36 100644 --- a/scripts/genksyms/lex.l +++ b/scripts/genksyms/lex.l | |||
| @@ -193,8 +193,7 @@ repeat: | |||
| 193 | } | 193 | } |
| 194 | if (!suppress_type_lookup) | 194 | if (!suppress_type_lookup) |
| 195 | { | 195 | { |
| 196 | struct symbol *sym = find_symbol(yytext, SYM_TYPEDEF); | 196 | if (find_symbol(yytext, SYM_TYPEDEF, 1)) |
| 197 | if (sym && sym->type == SYM_TYPEDEF) | ||
| 198 | token = TYPE; | 197 | token = TYPE; |
| 199 | } | 198 | } |
| 200 | } | 199 | } |
