diff options
Diffstat (limited to 'scripts/genksyms')
-rw-r--r-- | scripts/genksyms/genksyms.c | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c index f99115ebe925..2a1a3b84beba 100644 --- a/scripts/genksyms/genksyms.c +++ b/scripts/genksyms/genksyms.c | |||
@@ -53,8 +53,15 @@ static int nsyms; | |||
53 | static struct symbol *expansion_trail; | 53 | static struct symbol *expansion_trail; |
54 | static struct symbol *visited_symbols; | 54 | static struct symbol *visited_symbols; |
55 | 55 | ||
56 | static const char *const symbol_type_name[] = { | 56 | static const struct { |
57 | "normal", "typedef", "enum", "struct", "union" | 57 | int n; |
58 | const char *name; | ||
59 | } symbol_types[] = { | ||
60 | [SYM_NORMAL] = { 0, NULL}, | ||
61 | [SYM_TYPEDEF] = {'t', "typedef"}, | ||
62 | [SYM_ENUM] = {'e', "enum"}, | ||
63 | [SYM_STRUCT] = {'s', "struct"}, | ||
64 | [SYM_UNION] = {'u', "union"}, | ||
58 | }; | 65 | }; |
59 | 66 | ||
60 | static int equal_list(struct string_list *a, struct string_list *b); | 67 | static int equal_list(struct string_list *a, struct string_list *b); |
@@ -247,8 +254,12 @@ static struct symbol *__add_symbol(const char *name, enum symbol_type type, | |||
247 | sym->is_override = 0; | 254 | sym->is_override = 0; |
248 | 255 | ||
249 | if (flag_debug) { | 256 | if (flag_debug) { |
250 | fprintf(debugfile, "Defn for %s %s == <", | 257 | if (symbol_types[type].name) |
251 | symbol_type_name[type], name); | 258 | fprintf(debugfile, "Defn for %s %s == <", |
259 | symbol_types[type].name, name); | ||
260 | else | ||
261 | fprintf(debugfile, "Defn for type%d %s == <", | ||
262 | type, name); | ||
252 | if (is_extern) | 263 | if (is_extern) |
253 | fputs("extern ", debugfile); | 264 | fputs("extern ", debugfile); |
254 | print_list(debugfile, defn); | 265 | print_list(debugfile, defn); |
@@ -346,8 +357,8 @@ static struct string_list *read_node(FILE *f) | |||
346 | if (node.string[1] == '#') { | 357 | if (node.string[1] == '#') { |
347 | int n; | 358 | int n; |
348 | 359 | ||
349 | for (n = 0; n < ARRAY_SIZE(symbol_type_name); n++) { | 360 | for (n = 0; n < ARRAY_SIZE(symbol_types); n++) { |
350 | if (node.string[0] == symbol_type_name[n][0]) { | 361 | if (node.string[0] == symbol_types[n].n) { |
351 | node.tag = n; | 362 | node.tag = n; |
352 | node.string += 2; | 363 | node.string += 2; |
353 | return copy_node(&node); | 364 | return copy_node(&node); |
@@ -397,8 +408,8 @@ static void read_reference(FILE *f) | |||
397 | 408 | ||
398 | static void print_node(FILE * f, struct string_list *list) | 409 | static void print_node(FILE * f, struct string_list *list) |
399 | { | 410 | { |
400 | if (list->tag != SYM_NORMAL) { | 411 | if (symbol_types[list->tag].n) { |
401 | putc(symbol_type_name[list->tag][0], f); | 412 | putc(symbol_types[list->tag].n, f); |
402 | putc('#', f); | 413 | putc('#', f); |
403 | } | 414 | } |
404 | fputs(list->string, f); | 415 | fputs(list->string, f); |
@@ -491,11 +502,11 @@ static unsigned long expand_and_crc_sym(struct symbol *sym, unsigned long crc) | |||
491 | struct string_list *n, *t = NULL; | 502 | struct string_list *n, *t = NULL; |
492 | 503 | ||
493 | error_with_pos("expand undefined %s %s", | 504 | error_with_pos("expand undefined %s %s", |
494 | symbol_type_name[cur->tag], | 505 | symbol_types[cur->tag].name, |
495 | cur->string); | 506 | cur->string); |
496 | 507 | ||
497 | n = xmalloc(sizeof(*n)); | 508 | n = xmalloc(sizeof(*n)); |
498 | n->string = xstrdup(symbol_type_name[cur->tag]); | 509 | n->string = xstrdup(symbol_types[cur->tag].name); |
499 | n->tag = SYM_NORMAL; | 510 | n->tag = SYM_NORMAL; |
500 | n->next = t; | 511 | n->next = t; |
501 | t = n; | 512 | t = n; |
@@ -530,11 +541,11 @@ static unsigned long expand_and_crc_sym(struct symbol *sym, unsigned long crc) | |||
530 | if (subsym->expansion_trail) { | 541 | if (subsym->expansion_trail) { |
531 | if (flag_dump_defs) { | 542 | if (flag_dump_defs) { |
532 | fprintf(debugfile, "%s %s ", | 543 | fprintf(debugfile, "%s %s ", |
533 | symbol_type_name[cur->tag], | 544 | symbol_types[cur->tag].name, |
534 | cur->string); | 545 | cur->string); |
535 | } | 546 | } |
536 | 547 | ||
537 | crc = partial_crc32(symbol_type_name[cur->tag], | 548 | crc = partial_crc32(symbol_types[cur->tag].name, |
538 | crc); | 549 | crc); |
539 | crc = partial_crc32_one(' ', crc); | 550 | crc = partial_crc32_one(' ', crc); |
540 | crc = partial_crc32(cur->string, crc); | 551 | crc = partial_crc32(cur->string, crc); |
@@ -624,8 +635,8 @@ static void print_location(void) | |||
624 | 635 | ||
625 | static void print_type_name(enum symbol_type type, const char *name) | 636 | static void print_type_name(enum symbol_type type, const char *name) |
626 | { | 637 | { |
627 | if (type != SYM_NORMAL) | 638 | if (symbol_types[type].name) |
628 | fprintf(stderr, "%s %s", symbol_type_name[type], name); | 639 | fprintf(stderr, "%s %s", symbol_types[type].name, name); |
629 | else | 640 | else |
630 | fprintf(stderr, "%s", name); | 641 | fprintf(stderr, "%s", name); |
631 | } | 642 | } |
@@ -771,8 +782,8 @@ int main(int argc, char **argv) | |||
771 | 782 | ||
772 | if (sym->is_override) | 783 | if (sym->is_override) |
773 | fputs("override ", dumpfile); | 784 | fputs("override ", dumpfile); |
774 | if (sym->type != SYM_NORMAL) { | 785 | if (symbol_types[sym->type].n) { |
775 | putc(symbol_type_name[sym->type][0], dumpfile); | 786 | putc(symbol_types[sym->type].n, dumpfile); |
776 | putc('#', dumpfile); | 787 | putc('#', dumpfile); |
777 | } | 788 | } |
778 | fputs(sym->name, dumpfile); | 789 | fputs(sym->name, dumpfile); |