mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 07:32:23 -07:00
eliminate all old raddbgi_make and raddbgi_from_pdb code
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -947,352 +947,6 @@ struct RDIM_VMapMarker
|
||||
RDI_U32 begin_range;
|
||||
};
|
||||
|
||||
#if 0
|
||||
////////////////////////////////
|
||||
//~ rjf: Root Construction Bundle Types
|
||||
|
||||
typedef struct RDIM_RootParams RDIM_RootParams;
|
||||
struct RDIM_RootParams
|
||||
{
|
||||
RDI_U64 addr_size;
|
||||
RDI_U32 bucket_count_units; // optional; default chosen if 0
|
||||
RDI_U32 bucket_count_symbols; // optional; default chosen if 0
|
||||
RDI_U32 bucket_count_scopes; // optional; default chosen if 0
|
||||
RDI_U32 bucket_count_locals; // optional; default chosen if 0
|
||||
RDI_U32 bucket_count_types; // optional; default chosen if 0
|
||||
RDI_U64 bucket_count_type_constructs; // optional; default chosen if 0
|
||||
};
|
||||
|
||||
typedef struct RDIM_Root RDIM_Root;
|
||||
struct RDIM_Root
|
||||
{
|
||||
RDIM_Arena *arena;
|
||||
RDIM_MsgList msgs;
|
||||
|
||||
//////// Contextual Information
|
||||
|
||||
RDI_U64 addr_size;
|
||||
|
||||
//////// Info Declared By User
|
||||
|
||||
RDI_U64 total_member_count;
|
||||
RDI_U64 total_enum_val_count;
|
||||
|
||||
// symbols
|
||||
RDIM_Symbol *first_symbol;
|
||||
RDIM_Symbol *last_symbol;
|
||||
union
|
||||
{
|
||||
RDI_U64 symbol_count;
|
||||
RDI_U64 symbol_kind_counts[RDIM_SymbolKind_COUNT];
|
||||
};
|
||||
|
||||
RDIM_Scope *first_scope;
|
||||
RDIM_Scope *last_scope;
|
||||
RDI_U64 scope_count;
|
||||
RDI_U64 scope_voff_count;
|
||||
|
||||
RDIM_Local *first_local;
|
||||
RDIM_Local *last_local;
|
||||
RDI_U64 local_count;
|
||||
RDI_U64 location_count;
|
||||
|
||||
// name maps
|
||||
RDIM_NameMap *name_maps[RDI_NameMapKind_COUNT];
|
||||
|
||||
//////// Handle Relationship Maps
|
||||
|
||||
RDIM_U64ToPtrMap unit_map;
|
||||
RDIM_U64ToPtrMap symbol_map;
|
||||
RDIM_U64ToPtrMap scope_map;
|
||||
RDIM_U64ToPtrMap local_map;
|
||||
RDIM_U64ToPtrMap type_from_id_map;
|
||||
RDIM_Str8ToPtrMap construct_map;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Baking Phase Types
|
||||
|
||||
//- rjf: bake data section data structure
|
||||
|
||||
typedef struct RDIM_DSectionNode RDIM_DSectionNode;
|
||||
struct RDIM_DSectionNode
|
||||
{
|
||||
RDIM_DSectionNode *next;
|
||||
void *data;
|
||||
RDI_U64 size;
|
||||
RDI_DataSectionTag tag;
|
||||
};
|
||||
|
||||
typedef struct RDIM_DSections RDIM_DSections;
|
||||
struct RDIM_DSections
|
||||
{
|
||||
RDIM_DSectionNode *first;
|
||||
RDIM_DSectionNode *last;
|
||||
RDI_U32 count;
|
||||
};
|
||||
|
||||
//- rjf: bake string data structure
|
||||
|
||||
typedef struct RDIM_StringNode RDIM_StringNode;
|
||||
struct RDIM_StringNode
|
||||
{
|
||||
RDIM_StringNode *order_next;
|
||||
RDIM_StringNode *bucket_next;
|
||||
RDIM_String8 str;
|
||||
RDI_U64 hash;
|
||||
RDI_U32 idx;
|
||||
};
|
||||
|
||||
typedef struct RDIM_Strings RDIM_Strings;
|
||||
struct RDIM_Strings
|
||||
{
|
||||
RDIM_StringNode *order_first;
|
||||
RDIM_StringNode *order_last;
|
||||
RDIM_StringNode **buckets;
|
||||
RDI_U64 buckets_count;
|
||||
RDI_U64 bucket_collision_count;
|
||||
RDI_U32 count;
|
||||
};
|
||||
|
||||
//- rjf: index run baking data structure
|
||||
|
||||
typedef struct RDIM_IdxRunNode RDIM_IdxRunNode;
|
||||
struct RDIM_IdxRunNode
|
||||
{
|
||||
RDIM_IdxRunNode *order_next;
|
||||
RDIM_IdxRunNode *bucket_next;
|
||||
RDI_U32 *idx_run;
|
||||
RDI_U64 hash;
|
||||
RDI_U32 count;
|
||||
RDI_U32 first_idx;
|
||||
};
|
||||
|
||||
typedef struct RDIM_IdxRuns RDIM_IdxRuns;
|
||||
struct RDIM_IdxRuns
|
||||
{
|
||||
RDIM_IdxRunNode *order_first;
|
||||
RDIM_IdxRunNode *order_last;
|
||||
RDIM_IdxRunNode **buckets;
|
||||
RDI_U64 buckets_count;
|
||||
RDI_U64 bucket_collision_count;
|
||||
RDI_U32 count;
|
||||
RDI_U32 idx_count;
|
||||
};
|
||||
|
||||
//- rjf: source file & file path baking data structures
|
||||
|
||||
typedef struct RDIM_PathNode RDIM_PathNode;
|
||||
struct RDIM_PathNode
|
||||
{
|
||||
RDIM_PathNode *next_order;
|
||||
RDIM_PathNode *parent;
|
||||
RDIM_PathNode *first_child;
|
||||
RDIM_PathNode *last_child;
|
||||
RDIM_PathNode *next_sibling;
|
||||
RDIM_String8 name;
|
||||
struct RDIM_SrcNode *src_file;
|
||||
RDI_U32 idx;
|
||||
};
|
||||
|
||||
typedef struct RDIM_LineMapFragment RDIM_LineMapFragment;
|
||||
struct RDIM_LineMapFragment
|
||||
{
|
||||
RDIM_LineMapFragment *next;
|
||||
RDIM_LineSequenceNode *sequence;
|
||||
};
|
||||
|
||||
typedef struct RDIM_SrcNode RDIM_SrcNode;
|
||||
struct RDIM_SrcNode
|
||||
{
|
||||
RDIM_SrcNode *next;
|
||||
RDIM_PathNode *path_node;
|
||||
RDI_U32 idx;
|
||||
|
||||
RDIM_String8 normal_full_path;
|
||||
|
||||
// place to gather the line info attached to this src file
|
||||
RDIM_LineMapFragment *first_fragment;
|
||||
RDIM_LineMapFragment *last_fragment;
|
||||
|
||||
// place to put the 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_PathTree RDIM_PathTree;
|
||||
struct RDIM_PathTree
|
||||
{
|
||||
RDIM_PathNode *first;
|
||||
RDIM_PathNode *last;
|
||||
RDI_U32 count;
|
||||
RDIM_PathNode root;
|
||||
RDIM_SrcNode *src_first;
|
||||
RDIM_SrcNode *src_last;
|
||||
RDI_U32 src_count;
|
||||
};
|
||||
|
||||
//- rjf: line info baking data structures
|
||||
|
||||
typedef struct RDIM_UnitLinesCombined RDIM_UnitLinesCombined;
|
||||
struct RDIM_UnitLinesCombined
|
||||
{
|
||||
RDI_U64 *voffs;
|
||||
RDI_Line *lines;
|
||||
RDI_U16 *cols;
|
||||
RDI_U32 line_count;
|
||||
};
|
||||
|
||||
typedef struct RDIM_SrcLinesCombined RDIM_SrcLinesCombined;
|
||||
struct RDIM_SrcLinesCombined
|
||||
{
|
||||
RDI_U32 *line_nums;
|
||||
RDI_U32 *line_ranges;
|
||||
RDI_U64 *voffs;
|
||||
RDI_U32 line_count;
|
||||
RDI_U32 voff_count;
|
||||
};
|
||||
|
||||
typedef struct RDIM_SrcLineMapVoffBlock RDIM_SrcLineMapVoffBlock;
|
||||
struct RDIM_SrcLineMapVoffBlock
|
||||
{
|
||||
RDIM_SrcLineMapVoffBlock *next;
|
||||
RDI_U64 voff;
|
||||
};
|
||||
|
||||
typedef struct RDIM_SrcLineMapBucket RDIM_SrcLineMapBucket;
|
||||
struct RDIM_SrcLineMapBucket
|
||||
{
|
||||
RDIM_SrcLineMapBucket *order_next;
|
||||
RDIM_SrcLineMapBucket *hash_next;
|
||||
RDI_U32 line_num;
|
||||
RDIM_SrcLineMapVoffBlock *first_voff_block;
|
||||
RDIM_SrcLineMapVoffBlock *last_voff_block;
|
||||
RDI_U64 voff_count;
|
||||
};
|
||||
|
||||
//- rjf: vmap baking data structure
|
||||
|
||||
typedef struct RDIM_VMap RDIM_VMap;
|
||||
struct RDIM_VMap
|
||||
{
|
||||
RDI_VMapEntry *vmap; // [count + 1]
|
||||
RDI_U32 count;
|
||||
};
|
||||
|
||||
typedef struct RDIM_VMapMarker RDIM_VMapMarker;
|
||||
struct RDIM_VMapMarker
|
||||
{
|
||||
RDI_U32 idx;
|
||||
RDI_U32 begin_range;
|
||||
};
|
||||
|
||||
typedef struct RDIM_VMapRangeTracker RDIM_VMapRangeTracker;
|
||||
struct RDIM_VMapRangeTracker
|
||||
{
|
||||
RDIM_VMapRangeTracker *next;
|
||||
RDI_U32 idx;
|
||||
};
|
||||
|
||||
//- rjf: type data baking types
|
||||
|
||||
typedef struct RDIM_TypeData RDIM_TypeData;
|
||||
struct RDIM_TypeData
|
||||
{
|
||||
RDI_TypeNode *type_nodes;
|
||||
RDI_U32 type_node_count;
|
||||
|
||||
RDI_UDT *udts;
|
||||
RDI_U32 udt_count;
|
||||
|
||||
RDI_Member *members;
|
||||
RDI_U32 member_count;
|
||||
|
||||
RDI_EnumMember *enum_members;
|
||||
RDI_U32 enum_member_count;
|
||||
};
|
||||
|
||||
//- rjf: symbol data baking types
|
||||
|
||||
typedef struct RDIM_SymbolData RDIM_SymbolData;
|
||||
struct RDIM_SymbolData
|
||||
{
|
||||
RDI_GlobalVariable *global_variables;
|
||||
RDI_U32 global_variable_count;
|
||||
|
||||
RDIM_VMap *global_vmap;
|
||||
|
||||
RDI_ThreadVariable *thread_variables;
|
||||
RDI_U32 thread_variable_count;
|
||||
|
||||
RDI_Procedure *procedures;
|
||||
RDI_U32 procedure_count;
|
||||
|
||||
RDI_Scope *scopes;
|
||||
RDI_U32 scope_count;
|
||||
|
||||
RDI_U64 *scope_voffs;
|
||||
RDI_U32 scope_voff_count;
|
||||
|
||||
RDIM_VMap *scope_vmap;
|
||||
|
||||
RDI_Local *locals;
|
||||
RDI_U32 local_count;
|
||||
|
||||
RDI_LocationBlock *location_blocks;
|
||||
RDI_U32 location_block_count;
|
||||
|
||||
void *location_data;
|
||||
RDI_U32 location_data_size;
|
||||
};
|
||||
|
||||
//- rjf: name map baking types
|
||||
|
||||
typedef struct RDIM_NameMapSemiNode RDIM_NameMapSemiNode;
|
||||
struct RDIM_NameMapSemiNode
|
||||
{
|
||||
RDIM_NameMapSemiNode *next;
|
||||
RDIM_NameMapNode *node;
|
||||
};
|
||||
|
||||
typedef struct RDIM_NameMapSemiBucket RDIM_NameMapSemiBucket;
|
||||
struct RDIM_NameMapSemiBucket
|
||||
{
|
||||
RDIM_NameMapSemiNode *first;
|
||||
RDIM_NameMapSemiNode *last;
|
||||
RDI_U64 count;
|
||||
};
|
||||
|
||||
typedef struct RDIM_NameMapBaked RDIM_NameMapBaked;
|
||||
struct RDIM_NameMapBaked
|
||||
{
|
||||
RDI_NameMapBucket *buckets;
|
||||
RDI_NameMapNode *nodes;
|
||||
RDI_U32 bucket_count;
|
||||
RDI_U32 node_count;
|
||||
};
|
||||
|
||||
//- rjf: bundle baking context type
|
||||
|
||||
typedef struct RDIM_BakeParams RDIM_BakeParams;
|
||||
struct RDIM_BakeParams
|
||||
{
|
||||
RDI_U64 strings_bucket_count;
|
||||
RDI_U64 idx_runs_bucket_count;
|
||||
};
|
||||
|
||||
typedef struct RDIM_BakeCtx RDIM_BakeCtx;
|
||||
struct RDIM_BakeCtx
|
||||
{
|
||||
RDIM_Arena *arena;
|
||||
RDIM_Strings strs;
|
||||
RDIM_IdxRuns idxs;
|
||||
RDIM_PathTree *tree;
|
||||
};
|
||||
#endif
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Basic Helpers
|
||||
|
||||
@@ -1431,150 +1085,4 @@ RDI_PROC RDIM_VMap rdim_vmap_from_markers(RDIM_Arena *arena, RDIM_VMapMarker *ma
|
||||
//- rjf: main baking entry point
|
||||
RDI_PROC RDIM_String8List rdim_bake(RDIM_Arena *arena, RDIM_BakeParams *params);
|
||||
|
||||
|
||||
#if 0
|
||||
////////////////////////////////
|
||||
//~ rjf: Loose Debug Info Construction (Anything -> Loose) Functions
|
||||
|
||||
//- rjf: u64 -> ptr map
|
||||
RDI_PROC void rdim_u64toptr_map_init(RDIM_Arena *arena, RDIM_U64ToPtrMap *map, RDI_U64 bucket_count);
|
||||
RDI_PROC void rdim_u64toptr_map_lookup(RDIM_U64ToPtrMap *map, RDI_U64 key, RDI_U64 hash, RDIM_U64ToPtrLookup *lookup_out);
|
||||
RDI_PROC void rdim_u64toptr_map_insert(RDIM_Arena *arena, RDIM_U64ToPtrMap *map, RDI_U64 key, RDI_U64 hash, RDIM_U64ToPtrLookup *lookup, void *ptr);
|
||||
|
||||
//- rjf: string8 -> ptr map
|
||||
RDI_PROC void rdim_str8toptr_map_init(RDIM_Arena *arena, RDIM_Str8ToPtrMap *map, RDI_U64 bucket_count);
|
||||
RDI_PROC void*rdim_str8toptr_map_lookup(RDIM_Str8ToPtrMap *map, RDIM_String8 key, RDI_U64 hash);
|
||||
RDI_PROC void rdim_str8toptr_map_insert(RDIM_Arena *arena, RDIM_Str8ToPtrMap *map, RDIM_String8 key, RDI_U64 hash, void *ptr);
|
||||
|
||||
//- rjf: root creation
|
||||
RDI_PROC RDIM_Root* rdim_root_alloc(RDIM_RootParams *params);
|
||||
RDI_PROC void rdim_root_release(RDIM_Root *root);
|
||||
|
||||
//- rjf: error accumulation
|
||||
RDI_PROC void rdim_push_msg(RDIM_Root *root, RDIM_String8 string);
|
||||
RDI_PROC void rdim_push_msgf(RDIM_Root *root, char *fmt, ...);
|
||||
RDI_PROC RDIM_Msg* rdim_first_msg_from_root(RDIM_Root *root);
|
||||
|
||||
//- rjf: type info lookups/reservations
|
||||
RDI_PROC RDIM_Type* rdim_type_from_id(RDIM_Root *root, RDI_U64 type_user_id, RDI_U64 type_user_id_hash);
|
||||
RDI_PROC RDIM_Reservation* rdim_type_reserve_id(RDIM_Root *root, RDI_U64 type_user_id, RDI_U64 type_user_id_hash);
|
||||
RDI_PROC void rdim_type_fill_id(RDIM_Root *root, RDIM_Reservation *res, RDIM_Type *type);
|
||||
|
||||
//- rjf: nil/singleton types
|
||||
RDI_PROC RDI_S32 rdim_type_is_unhandled_nil(RDIM_Root *root, RDIM_Type *type);
|
||||
RDI_PROC RDIM_Type* rdim_type_handled_nil(RDIM_Root *root);
|
||||
RDI_PROC RDIM_Type* rdim_type_nil(RDIM_Root *root);
|
||||
RDI_PROC RDIM_Type* rdim_type_variadic(RDIM_Root *root);
|
||||
|
||||
//- rjf: base type info constructors
|
||||
RDI_PROC RDIM_Type* rdim_type_new(RDIM_Root *root);
|
||||
RDI_PROC RDIM_TypeUDT* rdim_type_udt_from_any_type(RDIM_Root *root, RDIM_Type *type);
|
||||
RDI_PROC RDIM_TypeUDT* rdim_type_udt_from_record_type(RDIM_Root *root, RDIM_Type *type);
|
||||
|
||||
//- rjf: basic/operator type construction helpers
|
||||
RDI_PROC RDIM_Type* rdim_type_basic(RDIM_Root *root, RDI_TypeKind type_kind, RDIM_String8 name);
|
||||
RDI_PROC RDIM_Type* rdim_type_modifier(RDIM_Root *root, RDIM_Type *direct_type, RDI_TypeModifierFlags flags);
|
||||
RDI_PROC RDIM_Type* rdim_type_bitfield(RDIM_Root *root, RDIM_Type *direct_type, RDI_U32 bit_off, RDI_U32 bit_count);
|
||||
RDI_PROC RDIM_Type* rdim_type_pointer(RDIM_Root *root, RDIM_Type *direct_type, RDI_TypeKind ptr_type_kind);
|
||||
RDI_PROC RDIM_Type* rdim_type_array(RDIM_Root *root, RDIM_Type *direct_type, RDI_U64 count);
|
||||
RDI_PROC RDIM_Type* rdim_type_proc(RDIM_Root *root, RDIM_Type *return_type, struct RDIM_TypeList *params);
|
||||
RDI_PROC RDIM_Type* rdim_type_method(RDIM_Root *root, RDIM_Type *this_type, RDIM_Type *return_type, struct RDIM_TypeList *params);
|
||||
|
||||
//- rjf: udt type constructors
|
||||
RDI_PROC RDIM_Type* rdim_type_udt(RDIM_Root *root, RDI_TypeKind record_type_kind, RDIM_String8 name, RDI_U64 size);
|
||||
RDI_PROC RDIM_Type* rdim_type_enum(RDIM_Root *root, RDIM_Type *direct_type, RDIM_String8 name);
|
||||
RDI_PROC RDIM_Type* rdim_type_alias(RDIM_Root *root, RDIM_Type *direct_type, RDIM_String8 name);
|
||||
RDI_PROC RDIM_Type* rdim_type_incomplete(RDIM_Root *root, RDI_TypeKind type_kind, RDIM_String8 name);
|
||||
|
||||
//- rjf: type member building
|
||||
RDI_PROC void rdim_type_add_member_data_field(RDIM_Root *root, RDIM_Type *record_type, RDIM_String8 name, RDIM_Type *mem_type, RDI_U32 off);
|
||||
RDI_PROC void rdim_type_add_member_static_data(RDIM_Root *root, RDIM_Type *record_type, RDIM_String8 name, RDIM_Type *mem_type);
|
||||
RDI_PROC void rdim_type_add_member_method(RDIM_Root *root, RDIM_Type *record_type, RDIM_String8 name, RDIM_Type *mem_type);
|
||||
RDI_PROC void rdim_type_add_member_static_method(RDIM_Root *root, RDIM_Type *record_type, RDIM_String8 name, RDIM_Type *mem_type);
|
||||
RDI_PROC void rdim_type_add_member_virtual_method(RDIM_Root *root, RDIM_Type *record_type, RDIM_String8 name, RDIM_Type *mem_type);
|
||||
RDI_PROC void rdim_type_add_member_base(RDIM_Root *root, RDIM_Type *record_type, RDIM_Type *base_type, RDI_U32 off);
|
||||
RDI_PROC void rdim_type_add_member_virtual_base(RDIM_Root *root, RDIM_Type *record_type, RDIM_Type *base_type, RDI_U32 vptr_off, RDI_U32 vtable_off);
|
||||
RDI_PROC void rdim_type_add_member_nested_type(RDIM_Root *root, RDIM_Type *record_type, RDIM_Type *nested_type);
|
||||
RDI_PROC void rdim_type_add_enum_val(RDIM_Root *root, RDIM_Type *enum_type, RDIM_String8 name, RDI_U64 val);
|
||||
|
||||
//- rjf: type source coordinate specifications
|
||||
RDI_PROC void rdim_type_set_source_coordinates(RDIM_Root *root, RDIM_Type *defined_type, RDIM_String8 source_path, RDI_U32 line, RDI_U32 col);
|
||||
|
||||
//- rjf: symbol info building
|
||||
RDI_PROC RDIM_Symbol* rdim_symbol_handle_from_user_id(RDIM_Root *root, RDI_U64 symbol_user_id, RDI_U64 symbol_user_id_hash);
|
||||
RDI_PROC void rdim_symbol_set_info(RDIM_Root *root, RDIM_Symbol *symbol, RDIM_SymbolInfo *info);
|
||||
|
||||
//- rjf: scope info building
|
||||
RDI_PROC RDIM_Scope *rdim_scope_handle_from_user_id(RDIM_Root *root, RDI_U64 scope_user_id, RDI_U64 scope_user_id_hash);
|
||||
RDI_PROC void rdim_scope_set_parent(RDIM_Root *root, RDIM_Scope *scope, RDIM_Scope *parent);
|
||||
RDI_PROC void rdim_scope_add_voff_range(RDIM_Root *root, RDIM_Scope *scope, RDI_U64 voff_first, RDI_U64 voff_opl);
|
||||
RDI_PROC void rdim_scope_recursive_set_symbol(RDIM_Scope *scope, RDIM_Symbol *symbol);
|
||||
|
||||
//- rjf: local info building
|
||||
RDI_PROC RDIM_Local* rdim_local_handle_from_user_id(RDIM_Root *root, RDI_U64 local_user_id, RDI_U64 local_user_id_hash);
|
||||
RDI_PROC void rdim_local_set_basic_info(RDIM_Root *root, RDIM_Local *local, RDIM_LocalInfo *info);
|
||||
RDI_PROC RDIM_LocationSet* rdim_location_set_from_local(RDIM_Root *root, RDIM_Local *local);
|
||||
|
||||
//- rjf: location info building
|
||||
RDI_PROC void rdim_location_set_add_case(RDIM_Root *root, RDIM_LocationSet *locset, RDI_U64 voff_first, RDI_U64 voff_opl, RDIM_Location *location);
|
||||
RDI_PROC RDIM_Location* rdim_location_addr_bytecode_stream(RDIM_Root *root, struct RDIM_EvalBytecode *bytecode);
|
||||
RDI_PROC RDIM_Location* rdim_location_val_bytecode_stream(RDIM_Root *root, struct RDIM_EvalBytecode *bytecode);
|
||||
RDI_PROC RDIM_Location* rdim_location_addr_reg_plus_u16(RDIM_Root *root, RDI_U8 reg_code, RDI_U16 offset);
|
||||
RDI_PROC RDIM_Location* rdim_location_addr_addr_reg_plus_u16(RDIM_Root *root, RDI_U8 reg_code, RDI_U16 offset);
|
||||
RDI_PROC RDIM_Location* rdim_location_val_reg(RDIM_Root *root, RDI_U8 reg_code);
|
||||
|
||||
//- rjf: name map building
|
||||
RDI_PROC RDIM_NameMap* rdim_name_map_for_kind(RDIM_Root *root, RDI_NameMapKind kind);
|
||||
RDI_PROC void rdim_name_map_add_pair(RDIM_Root *root, RDIM_NameMap *map, RDIM_String8 name, RDI_U32 idx);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Debug Info Baking (Loose -> Tight) Functions
|
||||
|
||||
//- rjf: bake context construction
|
||||
RDI_PROC RDIM_BakeCtx* rdim_bake_ctx_begin(RDIM_BakeParams *params);
|
||||
RDI_PROC void rdim_bake_ctx_release(RDIM_BakeCtx *bake_ctx);
|
||||
|
||||
//- rjf: string baking
|
||||
RDI_PROC RDI_U32 rdim_string(RDIM_BakeCtx *bctx, RDIM_String8 str);
|
||||
|
||||
//- rjf: idx run baking
|
||||
RDI_PROC RDI_U64 rdim_idx_run_hash(RDI_U32 *idx_run, RDI_U32 count);
|
||||
RDI_PROC RDI_U32 rdim_idx_run(RDIM_BakeCtx *bctx, RDI_U32 *idx_run, RDI_U32 count);
|
||||
|
||||
//- rjf: data section baking
|
||||
RDI_PROC RDI_U32 rdim_dsection(RDIM_Arena *arena, RDIM_DSections *dss, void *data, RDI_U64 size, RDI_DataSectionTag tag);
|
||||
|
||||
//- rjf: paths baking
|
||||
RDI_PROC RDIM_String8 rdim_normal_string_from_path_node(RDIM_Arena *arena, RDIM_PathNode *node);
|
||||
RDI_PROC RDIM_BakePathNode *rdim_bake_path_tree_push_path_node(RDIM_Arena *arena, RDIM_BakePathTree *tree);
|
||||
RDI_PROC RDIM_BakePathNode *rdim_paths_sub_path(RDIM_BakeCtx *bctx, RDIM_PathNode *dir, RDIM_String8 sub_dir);
|
||||
RDI_PROC RDIM_BakePathNode *rdim_paths_node_from_path(RDIM_BakeCtx *bctx, RDIM_String8 path);
|
||||
RDI_PROC RDI_U32 rdim_paths_idx_from_path(RDIM_BakeCtx *bctx, RDIM_String8 path);
|
||||
RDI_PROC RDIM_BakeSrcNode * rdim_paths_new_src_node(RDIM_BakeCtx *bctx);
|
||||
RDI_PROC RDIM_BakeSrcNode * rdim_paths_src_node_from_path_node(RDIM_BakeCtx *bctx, RDIM_PathNode *path_node);
|
||||
|
||||
//- rjf: per-unit line info baking
|
||||
RDI_PROC RDIM_UnitLinesCombined* rdim_unit_combine_lines(RDIM_Arena *arena, RDIM_BakeCtx *bctx, RDIM_LineSequenceNode *first_seq);
|
||||
|
||||
//- rjf: per-src line info baking
|
||||
RDI_PROC RDIM_SrcLinesCombined* rdim_source_combine_lines(RDIM_Arena *arena, RDIM_LineMapFragment *first);
|
||||
|
||||
//- rjf: vmap baking
|
||||
RDI_PROC RDIM_VMap* rdim_vmap_from_markers(RDIM_Arena *arena, RDIM_VMapMarker *markers, RDIM_SortKey *keys, RDI_U64 marker_count);
|
||||
RDI_PROC RDIM_VMap* rdim_vmap_from_unit_ranges(RDIM_Arena *arena, RDIM_UnitVMapRange *first, RDI_U64 count);
|
||||
|
||||
//- rjf: type info baking
|
||||
RDI_PROC RDI_U32* rdim_idx_run_from_types(RDIM_Arena *arena, RDIM_Type **types, RDI_U32 count);
|
||||
RDI_PROC RDIM_TypeData* rdim_type_data_combine(RDIM_Arena *arena, RDIM_Root *root, RDIM_BakeCtx *bctx);
|
||||
|
||||
//- rjf: symbol data baking
|
||||
RDI_PROC RDIM_SymbolData* rdim_symbol_data_combine(RDIM_Arena *arena, RDIM_Root *root, RDIM_BakeCtx *bctx);
|
||||
|
||||
//- rjf: name map baking
|
||||
RDI_PROC RDIM_NameMapBaked* rdim_name_map_bake(RDIM_Arena *arena, RDIM_Root *root, RDIM_BakeCtx *bctx, RDIM_NameMap *map);
|
||||
|
||||
//- rjf: top-level baking entry point
|
||||
RDI_PROC void rdim_bake_file(RDIM_Arena *arena, RDIM_Root *root, RDIM_String8List *out);
|
||||
#endif
|
||||
|
||||
#endif // RDI_MAKE_H
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -75,176 +75,6 @@ struct P2R_LinkNameMap
|
||||
U64 link_name_count;
|
||||
};
|
||||
|
||||
#if 0
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: PDB Type & Symbol Info Translation Helper Types
|
||||
|
||||
//- rjf: typeid forward reference map
|
||||
|
||||
typedef struct P2R_FwdNode P2R_FwdNode;
|
||||
struct P2R_FwdNode
|
||||
{
|
||||
P2R_FwdNode *next;
|
||||
CV_TypeId key;
|
||||
CV_TypeId val;
|
||||
};
|
||||
|
||||
typedef struct P2R_FwdMap P2R_FwdMap;
|
||||
struct P2R_FwdMap
|
||||
{
|
||||
P2R_FwdNode **buckets;
|
||||
U64 buckets_count;
|
||||
U64 bucket_collision_count;
|
||||
U64 pair_count;
|
||||
};
|
||||
|
||||
//- rjf: type revisit lists
|
||||
|
||||
typedef struct P2R_TypeRev P2R_TypeRev;
|
||||
struct P2R_TypeRev
|
||||
{
|
||||
P2R_TypeRev *next;
|
||||
RDIM_Type *owner_type;
|
||||
CV_TypeId field_itype;
|
||||
};
|
||||
|
||||
//- rjf: frame proc maps
|
||||
|
||||
typedef struct P2R_FrameProcData P2R_FrameProcData;
|
||||
struct P2R_FrameProcData
|
||||
{
|
||||
U32 frame_size;
|
||||
CV_FrameprocFlags flags;
|
||||
};
|
||||
|
||||
typedef struct P2R_FrameProcNode P2R_FrameProcNode;
|
||||
struct P2R_FrameProcNode
|
||||
{
|
||||
P2R_FrameProcNode *next;
|
||||
RDIM_Symbol *key;
|
||||
P2R_FrameProcData data;
|
||||
};
|
||||
|
||||
typedef struct P2R_FrameProcMap P2R_FrameProcMap;
|
||||
struct P2R_FrameProcMap
|
||||
{
|
||||
P2R_FrameProcNode **buckets;
|
||||
U64 buckets_count;
|
||||
U64 bucket_collision_count;
|
||||
U64 pair_count;
|
||||
};
|
||||
|
||||
//- rjf: scopes
|
||||
|
||||
typedef struct P2R_ScopeNode P2R_ScopeNode;
|
||||
struct P2R_ScopeNode
|
||||
{
|
||||
P2R_ScopeNode *next;
|
||||
RDIM_Scope *scope;
|
||||
RDIM_Symbol *symbol;
|
||||
};
|
||||
|
||||
//- rjf: known global map
|
||||
|
||||
typedef struct P2R_KnownGlobalNode P2R_KnownGlobalNode;
|
||||
struct P2R_KnownGlobalNode
|
||||
{
|
||||
P2R_KnownGlobalNode *next;
|
||||
String8 key_name;
|
||||
U64 key_voff;
|
||||
U64 hash;
|
||||
};
|
||||
|
||||
typedef struct P2R_KnownGlobalSet P2R_KnownGlobalSet;
|
||||
struct P2R_KnownGlobalSet
|
||||
{
|
||||
P2R_KnownGlobalNode **buckets;
|
||||
U64 buckets_count;
|
||||
U64 bucket_collision_count;
|
||||
U64 global_count;
|
||||
};
|
||||
|
||||
typedef struct P2R_CtxParams P2R_CtxParams;
|
||||
struct P2R_CtxParams
|
||||
{
|
||||
RDI_Arch arch;
|
||||
PDB_TpiHashParsed *tpi_hash;
|
||||
CV_LeafParsed *tpi_leaf;
|
||||
PDB_CoffSectionArray *sections;
|
||||
U64 fwd_map_bucket_count;
|
||||
U64 frame_proc_map_bucket_count;
|
||||
U64 known_global_map_bucket_count;
|
||||
U64 link_name_map_bucket_count;
|
||||
};
|
||||
|
||||
typedef struct P2R_TypesSymbolsParams P2R_TypesSymbolsParams;
|
||||
struct P2R_TypesSymbolsParams
|
||||
{
|
||||
CV_SymParsed *sym;
|
||||
CV_SymParsed **sym_for_unit;
|
||||
U64 unit_count;
|
||||
};
|
||||
|
||||
typedef struct P2R_LinkNameNode P2R_LinkNameNode;
|
||||
struct P2R_LinkNameNode
|
||||
{
|
||||
P2R_LinkNameNode *next;
|
||||
U64 voff;
|
||||
String8 name;
|
||||
};
|
||||
|
||||
typedef struct P2R_LinkNameMap P2R_LinkNameMap;
|
||||
struct P2R_LinkNameMap
|
||||
{
|
||||
P2R_LinkNameNode **buckets;
|
||||
U64 buckets_count;
|
||||
U64 bucket_collision_count;
|
||||
U64 link_name_count;
|
||||
};
|
||||
|
||||
typedef struct P2R_Ctx P2R_Ctx;
|
||||
struct P2R_Ctx
|
||||
{
|
||||
Arena *arena;
|
||||
|
||||
// INPUT data
|
||||
RDI_Arch arch;
|
||||
U64 addr_size;
|
||||
PDB_TpiHashParsed *hash;
|
||||
CV_LeafParsed *leaf;
|
||||
COFF_SectionHeader *sections;
|
||||
U64 section_count;
|
||||
|
||||
// OUTPUT data
|
||||
RDIM_Root *root;
|
||||
|
||||
// TEMPORARY STATE
|
||||
P2R_FwdMap fwd_map;
|
||||
P2R_TypeRev *member_revisit_first;
|
||||
P2R_TypeRev *member_revisit_last;
|
||||
P2R_TypeRev *enum_revisit_first;
|
||||
P2R_TypeRev *enum_revisit_last;
|
||||
P2R_FrameProcMap frame_proc_map;
|
||||
P2R_ScopeNode *scope_stack;
|
||||
P2R_ScopeNode *scope_node_free;
|
||||
P2R_KnownGlobalSet known_globals;
|
||||
P2R_LinkNameMap link_names;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ Conversion Output Type
|
||||
|
||||
typedef struct P2R_Out P2R_Out;
|
||||
struct P2R_Out
|
||||
{
|
||||
B32 good_parse;
|
||||
RDIM_Root *root;
|
||||
String8List dump;
|
||||
String8List errors;
|
||||
};
|
||||
#endif
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Basic Helpers
|
||||
|
||||
@@ -283,112 +113,4 @@ internal void p2r_location_over_lvar_addr_range(Arena *arena, RDIM_ScopeChunkLis
|
||||
|
||||
internal P2R_ConvertOut *p2r_convert(Arena *arena, P2R_ConvertIn *in);
|
||||
|
||||
#if 0
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Conversion Implementation Helpers
|
||||
|
||||
//- rjf: pdb conversion context creation
|
||||
internal P2R_Ctx *p2r_ctx_alloc(P2R_CtxParams *params, RDIM_Root *out_root);
|
||||
|
||||
//- rjf: pdb types and symbols
|
||||
internal void p2r_types_and_symbols(P2R_Ctx *pdb_ctx, P2R_TypesSymbolsParams *params);
|
||||
|
||||
//- rjf: decoding helpers
|
||||
internal U32 p2r_u32_from_numeric(P2R_Ctx *ctx, CV_NumericParsed *num);
|
||||
internal COFF_SectionHeader* p2r_sec_header_from_sec_num(P2R_Ctx *ctx, U32 sec_num);
|
||||
|
||||
//- rjf: type info
|
||||
//
|
||||
// TODO(allen): explain the overarching pattern of PDB type info translation here
|
||||
// 1. main passes (out of order necessity) & after
|
||||
// 2. resolve forward
|
||||
// 3. cons type info
|
||||
// 4. "resolve itype"
|
||||
// 5. equipping members & enumerates
|
||||
// 6. equipping source coordinates
|
||||
|
||||
// type info construction passes
|
||||
internal void p2r_type_cons_main_passes(P2R_Ctx *ctx);
|
||||
internal CV_TypeId p2r_type_resolve_fwd(P2R_Ctx *ctx, CV_TypeId itype);
|
||||
internal RDIM_Type* p2r_type_resolve_itype(P2R_Ctx *ctx, CV_TypeId itype);
|
||||
internal void p2r_type_equip_members(P2R_Ctx *ctx, RDIM_Type *owern_type, CV_TypeId field_itype);
|
||||
internal void p2r_type_equip_enumerates(P2R_Ctx *ctx, RDIM_Type *owner_type, CV_TypeId field_itype);
|
||||
|
||||
// type info construction helpers
|
||||
internal RDIM_Type* p2r_type_cons_basic(P2R_Ctx *ctx, CV_TypeId itype);
|
||||
internal RDIM_Type* p2r_type_cons_leaf_record(P2R_Ctx *ctx, CV_TypeId itype);
|
||||
internal RDIM_Type* p2r_type_resolve_and_check(P2R_Ctx *ctx, CV_TypeId itype);
|
||||
internal void p2r_type_resolve_arglist(Arena *arena, RDIM_TypeList *out,
|
||||
P2R_Ctx *ctx, CV_TypeId arglist_itype);
|
||||
|
||||
// type info resolution helpers
|
||||
internal RDIM_Type* p2r_type_from_name(P2R_Ctx *ctx, String8 name);
|
||||
|
||||
// type fwd map
|
||||
internal void p2r_type_fwd_map_set(Arena *arena, P2R_FwdMap *map,
|
||||
CV_TypeId key, CV_TypeId val);
|
||||
internal CV_TypeId p2r_type_fwd_map_get(P2R_FwdMap *map, CV_TypeId key);
|
||||
|
||||
//- rjf: symbol info
|
||||
|
||||
// symbol info construction
|
||||
internal U64 p2r_hash_from_local_user_id(U64 sym_hash, U64 id);
|
||||
internal U64 p2r_hash_from_scope_user_id(U64 sym_hash, U64 id);
|
||||
internal U64 p2r_hash_from_symbol_user_id(U64 sym_hash, U64 id);
|
||||
internal void p2r_symbol_cons(P2R_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id);
|
||||
internal void p2r_gather_link_names(P2R_Ctx *ctx, CV_SymParsed *sym);
|
||||
|
||||
// "frameproc" map
|
||||
internal void p2r_symbol_frame_proc_write(P2R_Ctx *ctx,RDIM_Symbol *key,
|
||||
P2R_FrameProcData *data);
|
||||
internal P2R_FrameProcData* p2r_symbol_frame_proc_read(P2R_Ctx *ctx, RDIM_Symbol *key);
|
||||
|
||||
// scope stack
|
||||
internal void p2r_symbol_push_scope(P2R_Ctx *ctx, RDIM_Scope *scope, RDIM_Symbol *symbol);
|
||||
internal void p2r_symbol_pop_scope(P2R_Ctx *ctx);
|
||||
internal void p2r_symbol_clear_scope_stack(P2R_Ctx *ctx);
|
||||
|
||||
#define p2r_symbol_current_scope(ctx) ((ctx)->scope_stack == 0)?0:((ctx)->scope_stack->scope)
|
||||
#define p2r_symbol_current_symbol(ctx) ((ctx)->scope_stack == 0)?0:((ctx)->scope_stack->symbol)
|
||||
|
||||
// PDB/C++ name parsing helper
|
||||
internal U64 p2r_end_of_cplusplus_container_name(String8 str);
|
||||
|
||||
// global deduplication
|
||||
internal U64 p2r_known_global_hash(String8 name, U64 voff);
|
||||
|
||||
internal B32 p2r_known_global_lookup(P2R_KnownGlobalSet *set, String8 name, U64 voff);
|
||||
internal void p2r_known_global_insert(Arena *arena, P2R_KnownGlobalSet *set,
|
||||
String8 name, U64 voff);
|
||||
|
||||
|
||||
// location info helpers
|
||||
internal RDIM_Location* p2r_location_from_addr_reg_off(P2R_Ctx *ctx,
|
||||
RDI_RegisterCode reg_code,
|
||||
U32 reg_byte_size,
|
||||
U32 reg_byte_pos,
|
||||
S64 offset,
|
||||
B32 extra_indirection);
|
||||
|
||||
internal CV_EncodedFramePtrReg p2r_cv_encoded_fp_reg_from_proc(P2R_Ctx *ctx,
|
||||
RDIM_Symbol *proc,
|
||||
B32 param_base);
|
||||
|
||||
internal RDI_RegisterCode p2r_reg_code_from_arch_encoded_fp_reg(RDI_Arch arch,
|
||||
CV_EncodedFramePtrReg encoded_reg);
|
||||
|
||||
internal void p2r_location_over_lvar_addr_range(P2R_Ctx *ctx,
|
||||
RDIM_LocationSet *locset,
|
||||
RDIM_Location *location,
|
||||
CV_LvarAddrRange *range,
|
||||
CV_LvarAddrGap *gaps, U64 gap_count);
|
||||
|
||||
// link names
|
||||
internal void p2r_link_name_save(Arena *arena, P2R_LinkNameMap *map,
|
||||
U64 voff, String8 name);
|
||||
internal String8 p2r_link_name_find(P2R_LinkNameMap *map, U64 voff);
|
||||
|
||||
#endif
|
||||
|
||||
#endif // RDI_FROM_PDB_H
|
||||
|
||||
Reference in New Issue
Block a user