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()
243 if (map_to_ns(sym->type) != map_to_ns(type) || in __add_symbol()
244 strcmp(name, sym->name)) in __add_symbol()
249 } else if (sym->type == type && equal_list(sym->defn, defn)) { in __add_symbol()
250 if (!sym->is_declared && sym->is_override) { in __add_symbol()
255 sym->is_declared = 1; in __add_symbol()
256 } else if (sym->is_declared) { in __add_symbol()
258 } else if (sym->is_override && flag_preserve) { in __add_symbol()
263 sym->is_declared = 1; in __add_symbol()
274 hash_del(&sym->hnode); in __add_symbol()
276 free_list(sym->defn, NULL); in __add_symbol()
277 free(sym->name); in __add_symbol()
279 --nsyms; in __add_symbol()
283 sym->name = xstrdup(name); in __add_symbol()
284 sym->type = type; in __add_symbol()
285 sym->defn = defn; in __add_symbol()
286 sym->expansion_trail = NULL; in __add_symbol()
287 sym->visited = NULL; in __add_symbol()
288 sym->is_extern = is_extern; in __add_symbol()
290 hash_add(symbol_hashtable, &sym->hnode, h); in __add_symbol()
292 sym->is_declared = !is_reference; in __add_symbol()
293 sym->status = status; in __add_symbol()
294 sym->is_override = 0; in __add_symbol()
325 /*----------------------------------------------------------------------*/
329 free(node->string); in free_node()
336 struct string_list *next = s->next; in free_list()
347 newnode->string = xstrdup(string); in mk_node()
348 newnode->tag = SYM_NORMAL; in mk_node()
349 newnode->next = NULL; in mk_node()
362 for (n2 = n; n2->next; n2 = n2->next) in concat_list()
364 n2->next = start; in concat_list()
376 newnode->string = xstrdup(node->string); in copy_node()
377 newnode->tag = node->tag; in copy_node()
390 for (start = start->next; start != end; start = start->next) { in copy_list_range()
391 n->next = copy_node(start); in copy_list_range()
392 n = n->next; in copy_list_range()
394 n->next = NULL; in copy_list_range()
401 if (a->tag != b->tag || strcmp(a->string, b->string)) in equal_list()
403 a = a->next; in equal_list()
404 b = b->next; in equal_list()
433 if (node.string >= buffer + sizeof(buffer) - 1) { in read_node()
469 if (sym && sym->tag == SYM_NORMAL && in read_reference()
470 !strcmp(sym->string, "override")) { in read_reference()
478 if (def && def->tag == SYM_NORMAL && in read_reference()
479 !strcmp(def->string, "extern")) { in read_reference()
485 def->next = defn; in read_reference()
489 subsym = add_reference_symbol(sym->string, sym->tag, in read_reference()
491 subsym->is_override = is_override; in read_reference()
498 if (symbol_types[list->tag].n) { in print_node()
499 putc(symbol_types[list->tag].n, f); in print_node()
502 fputs(list->string, f); in print_node()
517 while ((tmp = tmp->next) != NULL) in print_list()
522 tmp2 = e - 1; in print_list()
524 (*tmp2--) = list; in print_list()
525 while ((list = list->next) != NULL) in print_list()
526 *(tmp2--) = list; in print_list()
536 struct string_list *list = sym->defn; in expand_and_crc_sym()
545 while ((tmp = tmp->next) != NULL) in expand_and_crc_sym()
550 tmp2 = e - 1; in expand_and_crc_sym()
552 *(tmp2--) = list; in expand_and_crc_sym()
553 while ((list = list->next) != NULL) in expand_and_crc_sym()
554 *(tmp2--) = list; in expand_and_crc_sym()
561 switch (cur->tag) { in expand_and_crc_sym()
564 fprintf(debugfile, "%s ", cur->string); in expand_and_crc_sym()
565 crc = partial_crc32(cur->string, crc); in expand_and_crc_sym()
571 subsym = find_symbol(cur->string, cur->tag, 0); in expand_and_crc_sym()
573 if (subsym->expansion_trail) { in expand_and_crc_sym()
575 fprintf(debugfile, "%s ", cur->string); in expand_and_crc_sym()
576 crc = partial_crc32(cur->string, crc); in expand_and_crc_sym()
579 subsym->expansion_trail = expansion_trail; in expand_and_crc_sym()
588 subsym = find_symbol(cur->string, cur->tag, 0); in expand_and_crc_sym()
593 symbol_types[cur->tag].name, in expand_and_crc_sym()
594 cur->string); in expand_and_crc_sym()
596 (symbol_types[cur->tag].name), in expand_and_crc_sym()
597 mk_node(cur->string), in expand_and_crc_sym()
602 add_symbol(cur->string, cur->tag, n, 0); in expand_and_crc_sym()
604 if (subsym->expansion_trail) { in expand_and_crc_sym()
607 symbol_types[cur->tag].name, in expand_and_crc_sym()
608 cur->string); in expand_and_crc_sym()
611 crc = partial_crc32(symbol_types[cur->tag].name, in expand_and_crc_sym()
614 crc = partial_crc32(cur->string, crc); in expand_and_crc_sym()
617 subsym->expansion_trail = expansion_trail; in expand_and_crc_sym()
628 if (!sym->visited) { in expand_and_crc_sym()
630 end = &sym->visited; in expand_and_crc_sym()
631 sym->visited = (struct symbol *)-1L; in expand_and_crc_sym()
653 expansion_trail = (struct symbol *)-1L; in export_symbol()
655 sym->expansion_trail = expansion_trail; in export_symbol()
660 while (sym != (struct symbol *)-1L) { in export_symbol()
661 struct symbol *n = sym->expansion_trail; in export_symbol()
663 if (sym->status != STATUS_UNCHANGED) { in export_symbol()
673 print_type_name(sym->type, sym->name); in export_symbol()
674 if (sym->status == STATUS_DEFINED) in export_symbol()
680 sym->expansion_trail = 0; in export_symbol()
692 /*----------------------------------------------------------------------*/
725 fputs("Usage:\n" "genksyms [-adDTwqhVR] > /path/to/.tmp_obj.ver\n" "\n" in genksyms_usage()
726 " -d, --debug Increment the debug level (repeatable)\n" in genksyms_usage()
727 " -D, --dump Dump expanded symbol defs (for debugging only)\n" in genksyms_usage()
728 " -r, --reference file Read reference symbols from a file\n" in genksyms_usage()
729 " -T, --dump-types file Dump expanded types into file\n" in genksyms_usage()
730 " -p, --preserve Preserve reference modversions or fail\n" in genksyms_usage()
731 " -w, --warnings Enable warnings\n" in genksyms_usage()
732 " -q, --quiet Disable warnings (default)\n" in genksyms_usage()
733 " -h, --help Print this message\n" in genksyms_usage()
734 " -V, --version Print the release version\n" in genksyms_usage()
749 {"dump-types", 1, 0, 'T'}, in main()
819 while (visited_symbols != (struct symbol *)-1L) { in main()
822 if (sym->is_override) in main()
824 if (symbol_types[sym->type].n) { in main()
825 putc(symbol_types[sym->type].n, dumpfile); in main()
828 fputs(sym->name, dumpfile); in main()
830 if (sym->is_extern) in main()
832 print_list(dumpfile, sym->defn); in main()
835 visited_symbols = sym->visited; in main()
836 sym->visited = NULL; in main()