From 25ef98a98c43aeceb0412684d8c1c2535ec502d8 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Wed, 21 Feb 2024 10:36:22 -0800 Subject: [PATCH] raddbgi_make: eliminate old bake src files, switch over completely to user-specified src files; enforce nil entries in all tables for all cases --- src/lib_raddbgi_make/raddbgi_make.c | 113 ++++++++++++++-------------- src/lib_raddbgi_make/raddbgi_make.h | 28 +------ 2 files changed, 61 insertions(+), 80 deletions(-) diff --git a/src/lib_raddbgi_make/raddbgi_make.c b/src/lib_raddbgi_make/raddbgi_make.c index ff2c6b44..7bf48769 100644 --- a/src/lib_raddbgi_make/raddbgi_make.c +++ b/src/lib_raddbgi_make/raddbgi_make.c @@ -480,7 +480,7 @@ rdim_idx_from_src_file(RDIM_SrcFile *src_file) RDI_U64 idx = 0; if(src_file != 0 && src_file->chunk != 0) { - idx = src_file->chunk->base_idx + (src_file - src_file->chunk->v); + idx = src_file->chunk->base_idx + (src_file - src_file->chunk->v) + 1; } return idx; } @@ -543,7 +543,7 @@ rdim_idx_from_unit(RDIM_Unit *unit) RDI_U64 idx = 0; if(unit != 0 && unit->chunk != 0) { - idx = unit->chunk->base_idx + (unit - unit->chunk->v); + idx = unit->chunk->base_idx + (unit - unit->chunk->v) + 1; } return idx; } @@ -607,7 +607,7 @@ rdim_idx_from_type(RDIM_Type *type) RDI_U64 idx = 0; if(type != 0 && type->chunk != 0) { - idx = type->chunk->base_idx + (type - type->chunk->v); + idx = type->chunk->base_idx + (type - type->chunk->v) + 1; } return idx; } @@ -659,7 +659,7 @@ rdim_idx_from_udt(RDIM_UDT *udt) RDI_U64 idx = 0; if(udt != 0 && udt->chunk != 0) { - idx = udt->chunk->base_idx + (udt - udt->chunk->v); + idx = udt->chunk->base_idx + (udt - udt->chunk->v) + 1; } return idx; } @@ -736,7 +736,7 @@ rdim_idx_from_symbol(RDIM_Symbol *symbol) RDI_U64 idx = 0; if(symbol != 0 && symbol->chunk != 0) { - idx = symbol->chunk->base_idx + (symbol - symbol->chunk->v); + idx = symbol->chunk->base_idx + (symbol - symbol->chunk->v) + 1; } return idx; } @@ -793,7 +793,7 @@ rdim_idx_from_scope(RDIM_Scope *scope) RDI_U64 idx = 0; if(scope != 0 && scope->chunk != 0) { - idx = scope->chunk->base_idx + (scope - scope->chunk->v); + idx = scope->chunk->base_idx + (scope - scope->chunk->v) + 1; } return idx; } @@ -1468,7 +1468,6 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) RDIM_BakePathTree path_tree = {0}; RDIM_BakeNameMap name_maps[RDI_NameMapKind_COUNT] = {0}; { - rdim_bake_section_list_push_new(arena, §ions, 0, 0, RDI_DataSectionTag_NULL); strings.slots_count = params->procedures.total_count*2 + params->global_variables.total_count*2 + params->thread_variables.total_count*2 + params->types.total_count*2; strings.slots = rdim_push_array(arena, RDIM_BakeStringNode *, strings.slots_count); idx_runs.slots_count = params->procedures.total_count*2 + params->global_variables.total_count*2 + params->thread_variables.total_count*2 + params->types.total_count*2; @@ -1480,7 +1479,14 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) name_maps[k].slots_count = params->procedures.total_count*2 + params->global_variables.total_count*2 + params->thread_variables.total_count*2 + params->types.total_count*2; name_maps[k].slots = rdim_push_array(arena, RDIM_BakeNameMapNode *, name_maps[k].slots_count); } - RDIM_BakePathNode *nil_path = rdim_bake_path_node_from_string(arena, &path_tree, rdim_str8_lit("")); + } + + ////////////////////////////// + //- rjf: bake nils + // + { + rdim_bake_section_list_push_new(arena, §ions, 0, 0, RDI_DataSectionTag_NULL); + rdim_bake_path_node_from_string(arena, &path_tree, rdim_str8_lit("")); rdim_bake_string(arena, &strings, rdim_str8_lit("")); rdim_bake_idx_run(arena, &idx_runs, 0, 0); } @@ -1505,8 +1511,8 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) RDIM_ProfScope("build section for binary sections") { RDIM_BinarySectionList *src_list = ¶ms->binary_sections; - RDI_BinarySection *dst_base = rdim_push_array(arena, RDI_BinarySection, src_list->count); - U64 dst_idx = 0; + RDI_BinarySection *dst_base = rdim_push_array(arena, RDI_BinarySection, src_list->count+1); + U64 dst_idx = 1; for(RDIM_BinarySectionNode *src_n = src_list->first; src_n != 0; src_n = src_n->next, dst_idx += 1) { RDIM_BinarySection *src = &src_n->v; @@ -1527,8 +1533,8 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) RDIM_ProfScope("build sections for units") { RDIM_UnitChunkList *src_list = ¶ms->units; - RDI_Unit *dst_base = rdim_push_array(arena, RDI_Unit, src_list->total_count); - RDI_U64 dst_idx = 0; + RDI_Unit *dst_base = rdim_push_array(arena, RDI_Unit, src_list->total_count+1); + RDI_U64 dst_idx = 1; for(RDIM_UnitChunkNode *src_n = src_list->first; src_n != 0; src_n = src_n->next) { for(RDI_U64 src_chunk_idx = 0; src_chunk_idx < src_n->count; src_chunk_idx += 1, dst_idx += 1) @@ -1680,9 +1686,9 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) //////////////////////////// //- rjf: iterate all source files, fill serialized version, build sections for line info // - RDI_U32 dst_files_count = params->src_files.total_count; + RDI_U32 dst_files_count = params->src_files.total_count + 1; RDI_SourceFile *dst_files = rdim_push_array(arena, RDI_SourceFile, dst_files_count); - RDI_U32 dst_file_idx = 0; + RDI_U32 dst_file_idx = 1; for(RDIM_SrcFileChunkNode *chunk_n = params->src_files.first; chunk_n != 0; chunk_n = chunk_n->next) @@ -1902,7 +1908,7 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) { RDIM_SortKey *key_ptr = keys; RDIM_VMapMarker *marker_ptr = markers; - RDI_U32 unit_idx = 0; + RDI_U32 unit_idx = 1; for(RDIM_UnitChunkNode *unit_chunk_n = params->units.first; unit_chunk_n != 0; unit_chunk_n = unit_chunk_n->next) @@ -1953,10 +1959,10 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) //////////////////////////// //- rjf: build all type nodes // - RDI_TypeNode *type_nodes = push_array(arena, RDI_TypeNode, params->types.total_count); + RDI_TypeNode *type_nodes = push_array(arena, RDI_TypeNode, params->types.total_count+1); RDIM_ProfScope("push all type nodes") { - RDI_U32 dst_idx = 0; + RDI_U32 dst_idx = 1; for(RDIM_TypeChunkNode *n = params->types.first; n != 0; n = n->next) { for(RDI_U64 chunk_idx = 0; chunk_idx < n->count; chunk_idx += 1, dst_idx += 1) @@ -2018,14 +2024,14 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) //////////////////////////// //- rjf: build all udts & members // - RDI_UDT * udts = push_array(arena, RDI_UDT, params->udts.total_count); - RDI_Member * members = push_array(arena, RDI_Member, params->udts.total_member_count); - RDI_EnumMember *enum_members = push_array(arena, RDI_EnumMember, params->udts.total_enum_val_count); + RDI_UDT * udts = push_array(arena, RDI_UDT, params->udts.total_count+1); + RDI_Member * members = push_array(arena, RDI_Member, params->udts.total_member_count+1); + RDI_EnumMember *enum_members = push_array(arena, RDI_EnumMember, params->udts.total_enum_val_count+1); RDIM_ProfScope("build all udts & members") { - RDI_U32 dst_udt_idx = 0; - RDI_U32 dst_member_idx = 0; - RDI_U32 dst_enum_member_idx = 0; + RDI_U32 dst_udt_idx = 1; + RDI_U32 dst_member_idx = 1; + RDI_U32 dst_enum_member_idx = 1; for(RDIM_UDTChunkNode *n = params->udts.first; n != 0; n = n->next) { for(RDI_U64 chunk_idx = 0; chunk_idx < n->count; chunk_idx += 1, dst_udt_idx += 1) @@ -2080,10 +2086,10 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) // RDIM_ProfScope("push all type info sections") { - rdim_bake_section_list_push_new(arena, §ions, type_nodes, sizeof(RDI_TypeNode) * params->types.total_count, RDI_DataSectionTag_TypeNodes); - rdim_bake_section_list_push_new(arena, §ions, udts, sizeof(RDI_UDT) * params->udts.total_count, RDI_DataSectionTag_UDTs); - rdim_bake_section_list_push_new(arena, §ions, members , sizeof(RDI_Member) * params->udts.total_member_count, RDI_DataSectionTag_Members); - rdim_bake_section_list_push_new(arena, §ions, enum_members, sizeof(RDI_EnumMember) * params->udts.total_enum_val_count, RDI_DataSectionTag_EnumMembers); + rdim_bake_section_list_push_new(arena, §ions, type_nodes, sizeof(RDI_TypeNode) * (params->types.total_count+1), RDI_DataSectionTag_TypeNodes); + rdim_bake_section_list_push_new(arena, §ions, udts, sizeof(RDI_UDT) * (params->udts.total_count+1), RDI_DataSectionTag_UDTs); + rdim_bake_section_list_push_new(arena, §ions, members , sizeof(RDI_Member) * (params->udts.total_member_count+1), RDI_DataSectionTag_Members); + rdim_bake_section_list_push_new(arena, §ions, enum_members, sizeof(RDI_EnumMember) * (params->udts.total_enum_val_count+1), RDI_DataSectionTag_EnumMembers); } } @@ -2095,10 +2101,10 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) //////////////////////////// //- rjf: build all global variables // - RDI_GlobalVariable *global_variables = push_array(arena, RDI_GlobalVariable, params->global_variables.total_count); + RDI_GlobalVariable *global_variables = push_array(arena, RDI_GlobalVariable, params->global_variables.total_count+1); RDIM_ProfScope("build all global variables") { - RDI_U32 dst_idx = 0; + RDI_U32 dst_idx = 1; for(RDIM_SymbolChunkNode *n = params->global_variables.first; n != 0; n = n->next) { for(RDI_U64 chunk_idx = 0; chunk_idx < n->count; chunk_idx += 1, dst_idx += 1) @@ -2130,10 +2136,10 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) //////////////////////////// //- rjf: build all thread variables // - RDI_ThreadVariable *thread_variables = push_array(arena, RDI_ThreadVariable, params->thread_variables.total_count); + RDI_ThreadVariable *thread_variables = push_array(arena, RDI_ThreadVariable, params->thread_variables.total_count+1); RDIM_ProfScope("build all thread variables") { - RDI_U32 dst_idx = 0; + RDI_U32 dst_idx = 1; for(RDIM_SymbolChunkNode *n = params->thread_variables.first; n != 0; n = n->next) { for(RDI_U64 chunk_idx = 0; chunk_idx < n->count; chunk_idx += 1, dst_idx += 1) @@ -2165,10 +2171,10 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) //////////////////////////// //- rjf: build all procedures // - RDI_Procedure *procedures = push_array(arena, RDI_Procedure, params->procedures.total_count); + RDI_Procedure *procedures = push_array(arena, RDI_Procedure, params->procedures.total_count+1); RDIM_ProfScope("build all procedures") { - RDI_U32 dst_idx = 0; + RDI_U32 dst_idx = 1; for(RDIM_SymbolChunkNode *n = params->procedures.first; n != 0; n = n->next) { for(RDI_U64 chunk_idx = 0; chunk_idx < n->count; chunk_idx += 1, dst_idx += 1) @@ -2276,17 +2282,17 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) //////////////////////////// //- rjf: build all scopes, scope voffs, locals, and location blocks // - RDI_Scope * scopes = rdim_push_array(arena, RDI_Scope, params->scopes.total_count); - RDI_U64 * scope_voffs = rdim_push_array(arena, RDI_U64, params->scopes.scope_voff_count); - RDI_Local * locals = rdim_push_array(arena, RDI_Local, params->scopes.local_count); - RDI_LocationBlock * location_blocks = rdim_push_array(arena, RDI_LocationBlock, params->scopes.location_count); + RDI_Scope * scopes = rdim_push_array(arena, RDI_Scope, params->scopes.total_count+1); + RDI_U64 * scope_voffs = rdim_push_array(arena, RDI_U64, params->scopes.scope_voff_count+1); + RDI_Local * locals = rdim_push_array(arena, RDI_Local, params->scopes.local_count+1); + RDI_LocationBlock * location_blocks = rdim_push_array(arena, RDI_LocationBlock, params->scopes.location_count+1); RDIM_String8List location_data_blobs = {0}; RDIM_ProfScope("build all scopes, scope voffs, locals, and location blocks") { - RDI_U64 dst_scope_idx = 0; - RDI_U64 dst_scope_voff_idx = 0; - RDI_U64 dst_local_idx = 0; - RDI_U64 dst_location_block_idx = 0; + RDI_U64 dst_scope_idx = 1; + RDI_U64 dst_scope_voff_idx = 1; + RDI_U64 dst_local_idx = 1; + RDI_U64 dst_location_block_idx = 1; for(RDIM_ScopeChunkNode *chunk_n = params->scopes.first; chunk_n != 0; chunk_n = chunk_n->next) { for(RDI_U64 chunk_idx = 0; chunk_idx < chunk_n->count; chunk_idx += 1, dst_scope_idx += 1) @@ -2476,16 +2482,16 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) // RDIM_ProfScope("push all symbol info sections") { - rdim_bake_section_list_push_new(arena, §ions, global_variables, sizeof(RDI_GlobalVariable) * params->global_variables.total_count, RDI_DataSectionTag_GlobalVariables); - rdim_bake_section_list_push_new(arena, §ions, global_vmap.vmap, sizeof(RDI_VMapEntry) * (global_vmap.count+1), RDI_DataSectionTag_GlobalVmap); - rdim_bake_section_list_push_new(arena, §ions, thread_variables, sizeof(RDI_ThreadVariable) * params->thread_variables.total_count, RDI_DataSectionTag_ThreadVariables); - rdim_bake_section_list_push_new(arena, §ions, procedures, sizeof(RDI_Procedure) * params->procedures.total_count, RDI_DataSectionTag_Procedures); - rdim_bake_section_list_push_new(arena, §ions, scopes, sizeof(RDI_Scope) * params->scopes.total_count, RDI_DataSectionTag_Scopes); - rdim_bake_section_list_push_new(arena, §ions, scope_voffs, sizeof(RDI_U64) * params->scopes.scope_voff_count, RDI_DataSectionTag_ScopeVoffData); - rdim_bake_section_list_push_new(arena, §ions, scope_vmap.vmap, sizeof(RDI_VMapEntry) * (scope_vmap.count+1), RDI_DataSectionTag_ScopeVmap); - rdim_bake_section_list_push_new(arena, §ions, locals, sizeof(RDI_Local) * params->scopes.local_count, RDI_DataSectionTag_Locals); - rdim_bake_section_list_push_new(arena, §ions, location_blocks, sizeof(RDI_LocationBlock) * params->scopes.location_count, RDI_DataSectionTag_LocationBlocks); - rdim_bake_section_list_push_new(arena, §ions, location_data_blob.str, location_data_blob.size, RDI_DataSectionTag_LocationData); + rdim_bake_section_list_push_new(arena, §ions, global_variables, sizeof(RDI_GlobalVariable) * (params->global_variables.total_count+1), RDI_DataSectionTag_GlobalVariables); + rdim_bake_section_list_push_new(arena, §ions, global_vmap.vmap, sizeof(RDI_VMapEntry) * (global_vmap.count+1), RDI_DataSectionTag_GlobalVmap); + rdim_bake_section_list_push_new(arena, §ions, thread_variables, sizeof(RDI_ThreadVariable) * (params->thread_variables.total_count+1), RDI_DataSectionTag_ThreadVariables); + rdim_bake_section_list_push_new(arena, §ions, procedures, sizeof(RDI_Procedure) * (params->procedures.total_count+1), RDI_DataSectionTag_Procedures); + rdim_bake_section_list_push_new(arena, §ions, scopes, sizeof(RDI_Scope) * (params->scopes.total_count+1), RDI_DataSectionTag_Scopes); + rdim_bake_section_list_push_new(arena, §ions, scope_voffs, sizeof(RDI_U64) * (params->scopes.scope_voff_count+1), RDI_DataSectionTag_ScopeVoffData); + rdim_bake_section_list_push_new(arena, §ions, scope_vmap.vmap, sizeof(RDI_VMapEntry) * (scope_vmap.count+1), RDI_DataSectionTag_ScopeVmap); + rdim_bake_section_list_push_new(arena, §ions, locals, sizeof(RDI_Local) * (params->scopes.local_count+1), RDI_DataSectionTag_Locals); + rdim_bake_section_list_push_new(arena, §ions, location_blocks, sizeof(RDI_LocationBlock) * (params->scopes.location_count+1), RDI_DataSectionTag_LocationBlocks); + rdim_bake_section_list_push_new(arena, §ions, location_data_blob.str, location_data_blob.size, RDI_DataSectionTag_LocationData); } } @@ -2641,6 +2647,7 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) { RDI_FilePathNode *dst_node = &dst_nodes[dst_node_idx]; dst_node->name_string_idx = rdim_bake_string(arena, &strings, src_node->name); + dst_node->source_file_idx = rdim_idx_from_src_file(src_node->src_file); if(src_node->parent != 0) { dst_node->parent_path_node = src_node->parent->idx; @@ -2653,10 +2660,6 @@ rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) { dst_node->next_sibling = src_node->next_sibling->idx; } - if(src_node->src_file != 0) - { - dst_node->source_file_idx = src_node->src_file->idx; - } } } rdim_bake_section_list_push_new(arena, §ions, dst_nodes, sizeof(RDI_FilePathNode)*dst_nodes_count, RDI_DataSectionTag_FilePathNodes); diff --git a/src/lib_raddbgi_make/raddbgi_make.h b/src/lib_raddbgi_make/raddbgi_make.h index 569964a2..0d8ea98b 100644 --- a/src/lib_raddbgi_make/raddbgi_make.h +++ b/src/lib_raddbgi_make/raddbgi_make.h @@ -477,7 +477,7 @@ struct RDIM_SrcFileChunkNode RDI_U64 base_idx; }; -typedef struct RDIM_SrcFileChunkList RDIM_SrcFileChunkList; +typedef struct RDIM_SrcFileChunkList RDIM_SrcFileChunkList; struct RDIM_SrcFileChunkList { RDIM_SrcFileChunkNode *first; @@ -896,7 +896,7 @@ struct RDIM_BakePathNode RDIM_BakePathNode *last_child; RDIM_BakePathNode *next_sibling; RDIM_String8 name; - struct RDIM_BakeSrcNode *src_file; + RDIM_SrcFile *src_file; RDI_U32 idx; }; @@ -907,35 +907,13 @@ struct RDIM_BakeLineMapFragment RDIM_LineSequence *seq; }; -typedef struct RDIM_BakeSrcNode RDIM_BakeSrcNode; -struct RDIM_BakeSrcNode -{ - RDIM_BakeSrcNode *next; - RDIM_BakePathNode *path_node; - RDI_U32 idx; - RDIM_String8 normal_full_path; - - // rjf: line info attached to this src file - RDIM_BakeLineMapFragment *first_fragment; - RDIM_BakeLineMapFragment *last_fragment; - - // rjf: final baked version of this file's line map - RDI_U32 line_map_nums_data_idx; - RDI_U32 line_map_range_data_idx; - RDI_U32 line_map_count; - RDI_U32 line_map_voff_data_idx; -}; - typedef struct RDIM_BakePathTree RDIM_BakePathTree; struct RDIM_BakePathTree { + RDIM_BakePathNode root; RDIM_BakePathNode *first; RDIM_BakePathNode *last; RDI_U32 count; - RDIM_BakePathNode root; - RDIM_BakeSrcNode *src_first; - RDIM_BakeSrcNode *src_last; - RDI_U32 src_count; }; //- rjf: name maps