mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
68eb8563a1
commit
01762c4ec5
|
@ -156,7 +156,7 @@ static enum symbol_type map_to_ns(enum symbol_type t)
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct symbol *find_symbol(const char *name, enum symbol_type ns)
|
struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact)
|
||||||
{
|
{
|
||||||
unsigned long h = crc32(name) % HASH_BUCKETS;
|
unsigned long h = crc32(name) % HASH_BUCKETS;
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
|
@ -167,6 +167,8 @@ struct symbol *find_symbol(const char *name, enum symbol_type ns)
|
||||||
sym->is_declared)
|
sym->is_declared)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
if (exact && sym && sym->type != ns)
|
||||||
|
return NULL;
|
||||||
return sym;
|
return sym;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -511,7 +513,7 @@ static unsigned long expand_and_crc_sym(struct symbol *sym, unsigned long crc)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SYM_TYPEDEF:
|
case SYM_TYPEDEF:
|
||||||
subsym = find_symbol(cur->string, cur->tag);
|
subsym = find_symbol(cur->string, cur->tag, 0);
|
||||||
/* FIXME: Bad reference files can segfault here. */
|
/* FIXME: Bad reference files can segfault here. */
|
||||||
if (subsym->expansion_trail) {
|
if (subsym->expansion_trail) {
|
||||||
if (flag_dump_defs)
|
if (flag_dump_defs)
|
||||||
|
@ -528,7 +530,7 @@ static unsigned long expand_and_crc_sym(struct symbol *sym, unsigned long crc)
|
||||||
case SYM_STRUCT:
|
case SYM_STRUCT:
|
||||||
case SYM_UNION:
|
case SYM_UNION:
|
||||||
case SYM_ENUM:
|
case SYM_ENUM:
|
||||||
subsym = find_symbol(cur->string, cur->tag);
|
subsym = find_symbol(cur->string, cur->tag, 0);
|
||||||
if (!subsym) {
|
if (!subsym) {
|
||||||
struct string_list *n;
|
struct string_list *n;
|
||||||
|
|
||||||
|
@ -582,7 +584,7 @@ void export_symbol(const char *name)
|
||||||
{
|
{
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
|
|
||||||
sym = find_symbol(name, SYM_NORMAL);
|
sym = find_symbol(name, SYM_NORMAL, 0);
|
||||||
if (!sym)
|
if (!sym)
|
||||||
error_with_pos("export undefined symbol %s", name);
|
error_with_pos("export undefined symbol %s", name);
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -58,7 +58,7 @@ typedef struct string_list **yystype;
|
||||||
extern int cur_line;
|
extern int cur_line;
|
||||||
extern char *cur_filename;
|
extern char *cur_filename;
|
||||||
|
|
||||||
struct symbol *find_symbol(const char *name, enum symbol_type ns);
|
struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact);
|
||||||
struct symbol *add_symbol(const char *name, enum symbol_type type,
|
struct symbol *add_symbol(const char *name, enum symbol_type type,
|
||||||
struct string_list *defn, int is_extern);
|
struct string_list *defn, int is_extern);
|
||||||
void export_symbol(const char *);
|
void export_symbol(const char *);
|
||||||
|
|
|
@ -2347,8 +2347,7 @@ repeat:
|
||||||
}
|
}
|
||||||
if (!suppress_type_lookup)
|
if (!suppress_type_lookup)
|
||||||
{
|
{
|
||||||
struct symbol *sym = find_symbol(yytext, SYM_TYPEDEF);
|
if (find_symbol(yytext, SYM_TYPEDEF, 1))
|
||||||
if (sym && sym->type == SYM_TYPEDEF)
|
|
||||||
token = TYPE;
|
token = TYPE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -193,8 +193,7 @@ repeat:
|
||||||
}
|
}
|
||||||
if (!suppress_type_lookup)
|
if (!suppress_type_lookup)
|
||||||
{
|
{
|
||||||
struct symbol *sym = find_symbol(yytext, SYM_TYPEDEF);
|
if (find_symbol(yytext, SYM_TYPEDEF, 1))
|
||||||
if (sym && sym->type == SYM_TYPEDEF)
|
|
||||||
token = TYPE;
|
token = TYPE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue