use the make library to generate RDI

This commit is contained in:
Nikita Smith
2026-06-02 12:10:49 -07:00
committed by Ryan Fleury
parent 4e44a3c271
commit 4ff6d2cc6c
14 changed files with 100 additions and 9635 deletions
-157
View File
@@ -162,120 +162,6 @@ typedef struct
String8List *maps;
} LNK_TypeNameReplacer;
////////////////////////////////
// RDI
typedef struct
{
String8 name;
U64 leaf_idx;
} LNK_UDTNameBucket;
typedef struct
{
U64 leaf_count;
U8 **leaf_arr;
Rng1U64 *ranges;
U64 buckets_cap;
LNK_UDTNameBucket **buckets;
} LNK_BuildUDTNameHashTableTask;
typedef struct
{
CV_DebugT debug_t;
CV_TypeIndex ti_lo;
Rng1U64 *ranges;
U64 udt_name_buckets_cap;
LNK_UDTNameBucket **udt_name_buckets;
CV_TypeIndex *fwdmap;
} LNK_BuildUDTFwdMapTask;
typedef struct
{
U64 leaf_count[CV_TypeIndexSource_COUNT];
U8 **leaf_arr[CV_TypeIndexSource_COUNT];
U64 type_cap;
U64 udt_cap;
RDIB_TypeRef variadic_type_ref;
Rng1U64 *itype_ranges;
U64 udt_name_bucket_cap;
LNK_UDTNameBucket **udt_name_buckets;
RDIB_Type **tpi_itype_map;
RDIB_TypeChunkList *rdib_types_lists;
RDIB_TypeChunkList *rdib_types_struct_lists;
RDIB_TypeChunkList *rdib_types_union_lists;
RDIB_TypeChunkList *rdib_types_enum_lists;
RDIB_TypeChunkList *rdib_types_params_lists;
RDIB_TypeChunkList *rdib_types_udt_members_lists;
RDIB_TypeChunkList *rdib_types_enum_members_lists;
RDIB_UDTMemberChunkList *rdib_udt_members_lists;
RDIB_UDTMemberChunkList *rdib_enum_members_lists;
Rng1U64 *ranges;
} LNK_ConvertTypesToRDI;
typedef struct
{
U64 obj_idx;
RDIB_SourceFile *src_file;
} LNK_SourceFileBucket;
typedef struct
{
LNK_Obj **obj_arr;
CV_DebugS *debug_s_arr;
U64 total_src_file_count;
LNK_SourceFileBucket **src_file_buckets;
U64 src_file_buckets_cap;
} LNK_ConvertSourceFilesToRDITask;
typedef struct
{
CV_Arch arch;
CV_Language language;
String8 compiler_name;
} LNK_CodeViewCompilerInfo;
typedef struct
{
COFF_SectionHeaderArray image_sects;
LNK_Obj **obj_arr;
CV_DebugS *debug_s_arr;
U64 leaf_arr_count_ipi;
U8 **leaf_arr_ipi;
LNK_SymbolInput *symbol_inputs;
Rng1U64 ipi_itype_range;
Rng1U64 tpi_itype_range;
RDIB_Type **tpi_itype_map;
U64 src_file_buckets_cap;
LNK_SourceFileBucket **src_file_buckets;
LNK_UDTNameBucket **udt_name_buckets;
U64 line_table_cap;
U64 udt_name_buckets_cap;
U64 src_file_chunk_cap;
U64 symbol_chunk_cap;
U64 unit_chunk_cap;
U64 inline_site_cap;
RDIB_LineTable *null_line_table;
HashTable *extern_symbol_voff_ht;
LNK_CodeViewCompilerInfo *comp_info_arr;
CV_InlineeLinesAccel **inlinee_lines_accel_arr;
RDIB_InlineSiteChunk **inline_site_chunks;
// output
RDIB_UnitChunk *units;
RDIB_VariableChunkList *locals;
RDIB_ScopeChunkList *scopes;
RDIB_VariableChunkList *extern_gvars;
RDIB_VariableChunkList *static_gvars;
RDIB_VariableChunkList *extern_tvars;
RDIB_VariableChunkList *static_tvars;
RDIB_ProcedureChunkList *extern_procs;
RDIB_ProcedureChunkList *static_procs;
RDIB_InlineSiteChunkList *inline_sites;
RDIB_LineTableChunkList *line_tables;
} LNK_ConvertUnitToRDITask;
////////////////////////////////
// CodeView
@@ -296,46 +182,3 @@ internal void lnk_replace_type_names_with_hashes (TP_Context *tp, TP
internal String8List lnk_build_pdb(TP_Context *tp, TP_Arena *tp_arena, String8 image_data, LNK_Config *config, LNK_SymbolTable *symtab, LNK_CodeViewInput *cv, LNK_MergedTypes cv_types);
////////////////////////////////
// RDI
internal U64 lnk_udt_name_hash_table_hash (String8 string);
internal LNK_UDTNameBucket ** lnk_udt_name_hash_table_from_leaf_arr(TP_Context *tp, TP_Arena *arena, U64 leaf_count, U8 **leaf_arr, U64 *buckets_cap_out);
internal LNK_UDTNameBucket * lnk_udt_name_hash_table_lookup (LNK_UDTNameBucket **buckets, U64 cap, String8 name);
internal CV_TypeIndex * lnk_build_udt_fwdmap (TP_Context *tp, Arena *arena, CV_DebugT debug_t, CV_TypeIndex ti_lo, LNK_UDTNameBucket **udt_name_buckets, U64 udt_name_buckets_cap);
internal RDIB_TypeRef lnk_rdib_type_from_itype (LNK_ConvertTypesToRDI *task, CV_TypeIndex itype);
internal RDI_MemberKind lnk_rdib_method_kind_from_cv_prop (CV_MethodProp prop);
internal LNK_SourceFileBucket * lnk_src_file_hash_table_hash (String8 file_path, CV_C13ChecksumKind checksum_kind, String8 checksum_bytes);
internal LNK_SourceFileBucket * lnk_src_file_hash_table_lookup_slot(LNK_SourceFileBucket **src_file_buckets, U64 src_file_buckets_cap, U64 hash, String8 file_path, CV_C13ChecksumKind checksum_kind, String8 checksum_bytes);
internal String8List
lnk_build_rad_debug_info(TP_Context *tp,
TP_Arena *tp_arena,
OperatingSystem os,
RDI_Arch arch,
String8 image_name,
String8 image_data,
U64 obj_count,
LNK_Obj **obj_arr,
CV_DebugS *debug_s_arr,
U64 symbol_input_count,
LNK_SymbolInput *symbol_inputs,
CV_SymbolListArray *parsed_symbols,
LNK_MergedTypes types);
internal U64 lnk_udt_name_hash_table_hash (String8 string);
internal LNK_UDTNameBucket ** lnk_udt_name_hash_table_from_leaf_arr(TP_Context *tp, TP_Arena *arena, U64 leaf_count, U8 **leaf_arr, U64 *buckets_cap_out);
internal LNK_UDTNameBucket * lnk_udt_name_hash_table_lookup (LNK_UDTNameBucket **buckets, U64 cap, String8 name);
internal CV_TypeIndex * lnk_build_udt_fwdmap(TP_Context *tp,
Arena *arena,
CV_DebugT debug_t,
CV_TypeIndex ti_lo,
LNK_UDTNameBucket **udt_name_buckets,
U64 udt_name_buckets_cap);
internal void lnk_init_rdib_itype_map (Arena *arena, RDI_Arch arch, RDIB_Type **itype_map, RDIB_TypeChunkList *rdib_types_list);
internal RDIB_TypeRef lnk_rdib_type_from_itype (LNK_ConvertTypesToRDI *task, CV_TypeIndex itype);
internal RDI_MemberKind lnk_rdib_method_kind_from_cv_prop(CV_MethodProp prop);