From 923714c3c9253601e19b960abc18a8f0684b136a Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Tue, 20 Feb 2024 14:07:58 -0800 Subject: [PATCH] raddbgi_make: split final blob flattening & encoding from 'baking' phase --- src/lib_raddbgi_make/raddbgi_make.c | 31 +++++++++++--------- src/lib_raddbgi_make/raddbgi_make.h | 7 +++-- src/raddbg/raddbg.c | 3 +- src/raddbgi_from_pdb/raddbgi_from_pdb_main.c | 3 +- 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/lib_raddbgi_make/raddbgi_make.c b/src/lib_raddbgi_make/raddbgi_make.c index fc7331a1..c2b1d974 100644 --- a/src/lib_raddbgi_make/raddbgi_make.c +++ b/src/lib_raddbgi_make/raddbgi_make.c @@ -1368,12 +1368,10 @@ rdim_vmap_from_markers(RDIM_Arena *arena, RDIM_VMapMarker *markers, RDIM_SortKey //- rjf: main baking entry point -RDI_PROC RDIM_String8List -rdim_bake(RDIM_Arena *arena, RDIM_BakeParams *params) +RDI_PROC RDIM_BakeSectionList +rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params) { RDIM_Temp scratch = rdim_scratch_begin(&arena, 1); - RDIM_String8List blobs; - rdim_memzero_struct(&blobs); ////////////////////////////// //- NOTE(rjf): On the ordering of baking phases: @@ -2661,30 +2659,37 @@ rdim_bake(RDIM_Arena *arena, RDIM_BakeParams *params) rdim_bake_section_list_push_new(arena, §ions, idx_data, sizeof(RDI_U32)*idx_runs.idx_count, RDI_DataSectionTag_IndexRuns); } - ////////////////////////////// - //- rjf: finalize: build blob strings for header & all sections - // - RDIM_ProfScope("finalize: build blob strings for header & all sections") + rdim_scratch_end(scratch); + return sections; +} + +//- rjf: sections -> flattened serialized blobs + +RDI_PROC RDIM_String8List +rdim_blobs_from_bake_sections(RDIM_Arena *arena, RDIM_BakeSectionList *sections) +{ + RDIM_String8List blobs; + rdim_memzero_struct(&blobs); { // rjf: push empty header & data section table RDI_Header *baked_rdi_header = rdim_push_array(arena, RDI_Header, 1); - RDI_DataSection *baked_rdi_sections = rdim_push_array(arena, RDI_DataSection, sections.count); + RDI_DataSection *baked_rdi_sections = rdim_push_array(arena, RDI_DataSection, sections->count); rdim_str8_list_push(arena, &blobs, rdim_str8_struct(baked_rdi_header)); rdim_str8_list_push_align(arena, &blobs, 8); U32 data_section_off = (U32)blobs.total_size; - rdim_str8_list_push(arena, &blobs, rdim_str8((RDI_U8 *)baked_rdi_sections, sizeof(RDI_DataSection)*sections.count)); + rdim_str8_list_push(arena, &blobs, rdim_str8((RDI_U8 *)baked_rdi_sections, sizeof(RDI_DataSection)*sections->count)); // rjf: fill baked header { baked_rdi_header->magic = RDI_MAGIC_CONSTANT; baked_rdi_header->encoding_version = RDI_ENCODING_VERSION; baked_rdi_header->data_section_off = data_section_off; - baked_rdi_header->data_section_count = sections.count; + baked_rdi_header->data_section_count = sections->count; } // rjf: fill baked data section table U64 dst_idx = 0; - for(RDIM_BakeSectionNode *src_n = sections.first; src_n != 0; src_n = src_n->next, dst_idx += 1) + for(RDIM_BakeSectionNode *src_n = sections->first; src_n != 0; src_n = src_n->next, dst_idx += 1) { RDIM_BakeSection *src = &src_n->v; RDI_DataSection *dst = baked_rdi_sections + dst_idx; @@ -2702,7 +2707,5 @@ rdim_bake(RDIM_Arena *arena, RDIM_BakeParams *params) dst->unpacked_size = src->size; } } - - rdim_scratch_end(scratch); return blobs; } diff --git a/src/lib_raddbgi_make/raddbgi_make.h b/src/lib_raddbgi_make/raddbgi_make.h index d55dfe3d..1e405bdf 100644 --- a/src/lib_raddbgi_make/raddbgi_make.h +++ b/src/lib_raddbgi_make/raddbgi_make.h @@ -1083,6 +1083,9 @@ RDI_PROC void rdim_bake_name_map_push(RDIM_Arena *arena, RDIM_BakeNameMap *map, RDI_PROC RDIM_VMap rdim_vmap_from_markers(RDIM_Arena *arena, RDIM_VMapMarker *markers, RDIM_SortKey *keys, RDI_U64 marker_count); //- rjf: main baking entry point -RDI_PROC RDIM_String8List rdim_bake(RDIM_Arena *arena, RDIM_BakeParams *params); +RDI_PROC RDIM_BakeSectionList rdim_bake_sections_from_params(RDIM_Arena *arena, RDIM_BakeParams *params); -#endif // RDI_MAKE_H +//- rjf: sections -> flattened serialized blobs +RDI_PROC RDIM_String8List rdim_blobs_from_bake_sections(RDIM_Arena *arena, RDIM_BakeSectionList *sections); + +#endif // RADDBGI_MAKE_H diff --git a/src/raddbg/raddbg.c b/src/raddbg/raddbg.c index ac1017a7..218e828d 100644 --- a/src/raddbg/raddbg.c +++ b/src/raddbg/raddbg.c @@ -647,7 +647,8 @@ entry_point(int argc, char **argv) bake_params.procedures = convert_out->procedures; bake_params.scopes = convert_out->scopes; } - bake_strings = rdim_bake(scratch.arena, &bake_params); + RDIM_BakeSectionList sections = rdim_bake_sections_from_params(scratch.arena, &bake_params); + bake_strings = rdim_blobs_from_bake_sections(scratch.arena, §ions); } //- rjf: write diff --git a/src/raddbgi_from_pdb/raddbgi_from_pdb_main.c b/src/raddbgi_from_pdb/raddbgi_from_pdb_main.c index 9273294a..2aa4eb29 100644 --- a/src/raddbgi_from_pdb/raddbgi_from_pdb_main.c +++ b/src/raddbgi_from_pdb/raddbgi_from_pdb_main.c @@ -97,7 +97,8 @@ main(int argc, char **argv) bake_params.procedures = convert_out->procedures; bake_params.scopes = convert_out->scopes; } - bake_strings = rdim_bake(arena, &bake_params); + RDIM_BakeSectionList sections = rdim_bake_sections_from_params(arena, &bake_params); + bake_strings = rdim_blobs_from_bake_sections(arena, §ions); } //- rjf: write