Lines Matching +full:u +full:- +full:blox

1 // SPDX-License-Identifier: GPL-2.0-or-later
6 Based on original work by Bjorn Ekwall <bj0rn@blox.se>
25 /*----------------------------------------------------------------------*/
27 static HASHTABLE_DEFINE(symbol_hashtable, 1U << 12);
51 [SYM_UNION] = {'u', "union"},
62 /*----------------------------------------------------------------------*/
136 /*----------------------------------------------------------------------*/
158 if (map_to_ns(sym->type) == map_to_ns(ns) && in find_symbol()
159 strcmp(name, sym->name) == 0 && in find_symbol()
160 sym->is_declared) in find_symbol()
164 if (exact && sym && sym->type != ns) in find_symbol()
173 return ((sym->type == SYM_STRUCT || in is_unknown_symbol()
174 sym->type == SYM_UNION || in is_unknown_symbol()
175 sym->type == SYM_ENUM) && in is_unknown_symbol()
176 (defn = sym->defn) && defn->tag == SYM_NORMAL && in is_unknown_symbol()
177 strcmp(defn->string, "}") == 0 && in is_unknown_symbol()
178 (defn = defn->next) && defn->tag == SYM_NORMAL && in is_unknown_symbol()
179 strcmp(defn->string, "UNKNOWN") == 0 && in is_unknown_symbol()
180 (defn = defn->next) && defn->tag == SYM_NORMAL && in is_unknown_symbol()
181 strcmp(defn->string, "{") == 0); in is_unknown_symbol()
230 if (map_to_ns(sym->type) != map_to_ns(type) || in __add_symbol()
231 strcmp(name, sym->name)) in __add_symbol()
236 } else if (sym->type == type && equal_list(sym->defn, defn)) { in __add_symbol()
237 if (!sym->is_declared && sym->is_override) { in __add_symbol()
242 sym->is_declared = 1; in __add_symbol()
243 } else if (sym->is_declared) { in __add_symbol()
245 } else if (sym->is_override && flag_preserve) { in __add_symbol()
250 sym->is_declared = 1; in __add_symbol()
261 hash_del(&sym->hnode); in __add_symbol()
263 free_list(sym->defn, NULL); in __add_symbol()
264 free(sym->name); in __add_symbol()
266 --nsyms; in __add_symbol()
270 sym->name = xstrdup(name); in __add_symbol()
271 sym->type = type; in __add_symbol()
272 sym->defn = defn; in __add_symbol()
273 sym->expansion_trail = NULL; in __add_symbol()
274 sym->visited = NULL; in __add_symbol()
275 sym->is_extern = is_extern; in __add_symbol()
277 hash_add(symbol_hashtable, &sym->hnode, h); in __add_symbol()
279 sym->is_declared = !is_reference; in __add_symbol()
280 sym->status = status; in __add_symbol()
281 sym->is_override = 0; in __add_symbol()
312 /*----------------------------------------------------------------------*/
316 free(node->string); in free_node()
323 struct string_list *next = s->next; in free_list()
334 newnode->string = xstrdup(string); in mk_node()
335 newnode->tag = SYM_NORMAL; in mk_node()
336 newnode->next = NULL; in mk_node()
349 for (n2 = n; n2->next; n2 = n2->next) in concat_list()
351 n2->next = start; in concat_list()
363 newnode->string = xstrdup(node->string); in copy_node()
364 newnode->tag = node->tag; in copy_node()
377 for (start = start->next; start != end; start = start->next) { in copy_list_range()
378 n->next = copy_node(start); in copy_list_range()
379 n = n->next; in copy_list_range()
381 n->next = NULL; in copy_list_range()
388 if (a->tag != b->tag || strcmp(a->string, b->string)) in equal_list()
390 a = a->next; in equal_list()
391 b = b->next; in equal_list()
420 if (node.string >= buffer + sizeof(buffer) - 1) { in read_node()
456 if (sym && sym->tag == SYM_NORMAL && in read_reference()
457 !strcmp(sym->string, "override")) { in read_reference()
465 if (def && def->tag == SYM_NORMAL && in read_reference()
466 !strcmp(def->string, "extern")) { in read_reference()
472 def->next = defn; in read_reference()
476 subsym = add_reference_symbol(sym->string, sym->tag, in read_reference()
478 subsym->is_override = is_override; in read_reference()
485 if (symbol_types[list->tag].n) { in print_node()
486 putc(symbol_types[list->tag].n, f); in print_node()
489 fputs(list->string, f); in print_node()
504 while ((tmp = tmp->next) != NULL) in print_list()
509 tmp2 = e - 1; in print_list()
511 (*tmp2--) = list; in print_list()
512 while ((list = list->next) != NULL) in print_list()
513 *(tmp2--) = list; in print_list()
523 struct string_list *list = sym->defn; in expand_and_crc_sym()
532 while ((tmp = tmp->next) != NULL) in expand_and_crc_sym()
537 tmp2 = e - 1; in expand_and_crc_sym()
539 *(tmp2--) = list; in expand_and_crc_sym()
540 while ((list = list->next) != NULL) in expand_and_crc_sym()
541 *(tmp2--) = list; in expand_and_crc_sym()
548 switch (cur->tag) { in expand_and_crc_sym()
551 fprintf(debugfile, "%s ", cur->string); in expand_and_crc_sym()
552 crc = partial_crc32(cur->string, crc); in expand_and_crc_sym()
558 subsym = find_symbol(cur->string, cur->tag, 0); in expand_and_crc_sym()
560 if (subsym->expansion_trail) { in expand_and_crc_sym()
562 fprintf(debugfile, "%s ", cur->string); in expand_and_crc_sym()
563 crc = partial_crc32(cur->string, crc); in expand_and_crc_sym()
566 subsym->expansion_trail = expansion_trail; in expand_and_crc_sym()
575 subsym = find_symbol(cur->string, cur->tag, 0); in expand_and_crc_sym()
580 symbol_types[cur->tag].name, in expand_and_crc_sym()
581 cur->string); in expand_and_crc_sym()
583 (symbol_types[cur->tag].name), in expand_and_crc_sym()
584 mk_node(cur->string), in expand_and_crc_sym()
589 add_symbol(cur->string, cur->tag, n, 0); in expand_and_crc_sym()
591 if (subsym->expansion_trail) { in expand_and_crc_sym()
594 symbol_types[cur->tag].name, in expand_and_crc_sym()
595 cur->string); in expand_and_crc_sym()
598 crc = partial_crc32(symbol_types[cur->tag].name, in expand_and_crc_sym()
601 crc = partial_crc32(cur->string, crc); in expand_and_crc_sym()
604 subsym->expansion_trail = expansion_trail; in expand_and_crc_sym()
615 if (!sym->visited) { in expand_and_crc_sym()
617 end = &sym->visited; in expand_and_crc_sym()
618 sym->visited = (struct symbol *)-1L; in expand_and_crc_sym()
640 expansion_trail = (struct symbol *)-1L; in export_symbol()
642 sym->expansion_trail = expansion_trail; in export_symbol()
647 while (sym != (struct symbol *)-1L) { in export_symbol()
648 struct symbol *n = sym->expansion_trail; in export_symbol()
650 if (sym->status != STATUS_UNCHANGED) { in export_symbol()
660 print_type_name(sym->type, sym->name); in export_symbol()
661 if (sym->status == STATUS_DEFINED) in export_symbol()
667 sym->expansion_trail = 0; in export_symbol()
679 /*----------------------------------------------------------------------*/
712 fputs("Usage:\n" "genksyms [-adDTwqhVR] > /path/to/.tmp_obj.ver\n" "\n" in genksyms_usage()
713 " -d, --debug Increment the debug level (repeatable)\n" in genksyms_usage()
714 " -D, --dump Dump expanded symbol defs (for debugging only)\n" in genksyms_usage()
715 " -r, --reference file Read reference symbols from a file\n" in genksyms_usage()
716 " -T, --dump-types file Dump expanded types into file\n" in genksyms_usage()
717 " -p, --preserve Preserve reference modversions or fail\n" in genksyms_usage()
718 " -w, --warnings Enable warnings\n" in genksyms_usage()
719 " -q, --quiet Disable warnings (default)\n" in genksyms_usage()
720 " -h, --help Print this message\n" in genksyms_usage()
721 " -V, --version Print the release version\n" in genksyms_usage()
736 {"dump-types", 1, 0, 'T'}, in main()
806 while (visited_symbols != (struct symbol *)-1L) { in main()
809 if (sym->is_override) in main()
811 if (symbol_types[sym->type].n) { in main()
812 putc(symbol_types[sym->type].n, dumpfile); in main()
815 fputs(sym->name, dumpfile); in main()
817 if (sym->is_extern) in main()
819 print_list(dumpfile, sym->defn); in main()
822 visited_symbols = sym->visited; in main()
823 sym->visited = NULL; in main()