diff --git a/src/lib_rdi_make/rdi_make.h b/src/lib_rdi_make/rdi_make.h index 034b9599..92664267 100644 --- a/src/lib_rdi_make/rdi_make.h +++ b/src/lib_rdi_make/rdi_make.h @@ -996,6 +996,7 @@ struct RDIM_ScopeChunkList typedef struct RDIM_BakeParams RDIM_BakeParams; struct RDIM_BakeParams { + RDIM_SubsetFlags subset_flags; RDIM_TopLevelInfo top_level_info; RDIM_BinarySectionList binary_sections; RDIM_UnitChunkList units; diff --git a/src/rdi_from_dwarf/rdi_from_dwarf.c b/src/rdi_from_dwarf/rdi_from_dwarf.c index 8c7b1053..f8a067f0 100644 --- a/src/rdi_from_dwarf/rdi_from_dwarf.c +++ b/src/rdi_from_dwarf/rdi_from_dwarf.c @@ -2849,6 +2849,7 @@ d2r_convert(Arena *arena, D2R_ConvertParams *params) lane_sync(); RDIM_BakeParams bake_params = {0}; + bake_params.subset_flags = params->subset_flags; bake_params.top_level_info = top_level_info; bake_params.binary_sections = binary_sections; bake_params.units = units; @@ -2866,4 +2867,3 @@ d2r_convert(Arena *arena, D2R_ConvertParams *params) scratch_end(scratch); return bake_params; } - diff --git a/src/rdi_from_pdb/rdi_from_pdb.c b/src/rdi_from_pdb/rdi_from_pdb.c index 9724bebb..455e4e52 100644 --- a/src/rdi_from_pdb/rdi_from_pdb.c +++ b/src/rdi_from_pdb/rdi_from_pdb.c @@ -4421,6 +4421,7 @@ p2r_convert(Arena *arena, P2R_ConvertParams *params) } //- rjf: fill + result.subset_flags = params->subset_flags; result.top_level_info = top_level_info; result.binary_sections = binary_sections; result.units = all_units; diff --git a/src/rdi_make/rdi_make_local.c b/src/rdi_make/rdi_make_local.c index 3cc1ecb3..ff5cfe42 100644 --- a/src/rdi_make/rdi_make_local.c +++ b/src/rdi_make/rdi_make_local.c @@ -1039,6 +1039,16 @@ rdim_bake(Arena *arena, RDIM_BakeParams *params) ////////////////////////////////////////////////////////////// //- rjf: @rdim_bake_stage build name maps // + B32 name_maps_need_build[RDI_NameMapKind_COUNT] = {0}; + { + name_maps_need_build[RDI_NameMapKind_GlobalVariables] = !!(params->subset_flags & RDIM_SubsetFlag_GlobalVariableNameMap); + name_maps_need_build[RDI_NameMapKind_ThreadVariables] = !!(params->subset_flags & RDIM_SubsetFlag_ThreadVariableNameMap); + name_maps_need_build[RDI_NameMapKind_Constants] = !!(params->subset_flags & RDIM_SubsetFlag_ConstantNameMap); + name_maps_need_build[RDI_NameMapKind_Procedures] = !!(params->subset_flags & RDIM_SubsetFlag_ProcedureNameMap); + name_maps_need_build[RDI_NameMapKind_Types] = !!(params->subset_flags & RDIM_SubsetFlag_TypeNameMap); + name_maps_need_build[RDI_NameMapKind_LinkNameProcedures] = !!(params->subset_flags & RDIM_SubsetFlag_LinkNameProcedureNameMap); + name_maps_need_build[RDI_NameMapKind_NormalSourcePaths] = !!(params->subset_flags & RDIM_SubsetFlag_NormalSourcePathNameMap); + } RDIM_BakeNameMapTopology *bake_name_maps_tops = 0; RDIM_BakeNameMap **bake_name_maps = 0; ProfScope("build name maps") @@ -1081,6 +1091,7 @@ rdim_bake(Arena *arena, RDIM_BakeParams *params) //- rjf: wide build for EachNonZeroEnumVal(RDI_NameMapKind, k) ProfScope("name map build %.*s", str8_varg(rdi_string_from_name_map_kind(k))) { + if(!name_maps_need_build[k]) { continue; } RDIM_BakeNameMapTopology *top = &bake_name_maps_tops[k]; lane_maps[k][lane_idx()] = rdim_bake_name_map_make(scratch.arena, top); RDIM_BakeNameMap *map = lane_maps[k][lane_idx()]; @@ -1144,12 +1155,14 @@ rdim_bake(Arena *arena, RDIM_BakeParams *params) { for EachNonZeroEnumVal(RDI_NameMapKind, k) { + if(!name_maps_need_build[k]) { continue; } bake_name_maps[k] = rdim_bake_name_map_make(arena, &bake_name_maps_tops[k]); } } lane_sync(); for EachNonZeroEnumVal(RDI_NameMapKind, k) ProfScope("name map join & sort %.*s", str8_varg(rdi_string_from_name_map_kind(k))) { + if(!name_maps_need_build[k]) { continue; } RDIM_BakeNameMapTopology *top = &bake_name_maps_tops[k]; RDIM_BakeNameMap *map = bake_name_maps[k]; @@ -1261,6 +1274,7 @@ rdim_bake(Arena *arena, RDIM_BakeParams *params) //- rjf: bake runs of name map match lists for EachNonZeroEnumVal(RDI_NameMapKind, k) ProfScope("bake runs of name map match lists (%.*s)", str8_varg(rdi_string_from_name_map_kind(k))) { + if(!name_maps_need_build[k]) { continue; } RDIM_BakeNameMapTopology *name_map_top = &bake_name_maps_tops[k]; RDIM_BakeNameMap *name_map = bake_name_maps[k]; Rng1U64 slot_idx_range = lane_range(name_map_top->slots_count); @@ -1537,6 +1551,7 @@ rdim_bake(Arena *arena, RDIM_BakeParams *params) lane_sync(); for EachNonZeroEnumVal(RDI_NameMapKind, k) { + if(!name_maps_need_build[k]) { continue; } RDIM_BakeNameMapTopology *top = &bake_name_maps_tops[k]; RDIM_BakeNameMap *map = bake_name_maps[k]; Rng1U64 range = lane_range(top->slots_count); @@ -1613,6 +1628,7 @@ rdim_bake(Arena *arena, RDIM_BakeParams *params) { for EachNonZeroEnumVal(RDI_NameMapKind, k) ProfScope("wide fill (%.*s)", str8_varg(rdi_string_from_name_map_kind(k))) { + if(!name_maps_need_build[k]) { continue; } RDI_U64 write_node_off = rdim_shared->lane_name_map_node_offs[k][lane_idx()]; RDIM_BakeNameMapTopology *top = &bake_name_maps_tops[k]; U64 slots_count = top->slots_count;