UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
syms_group.c
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#ifndef SYMS_GROUP_C
4#define SYMS_GROUP_C
5
7// allen: Syms Group Setup Functions
8
12 SYMS_Group *result = syms_push_array_zero(arena, SYMS_Group, 1);
13 result->arena = arena;
14 return(result);
15}
16
17SYMS_API void
21
22SYMS_API void
25 SYMS_ProfBegin("syms_group_init");
26
27 //- fill in bin
28 SYMS_String8 bin_data = params->bin_data;
29 SYMS_BinAccel *bin = params->bin;
30 if (bin_data.size > 0){
31 if (bin == 0){
33 bin = syms_bin_accel_from_file(group->arena, params->bin_data, bin_file);
34 }
35 }
36 else{
38 }
39
40 //- fill in dbg
41 SYMS_String8 dbg_data = params->dbg_data;
42 SYMS_DbgAccel *dbg = params->dbg;
43 if (dbg_data.size > 0){
44 if (dbg == 0){
46 dbg = syms_dbg_accel_from_file(group->arena, params->dbg_data, dbg_file);
47 }
48 }
49 else{
51 }
52
53 //- arch & address size
54 SYMS_Arch arch = syms_arch_from_bin(bin);
55 if (arch == SYMS_Arch_Null){
56 arch = syms_arch_from_dbg(dbg);
57 }
58 SYMS_U64 address_size = (syms_address_size_from_arch(arch) >> 3);
59
60 //- default vbase
61 SYMS_U64 default_vbase = 0;
62 if (bin->format != SYMS_FileFormat_Null){
63 default_vbase = syms_default_vbase_from_bin(bin);
64 }
65 else{
66 default_vbase = syms_default_vbase_from_dbg(dbg);
67 }
68
69 //- sections
70 SYMS_SecInfoArray sec_info_array = {0};
71 if (bin->format != SYMS_FileFormat_Null){
72 sec_info_array = syms_sec_info_array_from_bin(group->arena, bin_data, bin);
73 }
74 else{
75 sec_info_array = syms_sec_info_array_from_dbg(group->arena, dbg_data, dbg);
76 }
77
78 //- top-level accelerators
79 SYMS_UnitSetAccel *unit_set = syms_unit_set_accel_from_dbg(group->arena, dbg_data, dbg);
80 SYMS_U64 unit_count = syms_unit_count_from_set(unit_set);
81 SYMS_MapAccel *type_map = syms_type_map_from_dbg(group->arena, dbg_data, dbg);
83
84 //- init lanes to single-threaded setup
85 group->lane_arenas = &group->arena;
86 group->lane_count = 1;
87
88 //- fill the group
89 group->bin_data = bin_data;
90 group->bin = bin;
91 group->dbg_data = dbg_data;
92 group->dbg = dbg;
93
94 group->arch = arch;
95 group->address_size = address_size;
96 group->default_vbase = default_vbase;
97 group->sec_info_array = sec_info_array;
98 group->unit_set = unit_set;
99 group->unit_count = unit_count;
100 group->type_mau.map = type_map;
101 group->symbol_mau.map = symbol_map;
102
103 //- setup basic caches
104 group->unit_cache_flags = syms_push_array_zero(group->arena, SYMS_GroupUnitCacheFlags, unit_count);
105 group->units = syms_push_array_zero(group->arena, SYMS_UnitAccel*, unit_count);
106 group->proc_sid_arrays = syms_push_array_zero(group->arena, SYMS_SymbolIDArray, unit_count);
107 group->var_sid_arrays = syms_push_array_zero(group->arena, SYMS_SymbolIDArray, unit_count);
108 group->thread_sid_arrays = syms_push_array_zero(group->arena, SYMS_SymbolIDArray, unit_count);
109 group->type_sid_arrays = syms_push_array_zero(group->arena, SYMS_SymbolIDArray, unit_count);
110 group->file_tables = syms_push_array_zero(group->arena, SYMS_String8Array, unit_count);
111 group->inferred_file_tables = syms_push_array_zero(group->arena, SYMS_String8Array, unit_count);
112 group->line_tables = syms_push_array_zero(group->arena, SYMS_LineParseOut, unit_count);
113 group->unit_proc_maps = syms_push_array_zero(group->arena, SYMS_SpatialMap1D, unit_count);
114 group->unit_var_maps = syms_push_array_zero(group->arena, SYMS_SpatialMap1D, unit_count);
115 group->line_sequence_maps = syms_push_array_zero(group->arena, SYMS_SpatialMap1D, unit_count);
116 group->file_to_line_to_addr_maps = syms_push_array_zero(group->arena, SYMS_FileToLineToAddrMap,
117 unit_count);
118 group->unit_type_maps = syms_push_array_zero(group->arena, SYMS_SymbolNameMap, unit_count);
119
120 //- setup type graph
121 syms_type_graph_init(&group->type_graph,
122 group->arena, &group->string_cons,
123 group->address_size);
124
125 SYMS_ProfEnd();
126}
127
128SYMS_API void
148
149SYMS_API void
164
165SYMS_API void
168 SYMS_ASSERT(group->lane_count == 1);
169 if (lane_count > 1){
170 // allocate the group's lane arenas array
171 if (lane_count > group->lane_max){
172 group->lane_arenas = syms_push_array(group->arena, SYMS_Arena*, lane_count);
173 group->lane_max = lane_count;
174 }
175
176 // fill the group's lane arenas array
177 SYMS_Arena **lane_arena_ptr = group->lane_arenas;
178 *lane_arena_ptr = group->arena;
179 lane_arena_ptr += 1;
180 for (SYMS_U64 i = 1; i < lane_count; i += 1, lane_arena_ptr += 1){
182 }
183 group->lane_count = lane_count;
184 }
185}
186
187SYMS_API void
189 SYMS_U64 lane_count = group->lane_count;
190 if (lane_count > 1){
191 // absorb the lane arenas
192 SYMS_Arena *arena = group->arena;
193 SYMS_Arena **lane_arena_ptr = group->lane_arenas + 1;
194 for (SYMS_U64 i = 1; i < lane_count; i += 1, lane_arena_ptr += 1){
196 *lane_arena_ptr = 0;
197 }
198
199 // drop the lane count
200 group->lane_count = 1;
201 }
202}
203
207 SYMS_Arena *result = 0;
208 if (thread_lane < group->lane_count){
209 result = group->lane_arenas[thread_lane];
210 }
211 return(result);
212}
213
215// allen: Syms Group Getters
216
219 return(group->bin_data);
220}
221
224 return(group->bin);
225}
226
229 return(group->dbg_data);
230}
231
234 return(group->dbg);
235}
236
239 return(group->arch);
240}
241
244 return(group->unit_set);
245}
246
249 SYMS_SecInfoArray result = group->sec_info_array;
250 return(result);
251}
252
255 SYMS_ProfBegin("syms_group_sec_info_from_number");
256 SYMS_SecInfoArray array = group->sec_info_array;
257 SYMS_SecInfo *result = 0;
258 if (1 <= n && n <= array.count){
259 result = &array.sec_info[n - 1];
260 }
261 SYMS_ProfEnd();
262 return(result);
263}
264
267 return(group->unit_count);
268}
269
272 SYMS_UnitInfo result = syms_unit_info_from_uid(group->unit_set, uid);
273 return(result);
274}
275
278 SYMS_UnitNames result = syms_unit_names_from_uid(arena, group->unit_set, uid);
279 return(result);
280}
281
284 SYMS_ProfBegin("syms_group_unit_from_uid");
287 if (1 <= uid && uid <= group->unit_count){
288 SYMS_U64 index = uid - 1;
289 result = group->units[index];
290 if (result == 0){
291 SYMS_UnitAccel *unit = syms_unit_accel_from_uid(arena, group->dbg_data, group->dbg, group->unit_set, uid);
292 group->units[index] = unit;
293 result = unit;
294 }
295 }
296 SYMS_ProfEnd();
297 return(result);
298}
299
302 SYMS_ProfBegin("syms_group_proc_sid_array_from_uid");
304 if (1 <= uid && uid <= group->unit_count){
305 SYMS_U64 index = uid - 1;
306 if ((group->unit_cache_flags[index] & SYMS_GroupUnitCacheFlag_HasProcSidArray) == 0){
309 group->proc_sid_arrays[index] = syms_proc_sid_array_from_unit(arena, unit);
310 group->unit_cache_flags[index] |= SYMS_GroupUnitCacheFlag_HasProcSidArray;
311 }
312 result = &group->proc_sid_arrays[index];
313 }
314 SYMS_ProfEnd();
315 return(result);
316}
317
320 SYMS_ProfBegin("syms_group_var_sid_array_from_uid");
322 if (1 <= uid && uid <= group->unit_count){
323 SYMS_U64 index = uid - 1;
324 if ((group->unit_cache_flags[index] & SYMS_GroupUnitCacheFlag_HasVarSidArray) == 0){
327 group->var_sid_arrays[index] = syms_var_sid_array_from_unit(arena, unit);
328 group->unit_cache_flags[index] |= SYMS_GroupUnitCacheFlag_HasVarSidArray;
329 }
330 result = &group->var_sid_arrays[index];
331 }
332 SYMS_ProfEnd();
333 return(result);
334}
335
338 SYMS_ProfBegin("syms_group_tls_var_sid_array_from_uid");
340 if (1 <= uid && uid < group->unit_count){
341 SYMS_U64 index = uid - 1;
342 if ((group->unit_cache_flags[index] & SYMS_GroupUnitCacheFlag_HasTlsVarSidArray) == 0){
345 group->thread_sid_arrays[index] = syms_tls_var_sid_array_from_unit(arena, unit);
346 group->unit_cache_flags[index] |= SYMS_GroupUnitCacheFlag_HasTlsVarSidArray;
347 }
348 result = &group->thread_sid_arrays[index];
349 }
350 SYMS_ProfEnd();
351 return(result);
352}
353
356 SYMS_ProfBegin("syms_group_type_sid_array_from_uid");
358 if (1 <= uid && uid <= group->unit_count){
359 SYMS_U64 index = uid - 1;
360 if ((group->unit_cache_flags[index] & SYMS_GroupUnitCacheFlag_HasTypeSidArray) == 0){
363 group->type_sid_arrays[index] = syms_type_sid_array_from_unit(arena, unit);
364 group->unit_cache_flags[index] |= SYMS_GroupUnitCacheFlag_HasTypeSidArray;
365 }
366 result = &group->type_sid_arrays[index];
367 }
368 SYMS_ProfEnd();
369 return(result);
370}
371
374 SYMS_ProfBegin("syms_group_file_table_from_uid");
376 if (1 <= uid && uid <= group->unit_count){
377 SYMS_U64 index = uid - 1;
378 if ((group->unit_cache_flags[index] & SYMS_GroupUnitCacheFlag_HasFileTable) == 0){
380 group->file_tables[index] = syms_file_table_from_uid(arena, group->dbg_data, group->dbg,
381 group->unit_set, uid);
382 group->unit_cache_flags[index] |= SYMS_GroupUnitCacheFlag_HasFileTable;
383 }
384 result = &group->file_tables[index];
385 }
386 SYMS_ProfEnd();
387 return(result);
388}
389
392 SYMS_ProfBegin("syms_group_line_parse_from_uid");
394 if (1 <= uid && uid <= group->unit_count){
395 SYMS_U64 index = uid - 1;
396 if ((group->unit_cache_flags[index] & SYMS_GroupUnitCacheFlag_HasLineTable) == 0){
398 group->line_tables[index] = syms_line_parse_from_uid(arena, group->dbg_data, group->dbg, group->unit_set, uid);
399 group->unit_cache_flags[index] |= SYMS_GroupUnitCacheFlag_HasLineTable;
400 }
401 result = &group->line_tables[index];
402 }
403 SYMS_ProfEnd();
404 return(result);
405}
406
409 SYMS_ProfBegin("syms_group_line_table_from_uid");
411 SYMS_LineTable *result = &parse->line_table;
412 SYMS_ProfEnd();
413 return(result);
414}
415
418 SYMS_ProfBegin("syms_group_inferred_file_table_from_uid");
420 if (1 <= uid && uid <= group->unit_count){
421 SYMS_U32 index = uid - 1;
422 if ((group->unit_cache_flags[index] & SYMS_GroupUnitCacheFlag_HasInfFileTable) == 0){
423 // get the line parse
425
426 if (line_parse->file_table.count != 0){
427 result = &line_parse->file_table;
428 }
429 else{
430 // setup
432 SYMS_String8 dbg_data = group->dbg_data;
433 SYMS_DbgAccel *dbg = group->dbg;
434 SYMS_UnitSetAccel *unit_set = group->unit_set;
435
436 // infer names
437 SYMS_U64 count = line_parse->file_id_array.count;
439 {
440 SYMS_FileID *file_id_ptr = line_parse->file_id_array.ids;
441 SYMS_String8 *name_ptr = names;
442 for (SYMS_FileID *opl = file_id_ptr + count;
443 file_id_ptr < opl;
444 file_id_ptr += 1, name_ptr += 1){
445 *name_ptr = syms_file_name_from_id(arena, dbg_data, dbg, unit_set, uid, *file_id_ptr);
446 }
447 }
448
449 // assemble file table
450 SYMS_String8Array file_table = {0};
451 file_table.strings = names;
452 file_table.count = count;
453
454 // fill cache slot
455 group->inferred_file_tables[index] = file_table;
456 group->unit_cache_flags[index] |= SYMS_GroupUnitCacheFlag_HasInfFileTable;
457 }
458 }
459 result = &group->inferred_file_tables[index];
460 }
461 SYMS_ProfEnd();
462 return(result);
463}
464
467 SYMS_ProfBegin("syms_group_file_table_from_uid_with_fallbacks");
469 if (result != 0 && result->count == 0){
471 }
472 SYMS_ProfEnd();
473 return(result);
474}
475
478 if (!group->unit_ranges_is_filled){
480 group->unit_ranges = syms_unit_ranges_from_set(group->arena, group->dbg_data, group->dbg, group->unit_set);
481 group->unit_ranges_is_filled = syms_true;
482 }
483 SYMS_UnitRangeArray result = group->unit_ranges;
484 return(result);
485}
486
489 SYMS_SymbolKind result = syms_symbol_kind_from_sid(group->dbg_data, group->dbg, unit, sid);
490 return(result);
491}
492
495 SYMS_String8 result = syms_symbol_name_from_sid(arena, group->dbg_data, group->dbg, unit, sid);
496 return(result);
497}
498
501 SYMS_U64 result = group->address_size;
502 return(result);
503}
504
507 SYMS_U64 result = group->default_vbase;
508 return(result);
509}
510
514 SYMS_ProfBegin("syms_group_file_name_from_id");
515 SYMS_String8 from_map = syms_file_id_2_name_map_name_from_id(&group->file_id_2_name_map, uid, file_id);
516 SYMS_String8 result = {0};
517 if (from_map.size != 0){
518 if (from_map.str != 0){
519 result = from_map;
520 }
521 }
522 else{
524 SYMS_String8 file_name = syms_file_name_from_id(scratch.arena, group->dbg_data, group->dbg,
525 group->unit_set, uid, file_id);
526 result = syms_string_cons(group->arena, &group->string_cons, file_name);
528 syms_file_id_2_name_map_insert(group->arena, &group->file_id_2_name_map, uid, file_id, result);
529 }
530 SYMS_ProfEnd();
531 return(result);
532}
533
536 if (!group->type_map_unit_is_filled){
539 group->type_mau.unit = type_map_unit;
540 group->type_map_unit_is_filled = syms_true;
541 }
542 SYMS_MapAndUnit *result = &group->type_mau;
543 return(result);
544}
545
548 if (!group->symbol_map_unit_is_filled){
551 group->symbol_mau.unit = symbol_map_unit;
552 group->symbol_map_unit_is_filled = syms_true;
553 }
554 SYMS_MapAndUnit *result = &group->symbol_mau;
555 return(result);
556}
557
560 if (!group->link_name_record_array_is_filled){
564 group->link_name_record_array = array;
565
566 // sort
568
569 group->link_name_record_array_is_filled = syms_true;
570 }
571 SYMS_LinkNameRecArray result = group->link_name_record_array;
572 return(result);
573}
574
577 if (!group->link_map_is_built){
578 group->link_map = syms_link_map_from_dbg(group->arena, group->dbg_data, group->dbg);
579 group->link_map_is_built = !group->link_map_is_built;
580 }
581 SYMS_LinkMapAccel *result = group->link_map;
582 return(result);
583}
584
587 if (!group->link_name_unit_is_filled){
589 group->link_name_unit = syms_group_unit_from_uid(group, uid);
590 group->link_name_unit_is_filled = syms_true;
591 }
592 SYMS_UnitAccel *result = group->link_name_unit;
593 return(result);
594}
595
596SYMS_API void
599
600 // setup stack with full range
601 SYMS_SortNode *stack = 0;
603 syms_sort_node_push(scratch.arena, &stack, &free_stack, 0, count);
604
605 // sort loop
606 for (; stack != 0;){
607 SYMS_SortNode *node = stack;
608 SYMS_StackPop(stack);
609
610 SYMS_U64 first = node->first;
611 SYMS_U64 opl = node->opl;
612
614
615 SYMS_U64 node_count = (opl - first);
616 if (node_count > 2){
617 SYMS_U64 last = opl - 1;
618
619 // swap key to last
620 SYMS_U64 mid = (first + opl)/2;
621 SYMS_Swap(SYMS_LinkNameRec, recs[mid], recs[last]);
622
623 // partition
625 SYMS_U64 key = recs[last].voff;
626 SYMS_U64 j = first;
627 for (SYMS_U64 i = first; i < last; i += 1){
628 SYMS_B32 send_left = (recs[i].voff < key);
629 if (!send_left && recs[i].voff == key){
632 }
633 if (send_left){
634 if (j != i){
635 SYMS_Swap(SYMS_LinkNameRec, recs[i], recs[j]);
636 }
637 j += 1;
638 }
639 }
640
641 // swap last to pivot
642 SYMS_Swap(SYMS_LinkNameRec, recs[j], recs[last]);
643
644 // recurse
645 SYMS_U64 pivot = j;
646 if (pivot - first > 1){
647 syms_sort_node_push(scratch.arena, &stack, &free_stack, first, pivot);
648 }
649 if (opl - (pivot + 1) > 1){
650 syms_sort_node_push(scratch.arena, &stack, &free_stack, pivot + 1, opl);
651 }
652 }
653 else if (node_count == 2){
654 if (recs[first].voff > recs[first + 1].voff){
655 SYMS_Swap(SYMS_LinkNameRec, recs[first], recs[first + 1]);
656 }
657 }
658 }
659
661}
662
663
665// allen: Syms Group Address Mapping Functions
666
669 SYMS_ProfBegin("syms_group_sec_number_from_voff__linear_scan");
670 SYMS_U64 result = 0;
672 SYMS_SecInfo *sec_info = sec_info_array.sec_info;
673 for (SYMS_U64 i = 0; i < sec_info_array.count; i += 1, sec_info += 1){
674 if (sec_info->vrange.min <= voff && voff < sec_info->vrange.max){
675 result = i + 1;
676 break;
677 }
678 }
679 SYMS_ProfEnd();
680 return(result);
681}
682
685 SYMS_ProfBegin("syms_group_sec_number_from_foff__linear_scan");
686 SYMS_U64 result = 0;
688 SYMS_SecInfo *sec_info = sec_info_array.sec_info;
689 for (SYMS_U64 i = 0; i < sec_info_array.count; i += 1, sec_info += 1){
690 if (sec_info->frange.min <= foff && foff < sec_info->frange.max){
691 result = i + 1;
692 break;
693 }
694 }
695 SYMS_ProfEnd();
696 return(result);
697}
698
701 SYMS_ProfBegin("syms_group_voff_from_foff__linear_scan");
702 SYMS_U64Maybe result = {0};
705 if (info != 0){
706 result.valid = syms_true;
707 result.u64 = foff - info->frange.min + info->vrange.min;
708 }
709 SYMS_ProfEnd();
710 return(result);
711}
712
715 SYMS_ProfBegin("syms_group_foff_from_voff__linear_scan");
716 SYMS_U64Maybe result = {0};
719 if (info != 0){
720 result.valid = syms_true;
721 result.u64 = voff - info->vrange.min + info->frange.min;
722 }
723 SYMS_ProfEnd();
724 return(result);
725}
726
729 SYMS_ProfBegin("syms_group_uid_from_voff__linear_scan");
730 SYMS_UnitID result = 0;
732 SYMS_U64 range_count = unit_ranges.count;
733 SYMS_UnitRange *unit_range = unit_ranges.ranges;
734 for (SYMS_U64 i = 0; i < range_count; i += 1, unit_range += 1){
735 if (unit_range->vrange.min <= virt_off && virt_off < unit_range->vrange.max){
736 result = unit_range->uid;
737 break;
738 }
739 }
740 SYMS_ProfEnd();
741 return(result);
742}
743
746 SYMS_ProfBegin("syms_group_proc_sid_from_uid_voff__linear_scan");
748
749 SYMS_String8 dbg_data = group->dbg_data;
750 SYMS_DbgAccel *dbg = group->dbg;
753 SYMS_U64 count = sid_array->count;
754
755 SYMS_SymbolID result = {0};
756 SYMS_SymbolID *sid_ptr = sid_array->ids;
757 for (SYMS_U64 i = 0; i < count; i += 1, sid_ptr += 1){
758 SYMS_SymbolID sid = *sid_ptr;
761 if (kind == SYMS_SymbolKind_Procedure){
762 SYMS_U64RangeArray ranges = syms_scope_vranges_from_sid(scratch.arena, dbg_data, dbg, unit, sid);
763 SYMS_U64Range *range = ranges.ranges;
764 for (SYMS_U64 i = 0; i < ranges.count; i += 1, range += 1){
765 if (range->min <= voff && voff < range->max){
766 hit = syms_true;
767 break;
768 }
769 }
771 }
772 if (hit){
773 result = sid;
774 break;
775 }
776 }
777
779 SYMS_ProfEnd();
780 return(result);
781}
782
785 SYMS_ProfBegin("syms_group_line_from_uid_voff__linear_scan");
786 SYMS_Line result = {0};
789 SYMS_Line *line_array = line_table->line_array;
790 SYMS_U64 seq_count = line_table->sequence_count;
791 for (SYMS_U64 i = 0; i < seq_count; i += 1){
792 // get sequence range & inc
793 SYMS_U64 first = *seq_index_ptr;
794 seq_index_ptr += 1;
795 SYMS_U64 opl = *seq_index_ptr;
796
797 // check sequence range
798 SYMS_U64 last = opl - 1;
799 SYMS_U64 first_voff = line_array[first].voff;
800 SYMS_U64 opl_voff = line_array[last].voff;
801 if (first_voff <= voff && voff < opl_voff){
802
803 // get the line
804 result = syms_line_from_sequence_voff(line_table, i + 1, voff);
805 }
806 }
807 SYMS_ProfEnd();
808 return(result);
809}
810
813 SYMS_FileID file_id, SYMS_U32 line){
814 SYMS_ProfBegin("syms_group_vranges_from_uid_line__linear_scan");
815
816 SYMS_ASSERT(arena != group->arena);
817 SYMS_U64RangeList result = {0};
820 SYMS_Line *line_array = line_table->line_array;
821 SYMS_U64 seq_count = line_table->sequence_count;
822 for (SYMS_U64 i = 0; i < seq_count; i += 1){
823 // get sequence range & inc
824 SYMS_U64 first = *seq_index_ptr;
825 seq_index_ptr += 1;
826 SYMS_U64 opl = *seq_index_ptr;
827
828 // iterate lines
829 SYMS_U64 last = opl - 1;
830 SYMS_Line *line_ptr = line_array + first;
831 for (SYMS_U64 j = first; j < last; j += 1, line_ptr += 1){
832 if (line_ptr->src_coord.file_id == file_id &&
833 line_ptr->src_coord.line == line){
834 SYMS_U64Range range = syms_make_u64_range(line_ptr->voff, (line_ptr + 1)->voff);
835 syms_u64_range_list_push(arena, &result, range);
836 }
837 }
838 }
839
840 SYMS_ProfEnd();
841 return(result);
842}
843
844//- map getters
847 SYMS_ProfBegin("syms_group_sec_map_v");
848 if (!group->sec_map_v_is_built){
850
851 //- fill spatial map array
853 SYMS_SecInfo *sec_info = sec_array.sec_info;
856 for (SYMS_U64 i = 0; i < sec_array.count; i += 1, sec_info += 1){
857 if (sec_info->vrange.min < sec_info->vrange.max){
858 range_ptr->range = sec_info->vrange;
859 range_ptr->val = i + 1;
860 range_ptr += 1;
861 }
862 }
865
866 //- sort
869 }
870
871 //- assemble map
872 SYMS_SpatialMap1D map = {ranges, final_count};
873
874 //- save to group
875 group->sec_map_v_is_built = syms_true;
876 group->sec_map_v = map;
877
879 }
880
881 SYMS_SpatialMap1D *result = &group->sec_map_v;
882
883 SYMS_ProfEnd();
884 return(result);
885}
886
889 SYMS_ProfBegin("syms_group_sec_map_f");
890 if (!group->sec_map_f_is_built){
892
893 //- fill spatial map array
895 SYMS_SecInfo *sec_info = sec_array.sec_info;
898 for (SYMS_U64 i = 0; i < sec_array.count; i += 1, sec_info += 1){
899 if (sec_info->frange.min < sec_info->frange.max){
900 range_ptr->range = sec_info->frange;
901 range_ptr->val = i + 1;
902 range_ptr += 1;
903 }
904 }
907
908 //- sort
911 }
912
913 //- assemble map
914 SYMS_SpatialMap1D map = {ranges, final_count};
915
916 //- save to group
917 group->sec_map_f_is_built = syms_true;
918 group->sec_map_f = map;
919
921 }
922
923 SYMS_SpatialMap1D *result = &group->sec_map_v;
924
925 SYMS_ProfEnd();
926 return(result);
927}
928
931 SYMS_ProfBegin("syms_group_unit_map");
932 if (!group->unit_map_is_built){
934
935 //- fill spatial map array
937 SYMS_U64 count = unit_ranges.count;
938 SYMS_UnitRange *unit_range = unit_ranges.ranges;
941 for (SYMS_U64 i = 0; i < count; i += 1, unit_range += 1){
942 if (unit_range->vrange.min < unit_range->vrange.max){
943 range_ptr->range = unit_range->vrange;
944 range_ptr->val = unit_range->uid;
945 range_ptr += 1;
946 }
947 }
950
951 //- sort
954 }
955
956 //- assemble map
957 SYMS_SpatialMap1D map = {ranges, final_count};
958
959 //- save to group
960 group->unit_map_is_built = syms_true;
961 group->unit_map = map;
962
964 }
965
966 SYMS_SpatialMap1D *result = &group->unit_map;
967
968 SYMS_ProfEnd();
969 return(result);
970}
971
974 SYMS_ProfBegin("syms_group_proc_map_from_uid");
975 SYMS_U64 index = uid - 1;
976 if (index < group->unit_count &&
977 (group->unit_cache_flags[index] & SYMS_GroupUnitCacheFlag_HasProcMap) == 0){
979 SYMS_String8 dbg_data = group->dbg_data;
980 SYMS_DbgAccel *dbg = group->dbg;
983
985 unit, sid_array);
986
988
989 //- save to group
990 group->unit_cache_flags[index] |= SYMS_GroupUnitCacheFlag_HasProcMap;
991 group->unit_proc_maps[index] = map;
992 }
993
995 if (index < group->unit_count){
996 result = &group->unit_proc_maps[index];
997 }
998
999 SYMS_ProfEnd();
1000 return(result);
1001}
1002
1005 SYMS_ProfBegin("syms_group_line_sequence_map_from_uid");
1006 SYMS_U64 index = uid - 1;
1007 if (index < group->unit_count &&
1008 (group->unit_cache_flags[index] & SYMS_GroupUnitCacheFlag_HasLineSeqMap) == 0){
1009 //- fill spatial map array
1012 SYMS_SpatialMap1D map = syms_spatial_map_from_line_table(arena, line_table);
1013
1014 //- save to group
1015 group->unit_cache_flags[index] |= SYMS_GroupUnitCacheFlag_HasLineSeqMap;
1016 group->line_sequence_maps[index] = map;
1017
1019 }
1020
1022 if (index < group->unit_count){
1023 result = &group->line_sequence_maps[index];
1024 }
1025
1026 SYMS_ProfEnd();
1027 return(result);
1028}
1029
1030SYMS_API void
1032 SYMS_ProfBegin("syms_group_fetch_line_to_addr_maps_from_uid");
1033
1034 SYMS_U64 index = uid - 1;
1035 if (index < group->unit_count &&
1036 (group->unit_cache_flags[index] & SYMS_GroupUnitCacheFlag_HasLineToAddrMap) == 0){
1037 //- get buckets
1041
1042 //- save to group
1043 group->unit_cache_flags[index] |= SYMS_GroupUnitCacheFlag_HasLineToAddrMap;
1044 group->file_to_line_to_addr_maps[index] = map;
1045 }
1046
1047 SYMS_ProfEnd();
1048}
1049
1052 SYMS_ProfBegin("syms_group_line_to_addr_map_from_uid_file_id");
1054
1055 //- get line-to-addr map from file_id
1057 SYMS_U64 index = uid - 1;
1058 if (index < group->unit_count){
1059 SYMS_FileToLineToAddrMap *buckets = &group->file_to_line_to_addr_maps[index];
1060 if (buckets->bucket_count > 0){
1061 result = syms_line_to_addr_map_lookup_file_id(buckets, file_id);
1062 }
1063 }
1064
1065 SYMS_ProfEnd();
1066 return(result);
1067}
1068
1071 SYMS_ProfBegin("syms_group_type_map_from_uid");
1072
1073 SYMS_SymbolNameMap *result = 0;
1074
1075 SYMS_U64 index = uid - 1;
1076 if (index < group->unit_count){
1077 if ((group->unit_cache_flags[index] & SYMS_GroupUnitCacheFlag_HasTypeNameMap) == 0){
1079
1080 // grab group members
1081 SYMS_String8 dbg_data = group->dbg_data;
1082 SYMS_DbgAccel *dbg = group->dbg;
1083
1084 // grab unit
1086
1087 // assemble loose map
1090 SYMS_SymbolID *sid_opl = type_array->ids + type_array->count;
1092 for (;sid_ptr < sid_opl; sid_ptr += 1){
1093 SYMS_String8 name = syms_symbol_name_from_sid(scratch.arena, dbg_data, dbg, unit, *sid_ptr);
1095 }
1096
1097 //- bake the map
1098 group->unit_type_maps[index] = syms_symbol_name_map_bake(group->arena, &loose);
1099 group->unit_cache_flags[index] |= SYMS_GroupUnitCacheFlag_HasTypeNameMap;
1100
1102 }
1103
1104 result = &group->unit_type_maps[index];
1105 }
1106
1107 SYMS_ProfEnd();
1108 return(result);
1109}
1110
1111
1115 SYMS_ProfBegin("syms_group_link_name_spatial_map");
1116 if (!group->link_name_spatial_map_is_built){
1117 SYMS_Arena *arena = group->arena;
1118
1119 //- fill spatial map array
1125 for (SYMS_U64 i = 0; i < guess_count; i += 1, rec_ptr += 1){
1126 SYMS_U64 min = rec_ptr->voff;
1127 SYMS_U64 max = SYMS_U64_MAX;
1128 if (i + 1 < guess_count){
1129 max = (rec_ptr + 1)->voff;
1130 }
1131 SYMS_ASSERT(min <= max);
1132 if (min < max){
1133 range_ptr->range.min = min;
1134 range_ptr->range.max = max;
1135 range_ptr->val = i + 1;
1136 range_ptr += 1;
1137 }
1138 }
1139
1140 //- shrink the allocated array
1143
1144 //- assemble map
1145 SYMS_SpatialMap1D map = {ranges, actual_count};
1146
1147 //- save to group
1148 group->link_name_spatial_map_is_built = syms_true;
1149 group->link_name_spatial_map = map;
1150
1152 }
1153
1154 SYMS_SpatialMap1D *result = &group->link_name_spatial_map;
1155 SYMS_ProfEnd();
1156 return(result);
1157}
1158
1159//- accelerated versions
1162 SYMS_ProfBegin("syms_group_sec_number_from_voff__accelerated");
1165 SYMS_ProfEnd();
1166 return(result);
1167}
1168
1171 SYMS_ProfBegin("syms_group_sec_number_from_foff__accelerated");
1174 SYMS_ProfEnd();
1175 return(result);
1176}
1177
1180 SYMS_ProfBegin("syms_group_sec_voff_from_foff__accelerated");
1181 SYMS_U64Maybe result = {0};
1184 if (info != 0){
1185 result.valid = syms_true;
1186 result.u64 = foff - info->frange.min + info->vrange.min;
1187 }
1188 SYMS_ProfEnd();
1189 return(result);
1190}
1191
1194 SYMS_ProfBegin("syms_group_sec_foff_from_voff__accelerated");
1195 SYMS_U64Maybe result = {0};
1198 if (info != 0){
1199 result.valid = syms_true;
1200 result.u64 = voff - info->vrange.min + info->frange.min;
1201 }
1202 SYMS_ProfEnd();
1203 return(result);
1204}
1205
1208 SYMS_ProfBegin("syms_group_uid_from_voff__accelerated");
1211 SYMS_ProfEnd();
1212 return(result);
1213}
1214
1217 SYMS_ProfBegin("syms_group_proc_sid_from_uid_voff__accelerated");
1220 SYMS_ProfEnd();
1221 return(result);
1222}
1223
1226 SYMS_ProfBegin("syms_group_line_from_uid_voff__accelerated");
1229
1231 SYMS_Line result = syms_line_from_sequence_voff(line_table, sequence_number, voff);
1232
1233 SYMS_ProfEnd();
1234 return(result);
1235}
1236
1239 SYMS_FileID file_id, SYMS_U32 line){
1240 SYMS_ProfBegin("syms_group_vranges_from_uid_line__accelerated");
1242
1245
1246 SYMS_U64RangeArray result = {0};
1247 if (actual_line == line){
1248 result = ranges;
1249 }
1250
1251 SYMS_ProfEnd();
1252 return(result);
1253}
1254
1255//- higher level mapping functions
1256
1259 SYMS_ResolvedLine result = {0};
1260
1262 SYMS_U64RangeArray ranges = syms_scope_vranges_from_sid(scratch.arena, group->dbg_data, group->dbg, unit, sid);
1263 if (ranges.count > 0){
1264 SYMS_UnitID uid = syms_uid_from_unit(unit);
1265 SYMS_U64 voff = ranges.ranges[0].min;
1267 if (line.src_coord.file_id != 0){
1268 SYMS_SrcCoord *src_coord = &line.src_coord;
1269 SYMS_String8 file_name = syms_group_file_name_from_id(group, uid, src_coord->file_id);
1270
1271 result.file_name = file_name;
1272 result.line = src_coord->line;
1273 result.col = src_coord->col;
1274 result.voff = voff;
1275 }
1276 }
1278
1279 return(result);
1280}
1281
1282
1284// allen: Syms Group Name Mapping Functions
1285
1288 SYMS_USID result = {0};
1291 if (syms_accel_is_good(map->map)){
1292 SYMS_USIDList list = syms_usid_list_from_string(scratch.arena, group->dbg_data, group->dbg, map, name);
1293 if (list.first != 0){
1294 result = list.first->usid;
1295 }
1296 }
1298 return(result);
1299}
1300
1303 SYMS_USIDList result = {0};
1305 if (syms_accel_is_good(map->map)){
1306 result = syms_usid_list_from_string(arena, group->dbg_data, group->dbg, map, name);
1307 }
1308 return(result);
1309}
1310
1318
1324 SYMS_SrcCoord *src_coord = &line.src_coord;
1325 SYMS_String8 file_name = syms_group_file_name_from_id(group, uid, src_coord->file_id);
1326
1327 SYMS_ResolvedLine result = {0};
1328 result.file_name = file_name;
1329 result.line = src_coord->line;
1330 result.col = src_coord->col;
1331 result.voff = voff;
1332 return(result);
1333}
1334
1335
1337// allen: Syms Group Type Graph
1338
1341 SYMS_TypeGraph *result = &group->type_graph;
1342 return(result);
1343}
1344
1345
1347// allen: Syms Group Varaible Address Mapping Functions
1348
1352 SYMS_ProfBegin("syms_group_var_sid_from_uid_voff__linear_scan");
1353
1354 SYMS_String8 dbg_data = group->dbg_data;
1355 SYMS_DbgAccel *dbg = group->dbg;
1358 SYMS_U64 count = sid_array->count;
1359
1360 SYMS_SymbolID result = {0};
1361 SYMS_SymbolID *sid_ptr = sid_array->ids;
1362 for (SYMS_U64 i = 0; i < count; i += 1, sid_ptr += 1){
1363 SYMS_SymbolID sid = *sid_ptr;
1367 SYMS_U64 var_voff = syms_voff_from_var_sid(dbg_data, dbg, unit, sid);
1368 if (var_voff == voff){
1369 hit = syms_true;
1370 }
1371 else if (var_voff < voff){
1372 SYMS_USID var_type_usid = syms_type_from_var_sid(dbg_data, dbg, unit, sid);
1374 if (voff < var_voff + var_size){
1375 hit = syms_true;
1376 }
1377 }
1378 }
1379 if (hit){
1380 result = sid;
1381 break;
1382 }
1383 }
1384
1385 SYMS_ProfEnd();
1386 return(result);
1387}
1388
1392 SYMS_ProfBegin("syms_group_var_map_from_uid");
1393 SYMS_U64 index = uid - 1;
1394 if (index < group->unit_count &&
1395 (group->unit_cache_flags[index] & SYMS_GroupUnitCacheFlag_HasVarMap) == 0){
1396 //- build loose map
1399
1400 SYMS_String8 dbg_data = group->dbg_data;
1401 SYMS_DbgAccel *dbg = group->dbg;
1404 SYMS_U64 count = sid_array->count;
1405
1406 SYMS_SymbolID *sid_ptr = sid_array->ids;
1407 for (SYMS_U64 n = 1; n <= count; n += 1, sid_ptr += 1){
1408 SYMS_SymbolID sid = *sid_ptr;
1411 SYMS_U64 var_virt_off = syms_voff_from_var_sid(dbg_data, dbg, unit, sid);
1412 SYMS_USID var_type_usid = syms_type_from_var_sid(dbg_data, dbg, unit, sid);
1416 }
1417 }
1418
1419 //- bake tight map
1422
1423 //- save to group
1424 group->unit_cache_flags[index] |= SYMS_GroupUnitCacheFlag_HasVarMap;
1425 group->unit_var_maps[index] = map;
1426
1428
1430 }
1431
1433 if (index < group->unit_count){
1434 result = &group->unit_var_maps[index];
1435 }
1436
1437 SYMS_ProfEnd();
1438 return(result);
1439}
1440
1444 SYMS_ProfBegin("syms_group_var_sid_from_uid_voff__accelerated");
1447 SYMS_ProfEnd();
1448 return(result);
1449}
1450
1451
1453// allen: Syms Group Type Graph Functions
1454
1458 SYMS_ProfBegin("syms_group_type_from_usid");
1459
1460 SYMS_TypeGraph *graph = &group->type_graph;
1461
1462 SYMS_TypeParseParams params = {0};
1463 params.data = group->dbg_data;
1464 params.dbg = group->dbg;
1465 params.unit_set = group->unit_set;
1466 params.unit = syms_group_unit_from_uid(group, usid.uid);
1467 params.uid = usid.uid;
1469
1470 SYMS_TypeNode *result = syms_type_from_dbg_sid(graph, &params, usid.sid);
1471 SYMS_ProfEnd();
1472 return(result);
1473}
1474
1478 SYMS_ProfBegin("syms_group_type_size_from_usid");
1480 SYMS_TypeInfo type_info = syms_type_info_from_sid(group->dbg_data, group->dbg, unit, usid.sid);
1481 SYMS_U64 result = 0;
1482 switch (type_info.reported_size_interp){
1484 {
1485 result = type_info.reported_size;
1486 }break;
1488 {
1490 result = element_size*type_info.reported_size;
1491 }break;
1492 default:
1493 {
1495 result = type_node->byte_size;
1496 }break;
1497 }
1498 SYMS_ProfEnd();
1499 return(result);
1500}
1501
1504 SYMS_USIDList result = {0};
1506 if (syms_accel_is_good(map_unit->map)){
1507 result = syms_usid_list_from_string(arena, group->dbg_data, group->dbg, map_unit, name);
1508 }
1509 return(result);
1510}
1511
1515 SYMS_SymbolIDArray result = {0};
1516 if (map != 0){
1517 result = syms_symbol_name_map_array_from_string(map, name);
1518 }
1519 return(result);
1520}
1521
1524 SYMS_ProfBegin("syms_group_type_members_from_type");
1525
1527
1528 // ensure members equipped
1529 if (has_members){
1530 SYMS_UnitID uid = 0;
1531 if (type->unique != 0){
1532 uid = type->unique->usid.uid;
1533 }
1534
1535 if (uid != 0){
1536 SYMS_TypeParseParams params = {0};
1537 params.data = group->dbg_data;
1538 params.dbg = group->dbg;
1539 params.unit_set = group->unit_set;
1540 params.unit = syms_group_unit_from_uid(group, uid);
1541 params.uid = uid;
1542
1543 syms_type_equip_members_from_dbg(&group->type_graph, &params, type);
1544 }
1545 }
1546
1547 // fill result
1548 SYMS_TypeMemberArray result = {0};
1549 if (has_members && type->lazy_ptr != 0){
1550 result = *(SYMS_TypeMemberArray*)type->lazy_ptr;
1551 }
1552
1553 SYMS_ProfEnd();
1554 return(result);
1555}
1556
1559 SYMS_ProfBegin("syms_group_type_enum_members_from_type");
1560
1562
1563 // ensure members equipped
1564 if (has_members){
1565 SYMS_UnitID uid = 0;
1566 if (type->unique != 0){
1567 uid = type->unique->usid.uid;
1568 }
1569
1570 if (uid != 0){
1571 SYMS_TypeParseParams params = {0};
1572 params.data = group->dbg_data;
1573 params.dbg = group->dbg;
1574 params.unit_set = group->unit_set;
1575 params.unit = syms_group_unit_from_uid(group, uid);
1576 params.uid = uid;
1577
1578 syms_type_equip_members_from_dbg(&group->type_graph, &params, type);
1579 }
1580 }
1581
1582 // fill result
1583 SYMS_EnumMemberArray result = {0};
1584 if (has_members && type->lazy_ptr != 0){
1585 result = *(SYMS_EnumMemberArray*)type->lazy_ptr;
1586 }
1587
1588 SYMS_ProfEnd();
1589 return(result);
1590}
1591
1593//~ allen: Syms File Map
1594
1597 SYMS_ProfBegin("syms_group_file_map");
1598 if (!group->name_2_file_id_map_is_built){
1601
1602 //- build loose file map
1603 SYMS_U64 unit_count = group->unit_count;
1605 for (SYMS_UnitID uid = 1; uid <= unit_count; uid += 1){
1607
1608 // build from file_id_array
1609 if (line_parse->file_id_array.count != 0){
1611 SYMS_U64 count = SYMS_MIN(line_parse->file_id_array.count, inferred->count);
1612 SYMS_FileID *file_id_ptr = line_parse->file_id_array.ids;
1613 SYMS_FileID *opl = file_id_ptr + count;
1614 SYMS_String8 *name_ptr = inferred->strings;
1615 for (;file_id_ptr < opl; file_id_ptr += 1, name_ptr += 1){
1616 SYMS_String8 name_cons = syms_string_cons(group->arena, &group->string_cons, *name_ptr);
1618 }
1619 }
1620
1621 // build from file_table
1622 else{
1624 SYMS_FileID file_id = 1;
1625 for (SYMS_String8 *name_ptr = file_table->strings, *opl = file_table->strings + file_table->count;
1626 name_ptr < opl;
1627 name_ptr += 1, file_id += 1){
1628 SYMS_String8 name_cons = syms_string_cons(group->arena, &group->string_cons, *name_ptr);
1630 }
1631 }
1632 }
1633
1634 //- bake
1635 SYMS_Name2FileIDMap name_2_file_id_map = syms_name_2_file_id_map_bake(group->arena, &loose);
1636
1637 //- save to group
1638 group->name_2_file_id_map_is_built = syms_true;
1639 group->name_2_file_id_map = name_2_file_id_map;
1640
1642 }
1643
1644 SYMS_Name2FileIDMap *result = &group->name_2_file_id_map;
1645
1646 SYMS_ProfEnd();
1647 return(result);
1648}
1649
1650#endif //SYMS_GROUP_C
OODEFFUNC typedef const char int line
Definition oodle2.h:678
EGLSurface EGLint const EGLint * names
Definition AndroidOpenGLFunctions.h:11
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition syms_base.h:402
Definition syms_debug_info.h:346
Definition syms_data_structures.h:253
SYMS_U64 bucket_count
Definition syms_data_structures.h:255
Definition syms_group.h:26
SYMS_Arena * arena
Definition syms_group.h:27
Definition syms_debug_info.h:164
Definition syms_debug_info.h:153
SYMS_Line * line_array
Definition syms_debug_info.h:160
SYMS_U64 * sequence_index_array
Definition syms_debug_info.h:157
SYMS_U64 sequence_count
Definition syms_debug_info.h:158
Definition syms_data_structures.h:237
Definition syms_debug_info.h:136
SYMS_U64 voff
Definition syms_debug_info.h:138
Definition syms_debug_info.h:390
Definition syms_debug_info.h:385
SYMS_U64 voff
Definition syms_debug_info.h:387
Definition syms_parser.h:69
SYMS_MapAccel * map
Definition syms_parser.h:70
Definition syms_data_structures.h:165
Definition syms_data_structures.h:145
Definition syms_parser.h:74
SYMS_String8 dbg_data
Definition syms_parser.h:76
SYMS_String8 bin_data
Definition syms_parser.h:75
SYMS_DbgAccel * dbg
Definition syms_parser.h:78
SYMS_BinAccel * bin
Definition syms_parser.h:77
Definition syms_debug_info.h:141
SYMS_U32 col
Definition syms_debug_info.h:144
SYMS_String8 file_name
Definition syms_debug_info.h:142
SYMS_U32 line
Definition syms_debug_info.h:143
SYMS_U64 voff
Definition syms_debug_info.h:145
Definition syms_debug_info.h:21
SYMS_U64 count
Definition syms_debug_info.h:23
SYMS_SecInfo * sec_info
Definition syms_debug_info.h:22
Definition syms_debug_info.h:15
SYMS_U64Range vrange
Definition syms_debug_info.h:17
SYMS_U64Range frange
Definition syms_debug_info.h:18
Definition syms_base.h:334
SYMS_U64 opl
Definition syms_base.h:337
SYMS_U64 first
Definition syms_base.h:336
Definition syms_data_structures.h:78
Definition syms_data_structures.h:59
SYMS_U64Range range
Definition syms_data_structures.h:60
Definition syms_data_structures.h:65
Definition syms_debug_info.h:130
SYMS_FileID file_id
Definition syms_debug_info.h:131
SYMS_U32 line
Definition syms_debug_info.h:132
SYMS_U32 col
Definition syms_debug_info.h:133
Definition syms_base.h:313
SYMS_String8 * strings
Definition syms_base.h:314
SYMS_U64 count
Definition syms_base.h:315
Definition syms_base.h:296
SYMS_U64 size
Definition syms_base.h:298
Definition syms_debug_info.h:228
SYMS_SymbolID * ids
Definition syms_debug_info.h:229
SYMS_U64 count
Definition syms_debug_info.h:230
Definition syms_data_structures.h:226
Definition syms_data_structures.h:211
Definition syms_type_graph.h:153
Definition syms_debug_info.h:264
Definition syms_type_graph.h:103
Definition syms_type_graph.h:108
Definition syms_type_graph.h:180
SYMS_MapAndUnit * type_map
Definition syms_type_graph.h:188
SYMS_UnitSetAccel * unit_set
Definition syms_type_graph.h:183
SYMS_UnitID uid
Definition syms_type_graph.h:185
SYMS_DbgAccel * dbg
Definition syms_type_graph.h:182
SYMS_UnitAccel * unit
Definition syms_type_graph.h:184
SYMS_String8 data
Definition syms_type_graph.h:181
Definition syms_base.h:254
SYMS_U64 u64
Definition syms_base.h:256
SYMS_B32 valid
Definition syms_base.h:255
Definition syms_base.h:280
SYMS_U64Range * ranges
Definition syms_base.h:281
SYMS_U64 count
Definition syms_base.h:282
Definition syms_base.h:274
Definition syms_base.h:264
SYMS_U64 max
Definition syms_base.h:266
SYMS_U64 min
Definition syms_base.h:265
Definition syms_debug_info.h:244
Definition syms_debug_info.h:234
SYMS_UnitID uid
Definition syms_debug_info.h:235
SYMS_SymbolID sid
Definition syms_debug_info.h:236
Definition syms_debug_info.h:79
Definition syms_debug_info.h:84
Definition syms_debug_info.h:97
SYMS_U64 count
Definition syms_debug_info.h:99
SYMS_UnitRange * ranges
Definition syms_debug_info.h:98
Definition syms_debug_info.h:92
SYMS_UnitID uid
Definition syms_debug_info.h:94
SYMS_API SYMS_SortNode * syms_sort_node_push(SYMS_Arena *arena, SYMS_SortNode **stack, SYMS_SortNode **free_stack, SYMS_U64 first, SYMS_U64 opl)
Definition syms_base.c:710
SYMS_THREAD_LOCAL SYMS_U64 syms_thread_lane
Definition syms_base.c:728
SYMS_API SYMS_ArenaTemp syms_get_scratch(SYMS_Arena **conflicts, SYMS_U64 conflict_count)
Definition syms_base.c:694
SYMS_API SYMS_U64 syms_get_lane(void)
Definition syms_base.c:736
SYMS_API void syms_u64_range_list_push(SYMS_Arena *arena, SYMS_U64RangeList *list, SYMS_U64Range range)
Definition syms_base.c:564
SYMS_API void syms_arena_put_back(SYMS_Arena *arena, SYMS_U64 amount)
Definition syms_base.c:672
SYMS_API SYMS_U64Range syms_make_u64_range(SYMS_U64 min, SYMS_U64 max)
Definition syms_base.c:18
SYMS_API void syms_arena_temp_end(SYMS_ArenaTemp temp)
Definition syms_base.c:689
#define syms_true
Definition syms_base.h:105
#define SYMS_MIN(a, b)
Definition syms_base.h:179
#define SYMS_Swap(T, a, b)
Definition syms_base.h:190
#define SYMS_StackPush(f, n)
Definition syms_base.h:227
#define syms_arena_alloc
Definition syms_base.h:544
#define syms_push_array(a, T, c)
Definition syms_base.h:561
#define syms_false
Definition syms_base.h:104
#define SYMS_API
Definition syms_base.h:29
#define SYMS_ASSERT(x)
Definition syms_base.h:125
SYMS_S32 SYMS_B32
Definition syms_base.h:99
#define SYMS_StackPop(f)
Definition syms_base.h:228
#define syms_arena_release
Definition syms_base.h:545
#define syms_push_array_zero(a, T, c)
Definition syms_base.h:564
#define SYMS_ASSERT_PARANOID(x)
Definition syms_base.h:132
#define syms_arena_absorb
Definition syms_base.h:550
#define SYMS_U64_MAX
Definition syms_base.h:176
#define syms_release_scratch
Definition syms_base.h:567
uint32_t SYMS_U32
Definition syms_crt_overrides.h:38
uint64_t SYMS_U64
Definition syms_crt_overrides.h:39
#define SYMS_U64
Definition syms_crt_overrides.h:54
SYMS_API SYMS_B32 syms_spatial_map_1d_invariants(SYMS_SpatialMap1D *map)
Definition syms_data_structures.c:656
SYMS_API void syms_symbol_name_map_push(SYMS_Arena *arena, SYMS_SymbolNameMapLoose *map, SYMS_String8 name, SYMS_SymbolID sid)
Definition syms_data_structures.c:1024
SYMS_API SYMS_FileToLineToAddrMap syms_line_to_addr_map_from_line_table(SYMS_Arena *arena, SYMS_LineTable *line_table)
Definition syms_data_structures.c:1251
SYMS_API void syms_spatial_map_1d_array_sort(SYMS_SpatialMap1DRange *ranges, SYMS_U64 count)
Definition syms_data_structures.c:334
SYMS_API SYMS_SymbolNameMap syms_symbol_name_map_bake(SYMS_Arena *arena, SYMS_SymbolNameMapLoose *loose)
Definition syms_data_structures.c:1065
SYMS_API SYMS_SymbolIDArray syms_symbol_name_map_array_from_string(SYMS_SymbolNameMap *map, SYMS_String8 string)
Definition syms_data_structures.c:1004
SYMS_API SYMS_B32 syms_spatial_map_1d_array_check_sorted(SYMS_SpatialMap1DRange *ranges, SYMS_U64 count)
Definition syms_data_structures.c:319
SYMS_API SYMS_U64RangeArray syms_line_to_addr_map_lookup_nearest_line_number(SYMS_LineToAddrMap *map, SYMS_U32 line, SYMS_U32 *actual_line_out)
Definition syms_data_structures.c:1437
SYMS_API SYMS_LineToAddrMap * syms_line_to_addr_map_lookup_file_id(SYMS_FileToLineToAddrMap *map, SYMS_FileID file_id)
Definition syms_data_structures.c:1420
SYMS_API SYMS_Name2FileIDMap syms_name_2_file_id_map_bake(SYMS_Arena *arena, SYMS_Name2FileIDMapLoose *loose)
Definition syms_data_structures.c:819
SYMS_API void syms_name_2_file_id_map_loose_push(SYMS_Arena *arena, SYMS_Name2FileIDMapLoose *map, SYMS_String8 name_cons, SYMS_UnitID uid, SYMS_FileID file_id)
Definition syms_data_structures.c:856
SYMS_API SYMS_String8 syms_string_cons(SYMS_Arena *arena, SYMS_StringCons *cons, SYMS_String8 string)
Definition syms_data_structures.c:10
SYMS_API void syms_file_id_2_name_map_insert(SYMS_Arena *arena, SYMS_FileID2NameMap *map, SYMS_UnitID uid, SYMS_FileID file_id, SYMS_String8 name)
Definition syms_data_structures.c:754
SYMS_API SYMS_U64 syms_spatial_map_1d_value_from_point(SYMS_SpatialMap1D *map, SYMS_U64 x)
Definition syms_data_structures.c:226
SYMS_API SYMS_Line syms_line_from_sequence_voff(SYMS_LineTable *line_table, SYMS_U64 seq_number, SYMS_U64 voff)
Definition syms_data_structures.c:1156
SYMS_API void syms_spatial_map_1d_loose_push_single(SYMS_Arena *arena, SYMS_SpatialMap1DLoose *loose, SYMS_U64 val, SYMS_U64Range range)
Definition syms_data_structures.c:262
SYMS_API SYMS_SpatialMap1D syms_spatial_map_1d_bake(SYMS_Arena *arena, SYMS_SpatialMap1DLoose *loose)
Definition syms_data_structures.c:273
SYMS_API SYMS_String8 syms_file_id_2_name_map_name_from_id(SYMS_FileID2NameMap *buckets, SYMS_UnitID uid, SYMS_FileID file_id)
Definition syms_data_structures.c:684
SYMS_API SYMS_B32 syms_type_kind_is_enum(SYMS_TypeKind kind)
Definition syms_debug_info.c:103
SYMS_API SYMS_B32 syms_type_kind_is_record(SYMS_TypeKind kind)
Definition syms_debug_info.c:97
SYMS_U64 SYMS_UnitID
Definition syms_debug_info.h:77
SYMS_U64 SYMS_FileID
Definition syms_debug_info.h:128
@ SYMS_SizeInterpretation_ByteCount
Definition syms_debug_info.h:207
@ SYMS_SizeInterpretation_Multiplier
Definition syms_debug_info.h:208
SYMS_U64 SYMS_SymbolID
Definition syms_debug_info.h:215
SYMS_READ_ONLY SYMS_GLOBAL SYMS_FileFormat syms_format_nil
Definition syms_debug_info.h:398
#define SYMS_Arena
Definition syms_default_arena.h:61
#define SYMS_ProfEnd()
Definition syms_dev.h:212
#define SYMS_ProfBegin(str)
Definition syms_dev.h:209
SYMS_API SYMS_SpatialMap1D syms_spatial_map_from_line_table(SYMS_Arena *arena, SYMS_LineTable *line_table)
Definition syms_functions.c:7
SYMS_API SYMS_SpatialMap1D syms_spatial_map_for_procs_from_sid_array(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_UnitAccel *unit, SYMS_SymbolIDArray *sid_array)
Definition syms_functions.c:46
SYMS_API SYMS_UnitID syms_group_uid_from_voff__linear_scan(SYMS_Group *group, SYMS_U64 virt_off)
Definition syms_group.c:728
SYMS_API SYMS_LineTable * syms_group_line_table_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:408
SYMS_API SYMS_SecInfoArray syms_group_sec_info_array(SYMS_Group *group)
Definition syms_group.c:248
SYMS_API SYMS_U64 syms_group_type_size_from_usid(SYMS_Group *group, SYMS_USID usid)
Definition syms_group.c:1476
SYMS_API SYMS_SymbolIDArray * syms_group_type_sid_array_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:355
SYMS_API SYMS_TypeMemberArray syms_group_type_members_from_type(SYMS_Group *group, SYMS_TypeNode *type)
Definition syms_group.c:1523
SYMS_API SYMS_TypeNode * syms_group_type_from_usid(SYMS_Group *group, SYMS_USID usid)
Definition syms_group.c:1456
SYMS_API SYMS_ResolvedLine syms_group_resolved_location_from_link_name(SYMS_Group *group, SYMS_String8 name)
Definition syms_group.c:1320
SYMS_API SYMS_Line syms_group_line_from_uid_voff__linear_scan(SYMS_Group *group, SYMS_UnitID uid, SYMS_U64 voff)
Definition syms_group.c:784
SYMS_API SYMS_MapAndUnit * syms_group_unmangled_symbol_map(SYMS_Group *group)
Definition syms_group.c:547
SYMS_API SYMS_String8Array * syms_group_inferred_file_table_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:417
SYMS_API SYMS_USIDList syms_group_all_usid_from_unmangled_name(SYMS_Arena *arena, SYMS_Group *group, SYMS_String8 name)
Definition syms_group.c:1302
SYMS_API SYMS_UnitSetAccel * syms_group_unit_set(SYMS_Group *group)
Definition syms_group.c:243
SYMS_API SYMS_U64 syms_group_unit_count(SYMS_Group *group)
Definition syms_group.c:266
SYMS_API SYMS_TypeGraph * syms_group_type_graph(SYMS_Group *group)
Definition syms_group.c:1340
SYMS_API SYMS_SymbolNameMap * syms_group_type_map_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:1070
SYMS_API SYMS_LinkNameRecArray syms_group_link_name_records(SYMS_Group *group)
Definition syms_group.c:559
SYMS_API void syms_group_parse_all_units__single_thread(SYMS_Group *group)
Definition syms_group.c:129
SYMS_API SYMS_USIDList syms_group_type_list_from_name_accelerated(SYMS_Arena *arena, SYMS_Group *group, SYMS_String8 name)
Definition syms_group.c:1503
SYMS_API SYMS_SpatialMap1D * syms_group_line_sequence_map_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:1004
SYMS_API SYMS_String8 syms_group_file_name_from_id(SYMS_Group *group, SYMS_UnitID uid, SYMS_FileID file_id)
Definition syms_group.c:512
SYMS_API void syms_group_parse_all_top_level(SYMS_Group *group)
Definition syms_group.c:150
SYMS_API SYMS_SpatialMap1D * syms_group_link_name_spatial_map(SYMS_Group *group)
Definition syms_group.c:1113
SYMS_API SYMS_SymbolIDArray syms_group_types_from_unit_name(SYMS_Group *group, SYMS_UnitID uid, SYMS_String8 name)
Definition syms_group.c:1513
SYMS_API SYMS_SymbolIDArray * syms_group_tls_var_sid_array_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:337
SYMS_API void syms_group_fetch_line_to_addr_maps_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:1031
SYMS_API SYMS_String8 syms_group_dbg_data(SYMS_Group *group)
Definition syms_group.c:228
SYMS_API SYMS_SymbolKind syms_group_symbol_kind_from_sid(SYMS_Group *group, SYMS_UnitAccel *unit, SYMS_SymbolID sid)
Definition syms_group.c:488
SYMS_API SYMS_SymbolID syms_group_var_sid_from_uid_voff__accelerated(SYMS_Group *group, SYMS_UnitID uid, SYMS_U64 voff)
Definition syms_group.c:1442
SYMS_API SYMS_Line syms_group_line_from_uid_voff__accelerated(SYMS_Group *group, SYMS_UnitID uid, SYMS_U64 voff)
Definition syms_group.c:1225
SYMS_API SYMS_UnitAccel * syms_group_unit_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:283
SYMS_API SYMS_Name2FileIDMap * syms_group_file_map(SYMS_Group *group)
Definition syms_group.c:1596
SYMS_API SYMS_U64 syms_group_sec_number_from_voff__linear_scan(SYMS_Group *group, SYMS_U64 voff)
Definition syms_group.c:668
SYMS_API SYMS_SymbolID syms_group_proc_sid_from_uid_voff__accelerated(SYMS_Group *group, SYMS_UnitID uid, SYMS_U64 voff)
Definition syms_group.c:1216
SYMS_API SYMS_U64 syms_group_sec_number_from_foff__linear_scan(SYMS_Group *group, SYMS_U64 foff)
Definition syms_group.c:684
SYMS_API SYMS_U64 syms_group_sec_number_from_foff__accelerated(SYMS_Group *group, SYMS_U64 foff)
Definition syms_group.c:1170
SYMS_API SYMS_ResolvedLine syms_group_resolved_location_from_proc_sid(SYMS_Group *group, SYMS_UnitAccel *unit, SYMS_SymbolID sid)
Definition syms_group.c:1258
SYMS_API SYMS_U64RangeList syms_group_vranges_from_uid_line__linear_scan(SYMS_Arena *arena, SYMS_Group *group, SYMS_UnitID uid, SYMS_FileID file_id, SYMS_U32 line)
Definition syms_group.c:812
SYMS_API void syms_group_begin_multilane(SYMS_Group *group, SYMS_U64 lane_count)
Definition syms_group.c:166
SYMS_API SYMS_SymbolID syms_group_proc_sid_from_uid_voff__linear_scan(SYMS_Group *group, SYMS_UnitID uid, SYMS_U64 voff)
Definition syms_group.c:745
SYMS_API SYMS_MapAndUnit * syms_group_type_map(SYMS_Group *group)
Definition syms_group.c:535
SYMS_API SYMS_U64Maybe syms_group_sec_voff_from_foff__accelerated(SYMS_Group *group, SYMS_U64 foff)
Definition syms_group.c:1179
SYMS_API void syms_group_release(SYMS_Group *group)
Definition syms_group.c:18
SYMS_API SYMS_USID syms_group_usid_from_unmangled_name(SYMS_Group *group, SYMS_String8 name)
Definition syms_group.c:1287
SYMS_API SYMS_SpatialMap1D * syms_group_sec_map_f(SYMS_Group *group)
Definition syms_group.c:888
SYMS_API SYMS_SpatialMap1D * syms_group_unit_map(SYMS_Group *group)
Definition syms_group.c:930
SYMS_API SYMS_U64Maybe syms_group_sec_foff_from_voff__accelerated(SYMS_Group *group, SYMS_U64 voff)
Definition syms_group.c:1193
SYMS_API SYMS_UnitAccel * syms_group_link_name_unit(SYMS_Group *group)
Definition syms_group.c:586
SYMS_API void syms_group_end_multilane(SYMS_Group *group)
Definition syms_group.c:188
SYMS_API SYMS_BinAccel * syms_group_bin(SYMS_Group *group)
Definition syms_group.c:223
SYMS_API SYMS_U64 syms_group_address_size(SYMS_Group *group)
Definition syms_group.c:500
SYMS_API SYMS_Arena * syms_group_get_lane_arena(SYMS_Group *group)
Definition syms_group.c:205
SYMS_API void syms_group_init(SYMS_Group *group, SYMS_ParseBundle *params)
Definition syms_group.c:23
SYMS_API SYMS_U64 syms_group_sec_number_from_voff__accelerated(SYMS_Group *group, SYMS_U64 voff)
Definition syms_group.c:1161
SYMS_API SYMS_String8 syms_group_symbol_name_from_sid(SYMS_Arena *arena, SYMS_Group *group, SYMS_UnitAccel *unit, SYMS_SymbolID sid)
Definition syms_group.c:494
SYMS_API SYMS_String8 syms_group_bin_data(SYMS_Group *group)
Definition syms_group.c:218
SYMS_API SYMS_U64RangeArray syms_group_vranges_from_uid_line__accelerated(SYMS_Group *group, SYMS_UnitID uid, SYMS_FileID file_id, SYMS_U32 line)
Definition syms_group.c:1238
SYMS_API SYMS_U64 syms_group_default_vbase(SYMS_Group *group)
Definition syms_group.c:506
SYMS_API SYMS_UnitID syms_group_uid_from_voff__accelerated(SYMS_Group *group, SYMS_U64 voff)
Definition syms_group.c:1207
SYMS_API SYMS_SpatialMap1D * syms_group_sec_map_v(SYMS_Group *group)
Definition syms_group.c:846
SYMS_API SYMS_String8Array * syms_group_file_table_from_uid_with_fallbacks(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:466
SYMS_API SYMS_SymbolIDArray * syms_group_var_sid_array_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:319
SYMS_API SYMS_U64Maybe syms_group_voff_from_foff__linear_scan(SYMS_Group *group, SYMS_U64 foff)
Definition syms_group.c:700
SYMS_API SYMS_Group * syms_group_alloc(void)
Definition syms_group.c:10
SYMS_API SYMS_LineParseOut * syms_group_line_parse_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:391
SYMS_API SYMS_U64 syms_group_voff_from_link_name(SYMS_Group *group, SYMS_String8 name)
Definition syms_group.c:1312
SYMS_API SYMS_SymbolID syms_group_var_sid_from_uid_voff__linear_scan(SYMS_Group *group, SYMS_UnitID uid, SYMS_U64 voff)
Definition syms_group.c:1350
SYMS_API void syms_group__link_names_sort_in_place(SYMS_LinkNameRec *recs, SYMS_U64 count)
Definition syms_group.c:597
SYMS_API SYMS_LinkMapAccel * syms_group_link_name_map(SYMS_Group *group)
Definition syms_group.c:576
SYMS_API SYMS_SpatialMap1D * syms_group_var_map_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:1390
SYMS_API SYMS_UnitNames syms_group_unit_names_from_uid(SYMS_Arena *arena, SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:277
SYMS_API SYMS_SymbolIDArray * syms_group_proc_sid_array_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:301
SYMS_API SYMS_U64Maybe syms_group_foff_from_voff__linear_scan(SYMS_Group *group, SYMS_U64 voff)
Definition syms_group.c:714
SYMS_API SYMS_String8Array * syms_group_file_table_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:373
SYMS_API SYMS_UnitInfo syms_group_unit_info_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:271
SYMS_API SYMS_EnumMemberArray syms_group_type_enum_members_from_type(SYMS_Group *group, SYMS_TypeNode *type)
Definition syms_group.c:1558
SYMS_API SYMS_SpatialMap1D * syms_group_proc_map_from_uid(SYMS_Group *group, SYMS_UnitID uid)
Definition syms_group.c:973
SYMS_API SYMS_DbgAccel * syms_group_dbg(SYMS_Group *group)
Definition syms_group.c:233
SYMS_API SYMS_Arch syms_group_arch(SYMS_Group *group)
Definition syms_group.c:238
SYMS_API SYMS_UnitRangeArray syms_group_unit_ranges(SYMS_Group *group)
Definition syms_group.c:477
SYMS_API SYMS_LineToAddrMap * syms_group_line_to_addr_map_from_uid_file_id(SYMS_Group *group, SYMS_UnitID uid, SYMS_FileID file_id)
Definition syms_group.c:1051
SYMS_API SYMS_SecInfo * syms_group_sec_info_from_number(SYMS_Group *group, SYMS_U64 n)
Definition syms_group.c:254
SYMS_U32 SYMS_GroupUnitCacheFlags
Definition syms_group.h:10
SYMS_READ_ONLY SYMS_GLOBAL SYMS_String8Array syms_string_array_nil
Definition syms_group.h:109
SYMS_READ_ONLY SYMS_GLOBAL SYMS_LineParseOut syms_line_parse_nil
Definition syms_group.h:110
@ SYMS_GroupUnitCacheFlag_HasInfFileTable
Definition syms_group.h:17
@ SYMS_GroupUnitCacheFlag_HasLineTable
Definition syms_group.h:18
@ SYMS_GroupUnitCacheFlag_HasTypeNameMap
Definition syms_group.h:23
@ SYMS_GroupUnitCacheFlag_HasLineSeqMap
Definition syms_group.h:21
@ SYMS_GroupUnitCacheFlag_HasFileTable
Definition syms_group.h:16
@ SYMS_GroupUnitCacheFlag_HasTlsVarSidArray
Definition syms_group.h:14
@ SYMS_GroupUnitCacheFlag_HasLineToAddrMap
Definition syms_group.h:22
@ SYMS_GroupUnitCacheFlag_HasProcSidArray
Definition syms_group.h:12
@ SYMS_GroupUnitCacheFlag_HasProcMap
Definition syms_group.h:19
@ SYMS_GroupUnitCacheFlag_HasVarMap
Definition syms_group.h:20
@ SYMS_GroupUnitCacheFlag_HasVarSidArray
Definition syms_group.h:13
@ SYMS_GroupUnitCacheFlag_HasTypeSidArray
Definition syms_group.h:15
SYMS_READ_ONLY SYMS_GLOBAL SYMS_SpatialMap1D syms_spatial_map_1d_nil
Definition syms_group.h:111
SYMS_READ_ONLY SYMS_GLOBAL SYMS_LineToAddrMap syms_line_to_addr_map_nil
Definition syms_group.h:112
SYMS_READ_ONLY SYMS_GLOBAL SYMS_SymbolIDArray syms_sid_array_nil
Definition syms_group.h:108
SYMS_API SYMS_U32 syms_address_size_from_arch(SYMS_Arch v)
Definition syms_meta_base.c:7
@ SYMS_FileFormat_Null
Definition syms_meta_base.h:95
SYMS_Arch
Definition syms_meta_base.h:6
@ SYMS_Arch_Null
Definition syms_meta_base.h:7
SYMS_SymbolKind
Definition syms_meta_debug_info.h:15
@ SYMS_SymbolKind_Procedure
Definition syms_meta_debug_info.h:18
@ SYMS_SymbolKind_ImageRelativeVariable
Definition syms_meta_debug_info.h:19
SYMS_API SYMS_String8 syms_file_name_from_id(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_UnitSetAccel *unit_set, SYMS_UnitID uid, SYMS_FileID file_id)
Definition syms_parser.c:1324
SYMS_API SYMS_USID syms_type_from_var_sid(SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_UnitAccel *unit, SYMS_SymbolID id)
Definition syms_parser.c:840
SYMS_API SYMS_UnitID syms_uid_from_unit(SYMS_UnitAccel *unit)
Definition syms_parser.c:669
SYMS_API SYMS_UnitID syms_partner_uid_from_map(SYMS_MapAccel *map)
Definition syms_parser.c:1432
SYMS_API SYMS_USIDList syms_usid_list_from_string(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_MapAndUnit *map_and_unit, SYMS_String8 string)
Definition syms_parser.c:1452
SYMS_API SYMS_SymbolIDArray syms_tls_var_sid_array_from_unit(SYMS_Arena *arena, SYMS_UnitAccel *unit)
Definition syms_parser.c:1592
SYMS_API SYMS_SymbolKind syms_symbol_kind_from_sid(SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_UnitAccel *unit, SYMS_SymbolID sid)
Definition syms_parser.c:749
SYMS_API SYMS_UnitRangeArray syms_unit_ranges_from_set(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_UnitSetAccel *unit_set)
Definition syms_parser.c:582
SYMS_API SYMS_U64 syms_voff_from_link_name(SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_LinkMapAccel *map, SYMS_UnitAccel *link_unit, SYMS_String8 name)
Definition syms_parser.c:1534
SYMS_API SYMS_Arch syms_arch_from_bin(SYMS_BinAccel *bin)
Definition syms_parser.c:86
SYMS_API SYMS_SymbolIDArray syms_var_sid_array_from_unit(SYMS_Arena *arena, SYMS_UnitAccel *unit)
Definition syms_parser.c:709
SYMS_API SYMS_UnitInfo syms_unit_info_from_uid(SYMS_UnitSetAccel *unit_set, SYMS_UnitID uid)
Definition syms_parser.c:542
SYMS_API SYMS_U64 syms_default_vbase_from_dbg(SYMS_DbgAccel *dbg)
Definition syms_parser.c:480
SYMS_API SYMS_LinkMapAccel * syms_link_map_from_dbg(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *dbg)
Definition syms_parser.c:1515
SYMS_API SYMS_FileAccel * syms_file_accel_from_data(SYMS_Arena *arena, SYMS_String8 data)
Definition syms_parser.c:10
SYMS_API SYMS_SymbolIDArray syms_proc_sid_array_from_unit(SYMS_Arena *arena, SYMS_UnitAccel *unit)
Definition syms_parser.c:689
SYMS_API SYMS_String8Array syms_file_table_from_uid(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_UnitSetAccel *unit_set, SYMS_UnitID uid)
Definition syms_parser.c:1347
SYMS_API SYMS_MapAccel * syms_unmangled_symbol_map_from_dbg(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *dbg)
Definition syms_parser.c:1412
SYMS_API SYMS_U64 syms_default_vbase_from_bin(SYMS_BinAccel *bin)
Definition syms_parser.c:160
SYMS_API SYMS_LineParseOut syms_line_parse_from_uid(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_UnitSetAccel *unit_set, SYMS_UnitID uid)
Definition syms_parser.c:1366
SYMS_API SYMS_String8 syms_symbol_name_from_sid(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_UnitAccel *unit, SYMS_SymbolID sid)
Definition syms_parser.c:771
SYMS_API SYMS_U64 syms_voff_from_var_sid(SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_UnitAccel *unit, SYMS_SymbolID id)
Definition syms_parser.c:862
SYMS_API SYMS_TypeInfo syms_type_info_from_sid(SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_UnitAccel *unit, SYMS_SymbolID id)
Definition syms_parser.c:794
SYMS_API SYMS_UnitAccel * syms_unit_accel_from_uid(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_UnitSetAccel *unit_set, SYMS_UnitID uid)
Definition syms_parser.c:643
SYMS_API SYMS_U64 syms_unit_count_from_set(SYMS_UnitSetAccel *accel)
Definition syms_parser.c:522
SYMS_API SYMS_BinAccel * syms_bin_accel_from_file(SYMS_Arena *arena, SYMS_String8 data, SYMS_FileAccel *file)
Definition syms_parser.c:60
SYMS_API SYMS_U64RangeArray syms_scope_vranges_from_sid(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_UnitAccel *unit, SYMS_SymbolID id)
Definition syms_parser.c:1207
SYMS_API SYMS_MapAccel * syms_type_map_from_dbg(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *dbg)
Definition syms_parser.c:1392
SYMS_API SYMS_UnitNames syms_unit_names_from_uid(SYMS_Arena *arena, SYMS_UnitSetAccel *unit_set, SYMS_UnitID uid)
Definition syms_parser.c:562
SYMS_API SYMS_Arch syms_arch_from_dbg(SYMS_DbgAccel *dbg)
Definition syms_parser.c:396
SYMS_API SYMS_UnitID syms_link_names_uid(SYMS_DbgAccel *dbg)
Definition syms_parser.c:1480
SYMS_API SYMS_SecInfoArray syms_sec_info_array_from_dbg(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *dbg)
Definition syms_parser.c:459
SYMS_API SYMS_SecInfoArray syms_sec_info_array_from_bin(SYMS_Arena *arena, SYMS_String8 data, SYMS_BinAccel *bin)
Definition syms_parser.c:133
SYMS_API SYMS_LinkNameRecArray syms_link_name_array_from_unit(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *dbg, SYMS_UnitAccel *unit)
Definition syms_parser.c:1557
SYMS_API SYMS_UnitSetAccel * syms_unit_set_accel_from_dbg(SYMS_Arena *arena, SYMS_String8 data, SYMS_DbgAccel *accel)
Definition syms_parser.c:502
SYMS_API SYMS_DbgAccel * syms_dbg_accel_from_file(SYMS_Arena *arena, SYMS_String8 data, SYMS_FileAccel *accel)
Definition syms_parser.c:341
SYMS_API SYMS_SymbolIDArray syms_type_sid_array_from_unit(SYMS_Arena *arena, SYMS_UnitAccel *unit)
Definition syms_parser.c:729
#define syms_accel_is_good(a)
Definition syms_parser.h:87
SYMS_API SYMS_TypeNode * syms_type_from_dbg_sid(SYMS_TypeGraph *graph, SYMS_TypeParseParams *params, SYMS_SymbolID sid)
Definition syms_type_graph.c:1082
SYMS_API void syms_type_graph_init(SYMS_TypeGraph *graph, SYMS_Arena *graph_arena, SYMS_StringCons *graph_string_cons, SYMS_U64 address_size)
Definition syms_type_graph.c:10
SYMS_API void syms_type_equip_members_from_dbg(SYMS_TypeGraph *graph, SYMS_TypeParseParams *params, SYMS_TypeNode *node)
Definition syms_type_graph.c:1389
Definition syms_parser.h:18
SYMS_FileFormat format
Definition syms_parser.h:19
Definition syms_parser.h:30
Definition syms_parser.h:10
Definition syms_parser.h:60
Definition syms_parser.h:54
Definition syms_parser.h:42
Definition syms_parser.h:36