raddbgi_ -> rdi_

This commit is contained in:
Ryan Fleury
2024-02-13 15:52:53 -08:00
parent 30d2dea951
commit b9f010dff6
38 changed files with 3214 additions and 3201 deletions
+1 -1
View File
@@ -85,7 +85,7 @@ pushd build
popd
:: --- Get Current Git Commit Id ----------------------------------------------
for /f %%i in ('call git describe --always --dirty') do set compile=%compile% -DRADDBGI_GIT=\"%%i\"
for /f %%i in ('call git describe --always --dirty') do set compile=%compile% -DRADDBG_GIT=\"%%i\"
:: --- Build & Run Metaprogram ------------------------------------------------
if "%no_meta%"=="1" echo [skipping metagen]
+2 -2
View File
@@ -27,7 +27,7 @@ read_only global CV_TypeId cv_type_id_variadic = 0xFFFFFFFF;
////////////////////////////////
//~ rjf: Registers
// X(NAME, CODE, (RADDBGI_RegsiterCode_X86) NAME, BYTE_POS, BYTE_SIZE)
// X(NAME, CODE, (RDI_RegisterCode_X86) NAME, BYTE_POS, BYTE_SIZE)
#define CV_Reg_X86_XList(X) \
X(NONE, 0, nil, 0, 0)\
X(AL, 1, eax, 0, 1)\
@@ -282,7 +282,7 @@ typedef enum CV_Regx86Enum
}
CV_Regx86Enum;
// X(NAME, CODE, (RADDBGI_RegsiterCode_X64) NAME, BYTE_POS, BYTE_SIZE)
// X(NAME, CODE, (RDI_RegisterCode_X64) NAME, BYTE_POS, BYTE_SIZE)
#define CV_Reg_X64_XList(X) \
X(NONE, 0, nil, 0, 0)\
X(AL, 1, rax, 0, 1)\
+42 -42
View File
@@ -204,7 +204,7 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE
DBGI_Scope *scope = dbgi_scope_open();
String8 exe_path = demon_full_path_from_module(scratch.arena, module);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RDI_Parsed *rdbg = &dbgi->rdbg;
U64 base_vaddr = demon_base_vaddr_from_module(module);
for(CTRL_UserBreakpointNode *n = user_bps->first; n != 0; n = n->next)
{
@@ -229,16 +229,16 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE
// rjf: filename -> src_id
U32 src_id = 0;
{
RADDBGI_NameMap *mapptr = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_NormalSourcePaths);
RDI_NameMap *mapptr = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_NormalSourcePaths);
if(mapptr != 0)
{
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, mapptr, &map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, filename_normalized.str, filename_normalized.size);
RDI_ParsedNameMap map = {0};
rdi_name_map_parse(rdbg, mapptr, &map);
RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, filename_normalized.str, filename_normalized.size);
if(node != 0)
{
U32 id_count = 0;
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0)
{
src_id = ids[0];
@@ -249,11 +249,11 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE
// rjf: src_id * pt -> push
{
RADDBGI_SourceFile *src = raddbgi_element_from_idx(rdbg, source_files, src_id);
RADDBGI_ParsedLineMap line_map = {0};
raddbgi_line_map_from_source_file(rdbg, src, &line_map);
RDI_SourceFile *src = rdi_element_from_idx(rdbg, source_files, src_id);
RDI_ParsedLineMap line_map = {0};
rdi_line_map_from_source_file(rdbg, src, &line_map);
U32 voff_count = 0;
U64 *voffs = raddbgi_line_voffs_from_num(&line_map, pt.line, &voff_count);
U64 *voffs = rdi_line_voffs_from_num(&line_map, pt.line, &voff_count);
for(U32 i = 0; i < voff_count; i += 1)
{
U64 vaddr = voffs[i] + base_vaddr;
@@ -270,19 +270,19 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE
U64 voff = bp->u64;
if(rdbg != 0 && rdbg->procedures != 0)
{
RADDBGI_NameMap *mapptr = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_Procedures);
RDI_NameMap *mapptr = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_Procedures);
if(mapptr != 0)
{
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, mapptr, &map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, symbol_name.str, symbol_name.size);
RDI_ParsedNameMap map = {0};
rdi_name_map_parse(rdbg, mapptr, &map);
RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, symbol_name.str, symbol_name.size);
if(node != 0)
{
U32 id_count = 0;
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count);
for(U32 match_i = 0; match_i < id_count; match_i += 1)
{
U64 proc_voff = raddbgi_first_voff_from_proc(rdbg, ids[match_i]);
U64 proc_voff = rdi_first_voff_from_proc(rdbg, ids[match_i]);
U64 proc_vaddr = proc_voff + base_vaddr;
DEMON_Trap trap = {process, proc_vaddr + voff, (U64)bp};
demon_trap_chunk_list_push(arena, traps_out, 256, &trap);
@@ -1643,21 +1643,21 @@ ctrl_thread__next_demon_event(Arena *arena, CTRL_Msg *msg, DEMON_RunCtrls *run_c
CTRL_Handle module = ctrl_handle_from_demon(modules.handles[0]);
String8 module_path = demon_full_path_from_module(scratch.arena, ctrl_demon_handle_from_ctrl(module));
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, module_path, max_U64);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_NameMap *unparsed_map = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_GlobalVariables);
RDI_Parsed *rdbg = &dbgi->rdbg;
RDI_NameMap *unparsed_map = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_GlobalVariables);
if(rdbg->global_variables != 0 && unparsed_map != 0)
{
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, unparsed_map, &map);
RDI_ParsedNameMap map = {0};
rdi_name_map_parse(rdbg, unparsed_map, &map);
String8 name = str8_lit("__asan_shadow_memory_dynamic_address");
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, name.str, name.size);
if(node != 0)
{
U32 id_count = 0;
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0)
{
RADDBGI_GlobalVariable *global_var = raddbgi_element_from_idx(rdbg, global_variables, ids[0]);
RDI_GlobalVariable *global_var = rdi_element_from_idx(rdbg, global_variables, ids[0]);
U64 global_var_voff = global_var->voff;
U64 global_var_vaddr = global_var->voff + demon_base_vaddr_from_module(ctrl_demon_handle_from_ctrl(module));
Architecture arch = demon_arch_from_object(ev->thread);
@@ -2148,10 +2148,10 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U64 module_base_vaddr = demon_base_vaddr_from_module(module);
String8 exe_path = demon_full_path_from_module(scratch.arena, module);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_NameMap *unparsed_map = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_Procedures);
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, unparsed_map, &map);
RDI_Parsed *rdbg = &dbgi->rdbg;
RDI_NameMap *unparsed_map = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_Procedures);
RDI_ParsedNameMap map = {0};
rdi_name_map_parse(rdbg, unparsed_map, &map);
//- rjf: add trap for user-specified entry point, if specified
B32 entries_found = 0;
@@ -2162,15 +2162,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0;
{
String8 name = n->string;
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, name.str, name.size);
U32 id_count = 0;
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0)
{
procedure_id = ids[0];
}
}
U64 voff = raddbgi_first_voff_from_proc(rdbg, procedure_id);
U64 voff = rdi_first_voff_from_proc(rdbg, procedure_id);
if(voff != 0)
{
entries_found = 1;
@@ -2188,15 +2188,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0;
{
String8 name = n->string;
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, name.str, name.size);
U32 id_count = 0;
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0)
{
procedure_id = ids[0];
}
}
U64 voff = raddbgi_first_voff_from_proc(rdbg, procedure_id);
U64 voff = rdi_first_voff_from_proc(rdbg, procedure_id);
if(voff != 0)
{
DEMON_Trap trap = {run_ctrls.run_entities[process_idx], module_base_vaddr + voff};
@@ -2221,15 +2221,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0;
{
String8 name = hi_entry_points[idx];
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, name.str, name.size);
U32 id_count = 0;
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0)
{
procedure_id = ids[0];
}
}
U64 voff = raddbgi_first_voff_from_proc(rdbg, procedure_id);
U64 voff = rdi_first_voff_from_proc(rdbg, procedure_id);
if(voff != 0)
{
entries_found = 1;
@@ -2265,15 +2265,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0;
{
String8 name = lo_entry_points[idx];
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, name.str, name.size);
U32 id_count = 0;
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0)
{
procedure_id = ids[0];
}
}
U64 voff = raddbgi_first_voff_from_proc(rdbg, procedure_id);
U64 voff = rdi_first_voff_from_proc(rdbg, procedure_id);
if(voff != 0)
{
entries_found = 1;
@@ -2871,7 +2871,7 @@ ctrl_thread__run(CTRL_Msg *msg)
{
String8 exe_path = demon_full_path_from_module(temp.arena, module);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RDI_Parsed *rdbg = &dbgi->rdbg;
for(String8Node *condition_n = conditions.first; condition_n != 0; condition_n = condition_n->next)
{
String8 string = condition_n->string;
@@ -2883,8 +2883,8 @@ ctrl_thread__run(CTRL_Msg *msg)
parse_ctx.type_graph = tg_graph_begin(bit_size_from_arch(arch)/8, 256);
parse_ctx.regs_map = ctrl_string2reg_from_arch(arch);
parse_ctx.reg_alias_map = ctrl_string2alias_from_arch(arch);
parse_ctx.locals_map = eval_push_locals_map_from_raddbgi_voff(temp.arena, rdbg, thread_rip_voff);
parse_ctx.member_map = eval_push_member_map_from_raddbgi_voff(temp.arena, rdbg, thread_rip_voff);
parse_ctx.locals_map = eval_push_locals_map_from_rdi_voff(temp.arena, rdbg, thread_rip_voff);
parse_ctx.member_map = eval_push_member_map_from_rdi_voff(temp.arena, rdbg, thread_rip_voff);
}
EVAL_TokenArray tokens = eval_token_array_from_text(temp.arena, string);
EVAL_ParseResult parse = eval_parse_expr_from_text_tokens(temp.arena, &parse_ctx, string, &tokens);
+34 -34
View File
@@ -111,7 +111,7 @@ dbgi_fuzzy_item_num_from_array_element_idx__linear_search(DBGI_FuzzySearchItemAr
}
internal String8
dbgi_fuzzy_item_string_from_rdbg_target_element_idx(RADDBGI_Parsed *rdbg, DBGI_FuzzySearchTarget target, U64 element_idx)
dbgi_fuzzy_item_string_from_rdbg_target_element_idx(RDI_Parsed *rdbg, DBGI_FuzzySearchTarget target, U64 element_idx)
{
String8 result = {0};
switch(target)
@@ -119,31 +119,31 @@ dbgi_fuzzy_item_string_from_rdbg_target_element_idx(RADDBGI_Parsed *rdbg, DBGI_F
// NOTE(rjf): no default - warn if we miss a case
case DBGI_FuzzySearchTarget_Procedures:
{
RADDBGI_Procedure *proc = raddbgi_element_from_idx(rdbg, procedures, element_idx);
RDI_Procedure *proc = rdi_element_from_idx(rdbg, procedures, element_idx);
U64 name_size = 0;
U8 *name_base = raddbgi_string_from_idx(rdbg, proc->name_string_idx, &name_size);
U8 *name_base = rdi_string_from_idx(rdbg, proc->name_string_idx, &name_size);
result = str8(name_base, name_size);
}break;
case DBGI_FuzzySearchTarget_GlobalVariables:
{
RADDBGI_GlobalVariable *gvar = raddbgi_element_from_idx(rdbg, global_variables, element_idx);
RDI_GlobalVariable *gvar = rdi_element_from_idx(rdbg, global_variables, element_idx);
U64 name_size = 0;
U8 *name_base = raddbgi_string_from_idx(rdbg, gvar->name_string_idx, &name_size);
U8 *name_base = rdi_string_from_idx(rdbg, gvar->name_string_idx, &name_size);
result = str8(name_base, name_size);
}break;
case DBGI_FuzzySearchTarget_ThreadVariables:
{
RADDBGI_ThreadVariable *tvar = raddbgi_element_from_idx(rdbg, thread_variables, element_idx);
RDI_ThreadVariable *tvar = rdi_element_from_idx(rdbg, thread_variables, element_idx);
U64 name_size = 0;
U8 *name_base = raddbgi_string_from_idx(rdbg, tvar->name_string_idx, &name_size);
U8 *name_base = rdi_string_from_idx(rdbg, tvar->name_string_idx, &name_size);
result = str8(name_base, name_size);
}break;
case DBGI_FuzzySearchTarget_UDTs:
{
RADDBGI_UDT *udt = raddbgi_element_from_idx(rdbg, udts, element_idx);
RADDBGI_TypeNode *type_node = raddbgi_element_from_idx(rdbg, type_nodes, udt->self_type_idx);
RDI_UDT *udt = rdi_element_from_idx(rdbg, udts, element_idx);
RDI_TypeNode *type_node = rdi_element_from_idx(rdbg, type_nodes, udt->self_type_idx);
U64 name_size = 0;
U8 *name_base = raddbgi_string_from_idx(rdbg, type_node->user_defined.name_string_idx, &name_size);
U8 *name_base = rdi_string_from_idx(rdbg, type_node->user_defined.name_string_idx, &name_size);
result = str8(name_base, name_size);
}break;
case DBGI_FuzzySearchTarget_COUNT:{}break;
@@ -769,7 +769,7 @@ dbgi_parse_thread_entry_point(void *p)
}
if(!og_dbg_format_is_known)
{
if(data.size >= 8 && *(U64 *)data.str == RADDBGI_MAGIC_CONSTANT)
if(data.size >= 8 && *(U64 *)data.str == RDI_MAGIC_CONSTANT)
{
og_dbg_format_is_known = 1;
og_dbg_is_raddbg = 1;
@@ -838,10 +838,10 @@ dbgi_parse_thread_entry_point(void *p)
file_map = os_file_map_open(OS_AccessFlag_Read, file);
file_props = os_properties_from_file(file);
file_base = os_file_map_view_open(file_map, OS_AccessFlag_Read, r1u64(0, file_props.size));
if(sizeof(RADDBGI_Header) <= file_props.size)
if(sizeof(RDI_Header) <= file_props.size)
{
RADDBGI_Header *header = (RADDBGI_Header*)file_base;
if(header->encoding_version != RADDBGI_ENCODING_VERSION)
RDI_Header *header = (RDI_Header*)file_base;
if(header->encoding_version != RDI_ENCODING_VERSION)
{
raddbgi_file_is_up_to_date = 0;
}
@@ -1017,14 +1017,14 @@ dbgi_parse_thread_entry_point(void *p)
}
//- rjf: parse raddbg info
RADDBGI_Parsed raddbgi_parsed = dbgi_parse_nil.rdbg;
RDI_Parsed rdi_parsed = dbgi_parse_nil.rdbg;
U64 arch_addr_size = 8;
if(do_task)
{
RADDBGI_ParseStatus parse_status = raddbgi_parse((U8 *)raddbgi_file_base, raddbgi_file_props.size, &raddbgi_parsed);
if(raddbgi_parsed.top_level_info != 0)
RDI_ParseStatus parse_status = rdi_parse((U8 *)raddbgi_file_base, raddbgi_file_props.size, &rdi_parsed);
if(rdi_parsed.top_level_info != 0)
{
arch_addr_size = raddbgi_addr_size_from_arch(raddbgi_parsed.top_level_info->architecture);
arch_addr_size = rdi_addr_size_from_arch(rdi_parsed.top_level_info->architecture);
}
}
@@ -1053,7 +1053,7 @@ dbgi_parse_thread_entry_point(void *p)
bin->parse.arena = parse_arena;
bin->parse.dbg_path = push_str8_copy(parse_arena, dbg_path);
MemoryCopyStruct(&bin->parse.pe, &exe_pe_info);
MemoryCopyStruct(&bin->parse.rdbg, &raddbgi_parsed);
MemoryCopyStruct(&bin->parse.rdbg, &rdi_parsed);
bin->parse.gen = bin->gen;
break;
}
@@ -1197,7 +1197,7 @@ dbgi_fuzzy_thread__entry_point(void *p)
//- rjf: exe_path -> dbgi_parse, raddbg
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RDI_Parsed *rdbg = &dbgi->rdbg;
//- rjf: rdbg * query -> item list
U64 table_ptr_off = 0;
@@ -1210,30 +1210,30 @@ dbgi_fuzzy_thread__entry_point(void *p)
case DBGI_FuzzySearchTarget_COUNT:{}break;
case DBGI_FuzzySearchTarget_Procedures:
{
table_ptr_off = OffsetOf(RADDBGI_Parsed, procedures);
element_name_idx_off = OffsetOf(RADDBGI_Procedure, name_string_idx);
table_ptr_off = OffsetOf(RDI_Parsed, procedures);
element_name_idx_off = OffsetOf(RDI_Procedure, name_string_idx);
element_count = rdbg->procedures_count;
element_size = sizeof(RADDBGI_Procedure);
element_size = sizeof(RDI_Procedure);
}break;
case DBGI_FuzzySearchTarget_GlobalVariables:
{
table_ptr_off = OffsetOf(RADDBGI_Parsed, global_variables);
element_name_idx_off = OffsetOf(RADDBGI_GlobalVariable, name_string_idx);
table_ptr_off = OffsetOf(RDI_Parsed, global_variables);
element_name_idx_off = OffsetOf(RDI_GlobalVariable, name_string_idx);
element_count = rdbg->global_variables_count;
element_size = sizeof(RADDBGI_GlobalVariable);
element_size = sizeof(RDI_GlobalVariable);
}break;
case DBGI_FuzzySearchTarget_ThreadVariables:
{
table_ptr_off = OffsetOf(RADDBGI_Parsed, thread_variables);
element_name_idx_off = OffsetOf(RADDBGI_ThreadVariable, name_string_idx);
table_ptr_off = OffsetOf(RDI_Parsed, thread_variables);
element_name_idx_off = OffsetOf(RDI_ThreadVariable, name_string_idx);
element_count = rdbg->thread_variables_count;
element_size = sizeof(RADDBGI_ThreadVariable);
element_size = sizeof(RDI_ThreadVariable);
}break;
case DBGI_FuzzySearchTarget_UDTs:
{
table_ptr_off = OffsetOf(RADDBGI_Parsed, udts);
table_ptr_off = OffsetOf(RDI_Parsed, udts);
element_count = rdbg->udts_count;
element_size = sizeof(RADDBGI_UDT);
element_size = sizeof(RDI_UDT);
}break;
}
DBGI_FuzzySearchItemChunkList items_list = {0};
@@ -1246,13 +1246,13 @@ dbgi_fuzzy_thread__entry_point(void *p)
U32 *name_idx_ptr = (U32 *)((U8 *)element + element_name_idx_off);
if(target == DBGI_FuzzySearchTarget_UDTs)
{
RADDBGI_UDT *udt = (RADDBGI_UDT *)element;
RADDBGI_TypeNode *type_node = raddbgi_element_from_idx(rdbg, type_nodes, udt->self_type_idx);
RDI_UDT *udt = (RDI_UDT *)element;
RDI_TypeNode *type_node = rdi_element_from_idx(rdbg, type_nodes, udt->self_type_idx);
name_idx_ptr = &type_node->user_defined.name_string_idx;
}
U32 name_idx = *name_idx_ptr;
U64 name_size = 0;
U8 *name_base = raddbgi_string_from_idx(rdbg, name_idx, &name_size);
U8 *name_base = rdi_string_from_idx(rdbg, name_idx, &name_size);
String8 name = str8(name_base, name_size);
if(name.size == 0) { continue; }
FuzzyMatchRangeList matches = fuzzy_match_find(task_arena, query, name);
+20 -20
View File
@@ -18,7 +18,7 @@ struct DBGI_Parse
void *dbg_base;
FileProperties dbg_props;
PE_BinInfo pe;
RADDBGI_Parsed rdbg;
RDI_Parsed rdbg;
};
////////////////////////////////
@@ -341,24 +341,24 @@ global DBGI_Parse dbgi_parse_nil =
0,
0,
0,
&raddbgi_binary_section_nil, 1,
&raddbgi_file_path_node_nil, 1,
&raddbgi_source_file_nil, 1,
&raddbgi_unit_nil, 1,
&raddbgi_vmap_entry_nil, 1,
&raddbgi_type_node_nil, 1,
&raddbgi_udt_nil, 1,
&raddbgi_member_nil, 1,
&raddbgi_enum_member_nil, 1,
&raddbgi_global_variable_nil, 1,
&raddbgi_vmap_entry_nil, 1,
&raddbgi_thread_variable_nil, 1,
&raddbgi_procedure_nil, 1,
&raddbgi_scope_nil, 1,
&raddbgi_voff_nil, 1,
&raddbgi_vmap_entry_nil, 1,
&raddbgi_local_nil, 1,
&raddbgi_location_block_nil, 1,
&rdi_binary_section_nil, 1,
&rdi_file_path_node_nil, 1,
&rdi_source_file_nil, 1,
&rdi_unit_nil, 1,
&rdi_vmap_entry_nil, 1,
&rdi_type_node_nil, 1,
&rdi_udt_nil, 1,
&rdi_member_nil, 1,
&rdi_enum_member_nil, 1,
&rdi_global_variable_nil, 1,
&rdi_vmap_entry_nil, 1,
&rdi_thread_variable_nil, 1,
&rdi_procedure_nil, 1,
&rdi_scope_nil, 1,
&rdi_voff_nil, 1,
&rdi_vmap_entry_nil, 1,
&rdi_local_nil, 1,
&rdi_location_block_nil, 1,
0, 0,
0, 0,
},
@@ -379,7 +379,7 @@ internal void dbgi_ensure_tctx_inited(void);
internal U64 dbgi_hash_from_string(String8 string);
internal U64 dbgi_fuzzy_item_num_from_array_element_idx__linear_search(DBGI_FuzzySearchItemArray *array, U64 element_idx);
internal String8 dbgi_fuzzy_item_string_from_rdbg_target_element_idx(RADDBGI_Parsed *rdbg, DBGI_FuzzySearchTarget target, U64 element_idx);
internal String8 dbgi_fuzzy_item_string_from_rdbg_target_element_idx(RDI_Parsed *rdbg, DBGI_FuzzySearchTarget target, U64 element_idx);
////////////////////////////////
//~ rjf: Forced Override Cache Functions
+104 -104
View File
@@ -1085,7 +1085,7 @@ df_cmd_params_apply_spec_query(Arena *arena, DF_CtrlCtx *ctrl_ctx, DF_CmdParams
DF_Eval eval = df_eval_from_string(scratch.arena, scope, ctrl_ctx, &parse_ctx, &eval_string2expr_map_nil, query);
if(eval.errors.count == 0)
{
TG_Kind eval_type_kind = tg_kind_from_key(tg_unwrapped_from_graph_raddbgi_key(parse_ctx.type_graph, parse_ctx.rdbg, eval.type_key));
TG_Kind eval_type_kind = tg_kind_from_key(tg_unwrapped_from_graph_rdi_key(parse_ctx.type_graph, parse_ctx.rdbg, eval.type_key));
if(eval_type_kind == TG_Kind_Ptr || eval_type_kind == TG_Kind_LRef || eval_type_kind == TG_Kind_RRef)
{
eval = df_value_mode_eval_from_eval(parse_ctx.type_graph, parse_ctx.rdbg, ctrl_ctx, eval);
@@ -3196,23 +3196,23 @@ df_symbol_name_from_binary_voff(Arena *arena, DF_Entity *binary, U64 voff)
DBGI_Scope *scope = dbgi_scope_open();
String8 path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, path, 0);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RDI_Parsed *rdbg = &dbgi->rdbg;
if(result.size == 0 && rdbg->scope_vmap != 0)
{
U64 scope_idx = raddbgi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff);
RADDBGI_Scope *scope = &rdbg->scopes[scope_idx];
U64 scope_idx = rdi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff);
RDI_Scope *scope = &rdbg->scopes[scope_idx];
U64 proc_idx = scope->proc_idx;
RADDBGI_Procedure *procedure = &rdbg->procedures[proc_idx];
RDI_Procedure *procedure = &rdbg->procedures[proc_idx];
U64 name_size = 0;
U8 *name_ptr = raddbgi_string_from_idx(rdbg, procedure->name_string_idx, &name_size);
U8 *name_ptr = rdi_string_from_idx(rdbg, procedure->name_string_idx, &name_size);
result = push_str8_copy(arena, str8(name_ptr, name_size));
}
if(result.size == 0 && rdbg->global_vmap != 0)
{
U64 global_idx = raddbgi_vmap_idx_from_voff(rdbg->global_vmap, rdbg->global_vmap_count, voff);
RADDBGI_GlobalVariable *global_var = &rdbg->global_variables[global_idx];
U64 global_idx = rdi_vmap_idx_from_voff(rdbg->global_vmap, rdbg->global_vmap_count, voff);
RDI_GlobalVariable *global_var = &rdbg->global_variables[global_idx];
U64 name_size = 0;
U8 *name_ptr = raddbgi_string_from_idx(rdbg, global_var->name_string_idx, &name_size);
U8 *name_ptr = rdi_string_from_idx(rdbg, global_var->name_string_idx, &name_size);
result = push_str8_copy(arena, str8(name_ptr, name_size));
}
dbgi_scope_close(scope);
@@ -3263,23 +3263,23 @@ df_text_line_src2dasm_info_list_array_from_src_line_range(Arena *arena, DF_Entit
DF_Entity *binary = binary_n->entity;
String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RDI_Parsed *rdbg = &dbgi->rdbg;
// rjf: file_path_normalized * rdbg -> src_id
B32 good_src_id = 0;
U32 src_id = 0;
if(dbgi != &dbgi_parse_nil)
{
RADDBGI_NameMap *mapptr = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_NormalSourcePaths);
RDI_NameMap *mapptr = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_NormalSourcePaths);
if(mapptr != 0)
{
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, mapptr, &map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, file_path_normalized.str, file_path_normalized.size);
RDI_ParsedNameMap map = {0};
rdi_name_map_parse(rdbg, mapptr, &map);
RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, file_path_normalized.str, file_path_normalized.size);
if(node != 0)
{
U32 id_count = 0;
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0)
{
good_src_id = 1;
@@ -3292,9 +3292,9 @@ df_text_line_src2dasm_info_list_array_from_src_line_range(Arena *arena, DF_Entit
// rjf: good src-id -> look up line info for visible range
if(good_src_id)
{
RADDBGI_SourceFile *src = rdbg->source_files+src_id;
RADDBGI_ParsedLineMap line_map = {0};
raddbgi_line_map_from_source_file(rdbg, src, &line_map);
RDI_SourceFile *src = rdbg->source_files+src_id;
RDI_ParsedLineMap line_map = {0};
rdi_line_map_from_source_file(rdbg, src, &line_map);
U64 line_idx = 0;
for(S64 line_num = line_num_range.min;
line_num <= line_num_range.max;
@@ -3302,15 +3302,15 @@ df_text_line_src2dasm_info_list_array_from_src_line_range(Arena *arena, DF_Entit
{
DF_TextLineSrc2DasmInfoList *src2dasm_list = &src2dasm_array.v[line_idx];
U32 voff_count = 0;
U64 *voffs = raddbgi_line_voffs_from_num(&line_map, u32_from_u64_saturate((U64)line_num), &voff_count);
U64 *voffs = rdi_line_voffs_from_num(&line_map, u32_from_u64_saturate((U64)line_num), &voff_count);
for(U64 idx = 0; idx < voff_count; idx += 1)
{
U64 base_voff = voffs[idx];
U64 unit_idx = raddbgi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, base_voff);
RADDBGI_Unit *unit = &rdbg->units[unit_idx];
RADDBGI_ParsedLineInfo unit_line_info = {0};
raddbgi_line_info_from_unit(rdbg, unit, &unit_line_info);
U64 line_info_idx = raddbgi_line_info_idx_from_voff(&unit_line_info, base_voff);
U64 unit_idx = rdi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, base_voff);
RDI_Unit *unit = &rdbg->units[unit_idx];
RDI_ParsedLineInfo unit_line_info = {0};
rdi_line_info_from_unit(rdbg, unit, &unit_line_info);
U64 line_info_idx = rdi_line_info_idx_from_voff(&unit_line_info, base_voff);
if(unit_line_info.voffs != 0)
{
Rng1U64 range = r1u64(base_voff, unit_line_info.voffs[line_info_idx+1]);
@@ -3347,23 +3347,23 @@ df_text_line_dasm2src_info_from_binary_voff(DF_Entity *binary, U64 voff)
DBGI_Scope *scope = dbgi_scope_open();
String8 path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, path, 0);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RDI_Parsed *rdbg = &dbgi->rdbg;
DF_TextLineDasm2SrcInfo result = {0};
result.file = result.binary = &df_g_nil_entity;
if(rdbg->unit_vmap != 0 && rdbg->units != 0 && rdbg->source_files != 0)
{
U64 unit_idx = raddbgi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, voff);
RADDBGI_Unit *unit = &rdbg->units[unit_idx];
RADDBGI_ParsedLineInfo unit_line_info = {0};
raddbgi_line_info_from_unit(rdbg, unit, &unit_line_info);
U64 line_info_idx = raddbgi_line_info_idx_from_voff(&unit_line_info, voff);
U64 unit_idx = rdi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, voff);
RDI_Unit *unit = &rdbg->units[unit_idx];
RDI_ParsedLineInfo unit_line_info = {0};
rdi_line_info_from_unit(rdbg, unit, &unit_line_info);
U64 line_info_idx = rdi_line_info_idx_from_voff(&unit_line_info, voff);
if(line_info_idx < unit_line_info.count)
{
RADDBGI_Line *line = &unit_line_info.lines[line_info_idx];
RADDBGI_Column *column = (line_info_idx < unit_line_info.col_count) ? &unit_line_info.cols[line_info_idx] : 0;
RADDBGI_SourceFile *file = &rdbg->source_files[line->file_idx];
RDI_Line *line = &unit_line_info.lines[line_info_idx];
RDI_Column *column = (line_info_idx < unit_line_info.col_count) ? &unit_line_info.cols[line_info_idx] : 0;
RDI_SourceFile *file = &rdbg->source_files[line->file_idx];
String8 file_normalized_full_path = {0};
file_normalized_full_path.str = raddbgi_string_from_idx(rdbg, file->normal_full_path_string_idx, &file_normalized_full_path.size);
file_normalized_full_path.str = rdi_string_from_idx(rdbg, file->normal_full_path_string_idx, &file_normalized_full_path.size);
result.binary = binary;
if(line->file_idx != 0 && file_normalized_full_path.size != 0)
{
@@ -3412,11 +3412,11 @@ df_voff_from_binary_symbol_name(DF_Entity *binary, String8 symbol_name)
{
String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_NameMapKind name_map_kinds[] =
RDI_Parsed *rdbg = &dbgi->rdbg;
RDI_NameMapKind name_map_kinds[] =
{
RADDBGI_NameMapKind_GlobalVariables,
RADDBGI_NameMapKind_Procedures,
RDI_NameMapKind_GlobalVariables,
RDI_NameMapKind_Procedures,
};
if(dbgi != &dbgi_parse_nil)
{
@@ -3424,11 +3424,11 @@ df_voff_from_binary_symbol_name(DF_Entity *binary, String8 symbol_name)
name_map_kind_idx < ArrayCount(name_map_kinds);
name_map_kind_idx += 1)
{
RADDBGI_NameMapKind name_map_kind = name_map_kinds[name_map_kind_idx];
RADDBGI_NameMap *name_map = raddbgi_name_map_from_kind(rdbg, name_map_kind);
RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbgi_name_map_parse(rdbg, name_map, &parsed_name_map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &parsed_name_map, symbol_name.str, symbol_name.size);
RDI_NameMapKind name_map_kind = name_map_kinds[name_map_kind_idx];
RDI_NameMap *name_map = rdi_name_map_from_kind(rdbg, name_map_kind);
RDI_ParsedNameMap parsed_name_map = {0};
rdi_name_map_parse(rdbg, name_map, &parsed_name_map);
RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &parsed_name_map, symbol_name.str, symbol_name.size);
// rjf: node -> num
U64 entity_num = 0;
@@ -3443,7 +3443,7 @@ df_voff_from_binary_symbol_name(DF_Entity *binary, String8 symbol_name)
default:
{
U32 num = 0;
U32 *run = raddbgi_matches_from_map_node(rdbg, node, &num);
U32 *run = rdi_matches_from_map_node(rdbg, node, &num);
if(num != 0)
{
entity_num = run[0]+1;
@@ -3457,15 +3457,15 @@ df_voff_from_binary_symbol_name(DF_Entity *binary, String8 symbol_name)
if(entity_num != 0) switch(name_map_kind)
{
default:{}break;
case RADDBGI_NameMapKind_GlobalVariables:
case RDI_NameMapKind_GlobalVariables:
{
RADDBGI_GlobalVariable *global_var = raddbgi_element_from_idx(rdbg, global_variables, entity_num-1);
RDI_GlobalVariable *global_var = rdi_element_from_idx(rdbg, global_variables, entity_num-1);
voff = global_var->voff;
}break;
case RADDBGI_NameMapKind_Procedures:
case RDI_NameMapKind_Procedures:
{
RADDBGI_Procedure *procedure = raddbgi_element_from_idx(rdbg, procedures, entity_num-1);
RADDBGI_Scope *scope = raddbgi_element_from_idx(rdbg, scopes, procedure->root_scope_idx);
RDI_Procedure *procedure = rdi_element_from_idx(rdbg, procedures, entity_num-1);
RDI_Scope *scope = rdi_element_from_idx(rdbg, scopes, procedure->root_scope_idx);
voff = rdbg->scope_voffs[scope->voff_range_first];
}break;
}
@@ -3495,11 +3495,11 @@ df_type_num_from_binary_name(DF_Entity *binary, String8 name)
{
String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_NameMap *name_map = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_Types);
RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbgi_name_map_parse(rdbg, name_map, &parsed_name_map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &parsed_name_map, name.str, name.size);
RDI_Parsed *rdbg = &dbgi->rdbg;
RDI_NameMap *name_map = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_Types);
RDI_ParsedNameMap parsed_name_map = {0};
rdi_name_map_parse(rdbg, name_map, &parsed_name_map);
RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &parsed_name_map, name.str, name.size);
U64 entity_num = 0;
if(node != 0)
{
@@ -3512,7 +3512,7 @@ df_type_num_from_binary_name(DF_Entity *binary, String8 name)
default:
{
U32 num = 0;
U32 *run = raddbgi_matches_from_map_node(rdbg, node, &num);
U32 *run = rdi_matches_from_map_node(rdbg, node, &num);
if(num != 0)
{
entity_num = run[0]+1;
@@ -3697,8 +3697,8 @@ df_push_locals_map_from_binary_voff(Arena *arena, DBGI_Scope *scope, DF_Entity *
Temp scratch = scratch_begin(&arena, 1);
String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
EVAL_String2NumMap *result = eval_push_locals_map_from_raddbgi_voff(arena, rdbg, voff);
RDI_Parsed *rdbg = &dbgi->rdbg;
EVAL_String2NumMap *result = eval_push_locals_map_from_rdi_voff(arena, rdbg, voff);
scratch_end(scratch);
return result;
}
@@ -3709,8 +3709,8 @@ df_push_member_map_from_binary_voff(Arena *arena, DBGI_Scope *scope, DF_Entity *
Temp scratch = scratch_begin(&arena, 1);
String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
EVAL_String2NumMap *result = eval_push_member_map_from_raddbgi_voff(arena, rdbg, voff);
RDI_Parsed *rdbg = &dbgi->rdbg;
EVAL_String2NumMap *result = eval_push_member_map_from_rdi_voff(arena, rdbg, voff);
scratch_end(scratch);
return result;
}
@@ -3987,7 +3987,7 @@ df_eval_parse_ctx_from_process_vaddr(DBGI_Scope *scope, DF_Entity *process, U64
DF_Entity *binary = df_binary_file_from_module(module);
String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RDI_Parsed *rdbg = &dbgi->rdbg;
Architecture arch = df_architecture_from_entity(process);
EVAL_String2NumMap *reg_map = ctrl_string2reg_from_arch(arch);
EVAL_String2NumMap *reg_alias_map = ctrl_string2alias_from_arch(arch);
@@ -4035,22 +4035,22 @@ df_eval_parse_ctx_from_src_loc(DBGI_Scope *scope, DF_Entity *file, TxtPt pt)
DF_Entity *binary = binary_n->entity;
String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RDI_Parsed *rdbg = &dbgi->rdbg;
// rjf: file_path_normalized * rdbg -> src_id
B32 good_src_id = 0;
U32 src_id = 0;
{
RADDBGI_NameMap *mapptr = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_NormalSourcePaths);
RDI_NameMap *mapptr = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_NormalSourcePaths);
if(mapptr != 0)
{
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, mapptr, &map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, file_path_normalized.str, file_path_normalized.size);
RDI_ParsedNameMap map = {0};
rdi_name_map_parse(rdbg, mapptr, &map);
RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &map, file_path_normalized.str, file_path_normalized.size);
if(node != 0)
{
U32 id_count = 0;
U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
U32 *ids = rdi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0)
{
good_src_id = 1;
@@ -4063,19 +4063,19 @@ df_eval_parse_ctx_from_src_loc(DBGI_Scope *scope, DF_Entity *file, TxtPt pt)
// rjf: good src-id -> look up line info for visible range
if(good_src_id)
{
RADDBGI_SourceFile *src = rdbg->source_files+src_id;
RADDBGI_ParsedLineMap line_map = {0};
raddbgi_line_map_from_source_file(rdbg, src, &line_map);
RDI_SourceFile *src = rdbg->source_files+src_id;
RDI_ParsedLineMap line_map = {0};
rdi_line_map_from_source_file(rdbg, src, &line_map);
U32 voff_count = 0;
U64 *voffs = raddbgi_line_voffs_from_num(&line_map, (U32)pt.line, &voff_count);
U64 *voffs = rdi_line_voffs_from_num(&line_map, (U32)pt.line, &voff_count);
for(U64 idx = 0; idx < voff_count; idx += 1)
{
U64 base_voff = voffs[idx];
U64 unit_idx = raddbgi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, base_voff);
RADDBGI_Unit *unit = &rdbg->units[unit_idx];
RADDBGI_ParsedLineInfo unit_line_info = {0};
raddbgi_line_info_from_unit(rdbg, unit, &unit_line_info);
U64 line_info_idx = raddbgi_line_info_idx_from_voff(&unit_line_info, base_voff);
U64 unit_idx = rdi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, base_voff);
RDI_Unit *unit = &rdbg->units[unit_idx];
RDI_ParsedLineInfo unit_line_info = {0};
rdi_line_info_from_unit(rdbg, unit, &unit_line_info);
U64 line_info_idx = rdi_line_info_idx_from_voff(&unit_line_info, base_voff);
Rng1U64 range = r1u64(base_voff, unit_line_info.voffs[line_info_idx+1]);
S64 actual_line = (S64)unit_line_info.lines[line_info_idx].line_num;
DF_TextLineSrc2DasmInfoNode *src2dasm_n = push_array(scratch.arena, DF_TextLineSrc2DasmInfoNode, 1);
@@ -4246,7 +4246,7 @@ df_eval_from_string(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_
}
internal DF_Eval
df_value_mode_eval_from_eval(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval)
df_value_mode_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval)
{
ProfBeginFunction();
DF_Entity *thread = df_entity_from_handle(ctrl_ctx->thread);
@@ -4262,7 +4262,7 @@ df_value_mode_eval_from_eval(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *
{
TG_Key type_key = eval.type_key;
TG_Kind type_kind = tg_kind_from_key(type_key);
U64 type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, type_key);
U64 type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, type_key);
if(!tg_key_match(type_key, tg_key_zero()) && type_byte_size <= 8)
{
Temp scratch = scratch_begin(0, 0);
@@ -4292,7 +4292,7 @@ df_value_mode_eval_from_eval(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *
case EVAL_EvalMode_Reg:
{
TG_Key type_key = eval.type_key;
U64 type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, type_key);
U64 type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, type_key);
U64 reg_off = eval.offset;
CTRL_Unwind unwind = df_query_cached_unwind_from_thread(thread);
if(unwind.first != 0)
@@ -4316,7 +4316,7 @@ df_value_mode_eval_from_eval(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *
}
internal DF_Eval
df_dynamically_typed_eval_from_eval(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval)
df_dynamically_typed_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval)
{
ProfBeginFunction();
Temp scratch = scratch_begin(0, 0);
@@ -4330,11 +4330,11 @@ df_dynamically_typed_eval_from_eval(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_Ct
TG_Kind type_kind = tg_kind_from_key(type_key);
if(type_kind == TG_Kind_Ptr)
{
TG_Key ptee_type_key = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, type_key);
TG_Key ptee_type_key = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, type_key);
TG_Kind ptee_type_kind = tg_kind_from_key(ptee_type_key);
if(ptee_type_kind == TG_Kind_Struct || ptee_type_kind == TG_Kind_Class)
{
TG_Type *ptee_type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, ptee_type_key);
TG_Type *ptee_type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, ptee_type_key);
B32 has_vtable = 0;
for(U64 idx = 0; idx < ptee_type->count; idx += 1)
{
@@ -4363,13 +4363,13 @@ df_dynamically_typed_eval_from_eval(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_Ct
U64 vtable_vaddr = 0;
MemoryCopy(&vtable_vaddr, vtable_base_ptr_memory.str, addr_size);
U64 vtable_voff = df_voff_from_vaddr(module, vtable_vaddr);
U64 global_idx = raddbgi_vmap_idx_from_voff(rdbg->global_vmap, rdbg->global_vmap_count, vtable_voff);
RADDBGI_GlobalVariable *global_var = raddbgi_element_from_idx(rdbg, global_variables, global_idx);
if(global_var->link_flags & RADDBGI_LinkFlag_TypeScoped)
U64 global_idx = rdi_vmap_idx_from_voff(rdbg->global_vmap, rdbg->global_vmap_count, vtable_voff);
RDI_GlobalVariable *global_var = rdi_element_from_idx(rdbg, global_variables, global_idx);
if(global_var->link_flags & RDI_LinkFlag_TypeScoped)
{
RADDBGI_UDT *udt = raddbgi_element_from_idx(rdbg, udts, global_var->container_idx);
RADDBGI_TypeNode *type = raddbgi_element_from_idx(rdbg, type_nodes, udt->self_type_idx);
TG_Key derived_type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type->kind), (U64)udt->self_type_idx);
RDI_UDT *udt = rdi_element_from_idx(rdbg, udts, global_var->container_idx);
RDI_TypeNode *type = rdi_element_from_idx(rdbg, type_nodes, udt->self_type_idx);
TG_Key derived_type_key = tg_key_ext(tg_kind_from_rdi_type_kind(type->kind), (U64)udt->self_type_idx);
TG_Key ptr_to_derived_type_key = tg_cons_type_make(graph, TG_Kind_Ptr, derived_type_key, 0);
eval.type_key = ptr_to_derived_type_key;
}
@@ -4579,13 +4579,13 @@ df_string_from_ascii_value(Arena *arena, U8 val)
}
internal String8
df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_EvalVizStringFlags flags, U32 radix, DF_Eval eval)
df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, DF_EvalVizStringFlags flags, U32 radix, DF_Eval eval)
{
ProfBeginFunction();
String8 result = {0};
TG_Key type_key = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, eval.type_key);
TG_Key type_key = tg_unwrapped_from_graph_rdi_key(graph, rdbg, eval.type_key);
TG_Kind type_kind = tg_kind_from_key(type_key);
U64 type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, type_key);
U64 type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, type_key);
U8 digit_group_separator = 0;
if(!(flags & DF_EvalVizStringFlag_ReadOnlyDisplayRules))
{
@@ -4653,7 +4653,7 @@ df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *
case TG_Kind_Enum:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, type_key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, type_key);
String8 constant_name = {0};
for(U64 val_idx = 0; val_idx < type->count; val_idx += 1)
{
@@ -4693,7 +4693,7 @@ df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *
//- rjf: writing values back to child processes
internal B32
df_commit_eval_value(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval dst_eval, DF_Eval src_eval)
df_commit_eval_value(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval dst_eval, DF_Eval src_eval)
{
B32 result = 0;
Temp scratch = scratch_begin(0, 0);
@@ -4705,8 +4705,8 @@ df_commit_eval_value(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx
TG_Key src_type_key = src_eval.type_key;
TG_Kind dst_type_kind = tg_kind_from_key(dst_type_key);
TG_Kind src_type_kind = tg_kind_from_key(src_type_key);
U64 dst_type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, dst_type_key);
U64 src_type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, src_type_key);
U64 dst_type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, dst_type_key);
U64 src_type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, src_type_key);
//- rjf: get commit data based on destination type
String8 commit_data = {0};
@@ -4914,7 +4914,7 @@ df_filtered_data_members_from_members_cfg_table(Arena *arena, TG_MemberArray mem
}
internal DF_EvalLinkBaseChunkList
df_eval_link_base_chunk_list_from_eval(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key link_member_type_key, U64 link_member_off, DF_CtrlCtx *ctrl_ctx, DF_Eval eval, U64 cap)
df_eval_link_base_chunk_list_from_eval(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key link_member_type_key, U64 link_member_off, DF_CtrlCtx *ctrl_ctx, DF_Eval eval, U64 cap)
{
DF_EvalLinkBaseChunkList list = {0};
for(DF_Eval base_eval = eval, last_eval = zero_struct; list.count < cap;)
@@ -5053,7 +5053,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie
//////////////////////////////
//- rjf: unpack eval
//
TG_Key eval_type_key = tg_unwrapped_from_graph_raddbgi_key(parse_ctx->type_graph, parse_ctx->rdbg, eval.type_key);
TG_Key eval_type_key = tg_unwrapped_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, eval.type_key);
TG_Kind eval_type_kind = tg_kind_from_key(eval_type_key);
//////////////////////////////
@@ -5084,7 +5084,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie
TG_Kind ptr_type_kind = TG_Kind_Null;
if(eval_type_kind == TG_Kind_Ptr || eval_type_kind == TG_Kind_LRef || eval_type_kind == TG_Kind_RRef)
{
TG_Key direct_type_key = tg_ptee_from_graph_raddbgi_key(parse_ctx->type_graph, parse_ctx->rdbg, eval_type_key);
TG_Key direct_type_key = tg_ptee_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, eval_type_key);
TG_Kind direct_type_kind = tg_kind_from_key(direct_type_key);
DF_Eval ptr_val_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, eval);
@@ -5199,7 +5199,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie
ProfScope("build viz blocks for UDT members")
{
//- rjf: type -> filtered data members
TG_MemberArray data_members = tg_data_members_from_graph_raddbgi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, udt_eval.type_key);
TG_MemberArray data_members = tg_data_members_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, udt_eval.type_key);
TG_MemberArray filtered_data_members = df_filtered_data_members_from_members_cfg_table(scratch.arena, data_members, cfg_table);
//- rjf: build blocks for all members, split by sub-expansions
@@ -5255,7 +5255,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie
ProfScope("build viz blocks for UDT type-eval enums")
{
//- rjf: type -> full type info
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, udt_eval.type_key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, udt_eval.type_key);
//- rjf: build block for all members (cannot be expanded)
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_EnumMembers, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth+1);
@@ -5277,7 +5277,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie
ProfScope("(structs, unions, classes) descend to members & make block(s), with linked list view")
{
//- rjf: type -> data members
TG_MemberArray data_members = tg_data_members_from_graph_raddbgi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, udt_eval.type_key);
TG_MemberArray data_members = tg_data_members_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, udt_eval.type_key);
//- rjf: find link member
TG_Member *link_member = 0;
@@ -5290,7 +5290,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie
{
link_member = mem;
link_member_type_kind = tg_kind_from_key(link_member->type_key);
link_member_ptee_type_key = tg_ptee_from_graph_raddbgi_key(parse_ctx->type_graph, parse_ctx->rdbg, link_member->type_key);
link_member_ptee_type_key = tg_ptee_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, link_member->type_key);
break;
}
}
@@ -5371,10 +5371,10 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie
ProfScope("(arrays) descend to elements & make block(s)")
{
//- rjf: unpack array type info
TG_Type *array_type = tg_type_from_graph_raddbgi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, arr_eval.type_key);
TG_Type *array_type = tg_type_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, arr_eval.type_key);
U64 array_count = array_type->count;
TG_Key element_type_key = array_type->direct_type_key;
U64 element_type_byte_size = tg_byte_size_from_graph_raddbgi_key(parse_ctx->type_graph, parse_ctx->rdbg, element_type_key);
U64 element_type_byte_size = tg_byte_size_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, element_type_key);
//- rjf: build blocks for all elements, split by sub-expansions
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Elements, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth+1);
@@ -5612,7 +5612,7 @@ df_eval_viz_row_list_push_new(Arena *arena, EVAL_ParseCtx *parse_ctx, DF_EvalViz
// rjf: determine exandability, editability
if(tg_kind_from_key(eval.type_key) != TG_Kind_Null)
{
for(TG_Key t = eval.type_key;; t = tg_unwrapped_direct_from_graph_raddbgi_key(parse_ctx->type_graph, parse_ctx->rdbg, t))
for(TG_Key t = eval.type_key;; t = tg_unwrapped_direct_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, t))
{
TG_Kind kind = tg_kind_from_key(t);
if(kind == TG_Kind_Null)
+5 -5
View File
@@ -1579,8 +1579,8 @@ internal B32 df_eval_memory_read(void *u, void *out, U64 addr, U64 size);
internal EVAL_ParseCtx df_eval_parse_ctx_from_process_vaddr(DBGI_Scope *scope, DF_Entity *process, U64 vaddr);
internal EVAL_ParseCtx df_eval_parse_ctx_from_src_loc(DBGI_Scope *scope, DF_Entity *file, TxtPt pt);
internal DF_Eval df_eval_from_string(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, String8 string);
internal DF_Eval df_value_mode_eval_from_eval(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval);
internal DF_Eval df_dynamically_typed_eval_from_eval(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval);
internal DF_Eval df_value_mode_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval);
internal DF_Eval df_dynamically_typed_eval_from_eval(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval);
internal DF_Eval df_eval_from_eval_cfg_table(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, DF_Eval eval, DF_CfgTable *cfg);
////////////////////////////////
@@ -1604,14 +1604,14 @@ internal String8 df_eval_view_rule_from_key(DF_EvalView *eval_view, DF_ExpandKey
//- rjf: evaluation value string builder helpers
internal String8 df_string_from_ascii_value(Arena *arena, U8 val);
internal String8 df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_EvalVizStringFlags flags, U32 radix, DF_Eval eval);
internal String8 df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, DF_EvalVizStringFlags flags, U32 radix, DF_Eval eval);
//- rjf: writing values back to child processes
internal B32 df_commit_eval_value(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval dst_eval, DF_Eval src_eval);
internal B32 df_commit_eval_value(TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval dst_eval, DF_Eval src_eval);
//- rjf: type helpers
internal TG_MemberArray df_filtered_data_members_from_members_cfg_table(Arena *arena, TG_MemberArray members, DF_CfgTable *cfg);
internal DF_EvalLinkBaseChunkList df_eval_link_base_chunk_list_from_eval(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key link_member_type_key, U64 link_member_off, DF_CtrlCtx *ctrl_ctx, DF_Eval eval, U64 cap);
internal DF_EvalLinkBaseChunkList df_eval_link_base_chunk_list_from_eval(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key link_member_type_key, U64 link_member_off, DF_CtrlCtx *ctrl_ctx, DF_Eval eval, U64 cap);
internal DF_EvalLinkBase df_eval_link_base_from_chunk_list_index(DF_EvalLinkBaseChunkList *list, U64 idx);
internal DF_EvalLinkBaseArray df_eval_link_base_array_from_chunk_list(Arena *arena, DF_EvalLinkBaseChunkList *chunks);
+17 -17
View File
@@ -4410,15 +4410,15 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D
DF_Entity *task = n->entity;
if(task->alloc_time_us + 500000 < os_now_microseconds())
{
String8 raddbgi_path = task->name;
String8 raddbgi_name = str8_skip_last_slash(raddbgi_path);
String8 task_text = push_str8f(scratch.arena, "Creating %S...", raddbgi_name);
String8 rdi_path = task->name;
String8 rdi_name = str8_skip_last_slash(rdi_path);
String8 task_text = push_str8f(scratch.arena, "Creating %S...", rdi_name);
UI_Key key = ui_key_from_stringf(ui_key_zero(), "task_%p", task);
UI_Box *box = ui_build_box_from_key(UI_BoxFlag_DrawHotEffects|UI_BoxFlag_DrawText|UI_BoxFlag_DrawBorder|UI_BoxFlag_DrawBackground|UI_BoxFlag_Clickable, key);
UI_Signal sig = ui_signal_from_box(box);
if(ui_hovering(sig)) UI_Tooltip
{
ui_label(raddbgi_path);
ui_label(rdi_path);
}
ui_box_equip_display_string(box, task_text);
}
@@ -5232,7 +5232,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D
default:{}break;
case EVAL_EvalMode_Addr:
{
U64 size = tg_byte_size_from_graph_raddbgi_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key);
U64 size = tg_byte_size_from_graph_rdi_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key);
size = Min(size, 64);
Rng1U64 vaddr_rng = r1u64(row->eval.offset, row->eval.offset+size);
CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, vaddr_rng, 0);
@@ -6858,7 +6858,7 @@ df_eval_escaped_from_raw_string(Arena *arena, String8 raw)
}
internal String8List
df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, U32 default_radix, F_Tag font, F32 font_size, F32 max_size, S32 depth, DF_Eval eval, TG_Member *opt_member, DF_CfgTable *cfg_table)
df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, U32 default_radix, F_Tag font, F32 font_size, F32 max_size, S32 depth, DF_Eval eval, TG_Member *opt_member, DF_CfgTable *cfg_table)
{
ProfBeginFunction();
String8List list = {0};
@@ -6869,13 +6869,13 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
{
if(opt_member != 0)
{
U64 member_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, opt_member->type_key);
U64 member_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, opt_member->type_key);
str8_list_pushf(arena, &list, "member (%I64u offset, %I64u byte%s)", opt_member->off, member_byte_size, member_byte_size > 1 ? "s" : "");
}
else
{
String8 basic_type_kind_string = tg_kind_basic_string_table[tg_kind_from_key(eval.type_key)];
U64 byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, eval.type_key);
U64 byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, eval.type_key);
str8_list_pushf(arena, &list, "%S (%I64u byte%s)", basic_type_kind_string, byte_size, byte_size > 1 ? "s" : "");
}
}
@@ -6883,7 +6883,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
//- rjf: non-type path: descend recursively & produce single-line value strings
else if(max_size > 0)
{
TG_Kind eval_type_kind = tg_kind_from_key(tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, eval.type_key));
TG_Kind eval_type_kind = tg_kind_from_key(tg_unwrapped_from_graph_rdi_key(graph, rdbg, eval.type_key));
U32 radix = default_radix;
DF_CfgVal *dec_cfg = df_cfg_val_from_string(cfg_table, str8_lit("dec"));
DF_CfgVal *hex_cfg = df_cfg_val_from_string(cfg_table, str8_lit("hex"));
@@ -6924,7 +6924,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
// rjf: get pointed-at info
TG_Kind type_kind = tg_kind_from_key(eval.type_key);
TG_Key direct_type_key = tg_ptee_from_graph_raddbgi_key(graph, rdbg, eval.type_key);
TG_Key direct_type_key = tg_ptee_from_graph_rdi_key(graph, rdbg, eval.type_key);
TG_Kind direct_type_kind = tg_kind_from_key(direct_type_key);
B32 direct_type_has_content = (direct_type_kind != TG_Kind_Null && direct_type_kind != TG_Kind_Void && value_eval.imm_u64 != 0);
B32 direct_type_is_string = (direct_type_kind != TG_Kind_Null && value_eval.imm_u64 != 0 &&
@@ -7011,7 +7011,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
case TG_Kind_Array:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *eval_type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, eval.type_key);
TG_Type *eval_type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, eval.type_key);
TG_Key direct_type_key = eval_type->direct_type_key;
TG_Kind direct_type_kind = tg_kind_from_key(direct_type_key);
U64 array_count = eval_type->count;
@@ -7055,7 +7055,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
{
if(depth < 3)
{
U64 direct_type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, direct_type_key);
U64 direct_type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, direct_type_key);
for(U64 idx = 0; idx < array_count && max_size > space_taken; idx += 1)
{
DF_Eval element_eval = zero_struct;
@@ -7111,7 +7111,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
if(depth < 4)
{
Temp scratch = scratch_begin(&arena, 1);
TG_MemberArray data_members = tg_data_members_from_graph_raddbgi_key(scratch.arena, graph, rdbg, eval.type_key);
TG_MemberArray data_members = tg_data_members_from_graph_rdi_key(scratch.arena, graph, rdbg, eval.type_key);
TG_MemberArray filtered_data_members = df_filtered_data_members_from_members_cfg_table(scratch.arena, data_members, cfg_table);
for(U64 member_idx = 0; member_idx < filtered_data_members.count && max_size > space_taken; member_idx += 1)
{
@@ -7312,7 +7312,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop
case DF_EvalVizBlockKind_Members:
if(block_type_kind != TG_Kind_Null)
{
TG_MemberArray data_members = tg_data_members_from_graph_raddbgi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, block->eval.type_key);
TG_MemberArray data_members = tg_data_members_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, block->eval.type_key);
TG_MemberArray filtered_data_members = df_filtered_data_members_from_members_cfg_table(scratch.arena, data_members, &block->cfg_table);
for(U64 idx = visible_idx_range.min; idx < visible_idx_range.max && idx < filtered_data_members.count; idx += 1)
{
@@ -7370,7 +7370,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop
case DF_EvalVizBlockKind_EnumMembers:
if(block_type_kind == TG_Kind_Enum)
{
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, block->eval.type_key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, block->eval.type_key);
for(U64 idx = visible_idx_range.min; idx < visible_idx_range.max && idx < type->count; idx += 1)
{
TG_EnumVal *enum_val = &type->enum_vals[idx];
@@ -7414,9 +7414,9 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop
//
case DF_EvalVizBlockKind_Elements:
{
TG_Key direct_type_key = tg_unwrapped_direct_from_graph_raddbgi_key(parse_ctx->type_graph, parse_ctx->rdbg, block->eval.type_key);
TG_Key direct_type_key = tg_unwrapped_direct_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, block->eval.type_key);
TG_Kind direct_type_kind = tg_kind_from_key(direct_type_key);
U64 direct_type_key_byte_size = tg_byte_size_from_graph_raddbgi_key(parse_ctx->type_graph, parse_ctx->rdbg, direct_type_key);
U64 direct_type_key_byte_size = tg_byte_size_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, direct_type_key);
for(U64 idx = visible_idx_range.min; idx < visible_idx_range.max; idx += 1)
{
// rjf: get keys for this row
+1 -1
View File
@@ -961,7 +961,7 @@ internal void df_window_update_and_render(Arena *arena, OS_EventList *events, DF
//~ rjf: Eval Viz
internal String8 df_eval_escaped_from_raw_string(Arena *arena, String8 raw);
internal String8List df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, U32 default_radix, F_Tag font, F32 font_size, F32 max_size, S32 depth, DF_Eval eval, TG_Member *opt_member, DF_CfgTable *cfg_table);
internal String8List df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, TG_Graph *graph, RDI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, U32 default_radix, F_Tag font, F32 font_size, F32 max_size, S32 depth, DF_Eval eval, TG_Member *opt_member, DF_CfgTable *cfg_table);
internal DF_EvalVizWindowedRowList df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, DF_EvalView *eval_view, U32 default_radix, F_Tag font, F32 font_size, Rng1S64 visible_range, DF_EvalVizBlockList *blocks);
////////////////////////////////
+14 -14
View File
@@ -5,7 +5,7 @@
//~ rjf: Helpers
internal Vec4F32
df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RADDBGI_Parsed *raddbg, DF_Entity *process)
df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RDI_Parsed *raddbg, DF_Entity *process)
{
Vec4F32 rgba = {0};
Temp scratch = scratch_begin(0, 0);
@@ -27,14 +27,14 @@ df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RADDBGI_Parsed
case TG_Kind_Array:
if(eval.mode == EVAL_EvalMode_Addr)
{
U64 array_total_size = tg_byte_size_from_graph_raddbgi_key(graph, raddbg, type_key);
U64 array_total_size = tg_byte_size_from_graph_rdi_key(graph, raddbg, type_key);
U64 array_total_size_capped = ClampTop(array_total_size, 64);
Rng1U64 array_memory_vaddr_rng = r1u64(eval.offset, eval.offset + array_total_size_capped);
CTRL_ProcessMemorySlice array_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, array_memory_vaddr_rng, 0);
String8 array_memory = array_slice.data;
TG_Key element_type_key = tg_unwrapped_direct_from_graph_raddbgi_key(graph, raddbg, type_key);
TG_Key element_type_key = tg_unwrapped_direct_from_graph_rdi_key(graph, raddbg, type_key);
TG_Kind element_type_kind = tg_kind_from_key(element_type_key);
U64 element_type_size = tg_byte_size_from_graph_raddbgi_key(graph, raddbg, element_type_key);
U64 element_type_size = tg_byte_size_from_graph_rdi_key(graph, raddbg, element_type_key);
for(U64 element_idx = 0; element_idx < 4; element_idx += 1)
{
U64 offset = element_idx*element_type_size;
@@ -64,12 +64,12 @@ df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RADDBGI_Parsed
case TG_Kind_Union:
if(eval.mode == EVAL_EvalMode_Addr)
{
U64 struct_total_size = tg_byte_size_from_graph_raddbgi_key(graph, raddbg, type_key);
U64 struct_total_size = tg_byte_size_from_graph_rdi_key(graph, raddbg, type_key);
U64 struct_total_size_capped = ClampTop(struct_total_size, 64);
Rng1U64 struct_memory_vaddr_rng = r1u64(eval.offset, eval.offset + struct_total_size_capped);
CTRL_ProcessMemorySlice struct_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, struct_memory_vaddr_rng, 0);
String8 struct_memory = struct_slice.data;
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, raddbg, type_key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, raddbg, type_key);
for(U64 element_idx = 0, member_idx = 0;
element_idx < 4 && member_idx < type->count;
member_idx += 1)
@@ -102,7 +102,7 @@ df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RADDBGI_Parsed
}
internal void
df_view_rule_hooks__eval_commit_rgba(DF_Eval eval, TG_Graph *graph, RADDBGI_Parsed *raddbg, DF_CtrlCtx *ctrl_ctx, Vec4F32 rgba)
df_view_rule_hooks__eval_commit_rgba(DF_Eval eval, TG_Graph *graph, RDI_Parsed *raddbg, DF_CtrlCtx *ctrl_ctx, Vec4F32 rgba)
{
TG_Key type_key = eval.type_key;
TG_Kind type_kind = tg_kind_from_key(type_key);
@@ -126,13 +126,13 @@ df_view_rule_hooks__eval_commit_rgba(DF_Eval eval, TG_Graph *graph, RADDBGI_Pars
case TG_Kind_Array:
if(eval.mode == EVAL_EvalMode_Addr)
{
U64 array_total_size = tg_byte_size_from_graph_raddbgi_key(graph, raddbg, type_key);
U64 array_total_size = tg_byte_size_from_graph_rdi_key(graph, raddbg, type_key);
U64 array_total_size_capped = ClampTop(array_total_size, 64);
Rng1U64 array_memory_vaddr_rng = r1u64(eval.offset, eval.offset + array_total_size_capped);
String8 array_memory = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, array_memory_vaddr_rng);
TG_Key element_type_key = tg_unwrapped_direct_from_graph_raddbgi_key(graph, raddbg, type_key);
TG_Key element_type_key = tg_unwrapped_direct_from_graph_rdi_key(graph, raddbg, type_key);
TG_Kind element_type_kind = tg_kind_from_key(element_type_key);
U64 element_type_size = tg_byte_size_from_graph_raddbgi_key(graph, raddbg, element_type_key);
U64 element_type_size = tg_byte_size_from_graph_rdi_key(graph, raddbg, element_type_key);
for(U64 element_idx = 0; element_idx < 4; element_idx += 1)
{
U64 offset = element_idx*element_type_size;
@@ -162,11 +162,11 @@ df_view_rule_hooks__eval_commit_rgba(DF_Eval eval, TG_Graph *graph, RADDBGI_Pars
case TG_Kind_Union:
if(eval.mode == EVAL_EvalMode_Addr)
{
U64 struct_total_size = tg_byte_size_from_graph_raddbgi_key(graph, raddbg, type_key);
U64 struct_total_size = tg_byte_size_from_graph_rdi_key(graph, raddbg, type_key);
U64 struct_total_size_capped = ClampTop(struct_total_size, 64);
Rng1U64 struct_memory_vaddr_rng = r1u64(eval.offset, eval.offset + struct_total_size_capped);
String8 struct_memory = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, struct_memory_vaddr_rng);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, raddbg, type_key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, raddbg, type_key);
for(U64 element_idx = 0, member_idx = 0;
element_idx < 4 && member_idx < type->count;
member_idx += 1)
@@ -343,7 +343,7 @@ DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_DEF(array)
}
// rjf: apply array size to type
TG_Key pointee = tg_ptee_from_graph_raddbgi_key(parse_ctx->type_graph, parse_ctx->rdbg, type_key);
TG_Key pointee = tg_ptee_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, type_key);
TG_Key array_type = tg_cons_type_make(parse_ctx->type_graph, TG_Kind_Array, pointee, array_size);
eval.type_key = tg_cons_type_make(parse_ctx->type_graph, TG_Kind_Ptr, array_type, 0);
}
@@ -373,7 +373,7 @@ DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_DEF(bswap)
Temp scratch = scratch_begin(&arena, 1);
TG_Key type_key = eval.type_key;
TG_Kind type_kind = tg_kind_from_key(type_key);
U64 type_size_bytes = tg_byte_size_from_graph_raddbgi_key(parse_ctx->type_graph, parse_ctx->rdbg, type_key);
U64 type_size_bytes = tg_byte_size_from_graph_rdi_key(parse_ctx->type_graph, parse_ctx->rdbg, type_key);
if(TG_Kind_Char8 <= type_kind && type_kind <= TG_Kind_S256 &&
(type_size_bytes == 2 ||
type_size_bytes == 4 ||
+2 -2
View File
@@ -32,8 +32,8 @@ struct DF_TxtTopologyInfo
////////////////////////////////
//~ rjf: Helpers
internal Vec4F32 df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RADDBGI_Parsed *raddbg, DF_Entity *process);
internal void df_view_rule_hooks__eval_commit_rgba(DF_Eval eval, TG_Graph *graph, RADDBGI_Parsed *raddbg, DF_CtrlCtx *ctrl_ctx, Vec4F32 rgba);
internal Vec4F32 df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RDI_Parsed *raddbg, DF_Entity *process);
internal void df_view_rule_hooks__eval_commit_rgba(DF_Eval eval, TG_Graph *graph, RDI_Parsed *raddbg, DF_CtrlCtx *ctrl_ctx, Vec4F32 rgba);
internal DF_BitmapTopologyInfo df_view_rule_hooks__bitmap_topology_info_from_cfg(DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, DF_CfgNode *cfg);
internal DF_GeoTopologyInfo df_view_rule_hooks__geo_topology_info_from_cfg(DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, DF_CfgNode *cfg);
internal DF_TxtTopologyInfo df_view_rule_hooks__txt_topology_info_from_cfg(DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, DF_CfgNode *cfg);
+12 -12
View File
@@ -751,7 +751,7 @@ df_eval_viz_block_list_from_watch_view_state(Arena *arena, DBGI_Scope *scope, DF
DF_Entity *binary = df_binary_file_from_module(module);
String8 exe_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, os_now_microseconds()+100);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RDI_Parsed *rdbg = &dbgi->rdbg;
//- rjf: calculate top-level keys, expand root-level, grab root expansion node
DF_ExpandKey parent_key = df_expand_key_make(5381, 0);
@@ -1180,7 +1180,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW
default:{}break;
case EVAL_EvalMode_Addr:
{
U64 size = tg_byte_size_from_graph_raddbgi_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key);
U64 size = tg_byte_size_from_graph_rdi_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key);
size = Min(size, 64);
Rng1U64 vaddr_rng = r1u64(row->eval.offset, row->eval.offset+size);
CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, vaddr_rng, 0);
@@ -1270,7 +1270,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW
row->depth > 0 &&
!row_expanded)
{
U64 next_off = (row->eval.offset + tg_byte_size_from_graph_raddbgi_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key));
U64 next_off = (row->eval.offset + tg_byte_size_from_graph_rdi_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key));
if(next_off%64 != 0 && row->eval.offset/64 < next_off/64)
{
ui_set_next_fixed_x(0);
@@ -2918,7 +2918,7 @@ DF_VIEW_UI_FUNCTION_DEF(SymbolLister)
//- rjf: query -> raddbg, filtered items
U128 fuzzy_search_key = {(U64)view, df_hash_from_string(str8_struct(&view))};
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, os_now_microseconds()+100);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RDI_Parsed *rdbg = &dbgi->rdbg;
B32 items_stale = 0;
DBGI_FuzzySearchItemArray items = dbgi_fuzzy_search_items_from_key_exe_query(scope, fuzzy_search_key, exe_path, query, DBGI_FuzzySearchTarget_Procedures, os_now_microseconds()+100, &items_stale);
if(items_stale)
@@ -2929,9 +2929,9 @@ DF_VIEW_UI_FUNCTION_DEF(SymbolLister)
//- rjf: submit best match when hitting enter w/ no selection
if(slv->cursor.y == 0 && items.count != 0 && os_key_press(ui_events(), ui_window(), 0, OS_Key_Return))
{
RADDBGI_Procedure *procedure = raddbgi_element_from_idx(rdbg, procedures, items.v[0].idx);
RDI_Procedure *procedure = rdi_element_from_idx(rdbg, procedures, items.v[0].idx);
U64 name_size = 0;
U8 *name_base = raddbgi_string_from_idx(rdbg, procedure->name_string_idx, &name_size);
U8 *name_base = rdi_string_from_idx(rdbg, procedure->name_string_idx, &name_size);
String8 name = str8(name_base, name_size);
if(name.size != 0)
{
@@ -2967,12 +2967,12 @@ DF_VIEW_UI_FUNCTION_DEF(SymbolLister)
UI_Focus((slv->cursor.y == idx+1) ? UI_FocusKind_On : UI_FocusKind_Off)
{
DBGI_FuzzySearchItem *item = &items.v[idx];
RADDBGI_Procedure *procedure = raddbgi_element_from_idx(rdbg, procedures, item->idx);
RDI_Procedure *procedure = rdi_element_from_idx(rdbg, procedures, item->idx);
U64 name_size = 0;
U8 *name_base = raddbgi_string_from_idx(rdbg, procedure->name_string_idx, &name_size);
U8 *name_base = rdi_string_from_idx(rdbg, procedure->name_string_idx, &name_size);
String8 name = str8(name_base, name_size);
RADDBGI_TypeNode *type_node = raddbgi_element_from_idx(rdbg, type_nodes, procedure->type_idx);
TG_Key type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), procedure->type_idx);
RDI_TypeNode *type_node = rdi_element_from_idx(rdbg, type_nodes, procedure->type_idx);
TG_Key type_key = tg_key_ext(tg_kind_from_rdi_type_kind(type_node->kind), procedure->type_idx);
ui_set_next_hover_cursor(OS_Cursor_HandPoint);
UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable|
UI_BoxFlag_DrawBackground|
@@ -7902,7 +7902,7 @@ DF_VIEW_UI_FUNCTION_DEF(Memory)
DBGI_Scope *scope = dbgi_scope_open();
U64 thread_rip_vaddr = df_query_cached_rip_from_thread_unwind(thread, ctrl_ctx.unwind_count);
EVAL_ParseCtx parse_ctx = df_eval_parse_ctx_from_process_vaddr(scope, process, thread_rip_vaddr);
RADDBGI_Parsed *rdbg = parse_ctx.rdbg;
RDI_Parsed *rdbg = parse_ctx.rdbg;
for(EVAL_String2NumMapNode *n = parse_ctx.locals_map->first; n != 0; n = n->order_next)
{
String8 local_name = n->string;
@@ -7910,7 +7910,7 @@ DF_VIEW_UI_FUNCTION_DEF(Memory)
if(local_eval.mode == EVAL_EvalMode_Addr)
{
TG_Kind local_eval_type_kind = tg_kind_from_key(local_eval.type_key);
U64 local_eval_type_size = tg_byte_size_from_graph_raddbgi_key(parse_ctx.type_graph, rdbg, local_eval.type_key);
U64 local_eval_type_size = tg_byte_size_from_graph_rdi_key(parse_ctx.type_graph, rdbg, local_eval.type_key);
Rng1U64 vaddr_rng = r1u64(local_eval.offset, local_eval.offset+local_eval_type_size);
Rng1U64 vaddr_rng_in_visible = intersect_1u64(viz_range_bytes, vaddr_rng);
if(vaddr_rng_in_visible.max != vaddr_rng_in_visible.min)
+149 -149
View File
@@ -23,8 +23,8 @@ eval_bytecode_from_oplist(Arena *arena, EVAL_OpList *list){
default:
{
// compute bytecode advance
U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[opcode];
U64 extra_byte_count = RADDBGI_DECODEN_FROM_CTRLBITS(ctrlbits);
U8 ctrlbits = rdi_eval_opcode_ctrlbits[opcode];
U64 extra_byte_count = RDI_DECODEN_FROM_CTRLBITS(ctrlbits);
U8 *next_ptr = ptr + 1 + extra_byte_count;
Assert(next_ptr <= opl);
@@ -62,9 +62,9 @@ eval_bytecode_from_oplist(Arena *arena, EVAL_OpList *list){
}
internal void
eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RADDBGI_EvalOp opcode, U64 p){
U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[opcode];
U32 p_size = RADDBGI_DECODEN_FROM_CTRLBITS(ctrlbits);
eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RDI_EvalOp opcode, U64 p){
U8 ctrlbits = rdi_eval_opcode_ctrlbits[opcode];
U32 p_size = RDI_DECODEN_FROM_CTRLBITS(ctrlbits);
EVAL_Op *node = push_array_no_zero(arena, EVAL_Op, 1);
node->opcode = opcode;
@@ -78,35 +78,35 @@ eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RADDBGI_EvalOp opcode, U64
internal void
eval_oplist_push_uconst(Arena *arena, EVAL_OpList *list, U64 x){
if (x <= 0xFF){
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU8, x);
eval_oplist_push_op(arena, list, RDI_EvalOp_ConstU8, x);
}
else if (x <= 0xFFFF){
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU16, x);
eval_oplist_push_op(arena, list, RDI_EvalOp_ConstU16, x);
}
else if (x <= 0xFFFFFFFF){
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU32, x);
eval_oplist_push_op(arena, list, RDI_EvalOp_ConstU32, x);
}
else{
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU64, x);
eval_oplist_push_op(arena, list, RDI_EvalOp_ConstU64, x);
}
}
internal void
eval_oplist_push_sconst(Arena *arena, EVAL_OpList *list, S64 x){
if (-0x80 <= x && x <= 0x7F){
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU8, (U64)x);
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_TruncSigned, 8);
eval_oplist_push_op(arena, list, RDI_EvalOp_ConstU8, (U64)x);
eval_oplist_push_op(arena, list, RDI_EvalOp_TruncSigned, 8);
}
else if (-0x8000 <= x && x <= 0x7FFF){
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU16, (U64)x);
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_TruncSigned, 16);
eval_oplist_push_op(arena, list, RDI_EvalOp_ConstU16, (U64)x);
eval_oplist_push_op(arena, list, RDI_EvalOp_TruncSigned, 16);
}
else if (-0x80000000ll <= x && x <= 0x7FFFFFFFll){
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU32, (U64)x);
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_TruncSigned, 32);
eval_oplist_push_op(arena, list, RDI_EvalOp_ConstU32, (U64)x);
eval_oplist_push_op(arena, list, RDI_EvalOp_TruncSigned, 32);
}
else{
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU64, (U64)x);
eval_oplist_push_op(arena, list, RDI_EvalOp_ConstU64, (U64)x);
}
}
@@ -138,31 +138,31 @@ eval_oplist_concat_in_place(EVAL_OpList *left_dst, EVAL_OpList *right_destroyed)
////////////////////////////////
//~ allen: EVAL Expression Info Functions
internal RADDBGI_EvalOp
internal RDI_EvalOp
eval_opcode_from_expr_kind(EVAL_ExprKind kind){
RADDBGI_EvalOp result = RADDBGI_EvalOp_Stop;
RDI_EvalOp result = RDI_EvalOp_Stop;
switch (kind){
case EVAL_ExprKind_Neg: result = RADDBGI_EvalOp_Neg; break;
case EVAL_ExprKind_LogNot: result = RADDBGI_EvalOp_LogNot; break;
case EVAL_ExprKind_BitNot: result = RADDBGI_EvalOp_BitNot; break;
case EVAL_ExprKind_Mul: result = RADDBGI_EvalOp_Mul; break;
case EVAL_ExprKind_Div: result = RADDBGI_EvalOp_Div; break;
case EVAL_ExprKind_Mod: result = RADDBGI_EvalOp_Mod; break;
case EVAL_ExprKind_Add: result = RADDBGI_EvalOp_Add; break;
case EVAL_ExprKind_Sub: result = RADDBGI_EvalOp_Sub; break;
case EVAL_ExprKind_LShift: result = RADDBGI_EvalOp_LShift; break;
case EVAL_ExprKind_RShift: result = RADDBGI_EvalOp_RShift; break;
case EVAL_ExprKind_Less: result = RADDBGI_EvalOp_Less; break;
case EVAL_ExprKind_LsEq: result = RADDBGI_EvalOp_LsEq; break;
case EVAL_ExprKind_Grtr: result = RADDBGI_EvalOp_Grtr; break;
case EVAL_ExprKind_GrEq: result = RADDBGI_EvalOp_GrEq; break;
case EVAL_ExprKind_EqEq: result = RADDBGI_EvalOp_EqEq; break;
case EVAL_ExprKind_NtEq: result = RADDBGI_EvalOp_NtEq; break;
case EVAL_ExprKind_BitAnd: result = RADDBGI_EvalOp_BitAnd; break;
case EVAL_ExprKind_BitXor: result = RADDBGI_EvalOp_BitXor; break;
case EVAL_ExprKind_BitOr: result = RADDBGI_EvalOp_BitOr; break;
case EVAL_ExprKind_LogAnd: result = RADDBGI_EvalOp_LogAnd; break;
case EVAL_ExprKind_LogOr: result = RADDBGI_EvalOp_LogOr; break;
case EVAL_ExprKind_Neg: result = RDI_EvalOp_Neg; break;
case EVAL_ExprKind_LogNot: result = RDI_EvalOp_LogNot; break;
case EVAL_ExprKind_BitNot: result = RDI_EvalOp_BitNot; break;
case EVAL_ExprKind_Mul: result = RDI_EvalOp_Mul; break;
case EVAL_ExprKind_Div: result = RDI_EvalOp_Div; break;
case EVAL_ExprKind_Mod: result = RDI_EvalOp_Mod; break;
case EVAL_ExprKind_Add: result = RDI_EvalOp_Add; break;
case EVAL_ExprKind_Sub: result = RDI_EvalOp_Sub; break;
case EVAL_ExprKind_LShift: result = RDI_EvalOp_LShift; break;
case EVAL_ExprKind_RShift: result = RDI_EvalOp_RShift; break;
case EVAL_ExprKind_Less: result = RDI_EvalOp_Less; break;
case EVAL_ExprKind_LsEq: result = RDI_EvalOp_LsEq; break;
case EVAL_ExprKind_Grtr: result = RDI_EvalOp_Grtr; break;
case EVAL_ExprKind_GrEq: result = RDI_EvalOp_GrEq; break;
case EVAL_ExprKind_EqEq: result = RDI_EvalOp_EqEq; break;
case EVAL_ExprKind_NtEq: result = RDI_EvalOp_NtEq; break;
case EVAL_ExprKind_BitAnd: result = RDI_EvalOp_BitAnd; break;
case EVAL_ExprKind_BitXor: result = RDI_EvalOp_BitXor; break;
case EVAL_ExprKind_BitOr: result = RDI_EvalOp_BitOr; break;
case EVAL_ExprKind_LogAnd: result = RDI_EvalOp_LogAnd; break;
case EVAL_ExprKind_LogOr: result = RDI_EvalOp_LogOr; break;
}
return(result);
}
@@ -286,9 +286,9 @@ eval_expr_leaf_type(Arena *arena, void *location, TG_Key type_key){
////////////////////////////////
//~ allen: EVAL Type Information Transformers
internal RADDBGI_EvalTypeGroup
internal RDI_EvalTypeGroup
eval_type_group_from_kind(TG_Kind kind){
RADDBGI_EvalTypeGroup result = 0;
RDI_EvalTypeGroup result = 0;
switch (kind){
default:{}break;
@@ -303,7 +303,7 @@ eval_type_group_from_kind(TG_Kind kind){
case TG_Kind_IncompleteStruct: case TG_Kind_IncompleteClass:
case TG_Kind_IncompleteUnion: case TG_Kind_IncompleteEnum:
case TG_Kind_Bitfield: case TG_Kind_Variadic:
result = RADDBGI_EvalTypeGroup_Other; break;
result = RDI_EvalTypeGroup_Other; break;
case TG_Kind_Handle:
case TG_Kind_UChar8: case TG_Kind_UChar16: case TG_Kind_UChar32:
@@ -312,26 +312,26 @@ eval_type_group_from_kind(TG_Kind kind){
case TG_Kind_U512:
case TG_Kind_Ptr: case TG_Kind_LRef: case TG_Kind_RRef:
case TG_Kind_Function: case TG_Kind_Method: case TG_Kind_MemberPtr:
result = RADDBGI_EvalTypeGroup_U; break;
result = RDI_EvalTypeGroup_U; break;
case TG_Kind_Char8: case TG_Kind_Char16: case TG_Kind_Char32:
case TG_Kind_S8: case TG_Kind_S16: case TG_Kind_S32:
case TG_Kind_S64: case TG_Kind_S128: case TG_Kind_S256:
case TG_Kind_S512:
case TG_Kind_Bool:
result = RADDBGI_EvalTypeGroup_S; break;
result = RDI_EvalTypeGroup_S; break;
case TG_Kind_F32:
result = RADDBGI_EvalTypeGroup_F32; break;
result = RDI_EvalTypeGroup_F32; break;
case TG_Kind_F64:
result = RADDBGI_EvalTypeGroup_F64; break;
result = RDI_EvalTypeGroup_F64; break;
}
return(result);
}
internal TG_Key
eval_type_unwrap_enum(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
eval_type_unwrap_enum(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key)
{
TG_Key result = key;
for(B32 good = 1; good;)
@@ -339,7 +339,7 @@ eval_type_unwrap_enum(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
TG_Kind kind = tg_kind_from_key(key);
if(kind == TG_Kind_Enum)
{
result = tg_direct_from_graph_raddbgi_key(graph, rdbg, result);
result = tg_direct_from_graph_rdi_key(graph, rdbg, result);
}
else
{
@@ -350,7 +350,7 @@ eval_type_unwrap_enum(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
}
internal TG_Key
eval_type_promote(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key){
eval_type_promote(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key){
TG_Key result = key;
TG_Kind kind = tg_kind_from_key(key);
if(kind == TG_Kind_Bool ||
@@ -365,7 +365,7 @@ eval_type_promote(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key){
}
internal TG_Key
eval_type_coerce(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key l, TG_Key r){
eval_type_coerce(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r){
Assert(eval_kind_is_basic_or_enum(tg_kind_from_key(l)) &&
eval_kind_is_basic_or_enum(tg_kind_from_key(r)));
@@ -384,12 +384,12 @@ eval_type_coerce(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key l, TG_Key r){
}
internal B32
eval_type_match(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key l, TG_Key r){
eval_type_match(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r){
B32 result = 0;
// unwrap
TG_Key lu = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, l);
TG_Key ru = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, r);
TG_Key lu = tg_unwrapped_from_graph_rdi_key(graph, rdbg, l);
TG_Key ru = tg_unwrapped_from_graph_rdi_key(graph, rdbg, r);
if (tg_key_match(lu, ru)){
result = 1;
@@ -408,8 +408,8 @@ eval_type_match(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key l, TG_Key r){
case TG_Kind_LRef:
case TG_Kind_RRef:
{
TG_Key lud = tg_direct_from_graph_raddbgi_key(graph, rdbg, lu);
TG_Key rud = tg_direct_from_graph_raddbgi_key(graph, rdbg, ru);
TG_Key lud = tg_direct_from_graph_rdi_key(graph, rdbg, lu);
TG_Key rud = tg_direct_from_graph_rdi_key(graph, rdbg, ru);
if (eval_type_match(graph, rdbg, lud, rud)){
result = 1;
}
@@ -417,10 +417,10 @@ eval_type_match(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key l, TG_Key r){
case TG_Kind_MemberPtr:
{
TG_Key lud = tg_direct_from_graph_raddbgi_key(graph, rdbg, lu);
TG_Key rud = tg_direct_from_graph_raddbgi_key(graph, rdbg, ru);
TG_Key luo = tg_owner_from_graph_raddbgi_key(graph, rdbg, lu);
TG_Key ruo = tg_owner_from_graph_raddbgi_key(graph, rdbg, ru);
TG_Key lud = tg_direct_from_graph_rdi_key(graph, rdbg, lu);
TG_Key rud = tg_direct_from_graph_rdi_key(graph, rdbg, ru);
TG_Key luo = tg_owner_from_graph_rdi_key(graph, rdbg, lu);
TG_Key ruo = tg_owner_from_graph_rdi_key(graph, rdbg, ru);
if (eval_type_match(graph, rdbg, lud, rud) &&
eval_type_match(graph, rdbg, luo, ruo)){
result = 1;
@@ -430,8 +430,8 @@ eval_type_match(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key l, TG_Key r){
case TG_Kind_Array:
{
Temp scratch = scratch_begin(0, 0);
TG_Type *lt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, r);
TG_Type *lt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, r);
if(lt->count == rt->count && eval_type_match(graph, rdbg, lt->direct_type_key, rt->direct_type_key))
{
result = 1;
@@ -442,8 +442,8 @@ eval_type_match(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key l, TG_Key r){
case TG_Kind_Function:
{
Temp scratch = scratch_begin(0, 0);
TG_Type *lt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, r);
TG_Type *lt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, r);
if (lt->count == rt->count && eval_type_match(graph, rdbg, lt->direct_type_key, rt->direct_type_key))
{
B32 params_match = 1;
@@ -466,8 +466,8 @@ eval_type_match(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key l, TG_Key r){
case TG_Kind_Method:
{
Temp scratch = scratch_begin(0, 0);
TG_Type *lt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, r);
TG_Type *lt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, r);
if (lt->count == rt->count &&
eval_type_match(graph, rdbg, lt->direct_type_key, rt->direct_type_key) &&
eval_type_match(graph, rdbg, lt->owner_type_key, rt->owner_type_key))
@@ -522,15 +522,15 @@ eval_kind_is_basic_or_enum(TG_Kind kind){
internal EVAL_IRTree*
eval_irtree_const_u(Arena *arena, U64 v){
// choose encoding op
RADDBGI_EvalOp op = RADDBGI_EvalOp_ConstU64;
RDI_EvalOp op = RDI_EvalOp_ConstU64;
if (v < 0x100){
op = RADDBGI_EvalOp_ConstU8;
op = RDI_EvalOp_ConstU8;
}
else if (v < 0x10000){
op = RADDBGI_EvalOp_ConstU16;
op = RDI_EvalOp_ConstU16;
}
else if (v < 0x100000000){
op = RADDBGI_EvalOp_ConstU32;
op = RDI_EvalOp_ConstU32;
}
// make the tree node
@@ -541,8 +541,8 @@ eval_irtree_const_u(Arena *arena, U64 v){
}
internal EVAL_IRTree*
eval_irtree_unary_op(Arena *arena, RADDBGI_EvalOp op,
RADDBGI_EvalTypeGroup group, EVAL_IRTree *c){
eval_irtree_unary_op(Arena *arena, RDI_EvalOp op,
RDI_EvalTypeGroup group, EVAL_IRTree *c){
EVAL_IRTree *result = push_array(arena, EVAL_IRTree, 1);
result->op = op;
result->p = group;
@@ -551,7 +551,7 @@ eval_irtree_unary_op(Arena *arena, RADDBGI_EvalOp op,
}
internal EVAL_IRTree*
eval_irtree_binary_op(Arena *arena, RADDBGI_EvalOp op, RADDBGI_EvalTypeGroup group,
eval_irtree_binary_op(Arena *arena, RDI_EvalOp op, RDI_EvalTypeGroup group,
EVAL_IRTree *l, EVAL_IRTree *r){
EVAL_IRTree *result = push_array(arena, EVAL_IRTree, 1);
result->op = op;
@@ -562,15 +562,15 @@ eval_irtree_binary_op(Arena *arena, RADDBGI_EvalOp op, RADDBGI_EvalTypeGroup gro
}
internal EVAL_IRTree*
eval_irtree_binary_op_u(Arena *arena, RADDBGI_EvalOp op, EVAL_IRTree *l, EVAL_IRTree *r){
EVAL_IRTree *result = eval_irtree_binary_op(arena, op, RADDBGI_EvalTypeGroup_U, l, r);
eval_irtree_binary_op_u(Arena *arena, RDI_EvalOp op, EVAL_IRTree *l, EVAL_IRTree *r){
EVAL_IRTree *result = eval_irtree_binary_op(arena, op, RDI_EvalTypeGroup_U, l, r);
return(result);
}
internal EVAL_IRTree*
eval_irtree_conditional(Arena *arena, EVAL_IRTree *c, EVAL_IRTree *l, EVAL_IRTree *r){
EVAL_IRTree *result = push_array(arena, EVAL_IRTree, 1);
result->op = RADDBGI_EvalOp_Cond;
result->op = RDI_EvalOp_Cond;
result->children[0] = c;
result->children[1] = l;
result->children[2] = r;
@@ -589,13 +589,13 @@ eval_irtree_bytecode_no_copy(Arena *arena, String8 bytecode){
//~ allen: EVAL IR-Tree High Level Helpers
internal EVAL_IRTree*
eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key){
U64 byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, type_key);
eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key){
U64 byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, type_key);
EVAL_IRTree *result = &eval_irtree_nil;
if (0 < byte_size && byte_size <= 8){
// build the read node
EVAL_IRTree *read_node = push_array(arena, EVAL_IRTree, 1);
read_node->op = RADDBGI_EvalOp_MemRead;
read_node->op = RDI_EvalOp_MemRead;
read_node->p = byte_size;
read_node->children[0] = c;
@@ -605,7 +605,7 @@ eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, E
TG_Kind kind = tg_kind_from_key(type_key);
if (bit_size < 64 && eval_kind_is_signed(kind)){
with_trunc = push_array(arena, EVAL_IRTree, 1);
with_trunc->op = RADDBGI_EvalOp_TruncSigned;
with_trunc->op = RDI_EvalOp_TruncSigned;
with_trunc->p = bit_size;
with_trunc->children[0] = read_node;
}
@@ -620,23 +620,23 @@ eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, E
}
internal EVAL_IRTree*
eval_irtree_convert_lo(Arena *arena, EVAL_IRTree *c, RADDBGI_EvalTypeGroup out, RADDBGI_EvalTypeGroup in){
eval_irtree_convert_lo(Arena *arena, EVAL_IRTree *c, RDI_EvalTypeGroup out, RDI_EvalTypeGroup in){
EVAL_IRTree *result = push_array(arena, EVAL_IRTree, 1);
result->op = RADDBGI_EvalOp_Convert;
result->op = RDI_EvalOp_Convert;
result->p = in | (out << 8);
result->children[0] = c;
return(result);
}
internal EVAL_IRTree*
eval_irtree_trunc(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key){
eval_irtree_trunc(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key){
EVAL_IRTree *result = c;
U64 byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, type_key);
U64 byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, type_key);
if (byte_size < 64){
RADDBGI_EvalOp op = RADDBGI_EvalOp_Trunc;
RDI_EvalOp op = RDI_EvalOp_Trunc;
TG_Kind kind = tg_kind_from_key(type_key);
if (eval_kind_is_signed(kind)){
op = RADDBGI_EvalOp_TruncSigned;
op = RDI_EvalOp_TruncSigned;
}
U64 bit_size = byte_size << 3;
result = push_array(arena, EVAL_IRTree, 1);
@@ -648,19 +648,19 @@ eval_irtree_trunc(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_IRTr
}
internal EVAL_IRTree*
eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_IRTree *c, TG_Key out, TG_Key in){
eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_IRTree *c, TG_Key out, TG_Key in){
EVAL_IRTree *result = c;
TG_Kind in_kind = tg_kind_from_key(in);
TG_Kind out_kind = tg_kind_from_key(out);
U8 in_group = eval_type_group_from_kind(in_kind);
U8 out_group = eval_type_group_from_kind(out_kind);
U32 conversion_rule = raddbgi_eval_conversion_rule(in_group, out_group);
if(conversion_rule == RADDBGI_EvalConversionKind_Legal)
U32 conversion_rule = rdi_eval_conversion_rule(in_group, out_group);
if(conversion_rule == RDI_EvalConversionKind_Legal)
{
result = eval_irtree_convert_lo(arena, result, out_group, in_group);
}
U64 in_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, in);
U64 out_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, out);
U64 in_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, in);
U64 out_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, out);
if(out_byte_size < in_byte_size && eval_kind_is_integer(out_kind))
{
result = eval_irtree_trunc(arena, graph, rdbg, result, out);
@@ -669,7 +669,7 @@ eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL
}
internal EVAL_IRTree*
eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_EvalMode from_mode,
eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_EvalMode from_mode,
EVAL_IRTree *tree, TG_Key type_key){
EVAL_IRTree *result = tree;
switch (from_mode){
@@ -680,7 +680,7 @@ eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg
}break;
case EVAL_EvalMode_Reg:
{
result = eval_irtree_unary_op(arena, RADDBGI_EvalOp_RegReadDyn, RADDBGI_EvalTypeGroup_U, tree);
result = eval_irtree_unary_op(arena, RDI_EvalOp_RegReadDyn, RDI_EvalTypeGroup_U, tree);
}break;
}
return(result);
@@ -715,7 +715,7 @@ eval_push_leaf_ident_exprs_from_expr__in_place(Arena *arena, EVAL_String2ExprMap
}
internal TG_Key
eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_Expr *expr, EVAL_ErrorList *eout){
eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_Expr *expr, EVAL_ErrorList *eout){
TG_Key result = zero_struct;
EVAL_ExprKind kind = expr->kind;
@@ -758,7 +758,7 @@ eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EV
}
internal EVAL_IRTreeAndType
eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_String2ExprMap *leaf_ident_expr_map, EVAL_Expr *expr, EVAL_ErrorList *eout)
eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_String2ExprMap *leaf_ident_expr_map, EVAL_Expr *expr, EVAL_ErrorList *eout)
{
ProfBeginFunction();
EVAL_IRTreeAndType result = {0};
@@ -781,8 +781,8 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
EVAL_IRTreeAndType r = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprr, eout);
if (l.tree->op != 0 && r.tree->op != 0){
TG_Key l_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, l.type_key);
TG_Key r_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, r.type_key);
TG_Key l_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, l.type_key);
TG_Key r_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, r.type_key);
TG_Kind l_restype_kind = tg_kind_from_key(l_restype);
TG_Kind r_restype_kind = tg_kind_from_key(r_restype);
@@ -795,8 +795,8 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
eval_errorf(arena, eout, EVAL_ErrorKind_MalformedInput, exprr->location, "Cannot index with this type.");
}
else{
direct_type = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, l_restype);
direct_type_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, direct_type);
direct_type = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, l_restype);
direct_type_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, direct_type);
if (l_restype_kind == TG_Kind_Ptr){
if (direct_type_size == 0){
eval_errorf(arena, eout, EVAL_ErrorKind_MalformedInput, exprr->location, "Cannot index into pointers of zero-sized types.");
@@ -832,7 +832,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
EVAL_IRTree *index_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, r.mode, r.tree, r_restype);
if (direct_type_size > 1){
EVAL_IRTree *const_tree = eval_irtree_const_u(arena, direct_type_size);
index_tree = eval_irtree_binary_op_u(arena, RADDBGI_EvalOp_Mul, index_tree, const_tree);
index_tree = eval_irtree_binary_op_u(arena, RDI_EvalOp_Mul, index_tree, const_tree);
}
// how to compute the base address
@@ -842,7 +842,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
}
// how to compute the final address
EVAL_IRTree *new_tree = eval_irtree_binary_op_u(arena, RADDBGI_EvalOp_Add, index_tree, base_tree);
EVAL_IRTree *new_tree = eval_irtree_binary_op_u(arena, RDI_EvalOp_Add, index_tree, base_tree);
// fill result
result.tree = new_tree;
@@ -860,14 +860,14 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
EVAL_IRTreeAndType l = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprl, eout);
if (l.tree->op != 0 && !tg_key_match(tg_key_zero(), l.type_key)){
TG_Key l_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, l.type_key);
TG_Key l_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, l.type_key);
TG_Kind l_restype_kind = tg_kind_from_key(l_restype);
// determine which type to use
TG_Key check_type_key = l_restype;
TG_Kind check_type_kind = l_restype_kind;
if (l_restype_kind == TG_Kind_Ptr || l_restype_kind == TG_Kind_LRef || l_restype_kind == TG_Kind_RRef){
check_type_key = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, l_restype);
check_type_key = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, l_restype);
check_type_kind = tg_kind_from_key(check_type_key);
}
@@ -921,7 +921,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
if (l_good && r_good){
Temp scratch = scratch_begin(&arena, 1);
TG_MemberArray check_type_members = tg_data_members_from_graph_raddbgi_key(scratch.arena, graph, rdbg, check_type_key);
TG_MemberArray check_type_members = tg_data_members_from_graph_rdi_key(scratch.arena, graph, rdbg, check_type_key);
// lookup member
String8 member_name = exprr->name;
@@ -957,7 +957,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
}
if (r_off != 0){
EVAL_IRTree *const_tree = eval_irtree_const_u(arena, r_off);
new_tree = eval_irtree_binary_op_u(arena, RADDBGI_EvalOp_Add, new_tree, const_tree);
new_tree = eval_irtree_binary_op_u(arena, RDI_EvalOp_Add, new_tree, const_tree);
}
// fill result
@@ -978,10 +978,10 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprc, eout);
if (c.tree->op != 0){
TG_Key c_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, c.type_key);
TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, c.type_key);
TG_Kind c_restype_kind = tg_kind_from_key(c_restype);
TG_Key c_restype_direct = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, c_restype);
U64 c_restype_direct_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, c_restype_direct);
TG_Key c_restype_direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, c_restype);
U64 c_restype_direct_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, c_restype_direct);
// analyze situation
B32 can_generate = 0;
@@ -1035,7 +1035,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprc, eout);
if(c.tree->op != 0 && !tg_key_match(c.type_key, tg_key_zero()))
{
TG_Key c_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, c.type_key);
TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, c.type_key);
TG_Kind c_restype_kind = tg_kind_from_key(c_restype);
// analyze situation
@@ -1070,26 +1070,26 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
if(cast_type_kind != TG_Kind_Null && c.tree->op != 0)
{
TG_Key c_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, c.type_key);
TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, c.type_key);
TG_Kind c_restype_kind = tg_kind_from_key(c_restype);
U64 c_restype_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, c_restype);
U64 cast_type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, cast_type_key);
U64 c_restype_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, c_restype);
U64 cast_type_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, cast_type_key);
// analyze situation
U8 in_group = eval_type_group_from_kind(c_restype_kind);
U8 out_group = eval_type_group_from_kind(cast_type_kind);
RADDBGI_EvalConversionKind conversion_rule = raddbgi_eval_conversion_rule(in_group, out_group);
RDI_EvalConversionKind conversion_rule = rdi_eval_conversion_rule(in_group, out_group);
// generate tree
switch(conversion_rule)
{
case RADDBGI_EvalConversionKind_Noop:
case RADDBGI_EvalConversionKind_Legal:
case RDI_EvalConversionKind_Noop:
case RDI_EvalConversionKind_Legal:
{
EVAL_IRTree *in_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, c.mode, c.tree, c_restype);
EVAL_IRTree *new_tree = in_tree;
if (conversion_rule == RADDBGI_EvalConversionKind_Legal){
if (conversion_rule == RDI_EvalConversionKind_Legal){
new_tree = eval_irtree_convert_lo(arena, in_tree, out_group, in_group);
}
if (cast_type_byte_size < c_restype_byte_size && eval_kind_is_integer(cast_type_kind)){
@@ -1104,8 +1104,8 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
default:
{
String8 text = str8_lit("(internal) unknown conversion rule");
if (conversion_rule < RADDBGI_EvalConversionKind_COUNT){
text.str = raddbgi_eval_conversion_message(conversion_rule, &text.size);
if (conversion_rule < RDI_EvalConversionKind_COUNT){
text.str = rdi_eval_conversion_message(conversion_rule, &text.size);
}
eval_error(arena, eout, EVAL_ErrorKind_MalformedInput, expr->location, text);
}break;
@@ -1141,7 +1141,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
TG_Kind type_kind = tg_kind_from_key(type_key);
if (type_kind != TG_Kind_Null){
can_generate = 1;
size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, type_key);
size = tg_byte_size_from_graph_rdi_key(graph, rdbg, type_key);
}
// generate ir tree
@@ -1162,15 +1162,15 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprc, eout);
if (c.tree->op != 0){
TG_Key c_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, c.type_key);
TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, c.type_key);
TG_Key p_type = eval_type_promote(graph, rdbg, c_restype);
TG_Kind c_restype_kind = tg_kind_from_key(c_restype);
// analyze situation
B32 can_generate = 0;
RADDBGI_EvalOp op = eval_opcode_from_expr_kind(kind);
RDI_EvalOp op = eval_opcode_from_expr_kind(kind);
U8 c_group = eval_type_group_from_kind(c_restype_kind);
if (!raddbgi_eval_opcode_type_compatible(op, c_group)){
if (!rdi_eval_opcode_type_compatible(op, c_group)){
eval_errorf(arena, eout, EVAL_ErrorKind_MalformedInput, expr->location, "Cannot use this operator on this type.");
}
else{
@@ -1218,8 +1218,8 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
EVAL_IRTreeAndType r = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprr, eout);
if (l.tree->op != 0 && r.tree->op != 0){
TG_Key l_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, l.type_key);
TG_Key r_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, r.type_key);
TG_Key l_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, l.type_key);
TG_Key r_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, r.type_key);
TG_Kind l_restype_kind = tg_kind_from_key(l_restype);
TG_Kind r_restype_kind = tg_kind_from_key(r_restype);
@@ -1235,7 +1235,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
r_restype_kind = tg_kind_from_key(r_restype);
}
RADDBGI_EvalOp op = eval_opcode_from_expr_kind(kind);
RDI_EvalOp op = eval_opcode_from_expr_kind(kind);
//- pointer decay
B32 l_is_pointer = (l_restype_kind == TG_Kind_Ptr);
@@ -1267,10 +1267,10 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
arith_path = EVAL_ArithPath_PtrAdd;
}
if (l_is_pointer_like && r_is_pointer_like){
TG_Key l_restype_direct = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, l_restype);
TG_Key r_restype_direct = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, r_restype);
U64 l_restype_direct_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, l_restype_direct);
U64 r_restype_direct_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, r_restype_direct);
TG_Key l_restype_direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, l_restype);
TG_Key r_restype_direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, r_restype);
U64 l_restype_direct_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, l_restype_direct);
U64 r_restype_direct_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, r_restype_direct);
if (l_restype_direct_byte_size == r_restype_direct_byte_size){
arith_path = EVAL_ArithPath_PtrSub;
}
@@ -1299,7 +1299,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
U8 cv_group = eval_type_group_from_kind(cv_type_kind);
B32 can_generate = 0;
if (raddbgi_eval_opcode_type_compatible(op, cv_group)){
if (rdi_eval_opcode_type_compatible(op, cv_group)){
can_generate = 1;
}
else{
@@ -1339,8 +1339,8 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
ptr_is_decay = r_is_decay;
}
TG_Key direct = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, ptr->type_key);
U64 direct_type_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, direct);
TG_Key direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, ptr->type_key);
U64 direct_type_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, direct);
// generate ir tree
EVAL_IRTree *ptr_tree = ptr->tree;
@@ -1351,7 +1351,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
EVAL_IRTree *integer_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, integer->mode, integer->tree, integer->type_key);
if (direct_type_size > 1){
EVAL_IRTree *const_tree = eval_irtree_const_u(arena, direct_type_size);
integer_tree = eval_irtree_binary_op_u(arena, RADDBGI_EvalOp_Mul, integer_tree, const_tree);
integer_tree = eval_irtree_binary_op_u(arena, RDI_EvalOp_Mul, integer_tree, const_tree);
}
TG_Key ptr_type = ptr->type_key;
@@ -1359,7 +1359,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
ptr_type = tg_cons_type_make(graph, TG_Kind_Ptr, direct, 0);
}
EVAL_IRTree *new_tree = eval_irtree_binary_op(arena, op, RADDBGI_EvalTypeGroup_U, ptr_tree, integer_tree);
EVAL_IRTree *new_tree = eval_irtree_binary_op(arena, op, RDI_EvalTypeGroup_U, ptr_tree, integer_tree);
result.tree = new_tree;
result.type_key = ptr_type;
@@ -1368,8 +1368,8 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
case EVAL_ArithPath_PtrSub:
{
TG_Key direct = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, l_restype);
U64 direct_type_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, direct);
TG_Key direct = tg_unwrapped_direct_from_graph_rdi_key(graph, rdbg, l_restype);
U64 direct_type_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, direct);
// generate ir tree
EVAL_IRTree *l_tree = l.tree;
@@ -1382,12 +1382,12 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
r_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, r.mode, r.tree, r_restype);
}
EVAL_IRTree *op_tree = eval_irtree_binary_op(arena, op, RADDBGI_EvalTypeGroup_U, l_tree, r_tree);
EVAL_IRTree *op_tree = eval_irtree_binary_op(arena, op, RDI_EvalTypeGroup_U, l_tree, r_tree);
EVAL_IRTree *new_tree = op_tree;
if (direct_type_size > 1){
EVAL_IRTree *const_tree = eval_irtree_const_u(arena, direct_type_size);
new_tree = eval_irtree_binary_op(arena, RADDBGI_EvalOp_Div, RADDBGI_EvalTypeGroup_U, new_tree, const_tree);
new_tree = eval_irtree_binary_op(arena, RDI_EvalOp_Div, RDI_EvalTypeGroup_U, new_tree, const_tree);
}
result.tree = new_tree;
@@ -1410,9 +1410,9 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
if (l.tree->op != 0 && r.tree->op != 0 && c.tree->op != 0){
TG_Key c_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, c.type_key);
TG_Key l_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, l.type_key);
TG_Key r_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, r.type_key);
TG_Key c_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, c.type_key);
TG_Key l_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, l.type_key);
TG_Key r_restype = tg_unwrapped_from_graph_rdi_key(graph, rdbg, r.type_key);
TG_Kind c_restype_kind = tg_kind_from_key(c_restype);
TG_Kind l_restype_kind = tg_kind_from_key(l_restype);
TG_Kind r_restype_kind = tg_kind_from_key(r_restype);
@@ -1568,8 +1568,8 @@ eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out){
ProfBeginFunction();
U32 op = tree->op;
switch (op){
case RADDBGI_EvalOp_Stop:
case RADDBGI_EvalOp_Skip:
case RDI_EvalOp_Stop:
case RDI_EvalOp_Skip:
{
// TODO: error - invalid ir-tree op
}break;
@@ -1579,7 +1579,7 @@ eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out){
eval_oplist_push_bytecode(arena, out, tree->bytecode);
}break;
case RADDBGI_EvalOp_Cond:
case RDI_EvalOp_Cond:
{
// split out each of the children
EVAL_OpList prt_cond = {0};
@@ -1598,11 +1598,11 @@ eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out){
// 4.
// modify prt_right in place to create step 2
eval_oplist_push_op(arena, &prt_right, RADDBGI_EvalOp_Skip, prt_left.encoded_size);
eval_oplist_push_op(arena, &prt_right, RDI_EvalOp_Skip, prt_left.encoded_size);
// merge 1 into out
eval_oplist_concat_in_place(out, &prt_cond);
eval_oplist_push_op(arena, out, RADDBGI_EvalOp_Cond, prt_right.encoded_size);
eval_oplist_push_op(arena, out, RDI_EvalOp_Cond, prt_right.encoded_size);
// merge 2 into out
eval_oplist_concat_in_place(out, &prt_right);
@@ -1613,20 +1613,20 @@ eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out){
default:
{
if (op >= RADDBGI_EvalOp_COUNT){
if (op >= RDI_EvalOp_COUNT){
// TODO: error - invalid ir-tree op
}
else{
// handle all children
U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[op];
U64 child_count = RADDBGI_POPN_FROM_CTRLBITS(ctrlbits);
U8 ctrlbits = rdi_eval_opcode_ctrlbits[op];
U64 child_count = RDI_POPN_FROM_CTRLBITS(ctrlbits);
EVAL_IRTree**child = tree->children;
for (U64 i = 0; i < child_count; i += 1, child += 1){
eval_oplist_from_irtree(arena, *child, out);
}
// emit op to compute this node
eval_oplist_push_op(arena, out, (RADDBGI_EvalOp)tree->op, tree->p);
eval_oplist_push_op(arena, out, (RDI_EvalOp)tree->op, tree->p);
}
}break;
}
+17 -17
View File
@@ -9,7 +9,7 @@
internal String8 eval_bytecode_from_oplist(Arena *arena, EVAL_OpList *list);
internal void eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RADDBGI_EvalOp op, U64 p);
internal void eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RDI_EvalOp op, U64 p);
internal void eval_oplist_push_uconst(Arena *arena, EVAL_OpList *list, U64 x);
internal void eval_oplist_push_sconst(Arena *arena, EVAL_OpList *list, S64 x);
@@ -20,7 +20,7 @@ internal void eval_oplist_concat_in_place(EVAL_OpList *left_dst, EVAL_OpList *ri
////////////////////////////////
//~ allen: EVAL Expression Info Functions
internal RADDBGI_EvalOp eval_opcode_from_expr_kind(EVAL_ExprKind kind);
internal RDI_EvalOp eval_opcode_from_expr_kind(EVAL_ExprKind kind);
internal B32 eval_expr_kind_is_comparison(EVAL_ExprKind kind);
////////////////////////////////
@@ -40,13 +40,13 @@ internal EVAL_Expr* eval_expr_leaf_type(Arena *arena, void *location, TG_Key typ
////////////////////////////////
//~ allen: EVAL Type Information Transformers
internal RADDBGI_EvalTypeGroup eval_type_group_from_kind(TG_Kind kind);
internal RDI_EvalTypeGroup eval_type_group_from_kind(TG_Kind kind);
internal TG_Key eval_type_unwrap_enum(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key eval_type_promote(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key eval_type_coerce(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key l, TG_Key r);
internal TG_Key eval_type_unwrap_enum(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key);
internal TG_Key eval_type_promote(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key);
internal TG_Key eval_type_coerce(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r);
internal B32 eval_type_match(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key l, TG_Key r);
internal B32 eval_type_match(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key l, TG_Key r);
internal B32 eval_kind_is_integer(TG_Kind kind);
internal B32 eval_kind_is_signed(TG_Kind kind);
@@ -56,27 +56,27 @@ internal B32 eval_kind_is_basic_or_enum(TG_Kind kind);
//~ allen: EVAL IR-Tree Constructors
internal EVAL_IRTree* eval_irtree_const_u(Arena *arena, U64 v);
internal EVAL_IRTree* eval_irtree_unary_op(Arena *arena, RADDBGI_EvalOp op, RADDBGI_EvalTypeGroup group, EVAL_IRTree *c);
internal EVAL_IRTree* eval_irtree_binary_op(Arena *arena, RADDBGI_EvalOp op, RADDBGI_EvalTypeGroup group, EVAL_IRTree *l, EVAL_IRTree *r);
internal EVAL_IRTree* eval_irtree_binary_op_u(Arena *arena, RADDBGI_EvalOp op, EVAL_IRTree *l, EVAL_IRTree *r);
internal EVAL_IRTree* eval_irtree_unary_op(Arena *arena, RDI_EvalOp op, RDI_EvalTypeGroup group, EVAL_IRTree *c);
internal EVAL_IRTree* eval_irtree_binary_op(Arena *arena, RDI_EvalOp op, RDI_EvalTypeGroup group, EVAL_IRTree *l, EVAL_IRTree *r);
internal EVAL_IRTree* eval_irtree_binary_op_u(Arena *arena, RDI_EvalOp op, EVAL_IRTree *l, EVAL_IRTree *r);
internal EVAL_IRTree* eval_irtree_conditional(Arena *arena, EVAL_IRTree *c, EVAL_IRTree *l, EVAL_IRTree *r);
internal EVAL_IRTree* eval_irtree_bytecode_no_copy(Arena *arena, String8 bytecode);
////////////////////////////////
//~ allen: EVAL IR-Tree High Level Helpers
internal EVAL_IRTree* eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key);
internal EVAL_IRTree* eval_irtree_convert_lo(Arena *arena, EVAL_IRTree *c, RADDBGI_EvalTypeGroup out, RADDBGI_EvalTypeGroup in);
internal EVAL_IRTree* eval_irtree_trunc(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key);
internal EVAL_IRTree* eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_IRTree *c, TG_Key out, TG_Key in);
internal EVAL_IRTree* eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_EvalMode from_mode, EVAL_IRTree *tree, TG_Key type_key);
internal EVAL_IRTree* eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key);
internal EVAL_IRTree* eval_irtree_convert_lo(Arena *arena, EVAL_IRTree *c, RDI_EvalTypeGroup out, RDI_EvalTypeGroup in);
internal EVAL_IRTree* eval_irtree_trunc(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key);
internal EVAL_IRTree* eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_IRTree *c, TG_Key out, TG_Key in);
internal EVAL_IRTree* eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_EvalMode from_mode, EVAL_IRTree *tree, TG_Key type_key);
////////////////////////////////
//~ allen: EVAL Compiler Phases
internal void eval_push_leaf_ident_exprs_from_expr__in_place(Arena *arena, EVAL_String2ExprMap *map, EVAL_Expr *expr, EVAL_ErrorList *eout);
internal TG_Key eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_Expr *expr, EVAL_ErrorList *eout);
internal EVAL_IRTreeAndType eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_String2ExprMap *leaf_ident_expr_map, EVAL_Expr *expr, EVAL_ErrorList *eout);
internal TG_Key eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_Expr *expr, EVAL_ErrorList *eout);
internal EVAL_IRTreeAndType eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, EVAL_String2ExprMap *leaf_ident_expr_map, EVAL_Expr *expr, EVAL_ErrorList *eout);
internal void eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out);
#endif //EVAL_COMPILER_H
+3 -3
View File
@@ -41,7 +41,7 @@ struct EVAL_ErrorList
enum
{
EVAL_IRExtKind_Bytecode = RADDBGI_EvalOp_COUNT,
EVAL_IRExtKind_Bytecode = RDI_EvalOp_COUNT,
EVAL_IRExtKind_COUNT
};
@@ -49,7 +49,7 @@ typedef struct EVAL_Op EVAL_Op;
struct EVAL_Op
{
EVAL_Op *next;
RADDBGI_EvalOp opcode;
RDI_EvalOp opcode;
union
{
U64 p;
@@ -115,7 +115,7 @@ struct EVAL_Expr
typedef struct EVAL_IRTree EVAL_IRTree;
struct EVAL_IRTree{
RADDBGI_EvalOp op;
RDI_EvalOp op;
EVAL_IRTree *children[3];
union{
U64 p;
+111 -111
View File
@@ -22,18 +22,18 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
for (;ptr < opl;){
// consume opcode
RADDBGI_EvalOp op = (RADDBGI_EvalOp)*ptr;
if (op >= RADDBGI_EvalOp_COUNT){
RDI_EvalOp op = (RDI_EvalOp)*ptr;
if (op >= RDI_EvalOp_COUNT){
result.code = EVAL_ResultCode_BadOp;
goto done;
}
U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[op];
U8 ctrlbits = rdi_eval_opcode_ctrlbits[op];
ptr += 1;
// decode
U64 imm = 0;
{
U32 decode_size = RADDBGI_DECODEN_FROM_CTRLBITS(ctrlbits);
U32 decode_size = RDI_DECODEN_FROM_CTRLBITS(ctrlbits);
U8 *next_ptr = ptr + decode_size;
if (next_ptr > opl){
result.code = EVAL_ResultCode_BadOp;
@@ -54,7 +54,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
// pop
EVAL_Slot *svals = 0;
{
U32 pop_count = RADDBGI_POPN_FROM_CTRLBITS(ctrlbits);
U32 pop_count = RDI_POPN_FROM_CTRLBITS(ctrlbits);
if (pop_count > stack_count){
result.code = EVAL_ResultCode_BadOp;
goto done;
@@ -68,29 +68,29 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
// interpret
EVAL_Slot nval = {0};
switch (op){
case RADDBGI_EvalOp_Stop:
case RDI_EvalOp_Stop:
{
goto done;
}break;
case RADDBGI_EvalOp_Noop:
case RDI_EvalOp_Noop:
{
// do nothing
}break;
case RADDBGI_EvalOp_Cond:
case RDI_EvalOp_Cond:
{
if (svals[0].u64){
ptr += imm;
}
}break;
case RADDBGI_EvalOp_Skip:
case RDI_EvalOp_Skip:
{
ptr += imm;
}break;
case RADDBGI_EvalOp_MemRead:
case RDI_EvalOp_MemRead:
{
U64 addr = svals[0].u64;
U64 size = imm;
@@ -105,12 +105,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_RegRead:
case RDI_EvalOp_RegRead:
{
U8 raddbgi_reg_code = (imm&0x0000FF)>>0;
U8 rdi_reg_code = (imm&0x0000FF)>>0;
U8 byte_size = (imm&0x00FF00)>>8;
U8 byte_off = (imm&0xFF0000)>>16;
REGS_RegCode base_reg_code = regs_reg_code_from_arch_raddbgi_code(machine->arch, raddbgi_reg_code);
REGS_RegCode base_reg_code = regs_reg_code_from_arch_rdi_code(machine->arch, rdi_reg_code);
REGS_Rng rng = regs_reg_code_rng_table_from_architecture(machine->arch)[base_reg_code];
U64 off = (U64)rng.byte_off + byte_off;
U64 size = (U64)byte_size;
@@ -123,7 +123,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_RegReadDyn:
case RDI_EvalOp_RegReadDyn:
{
U64 off = svals[0].u64;
U64 size = bit_size_from_arch(machine->arch)/8;
@@ -136,7 +136,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_FrameOff:
case RDI_EvalOp_FrameOff:
{
if (machine->frame_base != 0){
nval.u64 = *machine->frame_base + imm;
@@ -147,7 +147,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_ModuleOff:
case RDI_EvalOp_ModuleOff:
{
if (machine->module_base != 0){
nval.u64 = *machine->module_base + imm;
@@ -158,7 +158,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_TLSOff:
case RDI_EvalOp_TLSOff:
{
if (machine->tls_base != 0){
nval.u64 = *machine->tls_base + imm;
@@ -169,23 +169,23 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_ConstU8:
case RADDBGI_EvalOp_ConstU16:
case RADDBGI_EvalOp_ConstU32:
case RADDBGI_EvalOp_ConstU64:
case RDI_EvalOp_ConstU8:
case RDI_EvalOp_ConstU16:
case RDI_EvalOp_ConstU32:
case RDI_EvalOp_ConstU64:
{
nval.u64 = imm;
}break;
case RADDBGI_EvalOp_Abs:
case RDI_EvalOp_Abs:
{
if (imm == RADDBGI_EvalTypeGroup_F32){
if (imm == RDI_EvalTypeGroup_F32){
nval.f32 = svals[0].f32;
if (svals[0].f32 < 0){
nval.f32 = -svals[0].f32;
}
}
else if (imm == RADDBGI_EvalTypeGroup_F64){
else if (imm == RDI_EvalTypeGroup_F64){
nval.f64 = svals[0].f64;
if (svals[0].f64 < 0){
nval.f64 = -svals[0].f64;
@@ -199,12 +199,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_Neg:
case RDI_EvalOp_Neg:
{
if (imm == RADDBGI_EvalTypeGroup_F32){
if (imm == RDI_EvalTypeGroup_F32){
nval.f32 = -svals[0].f32;
}
else if (imm == RADDBGI_EvalTypeGroup_F64){
else if (imm == RDI_EvalTypeGroup_F64){
nval.f64 = -svals[0].f64;
}
else{
@@ -212,12 +212,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_Add:
case RDI_EvalOp_Add:
{
if (imm == RADDBGI_EvalTypeGroup_F32){
if (imm == RDI_EvalTypeGroup_F32){
nval.f32 = svals[0].f32 + svals[1].f32;
}
else if (imm == RADDBGI_EvalTypeGroup_F64){
else if (imm == RDI_EvalTypeGroup_F64){
nval.f64 = svals[0].f64 + svals[1].f64;
}
else{
@@ -225,12 +225,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_Sub:
case RDI_EvalOp_Sub:
{
if (imm == RADDBGI_EvalTypeGroup_F32){
if (imm == RDI_EvalTypeGroup_F32){
nval.f32 = svals[0].f32 - svals[1].f32;
}
else if (imm == RADDBGI_EvalTypeGroup_F64){
else if (imm == RDI_EvalTypeGroup_F64){
nval.f64 = svals[0].f64 - svals[1].f64;
}
else{
@@ -238,12 +238,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_Mul:
case RDI_EvalOp_Mul:
{
if (imm == RADDBGI_EvalTypeGroup_F32){
if (imm == RDI_EvalTypeGroup_F32){
nval.f32 = svals[0].f32*svals[1].f32;
}
else if (imm == RADDBGI_EvalTypeGroup_F64){
else if (imm == RDI_EvalTypeGroup_F64){
nval.f64 = svals[0].f64*svals[1].f64;
}
else{
@@ -251,9 +251,9 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_Div:
case RDI_EvalOp_Div:
{
if (imm == RADDBGI_EvalTypeGroup_F32){
if (imm == RDI_EvalTypeGroup_F32){
if (svals[1].f32 != 0.f){
nval.f32 = svals[0].f32/svals[1].f32;
}
@@ -263,7 +263,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
goto done;
}
}
else if (imm == RADDBGI_EvalTypeGroup_F64){
else if (imm == RDI_EvalTypeGroup_F64){
if (svals[1].f64 != 0.){
nval.f64 = svals[0].f64/svals[1].f64;
}
@@ -273,8 +273,8 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
goto done;
}
}
else if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
else if (imm == RDI_EvalTypeGroup_U ||
imm == RDI_EvalTypeGroup_S){
if (svals[1].u64 != 0){
nval.u64 = svals[0].u64/svals[1].u64;
}
@@ -290,10 +290,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_Mod:
case RDI_EvalOp_Mod:
{
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
if (imm == RDI_EvalTypeGroup_U ||
imm == RDI_EvalTypeGroup_S){
if (svals[1].u64 != 0){
nval.u64 = svals[0].u64%svals[1].u64;
}
@@ -304,10 +304,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_LShift:
case RDI_EvalOp_LShift:
{
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
if (imm == RDI_EvalTypeGroup_U ||
imm == RDI_EvalTypeGroup_S){
nval.u64 = svals[0].u64 << svals[1].u64;
}
else{
@@ -316,12 +316,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_RShift:
case RDI_EvalOp_RShift:
{
if (imm == RADDBGI_EvalTypeGroup_U){
if (imm == RDI_EvalTypeGroup_U){
nval.u64 = svals[0].u64 >> svals[1].u64;
}
else if (imm == RADDBGI_EvalTypeGroup_S){
else if (imm == RDI_EvalTypeGroup_S){
nval.u64 = svals[0].s64 >> svals[1].u64;
}
else{
@@ -330,10 +330,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_BitAnd:
case RDI_EvalOp_BitAnd:
{
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
if (imm == RDI_EvalTypeGroup_U ||
imm == RDI_EvalTypeGroup_S){
nval.u64 = svals[0].u64&svals[1].u64;
}
else{
@@ -342,10 +342,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_BitOr:
case RDI_EvalOp_BitOr:
{
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
if (imm == RDI_EvalTypeGroup_U ||
imm == RDI_EvalTypeGroup_S){
nval.u64 = svals[0].u64|svals[1].u64;
}
else{
@@ -354,10 +354,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_BitXor:
case RDI_EvalOp_BitXor:
{
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
if (imm == RDI_EvalTypeGroup_U ||
imm == RDI_EvalTypeGroup_S){
nval.u64 = svals[0].u64^svals[1].u64;
}
else{
@@ -366,10 +366,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_BitNot:
case RDI_EvalOp_BitNot:
{
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
if (imm == RDI_EvalTypeGroup_U ||
imm == RDI_EvalTypeGroup_S){
nval.u64 = ~svals[0].u64;
}
else{
@@ -378,10 +378,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_LogAnd:
case RDI_EvalOp_LogAnd:
{
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
if (imm == RDI_EvalTypeGroup_U ||
imm == RDI_EvalTypeGroup_S){
nval.u64 = (svals[0].u64 && svals[1].u64);
}
else{
@@ -390,10 +390,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_LogOr:
case RDI_EvalOp_LogOr:
{
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
if (imm == RDI_EvalTypeGroup_U ||
imm == RDI_EvalTypeGroup_S){
nval.u64 = (svals[0].u64 || svals[1].u64);
}
else{
@@ -402,10 +402,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_LogNot:
case RDI_EvalOp_LogNot:
{
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
if (imm == RDI_EvalTypeGroup_U ||
imm == RDI_EvalTypeGroup_S){
nval.u64 = (!svals[0].u64);
}
else{
@@ -414,28 +414,28 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_EqEq:
case RDI_EvalOp_EqEq:
{
nval.u64 = (svals[0].u64 == svals[1].u64);
}break;
case RADDBGI_EvalOp_NtEq:
case RDI_EvalOp_NtEq:
{
nval.u64 = (svals[0].u64 != svals[1].u64);
}break;
case RADDBGI_EvalOp_LsEq:
case RDI_EvalOp_LsEq:
{
if (imm == RADDBGI_EvalTypeGroup_F32){
if (imm == RDI_EvalTypeGroup_F32){
nval.u64 = (svals[0].f32 <= svals[1].f32);
}
else if (imm == RADDBGI_EvalTypeGroup_F64){
else if (imm == RDI_EvalTypeGroup_F64){
nval.u64 = (svals[0].f64 <= svals[1].f64);
}
else if (imm == RADDBGI_EvalTypeGroup_U){
else if (imm == RDI_EvalTypeGroup_U){
nval.u64 = (svals[0].u64 <= svals[1].u64);
}
else if (imm == RADDBGI_EvalTypeGroup_S){
else if (imm == RDI_EvalTypeGroup_S){
nval.u64 = (svals[0].s64 <= svals[1].s64);
}
else{
@@ -444,18 +444,18 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_GrEq:
case RDI_EvalOp_GrEq:
{
if (imm == RADDBGI_EvalTypeGroup_F32){
if (imm == RDI_EvalTypeGroup_F32){
nval.u64 = (svals[0].f32 >= svals[1].f32);
}
else if (imm == RADDBGI_EvalTypeGroup_F64){
else if (imm == RDI_EvalTypeGroup_F64){
nval.u64 = (svals[0].f64 >= svals[1].f64);
}
else if (imm == RADDBGI_EvalTypeGroup_U){
else if (imm == RDI_EvalTypeGroup_U){
nval.u64 = (svals[0].u64 >= svals[1].u64);
}
else if (imm == RADDBGI_EvalTypeGroup_S){
else if (imm == RDI_EvalTypeGroup_S){
nval.u64 = (svals[0].s64 >= svals[1].s64);
}
else{
@@ -464,18 +464,18 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_Less:
case RDI_EvalOp_Less:
{
if (imm == RADDBGI_EvalTypeGroup_F32){
if (imm == RDI_EvalTypeGroup_F32){
nval.u64 = (svals[0].f32 < svals[1].f32);
}
else if (imm == RADDBGI_EvalTypeGroup_F64){
else if (imm == RDI_EvalTypeGroup_F64){
nval.u64 = (svals[0].f64 < svals[1].f64);
}
else if (imm == RADDBGI_EvalTypeGroup_U){
else if (imm == RDI_EvalTypeGroup_U){
nval.u64 = (svals[0].u64 < svals[1].u64);
}
else if (imm == RADDBGI_EvalTypeGroup_S){
else if (imm == RDI_EvalTypeGroup_S){
nval.u64 = (svals[0].s64 < svals[1].s64);
}
else{
@@ -484,18 +484,18 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_Grtr:
case RDI_EvalOp_Grtr:
{
if (imm == RADDBGI_EvalTypeGroup_F32){
if (imm == RDI_EvalTypeGroup_F32){
nval.u64 = (svals[0].f32 > svals[1].f32);
}
else if (imm == RADDBGI_EvalTypeGroup_F64){
else if (imm == RDI_EvalTypeGroup_F64){
nval.u64 = (svals[0].f64 > svals[1].f64);
}
else if (imm == RADDBGI_EvalTypeGroup_U){
else if (imm == RDI_EvalTypeGroup_U){
nval.u64 = (svals[0].u64 > svals[1].u64);
}
else if (imm == RADDBGI_EvalTypeGroup_S){
else if (imm == RDI_EvalTypeGroup_S){
nval.u64 = (svals[0].s64 > svals[1].s64);
}
else{
@@ -504,7 +504,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_Trunc:
case RDI_EvalOp_Trunc:
{
if (0 < imm){
U64 mask = 0;
@@ -515,7 +515,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_TruncSigned:
case RDI_EvalOp_TruncSigned:
{
if (0 < imm){
U64 mask = 0;
@@ -530,52 +530,52 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_Convert:
case RDI_EvalOp_Convert:
{
U32 in = imm&0xFF;
U32 out = (imm >> 8)&0xFF;
if (in != out){
switch (in + out*RADDBGI_EvalTypeGroup_COUNT){
case RADDBGI_EvalTypeGroup_F32 + RADDBGI_EvalTypeGroup_U*RADDBGI_EvalTypeGroup_COUNT:
switch (in + out*RDI_EvalTypeGroup_COUNT){
case RDI_EvalTypeGroup_F32 + RDI_EvalTypeGroup_U*RDI_EvalTypeGroup_COUNT:
{
nval.u64 = (U64)svals[0].f32;
}break;
case RADDBGI_EvalTypeGroup_F64 + RADDBGI_EvalTypeGroup_U*RADDBGI_EvalTypeGroup_COUNT:
case RDI_EvalTypeGroup_F64 + RDI_EvalTypeGroup_U*RDI_EvalTypeGroup_COUNT:
{
nval.u64 = (U64)svals[0].f64;
}break;
case RADDBGI_EvalTypeGroup_F32 + RADDBGI_EvalTypeGroup_S*RADDBGI_EvalTypeGroup_COUNT:
case RDI_EvalTypeGroup_F32 + RDI_EvalTypeGroup_S*RDI_EvalTypeGroup_COUNT:
{
nval.s64 = (S64)svals[0].f32;
}break;
case RADDBGI_EvalTypeGroup_F64 + RADDBGI_EvalTypeGroup_S*RADDBGI_EvalTypeGroup_COUNT:
case RDI_EvalTypeGroup_F64 + RDI_EvalTypeGroup_S*RDI_EvalTypeGroup_COUNT:
{
nval.s64 = (S64)svals[0].f64;
}break;
case RADDBGI_EvalTypeGroup_U + RADDBGI_EvalTypeGroup_F32*RADDBGI_EvalTypeGroup_COUNT:
case RDI_EvalTypeGroup_U + RDI_EvalTypeGroup_F32*RDI_EvalTypeGroup_COUNT:
{
nval.f32 = (F32)svals[0].u64;
}break;
case RADDBGI_EvalTypeGroup_S + RADDBGI_EvalTypeGroup_F32*RADDBGI_EvalTypeGroup_COUNT:
case RDI_EvalTypeGroup_S + RDI_EvalTypeGroup_F32*RDI_EvalTypeGroup_COUNT:
{
nval.f32 = (F32)svals[0].s64;
}break;
case RADDBGI_EvalTypeGroup_F64 + RADDBGI_EvalTypeGroup_F32*RADDBGI_EvalTypeGroup_COUNT:
case RDI_EvalTypeGroup_F64 + RDI_EvalTypeGroup_F32*RDI_EvalTypeGroup_COUNT:
{
nval.f32 = (F32)svals[0].f64;
}break;
case RADDBGI_EvalTypeGroup_U + RADDBGI_EvalTypeGroup_F64*RADDBGI_EvalTypeGroup_COUNT:
case RDI_EvalTypeGroup_U + RDI_EvalTypeGroup_F64*RDI_EvalTypeGroup_COUNT:
{
nval.f64 = (F64)svals[0].u64;
}break;
case RADDBGI_EvalTypeGroup_S + RADDBGI_EvalTypeGroup_F64*RADDBGI_EvalTypeGroup_COUNT:
case RDI_EvalTypeGroup_S + RDI_EvalTypeGroup_F64*RDI_EvalTypeGroup_COUNT:
{
nval.f64 = (F64)svals[0].s64;
}break;
case RADDBGI_EvalTypeGroup_F32 + RADDBGI_EvalTypeGroup_F64*RADDBGI_EvalTypeGroup_COUNT:
case RDI_EvalTypeGroup_F32 + RDI_EvalTypeGroup_F64*RDI_EvalTypeGroup_COUNT:
{
nval.f64 = (F64)svals[0].f32;
}break;
@@ -583,7 +583,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_Pick:
case RDI_EvalOp_Pick:
{
if (stack_count > imm){
nval = stack[stack_count - imm - 1];
@@ -594,12 +594,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBGI_EvalOp_Pop:
case RDI_EvalOp_Pop:
{
// do nothing - the pop is handled by the control bits
}break;
case RADDBGI_EvalOp_Insert:
case RDI_EvalOp_Insert:
{
if (stack_count > imm){
if (imm > 0){
@@ -619,7 +619,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
// push
{
U64 push_count = RADDBGI_PUSHN_FROM_CTRLBITS(ctrlbits);
U64 push_count = RDI_PUSHN_FROM_CTRLBITS(ctrlbits);
if (push_count == 1){
if (stack_count < stack_cap){
stack[stack_count] = nval;
+104 -104
View File
@@ -57,7 +57,7 @@ global read_only S64 eval_g_max_precedence = 15;
//~ rjf: Map Building Fast Paths
internal EVAL_String2NumMap *
eval_push_locals_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 voff)
eval_push_locals_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdbg, U64 voff)
{
Temp scratch = scratch_begin(&arena, 1);
@@ -66,17 +66,17 @@ eval_push_locals_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 v
struct Task
{
Task *next;
RADDBGI_Scope *scope;
RDI_Scope *scope;
};
Task *first_task = 0;
Task *last_task = 0;
//- rjf: voff -> tightest scope
RADDBGI_Scope *tightest_scope = 0;
RDI_Scope *tightest_scope = 0;
if(rdbg->scope_vmap != 0 && rdbg->scopes != 0)
{
U64 scope_idx = raddbgi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff);
RADDBGI_Scope *scope = &rdbg->scopes[scope_idx];
U64 scope_idx = rdi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff);
RDI_Scope *scope = &rdbg->scopes[scope_idx];
Task *task = push_array(scratch.arena, Task, 1);
task->scope = scope;
SLLQueuePush(first_task, last_task, task);
@@ -86,8 +86,8 @@ eval_push_locals_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 v
//- rjf: voff-1 -> scope
if(voff > 0 && rdbg->scope_vmap != 0 && rdbg->scopes != 0)
{
U64 scope_idx = raddbgi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff-1);
RADDBGI_Scope *scope = &rdbg->scopes[scope_idx];
U64 scope_idx = rdi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff-1);
RDI_Scope *scope = &rdbg->scopes[scope_idx];
if(scope != tightest_scope)
{
Task *task = push_array(scratch.arena, Task, 1);
@@ -99,7 +99,7 @@ eval_push_locals_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 v
//- rjf: tightest scope -> walk up the tree & build tasks for each parent scope
if(tightest_scope != 0)
{
for(RADDBGI_Scope *scope = &rdbg->scopes[tightest_scope->parent_scope_idx];
for(RDI_Scope *scope = &rdbg->scopes[tightest_scope->parent_scope_idx];
scope != 0 && scope != &rdbg->scopes[0];
scope = &rdbg->scopes[scope->parent_scope_idx])
{
@@ -116,15 +116,15 @@ eval_push_locals_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 v
//- rjf: accumulate locals for all tasks
for(Task *task = first_task; task != 0; task = task->next)
{
RADDBGI_Scope *scope = task->scope;
RDI_Scope *scope = task->scope;
if(scope != 0)
{
U32 local_opl_idx = scope->local_first + scope->local_count;
for(U32 local_idx = scope->local_first; local_idx < local_opl_idx; local_idx += 1)
{
RADDBGI_Local *local_var = &rdbg->locals[local_idx];
RDI_Local *local_var = &rdbg->locals[local_idx];
U64 local_name_size = 0;
U8 *local_name_str = raddbgi_string_from_idx(rdbg, local_var->name_string_idx, &local_name_size);
U8 *local_name_str = rdi_string_from_idx(rdbg, local_var->name_string_idx, &local_name_size);
String8 name = push_str8_copy(arena, str8(local_name_str, local_name_size));
eval_string2num_map_insert(arena, map, name, (U64)local_idx+1);
}
@@ -136,18 +136,18 @@ eval_push_locals_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 v
}
internal EVAL_String2NumMap *
eval_push_member_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 voff)
eval_push_member_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdbg, U64 voff)
{
//- rjf: voff -> tightest scope
RADDBGI_Scope *tightest_scope = 0;
RDI_Scope *tightest_scope = 0;
if(rdbg->scope_vmap != 0 && rdbg->scopes != 0)
{
U64 scope_idx = raddbgi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff);
U64 scope_idx = rdi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff);
tightest_scope = &rdbg->scopes[scope_idx];
}
//- rjf: tightest scope -> procedure
RADDBGI_Procedure *procedure = 0;
RDI_Procedure *procedure = 0;
if(tightest_scope != 0 && rdbg->procedures != 0)
{
U32 proc_idx = tightest_scope->proc_idx;
@@ -158,8 +158,8 @@ eval_push_member_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 v
}
//- rjf: procedure -> udt
RADDBGI_UDT *udt = 0;
if(procedure != 0 && rdbg->udts != 0 && procedure->link_flags & RADDBGI_LinkFlag_TypeScoped)
RDI_UDT *udt = 0;
if(procedure != 0 && rdbg->udts != 0 && procedure->link_flags & RDI_LinkFlag_TypeScoped)
{
U32 udt_idx = procedure->container_idx;
if(0 < udt_idx && udt_idx < rdbg->udts_count)
@@ -173,7 +173,7 @@ eval_push_member_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 v
*map = eval_string2num_map_make(arena, 64);
//- rjf: udt -> fill member map
if(udt != 0 && !(udt->flags & RADDBGI_UserDefinedTypeFlag_EnumMembers) && rdbg->members != 0)
if(udt != 0 && !(udt->flags & RDI_UserDefinedTypeFlag_EnumMembers) && rdbg->members != 0)
{
U64 data_member_num = 1;
for(U32 member_idx = udt->member_first;
@@ -184,11 +184,11 @@ eval_push_member_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 v
{
break;
}
RADDBGI_Member *m = &rdbg->members[member_idx];
if(m->kind == RADDBGI_MemberKind_DataField)
RDI_Member *m = &rdbg->members[member_idx];
if(m->kind == RDI_MemberKind_DataField)
{
String8 name = {0};
name.str = raddbgi_string_from_idx(rdbg, m->name_string_idx, &name.size);
name.str = rdi_string_from_idx(rdbg, m->name_string_idx, &name.size);
eval_string2num_map_insert(arena, map, name, data_member_num);
data_member_num += 1;
}
@@ -464,25 +464,25 @@ eval_token_array_make_first_opl(EVAL_Token *first, EVAL_Token *opl)
//~ rjf: Parser Functions
internal TG_Key
eval_leaf_type_from_name(RADDBGI_Parsed *rdbg, String8 name)
eval_leaf_type_from_name(RDI_Parsed *rdbg, String8 name)
{
TG_Key key = zero_struct;
B32 found = 0;
if(rdbg->type_nodes != 0)
{
RADDBGI_NameMap *name_map = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_Types);
RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbgi_name_map_parse(rdbg, name_map, &parsed_name_map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &parsed_name_map, name.str, name.size);
RDI_NameMap *name_map = rdi_name_map_from_kind(rdbg, RDI_NameMapKind_Types);
RDI_ParsedNameMap parsed_name_map = {0};
rdi_name_map_parse(rdbg, name_map, &parsed_name_map);
RDI_NameMapNode *node = rdi_name_map_lookup(rdbg, &parsed_name_map, name.str, name.size);
if(node != 0)
{
U32 match_count = 0;
U32 *matches = raddbgi_matches_from_map_node(rdbg, node, &match_count);
U32 *matches = rdi_matches_from_map_node(rdbg, node, &match_count);
if(match_count != 0)
{
RADDBGI_TypeNode *type_node = raddbgi_element_from_idx(rdbg, type_nodes, matches[0]);
found = type_node->kind != RADDBGI_TypeKind_NULL;
key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), (U64)matches[0]);
RDI_TypeNode *type_node = rdi_element_from_idx(rdbg, type_nodes, matches[0]);
found = type_node->kind != RDI_TypeKind_NULL;
key = tg_key_ext(tg_kind_from_rdi_type_kind(type_node->kind), (U64)matches[0]);
}
}
}
@@ -787,9 +787,9 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
B32 mapped_identifier = 0;
B32 identifier_type_is_possibly_dynamically_overridden = 0;
B32 identifier_looks_like_type_expr = 0;
RADDBGI_LocationKind loc_kind = RADDBGI_LocationKind_NULL;
RADDBGI_LocationRegister loc_reg = {0};
RADDBGI_LocationRegisterPlusU16 loc_reg_u16 = {0};
RDI_LocationKind loc_kind = RDI_LocationKind_NULL;
RDI_LocationRegister loc_reg = {0};
RDI_LocationRegisterPlusU16 loc_reg_u16 = {0};
String8 loc_bytecode = {0};
REGS_RegCode reg_code = 0;
REGS_AliasCode alias_code = 0;
@@ -800,12 +800,12 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
String8List namespaceified_token_strings = {0};
if(ctx->rdbg->procedures != 0 && ctx->rdbg->scopes != 0 && ctx->rdbg->scope_vmap != 0)
{
U64 scope_idx = raddbgi_vmap_idx_from_voff(ctx->rdbg->scope_vmap, ctx->rdbg->scope_vmap_count, ctx->ip_voff);
RADDBGI_Scope *scope = &ctx->rdbg->scopes[scope_idx];
U64 scope_idx = rdi_vmap_idx_from_voff(ctx->rdbg->scope_vmap, ctx->rdbg->scope_vmap_count, ctx->ip_voff);
RDI_Scope *scope = &ctx->rdbg->scopes[scope_idx];
U64 proc_idx = scope->proc_idx;
RADDBGI_Procedure *procedure = &ctx->rdbg->procedures[proc_idx];
RDI_Procedure *procedure = &ctx->rdbg->procedures[proc_idx];
U64 name_size = 0;
U8 *name_ptr = raddbgi_string_from_idx(ctx->rdbg, procedure->name_string_idx, &name_size);
U8 *name_ptr = rdi_string_from_idx(ctx->rdbg, procedure->name_string_idx, &name_size);
String8 containing_procedure_name = str8(name_ptr, name_size);
U64 last_past_scope_resolution_pos = 0;
for(;;)
@@ -843,26 +843,26 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
{
mapped_identifier = 1;
identifier_type_is_possibly_dynamically_overridden = 1;
RADDBGI_Local *local_var = raddbgi_element_from_idx(ctx->rdbg, locals, local_num-1);
RADDBGI_TypeNode *type_node = raddbgi_element_from_idx(ctx->rdbg, type_nodes, local_var->type_idx);
type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), (U64)local_var->type_idx);
RDI_Local *local_var = rdi_element_from_idx(ctx->rdbg, locals, local_num-1);
RDI_TypeNode *type_node = rdi_element_from_idx(ctx->rdbg, type_nodes, local_var->type_idx);
type_key = tg_key_ext(tg_kind_from_rdi_type_kind(type_node->kind), (U64)local_var->type_idx);
// rjf: grab location info
for(U32 loc_block_idx = local_var->location_first;
loc_block_idx < local_var->location_opl;
loc_block_idx += 1)
{
RADDBGI_LocationBlock *block = &ctx->rdbg->location_blocks[loc_block_idx];
RDI_LocationBlock *block = &ctx->rdbg->location_blocks[loc_block_idx];
if(block->scope_off_first <= ctx->ip_voff && ctx->ip_voff < block->scope_off_opl)
{
loc_kind = *((RADDBGI_LocationKind *)(ctx->rdbg->location_data + block->location_data_off));
loc_kind = *((RDI_LocationKind *)(ctx->rdbg->location_data + block->location_data_off));
switch(loc_kind)
{
default:{mapped_identifier = 0;}break;
case RADDBGI_LocationKind_AddrBytecodeStream:
case RADDBGI_LocationKind_ValBytecodeStream:
case RDI_LocationKind_AddrBytecodeStream:
case RDI_LocationKind_ValBytecodeStream:
{
U8 *bytecode_base = ctx->rdbg->location_data + block->location_data_off + sizeof(RADDBGI_LocationKind);
U8 *bytecode_base = ctx->rdbg->location_data + block->location_data_off + sizeof(RDI_LocationKind);
U64 bytecode_size = 0;
for(U64 idx = 0; idx < ctx->rdbg->location_data_size; idx += 1)
{
@@ -871,18 +871,18 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
{
break;
}
U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[op];
U32 p_size = RADDBGI_DECODEN_FROM_CTRLBITS(ctrlbits);
U8 ctrlbits = rdi_eval_opcode_ctrlbits[op];
U32 p_size = RDI_DECODEN_FROM_CTRLBITS(ctrlbits);
bytecode_size += 1+p_size;
}
loc_bytecode = str8(bytecode_base, bytecode_size);
}break;
case RADDBGI_LocationKind_AddrRegisterPlusU16:
case RADDBGI_LocationKind_AddrAddrRegisterPlusU16:
case RDI_LocationKind_AddrRegisterPlusU16:
case RDI_LocationKind_AddrAddrRegisterPlusU16:
{
MemoryCopy(&loc_reg_u16, (ctx->rdbg->location_data + block->location_data_off), sizeof(loc_reg_u16));
}break;
case RADDBGI_LocationKind_ValRegister:
case RDI_LocationKind_ValRegister:
{
MemoryCopy(&loc_reg, (ctx->rdbg->location_data + block->location_data_off), sizeof(loc_reg));
}break;
@@ -919,21 +919,21 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
//- rjf: try global variables
if(mapped_identifier == 0)
{
RADDBGI_NameMap *name_map = raddbgi_name_map_from_kind(ctx->rdbg, RADDBGI_NameMapKind_GlobalVariables);
RDI_NameMap *name_map = rdi_name_map_from_kind(ctx->rdbg, RDI_NameMapKind_GlobalVariables);
if(name_map != 0 && ctx->rdbg->global_variables != 0)
{
RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbgi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size);
RDI_ParsedNameMap parsed_name_map = {0};
rdi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map);
RDI_NameMapNode *node = rdi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size);
U32 matches_count = 0;
U32 *matches = raddbgi_matches_from_map_node(ctx->rdbg, node, &matches_count);
U32 *matches = rdi_matches_from_map_node(ctx->rdbg, node, &matches_count);
for(String8Node *n = namespaceified_token_strings.first;
n != 0 && matches_count == 0;
n = n->next)
{
node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size);
node = rdi_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size);
matches_count = 0;
matches = raddbgi_matches_from_map_node(ctx->rdbg, node, &matches_count);
matches = rdi_matches_from_map_node(ctx->rdbg, node, &matches_count);
}
if(matches_count != 0)
{
@@ -942,16 +942,16 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
// don't know of a magic hash table fixup path in PDBs, so
// in this case, I'm going to prefer the latest-added global.
U32 match_idx = matches[matches_count-1];
RADDBGI_GlobalVariable *global_var = &ctx->rdbg->global_variables[match_idx];
RDI_GlobalVariable *global_var = &ctx->rdbg->global_variables[match_idx];
EVAL_OpList oplist = {0};
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_ModuleOff, global_var->voff);
loc_kind = RADDBGI_LocationKind_AddrBytecodeStream;
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_ModuleOff, global_var->voff);
loc_kind = RDI_LocationKind_AddrBytecodeStream;
loc_bytecode = eval_bytecode_from_oplist(arena, &oplist);
U32 type_idx = global_var->type_idx;
if(type_idx < ctx->rdbg->type_nodes_count)
{
RADDBGI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx];
type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), (U64)type_idx);
RDI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx];
type_key = tg_key_ext(tg_kind_from_rdi_type_kind(type_node->kind), (U64)type_idx);
}
mapped_identifier = 1;
}
@@ -961,35 +961,35 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
//- rjf: try thread variables
if(mapped_identifier == 0)
{
RADDBGI_NameMap *name_map = raddbgi_name_map_from_kind(ctx->rdbg, RADDBGI_NameMapKind_ThreadVariables);
RDI_NameMap *name_map = rdi_name_map_from_kind(ctx->rdbg, RDI_NameMapKind_ThreadVariables);
if(name_map != 0 && ctx->rdbg->global_variables != 0)
{
RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbgi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size);
RDI_ParsedNameMap parsed_name_map = {0};
rdi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map);
RDI_NameMapNode *node = rdi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size);
U32 matches_count = 0;
U32 *matches = raddbgi_matches_from_map_node(ctx->rdbg, node, &matches_count);
U32 *matches = rdi_matches_from_map_node(ctx->rdbg, node, &matches_count);
for(String8Node *n = namespaceified_token_strings.first;
n != 0 && matches_count == 0;
n = n->next)
{
node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size);
node = rdi_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size);
matches_count = 0;
matches = raddbgi_matches_from_map_node(ctx->rdbg, node, &matches_count);
matches = rdi_matches_from_map_node(ctx->rdbg, node, &matches_count);
}
if(matches_count != 0)
{
U32 match_idx = matches[0];
RADDBGI_ThreadVariable *thread_var = &ctx->rdbg->thread_variables[match_idx];
RDI_ThreadVariable *thread_var = &ctx->rdbg->thread_variables[match_idx];
EVAL_OpList oplist = {0};
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_TLSOff, thread_var->tls_off);
loc_kind = RADDBGI_LocationKind_AddrBytecodeStream;
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_TLSOff, thread_var->tls_off);
loc_kind = RDI_LocationKind_AddrBytecodeStream;
loc_bytecode = eval_bytecode_from_oplist(arena, &oplist);
U32 type_idx = thread_var->type_idx;
if(type_idx < ctx->rdbg->type_nodes_count)
{
RADDBGI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx];
type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), (U64)type_idx);
RDI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx];
type_key = tg_key_ext(tg_kind_from_rdi_type_kind(type_node->kind), (U64)type_idx);
}
mapped_identifier = 1;
}
@@ -999,37 +999,37 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
//- rjf: try procedures
if(mapped_identifier == 0)
{
RADDBGI_NameMap *name_map = raddbgi_name_map_from_kind(ctx->rdbg, RADDBGI_NameMapKind_Procedures);
RDI_NameMap *name_map = rdi_name_map_from_kind(ctx->rdbg, RDI_NameMapKind_Procedures);
if(name_map != 0 && ctx->rdbg->procedures != 0 && ctx->rdbg->scopes != 0 && ctx->rdbg->scope_voffs)
{
RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbgi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size);
RDI_ParsedNameMap parsed_name_map = {0};
rdi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map);
RDI_NameMapNode *node = rdi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size);
U32 matches_count = 0;
U32 *matches = raddbgi_matches_from_map_node(ctx->rdbg, node, &matches_count);
U32 *matches = rdi_matches_from_map_node(ctx->rdbg, node, &matches_count);
for(String8Node *n = namespaceified_token_strings.first;
n != 0 && matches_count == 0;
n = n->next)
{
node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size);
node = rdi_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size);
matches_count = 0;
matches = raddbgi_matches_from_map_node(ctx->rdbg, node, &matches_count);
matches = rdi_matches_from_map_node(ctx->rdbg, node, &matches_count);
}
if(matches_count != 0)
{
U32 match_idx = matches[0];
RADDBGI_Procedure *procedure = &ctx->rdbg->procedures[match_idx];
RADDBGI_Scope *scope = &ctx->rdbg->scopes[procedure->root_scope_idx];
RDI_Procedure *procedure = &ctx->rdbg->procedures[match_idx];
RDI_Scope *scope = &ctx->rdbg->scopes[procedure->root_scope_idx];
U64 voff = ctx->rdbg->scope_voffs[scope->voff_range_first];
EVAL_OpList oplist = {0};
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_ModuleOff, voff);
loc_kind = RADDBGI_LocationKind_ValBytecodeStream;
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_ModuleOff, voff);
loc_kind = RDI_LocationKind_ValBytecodeStream;
loc_bytecode = eval_bytecode_from_oplist(arena, &oplist);
U32 type_idx = procedure->type_idx;
if(type_idx < ctx->rdbg->type_nodes_count)
{
RADDBGI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx];
type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), (U64)type_idx);
RDI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx];
type_key = tg_key_ext(tg_kind_from_rdi_type_kind(type_node->kind), (U64)type_idx);
}
mapped_identifier = 1;
}
@@ -1086,44 +1086,44 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
eval_errorf(arena, &result.errors, EVAL_ErrorKind_MissingInfo, token_string.str, "Missing location information for \"%S\".", token_string);
}
}break;
case RADDBGI_LocationKind_AddrBytecodeStream:
case RDI_LocationKind_AddrBytecodeStream:
{
atom = eval_expr_leaf_bytecode(arena, token_string.str, type_key, loc_bytecode, EVAL_EvalMode_Addr);
}break;
case RADDBGI_LocationKind_ValBytecodeStream:
case RDI_LocationKind_ValBytecodeStream:
{
atom = eval_expr_leaf_bytecode(arena, token_string.str, type_key, loc_bytecode, EVAL_EvalMode_Value);
}break;
case RADDBGI_LocationKind_AddrRegisterPlusU16:
case RDI_LocationKind_AddrRegisterPlusU16:
{
EVAL_OpList oplist = {0};
U64 byte_size = bit_size_from_arch(ctx->arch)/8;
U64 regread_param = RADDBGI_EncodeRegReadParam(loc_reg_u16.register_code, byte_size, 0);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_RegRead, regread_param);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_ConstU16, loc_reg_u16.offset);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_Add, 0);
U64 regread_param = RDI_EncodeRegReadParam(loc_reg_u16.register_code, byte_size, 0);
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_RegRead, regread_param);
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_ConstU16, loc_reg_u16.offset);
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_Add, 0);
atom = eval_expr_leaf_op_list(arena, token_string.str, type_key, &oplist, EVAL_EvalMode_Addr);
}break;
case RADDBGI_LocationKind_AddrAddrRegisterPlusU16:
case RDI_LocationKind_AddrAddrRegisterPlusU16:
{
EVAL_OpList oplist = {0};
U64 byte_size = bit_size_from_arch(ctx->arch)/8;
U64 regread_param = RADDBGI_EncodeRegReadParam(loc_reg_u16.register_code, byte_size, 0);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_RegRead, regread_param);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_ConstU16, loc_reg_u16.offset);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_Add, 0);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_MemRead, bit_size_from_arch(ctx->arch)/8);
U64 regread_param = RDI_EncodeRegReadParam(loc_reg_u16.register_code, byte_size, 0);
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_RegRead, regread_param);
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_ConstU16, loc_reg_u16.offset);
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_Add, 0);
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_MemRead, bit_size_from_arch(ctx->arch)/8);
atom = eval_expr_leaf_op_list(arena, token_string.str, type_key, &oplist, EVAL_EvalMode_Addr);
}break;
case RADDBGI_LocationKind_ValRegister:
case RDI_LocationKind_ValRegister:
{
REGS_RegCode regs_reg_code = regs_reg_code_from_arch_raddbgi_code(ctx->arch, loc_reg.register_code);
REGS_RegCode regs_reg_code = regs_reg_code_from_arch_rdi_code(ctx->arch, loc_reg.register_code);
REGS_Rng reg_rng = regs_reg_code_rng_table_from_architecture(ctx->arch)[regs_reg_code];
EVAL_OpList oplist = {0};
U64 byte_size = (U64)reg_rng.byte_size;
U64 byte_pos = 0;
U64 regread_param = RADDBGI_EncodeRegReadParam(loc_reg.register_code, byte_size, byte_pos);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_RegRead, regread_param);
U64 regread_param = RDI_EncodeRegReadParam(loc_reg.register_code, byte_size, byte_pos);
eval_oplist_push_op(arena, &oplist, RDI_EvalOp_RegRead, regread_param);
atom = eval_expr_leaf_op_list(arena, token_string.str, type_key, &oplist, EVAL_EvalMode_Value);
}break;
}
+4 -4
View File
@@ -67,7 +67,7 @@ struct EVAL_ParseCtx
{
Architecture arch;
U64 ip_voff;
RADDBGI_Parsed *rdbg;
RDI_Parsed *rdbg;
TG_Graph *type_graph;
EVAL_String2NumMap *regs_map;
EVAL_String2NumMap *reg_alias_map;
@@ -85,8 +85,8 @@ global read_only EVAL_ParseResult eval_parse_result_nil = {0, &eval_expr_nil};
////////////////////////////////
//~ rjf: Debug-Info-Driven Map Building Fast Paths
internal EVAL_String2NumMap *eval_push_locals_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 voff);
internal EVAL_String2NumMap *eval_push_member_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 voff);
internal EVAL_String2NumMap *eval_push_locals_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdbg, U64 voff);
internal EVAL_String2NumMap *eval_push_member_map_from_rdi_voff(Arena *arena, RDI_Parsed *rdbg, U64 voff);
////////////////////////////////
//~ rjf: Tokenization Functions
@@ -101,7 +101,7 @@ internal EVAL_TokenArray eval_token_array_make_first_opl(EVAL_Token *first, EVAL
////////////////////////////////
//~ rjf: Parser Functions
internal TG_Key eval_leaf_type_from_name(RADDBGI_Parsed *rdbg, String8 name);
internal TG_Key eval_leaf_type_from_name(RDI_Parsed *rdbg, String8 name);
internal EVAL_ParseResult eval_parse_type_from_text_tokens(Arena *arena, EVAL_ParseCtx *ctx, String8 text, EVAL_TokenArray *tokens);
internal EVAL_ParseResult eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 text, EVAL_TokenArray *tokens, S64 max_precedence);
internal EVAL_ParseResult eval_parse_expr_from_text_tokens(Arena *arena, EVAL_ParseCtx *ctx, String8 text, EVAL_TokenArray *tokens);
+3 -3
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBGI_MARKUP_H
#define RADDBGI_MARKUP_H
#ifndef RDI_MARKUP_H
#define RDI_MARKUP_H
////////////////////////////////
//~ Usage Macros
@@ -75,4 +75,4 @@ raddbg_log__impl(char *fmt, ...)
#endif // defined(_WIN32)
#endif // RADDBGI_MARKUP_H
#endif // RDI_MARKUP_H
+37 -37
View File
@@ -4,24 +4,24 @@
////////////////////////////////
// Functions
RADDBGI_PROC RADDBGI_U64
raddbgi_hash(RADDBGI_U8 *ptr, RADDBGI_U64 size){
RADDBGI_U64 result = 5381;
RADDBGI_U8 *opl = ptr + size;
RDI_PROC RDI_U64
rdi_hash(RDI_U8 *ptr, RDI_U64 size){
RDI_U64 result = 5381;
RDI_U8 *opl = ptr + size;
for (; ptr < opl; ptr += 1){
result = ((result << 5) + result) + *ptr;
}
return(result);
}
RADDBGI_PROC RADDBGI_U32
raddbgi_size_from_basic_type_kind(RADDBGI_TypeKind kind){
RADDBGI_U32 result = 0;
RDI_PROC RDI_U32
rdi_size_from_basic_type_kind(RDI_TypeKind kind){
RDI_U32 result = 0;
switch (kind){
#define X(N,C)
#define XZ(N,C,Z) case C: result = Z; break;
#define Y(A,N)
RADDBGI_TypeKindXList(X,XZ,Y)
RDI_TypeKindXList(X,XZ,Y)
#undef X
#undef XZ
#undef Y
@@ -29,12 +29,12 @@ raddbgi_size_from_basic_type_kind(RADDBGI_TypeKind kind){
return(result);
}
RADDBGI_PROC RADDBGI_U32
raddbgi_addr_size_from_arch(RADDBGI_Arch arch){
RADDBGI_U32 result = 0;
RDI_PROC RDI_U32
rdi_addr_size_from_arch(RDI_Arch arch){
RDI_U32 result = 0;
switch (arch){
#define X(N,C,Z) case C: result = Z; break;
RADDBGI_ArchXList(X)
RDI_ArchXList(X)
#undef X
}
return(result);
@@ -42,14 +42,14 @@ raddbgi_addr_size_from_arch(RADDBGI_Arch arch){
//- eval helpers
RADDBGI_PROC RADDBGI_EvalConversionKind
raddbgi_eval_conversion_rule(RADDBGI_EvalTypeGroup in, RADDBGI_EvalTypeGroup out){
RADDBGI_EvalConversionKind result = 0;
RDI_PROC RDI_EvalConversionKind
rdi_eval_conversion_rule(RDI_EvalTypeGroup in, RDI_EvalTypeGroup out){
RDI_EvalConversionKind result = 0;
switch (in + (out << 8)){
#define Y(i,o) case ((RADDBGI_EvalTypeGroup_##i) + ((RADDBGI_EvalTypeGroup_##o) << 8)):
#define Y(i,o) case ((RDI_EvalTypeGroup_##i) + ((RDI_EvalTypeGroup_##o) << 8)):
#define Xb(c)
#define Xe(c) result = RADDBGI_EvalConversionKind_##c; break;
RADDBGI_EvalConversionKindFromTypeGroupPairMap(Y,Xb,Xe)
#define Xe(c) result = RDI_EvalConversionKind_##c; break;
RDI_EvalConversionKindFromTypeGroupPairMap(Y,Xb,Xe)
#undef Xe
#undef Xb
#undef Y
@@ -57,38 +57,38 @@ raddbgi_eval_conversion_rule(RADDBGI_EvalTypeGroup in, RADDBGI_EvalTypeGroup out
return(result);
}
RADDBGI_PROC RADDBGI_U8*
raddbgi_eval_conversion_message(RADDBGI_EvalConversionKind conversion_kind, RADDBGI_U64 *lenout){
RADDBGI_U8 *result = 0;
RDI_PROC RDI_U8*
rdi_eval_conversion_message(RDI_EvalConversionKind conversion_kind, RDI_U64 *lenout){
RDI_U8 *result = 0;
switch (conversion_kind){
#define X(N,msg) \
case RADDBGI_EvalConversionKind_##N: result = (RADDBGI_U8*)msg; *lenout = sizeof(msg) - 1; break;
RADDBGI_EvalConversionKindXList(X)
case RDI_EvalConversionKind_##N: result = (RDI_U8*)msg; *lenout = sizeof(msg) - 1; break;
RDI_EvalConversionKindXList(X)
#undef X
}
return(result);
}
RADDBGI_PROC RADDBGI_S32
raddbgi_eval_opcode_type_compatible(RADDBGI_EvalOp op, RADDBGI_EvalTypeGroup group){
RADDBGI_S32 result = 0;
RDI_PROC RDI_S32
rdi_eval_opcode_type_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group){
RDI_S32 result = 0;
switch (op){
case RADDBGI_EvalOp_Neg: case RADDBGI_EvalOp_Add: case RADDBGI_EvalOp_Sub:
case RADDBGI_EvalOp_Mul: case RADDBGI_EvalOp_Div:
case RADDBGI_EvalOp_EqEq:case RADDBGI_EvalOp_NtEq:
case RADDBGI_EvalOp_LsEq:case RADDBGI_EvalOp_GrEq:
case RADDBGI_EvalOp_Less:case RADDBGI_EvalOp_Grtr:
case RDI_EvalOp_Neg: case RDI_EvalOp_Add: case RDI_EvalOp_Sub:
case RDI_EvalOp_Mul: case RDI_EvalOp_Div:
case RDI_EvalOp_EqEq:case RDI_EvalOp_NtEq:
case RDI_EvalOp_LsEq:case RDI_EvalOp_GrEq:
case RDI_EvalOp_Less:case RDI_EvalOp_Grtr:
{
if (group != RADDBGI_EvalTypeGroup_Other){
if (group != RDI_EvalTypeGroup_Other){
result = 1;
}
}break;
case RADDBGI_EvalOp_Mod:case RADDBGI_EvalOp_LShift:case RADDBGI_EvalOp_RShift:
case RADDBGI_EvalOp_BitNot:case RADDBGI_EvalOp_BitAnd:case RADDBGI_EvalOp_BitXor:
case RADDBGI_EvalOp_BitOr:case RADDBGI_EvalOp_LogNot:case RADDBGI_EvalOp_LogAnd:
case RADDBGI_EvalOp_LogOr:
case RDI_EvalOp_Mod:case RDI_EvalOp_LShift:case RDI_EvalOp_RShift:
case RDI_EvalOp_BitNot:case RDI_EvalOp_BitAnd:case RDI_EvalOp_BitXor:
case RDI_EvalOp_BitOr:case RDI_EvalOp_LogNot:case RDI_EvalOp_LogAnd:
case RDI_EvalOp_LogOr:
{
if (group == RADDBGI_EvalTypeGroup_S || group == RADDBGI_EvalTypeGroup_U){
if (group == RDI_EvalTypeGroup_S || group == RDI_EvalTypeGroup_U){
result = 1;
}
}break;
+338 -332
View File
@@ -1,60 +1,66 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
////////////////////////////////////////////////////////////////
// RAD Debug Info, (R)AD(D)BG(I) Format Library
//
// Defines standard RADDBGI debug information format types and
// functions.
#ifndef RADDBGI_FORMAT_H
#define RADDBGI_FORMAT_H
////////////////////////////////////////////////////////////////
// Overridable procedure decoration
#if !defined(RADDBGI_PROC)
# define RADDBGI_PROC static
#if !defined(RDI_PROC)
# define RDI_PROC static
#endif
////////////////////////////////////////////////////////////////
// Overridable integer types
#if !defined(RADDBGI_U8)
# define RADDBGI_U8 RADDBGI_U8
# define RADDBGI_U16 RADDBGI_U16
# define RADDBGI_U32 RADDBGI_U32
# define RADDBGI_U64 RADDBGI_U64
# define RADDBGI_S8 RADDBGI_S8
# define RADDBGI_S16 RADDBGI_S16
# define RADDBGI_S32 RADDBGI_S32
# define RADDBGI_S64 RADDBGI_S64
#if !defined(RDI_U8)
# define RDI_U8 RDI_U8
# define RDI_U16 RDI_U16
# define RDI_U32 RDI_U32
# define RDI_U64 RDI_U64
# define RDI_S8 RDI_S8
# define RDI_S16 RDI_S16
# define RDI_S32 RDI_S32
# define RDI_S64 RDI_S64
#include <stdint.h>
typedef uint8_t RADDBGI_U8;
typedef uint16_t RADDBGI_U16;
typedef uint32_t RADDBGI_U32;
typedef uint64_t RADDBGI_U64;
typedef int8_t RADDBGI_S8;
typedef int16_t RADDBGI_S16;
typedef int32_t RADDBGI_S32;
typedef int64_t RADDBGI_S64;
typedef uint8_t RDI_U8;
typedef uint16_t RDI_U16;
typedef uint32_t RDI_U32;
typedef uint64_t RDI_U64;
typedef int8_t RDI_S8;
typedef int16_t RDI_S16;
typedef int32_t RDI_S32;
typedef int64_t RDI_S64;
#endif
////////////////////////////////////////////////////////////////
// Architecture Constants
#define RADDBGI_ArchXList(X)\
#define RDI_ArchXList(X)\
X(NULL, 0, 0)\
X(X86, 1, 4)\
X(X64, 2, 8)
typedef RADDBGI_U32 RADDBGI_Arch;
typedef enum RADDBGI_ArchEnum{
#define X(N,C,Z) RADDBGI_Arch_##N = C,
RADDBGI_ArchXList(X)
typedef RDI_U32 RDI_Arch;
typedef enum RDI_ArchEnum{
#define X(N,C,Z) RDI_Arch_##N = C,
RDI_ArchXList(X)
#undef X
} RADDBGI_ArchEnum;
} RDI_ArchEnum;
typedef RADDBGI_U8 RADDBGI_RegisterCode;
typedef RDI_U8 RDI_RegisterCode;
// x86 registers
#define RADDBGI_RegisterCode_X86_XList(X) \
#define RDI_RegisterCode_X86_XList(X) \
X(nil, 0) \
X(eax, 1) \
X(ecx, 2) \
@@ -118,14 +124,14 @@ X(ymm6, 59) \
X(ymm7, 60) \
X(COUNT, 61)
typedef enum RADDBGI_RegisterCode_X86_Enum{
#define X(N,C) RADDBGI_RegisterCode_X86_##N = C,
RADDBGI_RegisterCode_X86_XList(X)
typedef enum RDI_RegisterCode_X86_Enum{
#define X(N,C) RDI_RegisterCode_X86_##N = C,
RDI_RegisterCode_X86_XList(X)
#undef X
} RADDBGI_RegisterCode_X86_Enum;
} RDI_RegisterCode_X86_Enum;
// x64 registers
#define RADDBGI_RegisterCode_X64_XList(X) \
#define RDI_RegisterCode_X64_XList(X) \
X(nil, 0) \
X(rax, 1) \
X(rcx, 2) \
@@ -205,48 +211,48 @@ X(fdp, 75) \
X(mxcsr_mask, 76) \
X(COUNT, 77)
typedef enum RADDBGI_RegisterCode_X64_Enum{
#define X(N,C) RADDBGI_RegisterCode_X64_##N = C,
RADDBGI_RegisterCode_X64_XList(X)
typedef enum RDI_RegisterCode_X64_Enum{
#define X(N,C) RDI_RegisterCode_X64_##N = C,
RDI_RegisterCode_X64_XList(X)
#undef X
} RADDBGI_RegisterCode_X64_Enum;
} RDI_RegisterCode_X64_Enum;
////////////////////////////////////////////////////////////////
// Format types
// "raddbg\0\0"
#define RADDBGI_MAGIC_CONSTANT 0x0000676264646172
#define RADDBGI_ENCODING_VERSION 1
#define RDI_MAGIC_CONSTANT 0x0000676264646172
#define RDI_ENCODING_VERSION 1
#define RADDBGI_LanguageXList(X) \
#define RDI_LanguageXList(X) \
X(NULL, 0) \
X(C, 1) \
X(CPlusPlus, 2)
typedef RADDBGI_U32 RADDBGI_Language;
typedef enum RADDBGI_LanguageEnum{
#define X(N,C) RADDBGI_Language_##N = C,
RADDBGI_LanguageXList(X)
typedef RDI_U32 RDI_Language;
typedef enum RDI_LanguageEnum{
#define X(N,C) RDI_Language_##N = C,
RDI_LanguageXList(X)
#undef X
} RADDBGI_LanguageEnum;
} RDI_LanguageEnum;
typedef struct RADDBGI_Header{
typedef struct RDI_Header{
// identification
RADDBGI_U64 magic;
RADDBGI_U32 encoding_version;
RDI_U64 magic;
RDI_U32 encoding_version;
// data sections
RADDBGI_U32 data_section_off;
RADDBGI_U32 data_section_count;
} RADDBGI_Header;
RDI_U32 data_section_off;
RDI_U32 data_section_count;
} RDI_Header;
//- data sections
#define RADDBGI_DataSectionTag_SECONDARY 0x80000000
#define RDI_DataSectionTag_SECONDARY 0x80000000
#define RADDBGI_DataSectionTagXList(X,Y) \
#define RDI_DataSectionTagXList(X,Y) \
X(NULL, 0x0000)\
X(TopLevelInfo, 0x0001)\
X(StringData, 0x0002)\
@@ -273,131 +279,131 @@ X(LocationBlocks, 0x0016)\
X(LocationData, 0x0017)\
X(NameMaps, 0x0018)\
Y(PRIMARY_COUNT)\
X(SKIP, RADDBGI_DataSectionTag_SECONDARY|0x0000)\
X(LineInfoVoffs, RADDBGI_DataSectionTag_SECONDARY|0x0001)\
X(LineInfoData, RADDBGI_DataSectionTag_SECONDARY|0x0002)\
X(LineInfoColumns, RADDBGI_DataSectionTag_SECONDARY|0x0003)\
X(LineMapNumbers, RADDBGI_DataSectionTag_SECONDARY|0x0004)\
X(LineMapRanges, RADDBGI_DataSectionTag_SECONDARY|0x0005)\
X(LineMapVoffs, RADDBGI_DataSectionTag_SECONDARY|0x0006)\
X(NameMapBuckets, RADDBGI_DataSectionTag_SECONDARY|0x0007)\
X(NameMapNodes, RADDBGI_DataSectionTag_SECONDARY|0x0008)
X(SKIP, RDI_DataSectionTag_SECONDARY|0x0000)\
X(LineInfoVoffs, RDI_DataSectionTag_SECONDARY|0x0001)\
X(LineInfoData, RDI_DataSectionTag_SECONDARY|0x0002)\
X(LineInfoColumns, RDI_DataSectionTag_SECONDARY|0x0003)\
X(LineMapNumbers, RDI_DataSectionTag_SECONDARY|0x0004)\
X(LineMapRanges, RDI_DataSectionTag_SECONDARY|0x0005)\
X(LineMapVoffs, RDI_DataSectionTag_SECONDARY|0x0006)\
X(NameMapBuckets, RDI_DataSectionTag_SECONDARY|0x0007)\
X(NameMapNodes, RDI_DataSectionTag_SECONDARY|0x0008)
typedef RADDBGI_U32 RADDBGI_DataSectionTag;
typedef enum RADDBGI_DataSectionTagEnum{
#define X(N,C) RADDBGI_DataSectionTag_##N = C,
#define Y(N) RADDBGI_DataSectionTag_##N,
RADDBGI_DataSectionTagXList(X,Y)
typedef RDI_U32 RDI_DataSectionTag;
typedef enum RDI_DataSectionTagEnum{
#define X(N,C) RDI_DataSectionTag_##N = C,
#define Y(N) RDI_DataSectionTag_##N,
RDI_DataSectionTagXList(X,Y)
#undef X
#undef Y
} RADDBGI_DataSectionTagEnum;
} RDI_DataSectionTagEnum;
#define RADDBGI_DataSectionEncodingXList(X) \
#define RDI_DataSectionEncodingXList(X) \
X(Unpacked, 0)
typedef RADDBGI_U32 RADDBGI_DataSectionEncoding;
typedef enum RADDBGI_DataSectionEncodingEnum{
#define X(N,C) RADDBGI_DataSectionEncoding_##N = C,
RADDBGI_DataSectionEncodingXList(X)
typedef RDI_U32 RDI_DataSectionEncoding;
typedef enum RDI_DataSectionEncodingEnum{
#define X(N,C) RDI_DataSectionEncoding_##N = C,
RDI_DataSectionEncodingXList(X)
#undef X
} RADDBGI_DataSectionEncodingEnum;
} RDI_DataSectionEncodingEnum;
typedef struct RADDBGI_DataSection{
RADDBGI_DataSectionTag tag;
RADDBGI_DataSectionEncoding encoding;
RADDBGI_U64 off;
RADDBGI_U64 encoded_size;
RADDBGI_U64 unpacked_size;
} RADDBGI_DataSection;
typedef struct RDI_DataSection{
RDI_DataSectionTag tag;
RDI_DataSectionEncoding encoding;
RDI_U64 off;
RDI_U64 encoded_size;
RDI_U64 unpacked_size;
} RDI_DataSection;
//- common types
typedef struct RADDBGI_VMapEntry{
RADDBGI_U64 voff;
RADDBGI_U64 idx;
} RADDBGI_VMapEntry;
typedef struct RDI_VMapEntry{
RDI_U64 voff;
RDI_U64 idx;
} RDI_VMapEntry;
//- top level info
typedef struct RADDBGI_TopLevelInfo{
RADDBGI_Arch architecture;
RADDBGI_U32 exe_name_string_idx;
RADDBGI_U64 exe_hash;
RADDBGI_U64 voff_max;
} RADDBGI_TopLevelInfo;
typedef struct RDI_TopLevelInfo{
RDI_Arch architecture;
RDI_U32 exe_name_string_idx;
RDI_U64 exe_hash;
RDI_U64 voff_max;
} RDI_TopLevelInfo;
//- binary sections
typedef RADDBGI_U32 RADDBGI_BinarySectionFlags;
typedef enum RADDBGI_BinarySectionFlagsEnum{
RADDBGI_BinarySectionFlag_Read = (1 << 0),
RADDBGI_BinarySectionFlag_Write = (1 << 1),
RADDBGI_BinarySectionFlag_Execute = (1 << 2)
} RADDBGI_BinarySectionFlagsEnum;
typedef RDI_U32 RDI_BinarySectionFlags;
typedef enum RDI_BinarySectionFlagsEnum{
RDI_BinarySectionFlag_Read = (1 << 0),
RDI_BinarySectionFlag_Write = (1 << 1),
RDI_BinarySectionFlag_Execute = (1 << 2)
} RDI_BinarySectionFlagsEnum;
typedef struct RADDBGI_BinarySection{
RADDBGI_U32 name_string_idx;
RADDBGI_BinarySectionFlags flags;
RADDBGI_U64 voff_first;
RADDBGI_U64 voff_opl;
RADDBGI_U64 foff_first;
RADDBGI_U64 foff_opl;
} RADDBGI_BinarySection;
typedef struct RDI_BinarySection{
RDI_U32 name_string_idx;
RDI_BinarySectionFlags flags;
RDI_U64 voff_first;
RDI_U64 voff_opl;
RDI_U64 foff_first;
RDI_U64 foff_opl;
} RDI_BinarySection;
//- file & file system info
typedef struct RADDBGI_FilePathNode{
RADDBGI_U32 name_string_idx;
RADDBGI_U32 parent_path_node;
RADDBGI_U32 first_child;
RADDBGI_U32 next_sibling;
RADDBGI_U32 source_file_idx;
} RADDBGI_FilePathNode;
typedef struct RDI_FilePathNode{
RDI_U32 name_string_idx;
RDI_U32 parent_path_node;
RDI_U32 first_child;
RDI_U32 next_sibling;
RDI_U32 source_file_idx;
} RDI_FilePathNode;
typedef struct RADDBGI_SourceFile{
RADDBGI_U32 file_path_node_idx;
typedef struct RDI_SourceFile{
RDI_U32 file_path_node_idx;
RADDBGI_U32 normal_full_path_string_idx;
RDI_U32 normal_full_path_string_idx;
// usage of line map to go from a line number to an array of voffs
// (line_map_nums * line_number) -> (nil | index)
// (line_map_data * index) -> (range)
// (line_map_voff_data * range) -> (array(voff))
RADDBGI_U32 line_map_count;
RADDBGI_U32 line_map_nums_data_idx; // U32[line_map_count] (sorted - not closed ranges)
RADDBGI_U32 line_map_range_data_idx; // U32[line_map_count + 1] (pairs form ranges)
RADDBGI_U32 line_map_voff_data_idx; // U64[...] (idx by line_map_range_data)
} RADDBGI_SourceFile;
RDI_U32 line_map_count;
RDI_U32 line_map_nums_data_idx; // U32[line_map_count] (sorted - not closed ranges)
RDI_U32 line_map_range_data_idx; // U32[line_map_count + 1] (pairs form ranges)
RDI_U32 line_map_voff_data_idx; // U64[...] (idx by line_map_range_data)
} RDI_SourceFile;
//- units & line info
typedef struct RADDBGI_Unit{
RADDBGI_U32 unit_name_string_idx;
RADDBGI_U32 compiler_name_string_idx;
RADDBGI_U32 source_file_path_node;
RADDBGI_U32 object_file_path_node;
RADDBGI_U32 archive_file_path_node;
RADDBGI_U32 build_path_node;
RADDBGI_Language language;
typedef struct RDI_Unit{
RDI_U32 unit_name_string_idx;
RDI_U32 compiler_name_string_idx;
RDI_U32 source_file_path_node;
RDI_U32 object_file_path_node;
RDI_U32 archive_file_path_node;
RDI_U32 build_path_node;
RDI_Language language;
// usage of line info to go from voff to file & line number:
// (line_info_voffs * voff) -> (nil + index)
// (line_info_data * index) -> (RADDBGI_Line = (file_idx * line_number))
// (line_info_data * index) -> (RDI_Line = (file_idx * line_number))
RADDBGI_U32 line_info_voffs_data_idx; // U64[line_info_count + 1] (sorted ranges)
RADDBGI_U32 line_info_data_idx; // RADDBGI_Line[line_info_count]
RADDBGI_U32 line_info_col_data_idx; // RADDBGI_Col[line_info_count]
RADDBGI_U32 line_info_count;
} RADDBGI_Unit;
RDI_U32 line_info_voffs_data_idx; // U64[line_info_count + 1] (sorted ranges)
RDI_U32 line_info_data_idx; // RDI_Line[line_info_count]
RDI_U32 line_info_col_data_idx; // RDI_Col[line_info_count]
RDI_U32 line_info_count;
} RDI_Unit;
typedef struct RADDBGI_Line{
RADDBGI_U32 file_idx;
RADDBGI_U32 line_num;
} RADDBGI_Line;
typedef struct RDI_Line{
RDI_U32 file_idx;
RDI_U32 line_num;
} RDI_Line;
typedef struct RADDBGI_Column{
RADDBGI_U16 col_first;
RADDBGI_U16 col_opl;
} RADDBGI_Column;
typedef struct RDI_Column{
RDI_U16 col_first;
RDI_U16 col_opl;
} RDI_Column;
//- type info
@@ -405,7 +411,7 @@ typedef struct RADDBGI_Column{
// X(name,code) - defines a primary code
// XZ(name,code size) - defines a primary code & associates a size
// Y(alias_name,name) - defines an alias for bookends
#define RADDBGI_TypeKindXList(X,XZ,Y)\
#define RDI_TypeKindXList(X,XZ,Y)\
X(NULL, 0x0000) \
\
XZ(Void, 0x0001, 0) Y(FirstBuiltIn, Void) \
@@ -466,23 +472,23 @@ Y(LastUserDefined, IncompleteEnum) \
X(Bitfield, 0xF000) \
X(Variadic, 0xF001)
typedef RADDBGI_U16 RADDBGI_TypeKind;
typedef enum RADDBGI_TypeKindEnum{
typedef RDI_U16 RDI_TypeKind;
typedef enum RDI_TypeKindEnum{
#define X(name,code) RADDBGI_TypeKind_##name = code,
#define X(name,code) RDI_TypeKind_##name = code,
#define XZ(name,code,size) X(name,code)
#define Y(alias_name,name) RADDBGI_TypeKind_##alias_name = RADDBGI_TypeKind_##name,
RADDBGI_TypeKindXList(X,XZ,Y)
#define Y(alias_name,name) RDI_TypeKind_##alias_name = RDI_TypeKind_##name,
RDI_TypeKindXList(X,XZ,Y)
#undef X
#undef XZ
#undef Y
} RADDBGI_TypeKindEnum;
} RDI_TypeKindEnum;
typedef RADDBGI_U16 RADDBGI_TypeModifierFlags;
typedef RDI_U16 RDI_TypeModifierFlags;
enum{
RADDBGI_TypeModifierFlag_Const = (1 << 0),
RADDBGI_TypeModifierFlag_Volatile = (1 << 1),
RDI_TypeModifierFlag_Const = (1 << 0),
RDI_TypeModifierFlag_Volatile = (1 << 1),
};
// IMPORTANT NOTE: All type nodes in a valid raddbg are *topologically sorted*.
@@ -493,65 +499,65 @@ enum{
// This restriction does not apply to the members of a type that are
// attached through a "UDT" though.
typedef struct RADDBGI_TypeNode{
RADDBGI_TypeKind kind;
// when kind is 'Modifier' -> RADDBGI_TypeModifierFlags
RADDBGI_U16 flags;
typedef struct RDI_TypeNode{
RDI_TypeKind kind;
// when kind is 'Modifier' -> RDI_TypeModifierFlags
RDI_U16 flags;
RADDBGI_U32 byte_size;
RDI_U32 byte_size;
union{
// kind is 'built-in'
struct{
RADDBGI_U32 name_string_idx;
RDI_U32 name_string_idx;
} built_in;
// kind is 'constructed'
struct{
RADDBGI_U32 direct_type_idx;
RADDBGI_U32 count;
RDI_U32 direct_type_idx;
RDI_U32 count;
union{
// when kind is 'Function' or 'Method'
RADDBGI_U32 param_idx_run_first;
RDI_U32 param_idx_run_first;
// when kind is 'MemberPtr'
RADDBGI_U32 owner_type_idx;
RDI_U32 owner_type_idx;
};
} constructed;
// kind is 'user defined'
struct{
RADDBGI_U32 name_string_idx;
RADDBGI_U32 direct_type_idx;
RADDBGI_U32 udt_idx;
RDI_U32 name_string_idx;
RDI_U32 direct_type_idx;
RDI_U32 udt_idx;
} user_defined;
// (kind = Bitfield)
struct{
RADDBGI_U32 off;
RADDBGI_U32 size;
RDI_U32 off;
RDI_U32 size;
} bitfield;
};
} RADDBGI_TypeNode;
} RDI_TypeNode;
typedef RADDBGI_U32 RADDBGI_UserDefinedTypeFlags;
typedef RDI_U32 RDI_UserDefinedTypeFlags;
enum{
RADDBGI_UserDefinedTypeFlag_EnumMembers = (1 << 0),
RDI_UserDefinedTypeFlag_EnumMembers = (1 << 0),
};
typedef struct RADDBGI_UDT{
RADDBGI_U32 self_type_idx;
RADDBGI_UserDefinedTypeFlags flags;
typedef struct RDI_UDT{
RDI_U32 self_type_idx;
RDI_UserDefinedTypeFlags flags;
// when EnumMembers flag is set, indexes into enum "enum_members" instead of "members"
RADDBGI_U32 member_first;
RADDBGI_U32 member_count;
RDI_U32 member_first;
RDI_U32 member_count;
RADDBGI_U32 file_idx;
RADDBGI_U32 line;
RADDBGI_U32 col;
} RADDBGI_UDT;
RDI_U32 file_idx;
RDI_U32 line;
RDI_U32 col;
} RDI_UDT;
#define RADDBGI_MemberKindXList(X) \
#define RDI_MemberKindXList(X) \
X(NULL, 0x0000) \
X(DataField, 0x0001) \
X(StaticData, 0x0002) \
@@ -563,12 +569,12 @@ X(Base, 0x0201) \
X(VirtualBase, 0x0202) \
X(NestedType, 0x0300)
typedef RADDBGI_U16 RADDBGI_MemberKind;
typedef enum RADDBGI_MemberKindEnum{
#define X(N,C) RADDBGI_MemberKind_##N = C,
RADDBGI_MemberKindXList(X)
typedef RDI_U16 RDI_MemberKind;
typedef enum RDI_MemberKindEnum{
#define X(N,C) RDI_MemberKind_##N = C,
RDI_MemberKindXList(X)
#undef X
} RADDBGI_MemberKindEnum;
} RDI_MemberKindEnum;
// TODO(allen): need a way to equip methods and some virtual methods
// with procedure symbol information. I'm thinking a seperate data
@@ -578,141 +584,141 @@ typedef enum RADDBGI_MemberKindEnum{
// like 'associate_method_to_proc' that can be used *after* both the
// method and proc are known, rather than one that forces us to know
// the association when constructing the member data.
typedef struct RADDBGI_Member{
RADDBGI_MemberKind kind;
RADDBGI_U16 __unused__;
typedef struct RDI_Member{
RDI_MemberKind kind;
RDI_U16 __unused__;
RADDBGI_U32 name_string_idx;
RADDBGI_U32 type_idx;
RADDBGI_U32 off;
} RADDBGI_Member;
RDI_U32 name_string_idx;
RDI_U32 type_idx;
RDI_U32 off;
} RDI_Member;
typedef struct RADDBGI_EnumMember{
RADDBGI_U32 name_string_idx;
RADDBGI_U32 __unused__;
RADDBGI_U64 val;
} RADDBGI_EnumMember;
typedef struct RDI_EnumMember{
RDI_U32 name_string_idx;
RDI_U32 __unused__;
RDI_U64 val;
} RDI_EnumMember;
//- symbol info
typedef RADDBGI_U32 RADDBGI_LinkFlags;
typedef RDI_U32 RDI_LinkFlags;
enum{
RADDBGI_LinkFlag_External = (1 << 0),
RDI_LinkFlag_External = (1 << 0),
// NOTE: Scope flags are mutually exclusive.
// A symbol is either global scoped, type scoped, or procedure scoped.
RADDBGI_LinkFlag_TypeScoped = (1 << 1),
RADDBGI_LinkFlag_ProcScoped = (1 << 2),
RDI_LinkFlag_TypeScoped = (1 << 1),
RDI_LinkFlag_ProcScoped = (1 << 2),
};
typedef struct RADDBGI_GlobalVariable{
RADDBGI_U32 name_string_idx;
typedef struct RDI_GlobalVariable{
RDI_U32 name_string_idx;
// NOTE: "global variables" can be scoped in *any* way. The scope flags here refer to
// *namespace* scoping. "global variables" are all in the data section of the
// final exe/dll type file, so they are "global" in the life-time sense of the
// word. In the namespace sense of the word, they can be scoped globally, by type,
// or by procedure.
RADDBGI_LinkFlags link_flags;
RADDBGI_U64 voff;
RADDBGI_U32 type_idx;
RDI_LinkFlags link_flags;
RDI_U64 voff;
RDI_U32 type_idx;
// container_idx: UDT for "TypeScoped", Procedure for "ProcScoped"
RADDBGI_U32 container_idx;
} RADDBGI_GlobalVariable;
RDI_U32 container_idx;
} RDI_GlobalVariable;
typedef struct RADDBGI_ThreadVariable{
RADDBGI_U32 name_string_idx;
typedef struct RDI_ThreadVariable{
RDI_U32 name_string_idx;
// NOTE: See the note in GlobalVariable regarding scoping. The same concept applies here.
RADDBGI_LinkFlags link_flags;
RADDBGI_U32 tls_off;
RADDBGI_U32 type_idx;
RDI_LinkFlags link_flags;
RDI_U32 tls_off;
RDI_U32 type_idx;
// container_idx: UDT for "TypeScoped", Procedure for "ProcScoped"
RADDBGI_U32 container_idx;
} RADDBGI_ThreadVariable;
RDI_U32 container_idx;
} RDI_ThreadVariable;
typedef struct RADDBGI_Procedure{
RADDBGI_U32 name_string_idx;
RADDBGI_U32 link_name_string_idx;
typedef struct RDI_Procedure{
RDI_U32 name_string_idx;
RDI_U32 link_name_string_idx;
// NOTE: See the note in GlobalVariable regarding scoping. The same concept applies here.
RADDBGI_LinkFlags link_flags;
RADDBGI_U32 type_idx;
RADDBGI_U32 root_scope_idx;
RDI_LinkFlags link_flags;
RDI_U32 type_idx;
RDI_U32 root_scope_idx;
// container_idx: UDT for "TypeScoped", Procedure for "ProcScoped"
RADDBGI_U32 container_idx;
} RADDBGI_Procedure;
RDI_U32 container_idx;
} RDI_Procedure;
typedef struct RADDBGI_Scope{
RADDBGI_U32 proc_idx;
RADDBGI_U32 parent_scope_idx;
RADDBGI_U32 first_child_scope_idx;
RADDBGI_U32 next_sibling_scope_idx;
typedef struct RDI_Scope{
RDI_U32 proc_idx;
RDI_U32 parent_scope_idx;
RDI_U32 first_child_scope_idx;
RDI_U32 next_sibling_scope_idx;
RADDBGI_U32 voff_range_first;
RADDBGI_U32 voff_range_opl;
RDI_U32 voff_range_first;
RDI_U32 voff_range_opl;
// indexes into "locals"
RADDBGI_U32 local_first;
RADDBGI_U32 local_count;
RDI_U32 local_first;
RDI_U32 local_count;
RADDBGI_U32 static_local_idx_run_first;
RADDBGI_U32 static_local_count;
RDI_U32 static_local_idx_run_first;
RDI_U32 static_local_count;
// TODO(allen): attach less common scope-relevant info
} RADDBGI_Scope;
} RDI_Scope;
typedef RADDBGI_U32 RADDBGI_LocalKind;
typedef RDI_U32 RDI_LocalKind;
typedef enum{
RADDBGI_LocalKind_NULL,
RADDBGI_LocalKind_Parameter,
RADDBGI_LocalKind_Variable,
RADDBGI_LocalKind_COUNT
} RADDBGI_LocalKindEnum;
RDI_LocalKind_NULL,
RDI_LocalKind_Parameter,
RDI_LocalKind_Variable,
RDI_LocalKind_COUNT
} RDI_LocalKindEnum;
typedef struct RADDBGI_Local{
RADDBGI_LocalKind kind;
RADDBGI_U32 name_string_idx;
RADDBGI_U64 type_idx;
typedef struct RDI_Local{
RDI_LocalKind kind;
RDI_U32 name_string_idx;
RDI_U64 type_idx;
// indexes into "location_blocks"
RADDBGI_U32 location_first;
RADDBGI_U32 location_opl;
} RADDBGI_Local;
RDI_U32 location_first;
RDI_U32 location_opl;
} RDI_Local;
typedef struct RADDBGI_LocationBlock{
RADDBGI_U32 scope_off_first;
RADDBGI_U32 scope_off_opl;
RADDBGI_U32 location_data_off;
} RADDBGI_LocationBlock;
typedef struct RDI_LocationBlock{
RDI_U32 scope_off_first;
RDI_U32 scope_off_opl;
RDI_U32 location_data_off;
} RDI_LocationBlock;
typedef RADDBGI_U8 RADDBGI_LocationKind;
typedef RDI_U8 RDI_LocationKind;
typedef enum{
RADDBGI_LocationKind_NULL,
RADDBGI_LocationKind_AddrBytecodeStream,
RADDBGI_LocationKind_ValBytecodeStream,
RADDBGI_LocationKind_AddrRegisterPlusU16,
RADDBGI_LocationKind_AddrAddrRegisterPlusU16,
RADDBGI_LocationKind_ValRegister,
RADDBGI_LocationKind_COUNT
} RADDBGI_LocationKindEnum;
RDI_LocationKind_NULL,
RDI_LocationKind_AddrBytecodeStream,
RDI_LocationKind_ValBytecodeStream,
RDI_LocationKind_AddrRegisterPlusU16,
RDI_LocationKind_AddrAddrRegisterPlusU16,
RDI_LocationKind_ValRegister,
RDI_LocationKind_COUNT
} RDI_LocationKindEnum;
typedef struct RADDBGI_LocationBytecodeStream{
RADDBGI_LocationKind kind;
// [... 0] null terminated byte sequence RADDBGI_EvalBytecodeStream
} RADDBGI_LocationBytecodeStream;
typedef struct RDI_LocationBytecodeStream{
RDI_LocationKind kind;
// [... 0] null terminated byte sequence RDI_EvalBytecodeStream
} RDI_LocationBytecodeStream;
typedef struct RADDBGI_LocationRegisterPlusU16{
RADDBGI_LocationKind kind;
RADDBGI_RegisterCode register_code;
RADDBGI_U16 offset;
} RADDBGI_LocationRegisterPlusU16;
typedef struct RDI_LocationRegisterPlusU16{
RDI_LocationKind kind;
RDI_RegisterCode register_code;
RDI_U16 offset;
} RDI_LocationRegisterPlusU16;
typedef struct RADDBGI_LocationRegister{
RADDBGI_LocationKind kind;
RADDBGI_RegisterCode register_code;
} RADDBGI_LocationRegister;
typedef struct RDI_LocationRegister{
RDI_LocationKind kind;
RDI_RegisterCode register_code;
} RDI_LocationRegister;
//- name map types
#define RADDBGI_NameMapXList(X)\
#define RDI_NameMapXList(X)\
X(NULL, 0)\
X(GlobalVariables, 1)\
X(ThreadVariables, 2)\
@@ -721,42 +727,42 @@ X(Types, 4)\
X(LinkNameProcedures, 5)\
X(NormalSourcePaths, 6)
typedef RADDBGI_U32 RADDBGI_NameMapKind;
typedef enum RADDBGI_NameMapKindEnum{
#define X(N,C) RADDBGI_NameMapKind_##N = C,
RADDBGI_NameMapXList(X)
typedef RDI_U32 RDI_NameMapKind;
typedef enum RDI_NameMapKindEnum{
#define X(N,C) RDI_NameMapKind_##N = C,
RDI_NameMapXList(X)
#undef X
RADDBGI_NameMapKind_COUNT
} RADDBGI_NameMapKindEnum;
RDI_NameMapKind_COUNT
} RDI_NameMapKindEnum;
// TODO(allen): documentation here for the hashing and probing strategy for this table
typedef struct RADDBGI_NameMap{
RADDBGI_NameMapKind kind;
RADDBGI_U32 bucket_data_idx;
RADDBGI_U32 node_data_idx;
} RADDBGI_NameMap;
typedef struct RDI_NameMap{
RDI_NameMapKind kind;
RDI_U32 bucket_data_idx;
RDI_U32 node_data_idx;
} RDI_NameMap;
typedef struct RADDBGI_NameMapBucket{
RADDBGI_U32 first_node;
RADDBGI_U32 node_count;
} RADDBGI_NameMapBucket;
typedef struct RDI_NameMapBucket{
RDI_U32 first_node;
RDI_U32 node_count;
} RDI_NameMapBucket;
typedef struct RADDBGI_NameMapNode{
RADDBGI_U32 string_idx;
RADDBGI_U32 match_count;
typedef struct RDI_NameMapNode{
RDI_U32 string_idx;
RDI_U32 match_count;
// NOTE: if (match_count == 1) then this is the index of the matching item
// if (match_count > 1) then this is the first for an index run of all the matches
RADDBGI_U32 match_idx_or_idx_run_first;
} RADDBGI_NameMapNode;
RDI_U32 match_idx_or_idx_run_first;
} RDI_NameMapNode;
////////////////////////////////
// Eval Bytecode
// (Name, decodeN, popN, pushN)
#define RADDBGI_EvalOpXList(X)\
#define RDI_EvalOpXList(X)\
X(Stop, 0, 0, 0)\
X(Noop, 0, 0, 0)\
X(Cond, 1, 1, 0)\
@@ -803,7 +809,7 @@ X(Pop, 0, 1, 0)\
X(Insert, 1, 0, 0)
// (Name)
#define RADDBGI_EvalTypeGroupXList(X)\
#define RDI_EvalTypeGroupXList(X)\
X(Other)\
X(U)\
X(S)\
@@ -811,7 +817,7 @@ X(F32)\
X(F64)
// (Name, error-message)
#define RADDBGI_EvalConversionKindXList(X)\
#define RDI_EvalConversionKindXList(X)\
X(Noop, "")\
X(Legal, "")\
X(OtherToOther, "cannot convert between these types")\
@@ -819,7 +825,7 @@ X(ToOther, "cannot convert to this type")\
X(FromOther, "cannot convert this type")
// Xb(EvalTypeGroup) Y(TypeKind) Xe(EvalTypeGroup)
#define RADDBGI_EvalTypeGroupFromKindMap(Y,Xb,Xe)\
#define RDI_EvalTypeGroupFromKindMap(Y,Xb,Xe)\
\
Xb(U) Y(U8) Y(U16) Y(U32) Y(U64) Y(Bool) Y(Ptr) Y(Enum)\
Xe(U)\
@@ -834,7 +840,7 @@ Xb(F64) Y(F64)\
Xe(F64)
// Xb(EvalConversionKind) Y(EvalTypeGroup, EvalTypeGroup) Xe(EvalConversionKind)
#define RADDBGI_EvalConversionKindFromTypeGroupPairMap(Y,Xb,Xe)\
#define RDI_EvalConversionKindFromTypeGroupPairMap(Y,Xb,Xe)\
\
Xb(Noop) Y(U, U) Y(S, S) Y(F32, F32) Y(F64, F64) Y(U, S) Y(S, U)\
Xe(Noop)\
@@ -855,65 +861,65 @@ Xb(FromOther) Y(Other, U) Y(Other, S) Y(Other, F32) Y(Other, F64)\
Xe(FromOther)
// eval interpretation macros
#define RADDBGI_EncodeRegReadParam(reg,bytesize,bytepos) ((reg)|((bytesize)<<8)|((bytepos)<<16))
#define RDI_EncodeRegReadParam(reg,bytesize,bytepos) ((reg)|((bytesize)<<8)|((bytepos)<<16))
// eval enums
typedef RADDBGI_U8 RADDBGI_EvalOp;
typedef RDI_U8 RDI_EvalOp;
typedef enum RADDBGI_EvalOpEnum{
#define X(N,dec,pop,push) RADDBGI_EvalOp_##N,
RADDBGI_EvalOpXList(X)
typedef enum RDI_EvalOpEnum{
#define X(N,dec,pop,push) RDI_EvalOp_##N,
RDI_EvalOpXList(X)
#undef X
RADDBGI_EvalOp_COUNT
} RADDBGI_EvalOpEnum;
RDI_EvalOp_COUNT
} RDI_EvalOpEnum;
typedef RADDBGI_U8 RADDBGI_EvalTypeGroup;
typedef RDI_U8 RDI_EvalTypeGroup;
typedef enum RADDBGI_EvalTypeGroupEnum{
#define X(N) RADDBGI_EvalTypeGroup_##N,
RADDBGI_EvalTypeGroupXList(X)
typedef enum RDI_EvalTypeGroupEnum{
#define X(N) RDI_EvalTypeGroup_##N,
RDI_EvalTypeGroupXList(X)
#undef X
RADDBGI_EvalTypeGroup_COUNT,
} RADDBGI_EvalTypeGroupEnum;
RDI_EvalTypeGroup_COUNT,
} RDI_EvalTypeGroupEnum;
typedef RADDBGI_U8 RADDBGI_EvalConversionKind;
typedef RDI_U8 RDI_EvalConversionKind;
typedef enum RADDBGI_EvalConversionKindEnum{
#define X(N,msg) RADDBGI_EvalConversionKind_##N,
RADDBGI_EvalConversionKindXList(X)
typedef enum RDI_EvalConversionKindEnum{
#define X(N,msg) RDI_EvalConversionKind_##N,
RDI_EvalConversionKindXList(X)
#undef X
RADDBGI_EvalConversionKind_COUNT,
} RADDBGI_EvalConversionKindEnum;
RDI_EvalConversionKind_COUNT,
} RDI_EvalConversionKindEnum;
//- eval data tables
#define RADDBGI_EVAL_CTRLBITS(decodeN,popN,pushN) ((decodeN) | ((popN) << 4) | ((pushN) << 6))
#define RADDBGI_DECODEN_FROM_CTRLBITS(ctrlbits) ((ctrlbits) & 0xf)
#define RADDBGI_POPN_FROM_CTRLBITS(ctrlbits) (((ctrlbits) >> 4) & 0x3)
#define RADDBGI_PUSHN_FROM_CTRLBITS(ctrlbits) (((ctrlbits) >> 6) & 0x3)
#define RDI_EVAL_CTRLBITS(decodeN,popN,pushN) ((decodeN) | ((popN) << 4) | ((pushN) << 6))
#define RDI_DECODEN_FROM_CTRLBITS(ctrlbits) ((ctrlbits) & 0xf)
#define RDI_POPN_FROM_CTRLBITS(ctrlbits) (((ctrlbits) >> 4) & 0x3)
#define RDI_PUSHN_FROM_CTRLBITS(ctrlbits) (((ctrlbits) >> 6) & 0x3)
static RADDBGI_U8 raddbgi_eval_opcode_ctrlbits[] = {
#define X(Name, decodeN, popN, pushN) RADDBGI_EVAL_CTRLBITS(decodeN,popN,pushN),
RADDBGI_EvalOpXList(X)
static RDI_U8 rdi_eval_opcode_ctrlbits[] = {
#define X(Name, decodeN, popN, pushN) RDI_EVAL_CTRLBITS(decodeN,popN,pushN),
RDI_EvalOpXList(X)
#undef X
};
////////////////////////////////
// Functions
RADDBGI_PROC RADDBGI_U64 raddbgi_hash(RADDBGI_U8 *ptr, RADDBGI_U64 size);
RADDBGI_PROC RADDBGI_U32 raddbgi_size_from_basic_type_kind(RADDBGI_TypeKind kind);
RADDBGI_PROC RADDBGI_U32 raddbgi_addr_size_from_arch(RADDBGI_Arch arch);
RDI_PROC RDI_U64 rdi_hash(RDI_U8 *ptr, RDI_U64 size);
RDI_PROC RDI_U32 rdi_size_from_basic_type_kind(RDI_TypeKind kind);
RDI_PROC RDI_U32 rdi_addr_size_from_arch(RDI_Arch arch);
//- eval helpers
RADDBGI_PROC RADDBGI_EvalConversionKind raddbgi_eval_conversion_rule(RADDBGI_EvalTypeGroup in, RADDBGI_EvalTypeGroup out);
RADDBGI_PROC RADDBGI_U8* raddbgi_eval_conversion_message(RADDBGI_EvalConversionKind conversion_kind, RADDBGI_U64 *lennout);
RADDBGI_PROC RADDBGI_S32 raddbgi_eval_opcode_type_compatible(RADDBGI_EvalOp op, RADDBGI_EvalTypeGroup group);
RDI_PROC RDI_EvalConversionKind rdi_eval_conversion_rule(RDI_EvalTypeGroup in, RDI_EvalTypeGroup out);
RDI_PROC RDI_U8* rdi_eval_conversion_message(RDI_EvalConversionKind conversion_kind, RDI_U64 *lennout);
RDI_PROC RDI_S32 rdi_eval_opcode_type_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group);
#endif // RADDBGI_FORMAT_H
+234 -234
View File
@@ -4,105 +4,105 @@
////////////////////////////////
//~ RADDBG Parse API
RADDBGI_PROC RADDBGI_ParseStatus
raddbgi_parse(RADDBGI_U8 *data, RADDBGI_U64 size, RADDBGI_Parsed *out){
RADDBGI_ParseStatus result = RADDBGI_ParseStatus_Good;
RDI_PROC RDI_ParseStatus
rdi_parse(RDI_U8 *data, RDI_U64 size, RDI_Parsed *out){
RDI_ParseStatus result = RDI_ParseStatus_Good;
// out header
RADDBGI_Header *hdr = 0;
RDI_Header *hdr = 0;
{
if (sizeof(*hdr) <= size){
hdr = (RADDBGI_Header*)data;
hdr = (RDI_Header*)data;
}
// (errors)
if (hdr == 0 || hdr->magic != RADDBGI_MAGIC_CONSTANT){
if (hdr == 0 || hdr->magic != RDI_MAGIC_CONSTANT){
hdr = 0;
result = RADDBGI_ParseStatus_HeaderDoesNotMatch;
result = RDI_ParseStatus_HeaderDoesNotMatch;
}
if (hdr != 0 && hdr->encoding_version != 1){
hdr = 0;
result = RADDBGI_ParseStatus_UnsupportedVersionNumber;
result = RDI_ParseStatus_UnsupportedVersionNumber;
}
}
// out data sections
RADDBGI_DataSection *dsecs = 0;
RADDBGI_U32 dsec_count = 0;
RDI_DataSection *dsecs = 0;
RDI_U32 dsec_count = 0;
if (hdr != 0){
RADDBGI_U64 opl = (RADDBGI_U64)hdr->data_section_off + (RADDBGI_U64)hdr->data_section_count*sizeof(*dsecs);
RDI_U64 opl = (RDI_U64)hdr->data_section_off + (RDI_U64)hdr->data_section_count*sizeof(*dsecs);
if (opl <= size){
dsecs = (RADDBGI_DataSection*)(data + hdr->data_section_off);
dsecs = (RDI_DataSection*)(data + hdr->data_section_off);
dsec_count = hdr->data_section_count;
}
// (errors)
if (dsecs == 0){
result = RADDBGI_ParseStatus_InvalidDataSecionLayout;
result = RDI_ParseStatus_InvalidDataSecionLayout;
}
}
// extract primary data section indexes
RADDBGI_U32 dsec_idx[RADDBGI_DataSectionTag_PRIMARY_COUNT] = {0};
if (result == RADDBGI_ParseStatus_Good){
RADDBGI_DataSection *sec_ptr = dsecs;
for (RADDBGI_U32 i = 0; i < dsec_count; i += 1, sec_ptr += 1){
if (sec_ptr->tag < RADDBGI_DataSectionTag_PRIMARY_COUNT){
RDI_U32 dsec_idx[RDI_DataSectionTag_PRIMARY_COUNT] = {0};
if (result == RDI_ParseStatus_Good){
RDI_DataSection *sec_ptr = dsecs;
for (RDI_U32 i = 0; i < dsec_count; i += 1, sec_ptr += 1){
if (sec_ptr->tag < RDI_DataSectionTag_PRIMARY_COUNT){
dsec_idx[sec_ptr->tag] = i;
}
}
}
// fill out data block (part 1)
if (result == RADDBGI_ParseStatus_Good){
if (result == RDI_ParseStatus_Good){
out->raw_data = data;
out->raw_data_size = size;
out->dsecs = dsecs;
out->dsec_count = dsec_count;
for (RADDBGI_U32 i = 0; i < RADDBGI_DataSectionTag_PRIMARY_COUNT; i += 1){
for (RDI_U32 i = 0; i < RDI_DataSectionTag_PRIMARY_COUNT; i += 1){
out->dsec_idx[i] = dsec_idx[i];
}
}
// out string table
RADDBGI_U8 *string_data = 0;
RADDBGI_U64 string_opl = 0;
RADDBGI_U32 *string_offs = 0;
RADDBGI_U64 string_count = 0;
if (result == RADDBGI_ParseStatus_Good){
raddbgi_parse__extract_primary(out, string_data, &string_opl,
RADDBGI_DataSectionTag_StringData);
RDI_U8 *string_data = 0;
RDI_U64 string_opl = 0;
RDI_U32 *string_offs = 0;
RDI_U64 string_count = 0;
if (result == RDI_ParseStatus_Good){
rdi_parse__extract_primary(out, string_data, &string_opl,
RDI_DataSectionTag_StringData);
RADDBGI_U64 table_entry_count = 0;
raddbgi_parse__extract_primary(out, string_offs, &table_entry_count,
RADDBGI_DataSectionTag_StringTable);
RDI_U64 table_entry_count = 0;
rdi_parse__extract_primary(out, string_offs, &table_entry_count,
RDI_DataSectionTag_StringTable);
if (table_entry_count > 0){
string_count = table_entry_count - 1;
}
// (errors)
if (string_data == 0){
result = RADDBGI_ParseStatus_MissingStringDataSection;
result = RDI_ParseStatus_MissingStringDataSection;
}
else if (string_offs == 0){
result = RADDBGI_ParseStatus_MissingStringTableSection;
result = RDI_ParseStatus_MissingStringTableSection;
}
}
// out index runs
RADDBGI_U32 *idx_run_data = 0;
RADDBGI_U64 idx_run_count = 0;
if (result == RADDBGI_ParseStatus_Good){
raddbgi_parse__extract_primary(out, idx_run_data, &idx_run_count,
RADDBGI_DataSectionTag_IndexRuns);
RDI_U32 *idx_run_data = 0;
RDI_U64 idx_run_count = 0;
if (result == RDI_ParseStatus_Good){
rdi_parse__extract_primary(out, idx_run_data, &idx_run_count,
RDI_DataSectionTag_IndexRuns);
// (errors)
if (idx_run_data == 0){
result = RADDBGI_ParseStatus_MissingIndexRunSection;
result = RDI_ParseStatus_MissingIndexRunSection;
}
}
if (result == RADDBGI_ParseStatus_Good){
if (result == RDI_ParseStatus_Good){
// fill out primary data structures (part 2)
out->string_data = string_data;
out->string_offs = string_offs;
@@ -112,81 +112,81 @@ raddbgi_parse(RADDBGI_U8 *data, RADDBGI_U64 size, RADDBGI_Parsed *out){
out->idx_run_count = idx_run_count;
{
RADDBGI_TopLevelInfo *tli = 0;
RADDBGI_U64 dummy = 0;
raddbgi_parse__extract_primary(out, tli, &dummy, RADDBGI_DataSectionTag_TopLevelInfo);
RDI_TopLevelInfo *tli = 0;
RDI_U64 dummy = 0;
rdi_parse__extract_primary(out, tli, &dummy, RDI_DataSectionTag_TopLevelInfo);
if (dummy != 1){
tli = 0;
}
out->top_level_info = tli;
}
raddbgi_parse__extract_primary(out, out->binary_sections, &out->binary_sections_count,
RADDBGI_DataSectionTag_BinarySections);
rdi_parse__extract_primary(out, out->binary_sections, &out->binary_sections_count,
RDI_DataSectionTag_BinarySections);
raddbgi_parse__extract_primary(out, out->file_paths, &out->file_paths_count,
RADDBGI_DataSectionTag_FilePathNodes);
rdi_parse__extract_primary(out, out->file_paths, &out->file_paths_count,
RDI_DataSectionTag_FilePathNodes);
raddbgi_parse__extract_primary(out, out->source_files, &out->source_files_count,
RADDBGI_DataSectionTag_SourceFiles);
rdi_parse__extract_primary(out, out->source_files, &out->source_files_count,
RDI_DataSectionTag_SourceFiles);
raddbgi_parse__extract_primary(out, out->units, &out->units_count,
RADDBGI_DataSectionTag_Units);
rdi_parse__extract_primary(out, out->units, &out->units_count,
RDI_DataSectionTag_Units);
raddbgi_parse__extract_primary(out, out->unit_vmap, &out->unit_vmap_count,
RADDBGI_DataSectionTag_UnitVmap);
rdi_parse__extract_primary(out, out->unit_vmap, &out->unit_vmap_count,
RDI_DataSectionTag_UnitVmap);
raddbgi_parse__extract_primary(out, out->unit_vmap, &out->unit_vmap_count,
RADDBGI_DataSectionTag_UnitVmap);
rdi_parse__extract_primary(out, out->unit_vmap, &out->unit_vmap_count,
RDI_DataSectionTag_UnitVmap);
raddbgi_parse__extract_primary(out, out->type_nodes, &out->type_nodes_count,
RADDBGI_DataSectionTag_TypeNodes);
rdi_parse__extract_primary(out, out->type_nodes, &out->type_nodes_count,
RDI_DataSectionTag_TypeNodes);
raddbgi_parse__extract_primary(out, out->udts, &out->udts_count,
RADDBGI_DataSectionTag_UDTs);
rdi_parse__extract_primary(out, out->udts, &out->udts_count,
RDI_DataSectionTag_UDTs);
raddbgi_parse__extract_primary(out, out->members, &out->members_count,
RADDBGI_DataSectionTag_Members);
rdi_parse__extract_primary(out, out->members, &out->members_count,
RDI_DataSectionTag_Members);
raddbgi_parse__extract_primary(out, out->enum_members, &out->enum_members_count,
RADDBGI_DataSectionTag_EnumMembers);
rdi_parse__extract_primary(out, out->enum_members, &out->enum_members_count,
RDI_DataSectionTag_EnumMembers);
raddbgi_parse__extract_primary(out, out->global_variables, &out->global_variables_count,
RADDBGI_DataSectionTag_GlobalVariables);
rdi_parse__extract_primary(out, out->global_variables, &out->global_variables_count,
RDI_DataSectionTag_GlobalVariables);
raddbgi_parse__extract_primary(out, out->global_vmap, &out->global_vmap_count,
RADDBGI_DataSectionTag_GlobalVmap);
rdi_parse__extract_primary(out, out->global_vmap, &out->global_vmap_count,
RDI_DataSectionTag_GlobalVmap);
raddbgi_parse__extract_primary(out, out->thread_variables, &out->thread_variables_count,
RADDBGI_DataSectionTag_ThreadVariables);
rdi_parse__extract_primary(out, out->thread_variables, &out->thread_variables_count,
RDI_DataSectionTag_ThreadVariables);
raddbgi_parse__extract_primary(out, out->procedures, &out->procedures_count,
RADDBGI_DataSectionTag_Procedures);
rdi_parse__extract_primary(out, out->procedures, &out->procedures_count,
RDI_DataSectionTag_Procedures);
raddbgi_parse__extract_primary(out, out->scopes, &out->scopes_count,
RADDBGI_DataSectionTag_Scopes);
rdi_parse__extract_primary(out, out->scopes, &out->scopes_count,
RDI_DataSectionTag_Scopes);
raddbgi_parse__extract_primary(out, out->scope_voffs, &out->scope_voffs_count,
RADDBGI_DataSectionTag_ScopeVoffData);
rdi_parse__extract_primary(out, out->scope_voffs, &out->scope_voffs_count,
RDI_DataSectionTag_ScopeVoffData);
raddbgi_parse__extract_primary(out, out->scope_vmap, &out->scope_vmap_count,
RADDBGI_DataSectionTag_ScopeVmap);
rdi_parse__extract_primary(out, out->scope_vmap, &out->scope_vmap_count,
RDI_DataSectionTag_ScopeVmap);
raddbgi_parse__extract_primary(out, out->locals, &out->locals_count,
RADDBGI_DataSectionTag_Locals);
rdi_parse__extract_primary(out, out->locals, &out->locals_count,
RDI_DataSectionTag_Locals);
raddbgi_parse__extract_primary(out, out->location_blocks, &out->location_blocks_count,
RADDBGI_DataSectionTag_LocationBlocks);
rdi_parse__extract_primary(out, out->location_blocks, &out->location_blocks_count,
RDI_DataSectionTag_LocationBlocks);
raddbgi_parse__extract_primary(out, out->location_data, &out->location_data_size,
RADDBGI_DataSectionTag_LocationData);
rdi_parse__extract_primary(out, out->location_data, &out->location_data_size,
RDI_DataSectionTag_LocationData);
{
raddbgi_parse__extract_primary(out, out->name_maps, &out->name_maps_count,
RADDBGI_DataSectionTag_NameMaps);
rdi_parse__extract_primary(out, out->name_maps, &out->name_maps_count,
RDI_DataSectionTag_NameMaps);
RADDBGI_NameMap *name_map_ptr = out->name_maps;
RADDBGI_NameMap *name_map_opl = out->name_maps + out->name_maps_count;
RDI_NameMap *name_map_ptr = out->name_maps;
RDI_NameMap *name_map_opl = out->name_maps + out->name_maps_count;
for (; name_map_ptr < name_map_opl; name_map_ptr += 1){
if (out->name_maps_by_kind[name_map_ptr->kind] == 0){
out->name_maps_by_kind[name_map_ptr->kind] = name_map_ptr;
@@ -194,25 +194,25 @@ raddbgi_parse(RADDBGI_U8 *data, RADDBGI_U64 size, RADDBGI_Parsed *out){
}
}
#if !defined(RADDBGI_DISABLE_NILS)
if(out->binary_sections == 0) { out->binary_sections = &raddbgi_binary_section_nil; out->binary_sections_count = 1; }
if(out->file_paths == 0) { out->file_paths = &raddbgi_file_path_node_nil; out->file_paths_count = 1; }
if(out->source_files == 0) { out->source_files = &raddbgi_source_file_nil; out->source_files_count = 1; }
if(out->units == 0) { out->units = &raddbgi_unit_nil; out->units_count = 1; }
if(out->unit_vmap == 0) { out->unit_vmap = &raddbgi_vmap_entry_nil; out->unit_vmap_count = 1; }
if(out->type_nodes == 0) { out->type_nodes = &raddbgi_type_node_nil; out->type_nodes_count = 1; }
if(out->udts == 0) { out->udts = &raddbgi_udt_nil; out->udts_count = 1; }
if(out->members == 0) { out->members = &raddbgi_member_nil; out->members_count = 1; }
if(out->enum_members == 0) { out->enum_members = &raddbgi_enum_member_nil; out->enum_members_count = 1; }
if(out->global_variables == 0) { out->global_variables = &raddbgi_global_variable_nil; out->global_variables_count = 1; }
if(out->global_vmap == 0) { out->global_vmap = &raddbgi_vmap_entry_nil; out->global_vmap_count = 1; }
if(out->thread_variables == 0) { out->thread_variables = &raddbgi_thread_variable_nil; out->thread_variables_count = 1; }
if(out->procedures == 0) { out->procedures = &raddbgi_procedure_nil; out->procedures_count = 1; }
if(out->scopes == 0) { out->scopes = &raddbgi_scope_nil; out->scopes_count = 1; }
if(out->scope_voffs == 0) { out->scope_voffs = &raddbgi_voff_nil; out->scope_voffs_count = 1; }
if(out->scope_vmap == 0) { out->scope_vmap = &raddbgi_vmap_entry_nil; out->scope_vmap_count = 1; }
if(out->locals == 0) { out->locals = &raddbgi_local_nil; out->locals_count = 1; }
if(out->location_blocks == 0) { out->location_blocks = &raddbgi_location_block_nil; out->location_blocks_count = 1; }
#if !defined(RDI_DISABLE_NILS)
if(out->binary_sections == 0) { out->binary_sections = &rdi_binary_section_nil; out->binary_sections_count = 1; }
if(out->file_paths == 0) { out->file_paths = &rdi_file_path_node_nil; out->file_paths_count = 1; }
if(out->source_files == 0) { out->source_files = &rdi_source_file_nil; out->source_files_count = 1; }
if(out->units == 0) { out->units = &rdi_unit_nil; out->units_count = 1; }
if(out->unit_vmap == 0) { out->unit_vmap = &rdi_vmap_entry_nil; out->unit_vmap_count = 1; }
if(out->type_nodes == 0) { out->type_nodes = &rdi_type_node_nil; out->type_nodes_count = 1; }
if(out->udts == 0) { out->udts = &rdi_udt_nil; out->udts_count = 1; }
if(out->members == 0) { out->members = &rdi_member_nil; out->members_count = 1; }
if(out->enum_members == 0) { out->enum_members = &rdi_enum_member_nil; out->enum_members_count = 1; }
if(out->global_variables == 0) { out->global_variables = &rdi_global_variable_nil; out->global_variables_count = 1; }
if(out->global_vmap == 0) { out->global_vmap = &rdi_vmap_entry_nil; out->global_vmap_count = 1; }
if(out->thread_variables == 0) { out->thread_variables = &rdi_thread_variable_nil; out->thread_variables_count = 1; }
if(out->procedures == 0) { out->procedures = &rdi_procedure_nil; out->procedures_count = 1; }
if(out->scopes == 0) { out->scopes = &rdi_scope_nil; out->scopes_count = 1; }
if(out->scope_voffs == 0) { out->scope_voffs = &rdi_voff_nil; out->scope_voffs_count = 1; }
if(out->scope_vmap == 0) { out->scope_vmap = &rdi_vmap_entry_nil; out->scope_vmap_count = 1; }
if(out->locals == 0) { out->locals = &rdi_local_nil; out->locals_count = 1; }
if(out->location_blocks == 0) { out->location_blocks = &rdi_location_block_nil; out->location_blocks_count = 1; }
#endif
}
@@ -220,15 +220,15 @@ raddbgi_parse(RADDBGI_U8 *data, RADDBGI_U64 size, RADDBGI_Parsed *out){
return(result);
}
RADDBGI_PROC RADDBGI_U8*
raddbgi_string_from_idx(RADDBGI_Parsed *parsed, RADDBGI_U32 idx, RADDBGI_U64 *len_out){
RADDBGI_U8 *result = 0;
RADDBGI_U64 len_result = 0;
RDI_PROC RDI_U8*
rdi_string_from_idx(RDI_Parsed *parsed, RDI_U32 idx, RDI_U64 *len_out){
RDI_U8 *result = 0;
RDI_U64 len_result = 0;
if (idx < parsed->string_count){
RADDBGI_U32 off_raw = parsed->string_offs[idx];
RADDBGI_U32 opl_raw = parsed->string_offs[idx + 1];
RADDBGI_U32 opl = raddbgi_parse__min(opl_raw, parsed->string_data_size);
RADDBGI_U32 off = raddbgi_parse__min(off_raw, opl);
RDI_U32 off_raw = parsed->string_offs[idx];
RDI_U32 opl_raw = parsed->string_offs[idx + 1];
RDI_U32 opl = rdi_parse__min(opl_raw, parsed->string_data_size);
RDI_U32 off = rdi_parse__min(off_raw, opl);
result = parsed->string_data + off;
len_result = opl - off;
}
@@ -236,15 +236,15 @@ raddbgi_string_from_idx(RADDBGI_Parsed *parsed, RADDBGI_U32 idx, RADDBGI_U64 *le
return(result);
}
RADDBGI_PROC RADDBGI_U32*
raddbgi_idx_run_from_first_count(RADDBGI_Parsed *parsed,
RADDBGI_U32 raw_first, RADDBGI_U32 raw_count,
RADDBGI_U32 *n_out){
RADDBGI_U32 raw_opl = raw_first + raw_count;
RADDBGI_U32 opl = raddbgi_parse__min(raw_opl, parsed->idx_run_count);
RADDBGI_U32 first = raddbgi_parse__min(raw_first, opl);
RDI_PROC RDI_U32*
rdi_idx_run_from_first_count(RDI_Parsed *parsed,
RDI_U32 raw_first, RDI_U32 raw_count,
RDI_U32 *n_out){
RDI_U32 raw_opl = raw_first + raw_count;
RDI_U32 opl = rdi_parse__min(raw_opl, parsed->idx_run_count);
RDI_U32 first = rdi_parse__min(raw_first, opl);
RADDBGI_U32 *result = 0;
RDI_U32 *result = 0;
if (first < parsed->idx_run_count){
result = parsed->idx_run_data + first;
}
@@ -254,29 +254,29 @@ raddbgi_idx_run_from_first_count(RADDBGI_Parsed *parsed,
//- line info
RADDBGI_PROC void
raddbgi_line_info_from_unit(RADDBGI_Parsed *p, RADDBGI_Unit *unit, RADDBGI_ParsedLineInfo *out){
RADDBGI_U64 line_info_voff_count = 0;
RADDBGI_U64 *voffs = (RADDBGI_U64*)
raddbgi_data_from_dsec(p, unit->line_info_voffs_data_idx, sizeof(RADDBGI_U64),
RADDBGI_DataSectionTag_LineInfoVoffs,
&line_info_voff_count);
RDI_PROC void
rdi_line_info_from_unit(RDI_Parsed *p, RDI_Unit *unit, RDI_ParsedLineInfo *out){
RDI_U64 line_info_voff_count = 0;
RDI_U64 *voffs = (RDI_U64*)
rdi_data_from_dsec(p, unit->line_info_voffs_data_idx, sizeof(RDI_U64),
RDI_DataSectionTag_LineInfoVoffs,
&line_info_voff_count);
RADDBGI_U64 line_info_count_raw = 0;
RADDBGI_Line *lines = (RADDBGI_Line*)
raddbgi_data_from_dsec(p, unit->line_info_data_idx, sizeof(RADDBGI_Line),
RADDBGI_DataSectionTag_LineInfoData,
&line_info_count_raw);
RDI_U64 line_info_count_raw = 0;
RDI_Line *lines = (RDI_Line*)
rdi_data_from_dsec(p, unit->line_info_data_idx, sizeof(RDI_Line),
RDI_DataSectionTag_LineInfoData,
&line_info_count_raw);
RADDBGI_U64 column_info_count_raw = 0;
RADDBGI_Column *cols = (RADDBGI_Column*)
raddbgi_data_from_dsec(p, unit->line_info_col_data_idx, sizeof(RADDBGI_Column),
RADDBGI_DataSectionTag_LineInfoColumns,
&column_info_count_raw);
RDI_U64 column_info_count_raw = 0;
RDI_Column *cols = (RDI_Column*)
rdi_data_from_dsec(p, unit->line_info_col_data_idx, sizeof(RDI_Column),
RDI_DataSectionTag_LineInfoColumns,
&column_info_count_raw);
RADDBGI_U32 line_info_count_a = (line_info_voff_count > 0)?line_info_voff_count - 1:0;
RADDBGI_U32 line_info_count = raddbgi_parse__min(line_info_count_a, line_info_count_raw);
RADDBGI_U32 column_info_count = raddbgi_parse__min(column_info_count_raw, line_info_count);
RDI_U32 line_info_count_a = (line_info_voff_count > 0)?line_info_voff_count - 1:0;
RDI_U32 line_info_count = rdi_parse__min(line_info_count_a, line_info_count_raw);
RDI_U32 column_info_count = rdi_parse__min(column_info_count_raw, line_info_count);
out->voffs = voffs;
out->lines = lines;
@@ -285,17 +285,17 @@ raddbgi_line_info_from_unit(RADDBGI_Parsed *p, RADDBGI_Unit *unit, RADDBGI_Parse
out->col_count = column_info_count;
}
RADDBGI_PROC RADDBGI_U64
raddbgi_line_info_idx_from_voff(RADDBGI_ParsedLineInfo *line_info, RADDBGI_U64 voff)
RDI_PROC RDI_U64
rdi_line_info_idx_from_voff(RDI_ParsedLineInfo *line_info, RDI_U64 voff)
{
RADDBGI_U64 result = 0;
RDI_U64 result = 0;
if (line_info->count > 0 && line_info->voffs[0] <= voff && voff < line_info->voffs[line_info->count - 1]){
// assuming: (i < j) -> (vmap[i].voff < vmap[j].voff)
// find i such that: (vmap[i].voff <= voff) && (voff < vmap[i + 1].voff)
RADDBGI_U32 first = 0;
RADDBGI_U32 opl = line_info->count;
RDI_U32 first = 0;
RDI_U32 opl = line_info->count;
for (;;){
RADDBGI_U32 mid = (first + opl)/2;
RDI_U32 mid = (first + opl)/2;
if (line_info->voffs[mid] < voff){
first = mid;
}
@@ -310,35 +310,35 @@ raddbgi_line_info_idx_from_voff(RADDBGI_ParsedLineInfo *line_info, RADDBGI_U64 v
break;
}
}
result = (RADDBGI_U64)first;
result = (RDI_U64)first;
}
return(result);
}
RADDBGI_PROC void
raddbgi_line_map_from_source_file(RADDBGI_Parsed *p, RADDBGI_SourceFile *srcfile,
RADDBGI_ParsedLineMap *out){
RADDBGI_U64 num_count = 0;
RADDBGI_U32 *nums = (RADDBGI_U32*)
raddbgi_data_from_dsec(p, srcfile->line_map_nums_data_idx, sizeof(RADDBGI_U32),
RADDBGI_DataSectionTag_LineMapNumbers,
&num_count);
RDI_PROC void
rdi_line_map_from_source_file(RDI_Parsed *p, RDI_SourceFile *srcfile,
RDI_ParsedLineMap *out){
RDI_U64 num_count = 0;
RDI_U32 *nums = (RDI_U32*)
rdi_data_from_dsec(p, srcfile->line_map_nums_data_idx, sizeof(RDI_U32),
RDI_DataSectionTag_LineMapNumbers,
&num_count);
RADDBGI_U64 range_count = 0;
RADDBGI_U32 *ranges = (RADDBGI_U32*)
raddbgi_data_from_dsec(p, srcfile->line_map_range_data_idx, sizeof(RADDBGI_U32),
RADDBGI_DataSectionTag_LineMapRanges,
&range_count);
RDI_U64 range_count = 0;
RDI_U32 *ranges = (RDI_U32*)
rdi_data_from_dsec(p, srcfile->line_map_range_data_idx, sizeof(RDI_U32),
RDI_DataSectionTag_LineMapRanges,
&range_count);
RADDBGI_U64 voff_count = 0;
RADDBGI_U64 *voffs = (RADDBGI_U64*)
raddbgi_data_from_dsec(p, srcfile->line_map_voff_data_idx, sizeof(RADDBGI_U64),
RADDBGI_DataSectionTag_LineMapVoffs,
&voff_count);
RDI_U64 voff_count = 0;
RDI_U64 *voffs = (RDI_U64*)
rdi_data_from_dsec(p, srcfile->line_map_voff_data_idx, sizeof(RDI_U64),
RDI_DataSectionTag_LineMapVoffs,
&voff_count);
RADDBGI_U32 count_a = (range_count > 0)?(range_count - 1):0;
RADDBGI_U32 count_b = raddbgi_parse__min(count_a, num_count);
RADDBGI_U32 count = raddbgi_parse__min(count_b, srcfile->line_map_count);
RDI_U32 count_a = (range_count > 0)?(range_count - 1):0;
RDI_U32 count_b = rdi_parse__min(count_a, num_count);
RDI_U32 count = rdi_parse__min(count_b, srcfile->line_map_count);
out->nums = nums;
out->ranges = ranges;
@@ -347,20 +347,20 @@ raddbgi_line_map_from_source_file(RADDBGI_Parsed *p, RADDBGI_SourceFile *srcfile
out->voff_count = voff_count;
}
RADDBGI_PROC RADDBGI_U64*
raddbgi_line_voffs_from_num(RADDBGI_ParsedLineMap *map, RADDBGI_U32 linenum, RADDBGI_U32 *n_out){
RADDBGI_U64 *result = 0;
RDI_PROC RDI_U64*
rdi_line_voffs_from_num(RDI_ParsedLineMap *map, RDI_U32 linenum, RDI_U32 *n_out){
RDI_U64 *result = 0;
*n_out = 0;
RADDBGI_U32 closest_i = 0;
RDI_U32 closest_i = 0;
if (map->count > 0 && map->nums[0] <= linenum){
// assuming: (i < j) -> (nums[i] < nums[j])
// find i such that: (nums[i] <= linenum) && (linenum < nums[i + 1])
RADDBGI_U32 *nums = map->nums;
RADDBGI_U32 first = 0;
RADDBGI_U32 opl = map->count;
RDI_U32 *nums = map->nums;
RDI_U32 first = 0;
RDI_U32 opl = map->count;
for (;;){
RADDBGI_U32 mid = (first + opl)/2;
RDI_U32 mid = (first + opl)/2;
if (nums[mid] < linenum){
first = mid;
}
@@ -386,8 +386,8 @@ raddbgi_line_voffs_from_num(RADDBGI_ParsedLineMap *map, RADDBGI_U32 linenum, RAD
// set result if possible
if (closest_i < map->count){
RADDBGI_U32 first = map->ranges[closest_i];
RADDBGI_U32 opl = map->ranges[closest_i + 1];
RDI_U32 first = map->ranges[closest_i];
RDI_U32 opl = map->ranges[closest_i + 1];
if (opl < map->voff_count){
result = map->voffs + first;
*n_out = opl - first;
@@ -400,16 +400,16 @@ raddbgi_line_voffs_from_num(RADDBGI_ParsedLineMap *map, RADDBGI_U32 linenum, RAD
//- vmaps
RADDBGI_PROC RADDBGI_U64
raddbgi_vmap_idx_from_voff(RADDBGI_VMapEntry *vmap, RADDBGI_U32 vmap_count, RADDBGI_U64 voff){
RADDBGI_U64 result = 0;
RDI_PROC RDI_U64
rdi_vmap_idx_from_voff(RDI_VMapEntry *vmap, RDI_U32 vmap_count, RDI_U64 voff){
RDI_U64 result = 0;
if (vmap_count > 0 && vmap[0].voff <= voff && voff < vmap[vmap_count - 1].voff){
// assuming: (i < j) -> (vmap[i].voff < vmap[j].voff)
// find i such that: (vmap[i].voff <= voff) && (voff < vmap[i + 1].voff)
RADDBGI_U32 first = 0;
RADDBGI_U32 opl = vmap_count;
RDI_U32 first = 0;
RDI_U32 opl = vmap_count;
for (;;){
RADDBGI_U32 mid = (first + opl)/2;
RDI_U32 mid = (first + opl)/2;
if (vmap[mid].voff < voff){
first = mid;
}
@@ -424,60 +424,60 @@ raddbgi_vmap_idx_from_voff(RADDBGI_VMapEntry *vmap, RADDBGI_U32 vmap_count, RADD
break;
}
}
result = (RADDBGI_U64)vmap[first].idx;
result = (RDI_U64)vmap[first].idx;
}
return(result);
}
//- name maps
RADDBGI_PROC RADDBGI_NameMap*
raddbgi_name_map_from_kind(RADDBGI_Parsed *p, RADDBGI_NameMapKind kind){
RADDBGI_NameMap *result = 0;
if (0 < kind && kind < RADDBGI_NameMapKind_COUNT){
RDI_PROC RDI_NameMap*
rdi_name_map_from_kind(RDI_Parsed *p, RDI_NameMapKind kind){
RDI_NameMap *result = 0;
if (0 < kind && kind < RDI_NameMapKind_COUNT){
result = p->name_maps_by_kind[kind];
}
return(result);
}
RADDBGI_PROC void
raddbgi_name_map_parse(RADDBGI_Parsed *p, RADDBGI_NameMap *mapptr, RADDBGI_ParsedNameMap *out){
RDI_PROC void
rdi_name_map_parse(RDI_Parsed *p, RDI_NameMap *mapptr, RDI_ParsedNameMap *out){
out->buckets = 0;
out->bucket_count = 0;
if (mapptr != 0){
out->buckets = (RADDBGI_NameMapBucket*)
raddbgi_data_from_dsec(p, mapptr->bucket_data_idx, sizeof(RADDBGI_NameMapBucket),
RADDBGI_DataSectionTag_NameMapBuckets, &out->bucket_count);
out->nodes = (RADDBGI_NameMapNode*)
raddbgi_data_from_dsec(p, mapptr->node_data_idx, sizeof(RADDBGI_NameMapNode),
RADDBGI_DataSectionTag_NameMapNodes, &out->node_count);
out->buckets = (RDI_NameMapBucket*)
rdi_data_from_dsec(p, mapptr->bucket_data_idx, sizeof(RDI_NameMapBucket),
RDI_DataSectionTag_NameMapBuckets, &out->bucket_count);
out->nodes = (RDI_NameMapNode*)
rdi_data_from_dsec(p, mapptr->node_data_idx, sizeof(RDI_NameMapNode),
RDI_DataSectionTag_NameMapNodes, &out->node_count);
}
}
RADDBGI_PROC RADDBGI_NameMapNode*
raddbgi_name_map_lookup(RADDBGI_Parsed *p, RADDBGI_ParsedNameMap *map,
RADDBGI_U8 *str, RADDBGI_U64 len){
RADDBGI_NameMapNode *result = 0;
RDI_PROC RDI_NameMapNode*
rdi_name_map_lookup(RDI_Parsed *p, RDI_ParsedNameMap *map,
RDI_U8 *str, RDI_U64 len){
RDI_NameMapNode *result = 0;
if (map->bucket_count > 0){
RADDBGI_NameMapBucket *buckets = map->buckets;
RADDBGI_U64 bucket_count = map->bucket_count;
RADDBGI_U64 hash = raddbgi_hash(str, len);
RADDBGI_U64 bucket_index = hash%bucket_count;
RADDBGI_NameMapBucket *bucket = map->buckets + bucket_index;
RDI_NameMapBucket *buckets = map->buckets;
RDI_U64 bucket_count = map->bucket_count;
RDI_U64 hash = rdi_hash(str, len);
RDI_U64 bucket_index = hash%bucket_count;
RDI_NameMapBucket *bucket = map->buckets + bucket_index;
RADDBGI_NameMapNode *node = map->nodes + bucket->first_node;
RADDBGI_NameMapNode *node_opl = node + bucket->node_count;
RDI_NameMapNode *node = map->nodes + bucket->first_node;
RDI_NameMapNode *node_opl = node + bucket->node_count;
for (;node < node_opl; node += 1){
// extract a string from this node
RADDBGI_U64 nlen = 0;
RADDBGI_U8 *nstr = raddbgi_string_from_idx(p, node->string_idx, &nlen);
RDI_U64 nlen = 0;
RDI_U8 *nstr = rdi_string_from_idx(p, node->string_idx, &nlen);
// compare this to the needle string
RADDBGI_S32 match = 0;
RDI_S32 match = 0;
if (nlen == len){
RADDBGI_U8 *a = str;
RADDBGI_U8 *aopl = str + len;
RADDBGI_U8 *b = nstr;
RDI_U8 *a = str;
RDI_U8 *aopl = str + len;
RDI_U8 *b = nstr;
for (;a < aopl && *a == *b; a += 1, b += 1);
match = (a == aopl);
}
@@ -493,10 +493,10 @@ raddbgi_name_map_lookup(RADDBGI_Parsed *p, RADDBGI_ParsedNameMap *map,
return(result);
}
RADDBGI_PROC RADDBGI_U32*
raddbgi_matches_from_map_node(RADDBGI_Parsed *p, RADDBGI_NameMapNode *node,
RADDBGI_U32 *n_out){
RADDBGI_U32 *result = 0;
RDI_PROC RDI_U32*
rdi_matches_from_map_node(RDI_Parsed *p, RDI_NameMapNode *node,
RDI_U32 *n_out){
RDI_U32 *result = 0;
*n_out = 0;
if (node != 0){
if (node->match_count == 1){
@@ -504,8 +504,8 @@ raddbgi_matches_from_map_node(RADDBGI_Parsed *p, RADDBGI_NameMapNode *node,
*n_out = 1;
}
else{
result = raddbgi_idx_run_from_first_count(p, node->match_idx_or_idx_run_first,
node->match_count, n_out);
result = rdi_idx_run_from_first_count(p, node->match_idx_or_idx_run_first,
node->match_count, n_out);
}
}
return(result);
@@ -513,14 +513,14 @@ raddbgi_matches_from_map_node(RADDBGI_Parsed *p, RADDBGI_NameMapNode *node,
//- common helpers
RADDBGI_PROC RADDBGI_U64
raddbgi_first_voff_from_proc(RADDBGI_Parsed *p, RADDBGI_U32 proc_id){
RADDBGI_U64 result = 0;
RDI_PROC RDI_U64
rdi_first_voff_from_proc(RDI_Parsed *p, RDI_U32 proc_id){
RDI_U64 result = 0;
if (0 < proc_id && proc_id < p->procedures_count){
RADDBGI_Procedure *proc = p->procedures + proc_id;
RADDBGI_U32 scope_id = proc->root_scope_idx;
RDI_Procedure *proc = p->procedures + proc_id;
RDI_U32 scope_id = proc->root_scope_idx;
if (0 < scope_id && scope_id < p->scopes_count){
RADDBGI_Scope *scope = p->scopes + scope_id;
RDI_Scope *scope = p->scopes + scope_id;
if (scope->voff_range_first < scope->voff_range_opl &&
scope->voff_range_first < p->scope_voffs_count){
result = p->scope_voffs[scope->voff_range_first];
@@ -533,19 +533,19 @@ raddbgi_first_voff_from_proc(RADDBGI_Parsed *p, RADDBGI_U32 proc_id){
////////////////////////////////
//~ RADDBG Parsing Helpers
RADDBGI_PROC void*
raddbgi_data_from_dsec(RADDBGI_Parsed *parsed, RADDBGI_U32 idx, RADDBGI_U32 item_size,
RADDBGI_DataSectionTag expected_tag,
RADDBGI_U64 *count_out){
RDI_PROC void*
rdi_data_from_dsec(RDI_Parsed *parsed, RDI_U32 idx, RDI_U32 item_size,
RDI_DataSectionTag expected_tag,
RDI_U64 *count_out){
void *result = 0;
RADDBGI_U32 count_result = 0;
RDI_U32 count_result = 0;
// TODO(allen): need a version of this that works with encodings other than "Unpacked"
if (0 < idx && idx < parsed->dsec_count){
RADDBGI_DataSection *ds = parsed->dsecs + idx;
RDI_DataSection *ds = parsed->dsecs + idx;
if (ds->tag == expected_tag){
RADDBGI_U64 opl = ds->off + ds->encoded_size;
RDI_U64 opl = ds->off + ds->encoded_size;
if (opl <= parsed->raw_data_size){
count_result = ds->encoded_size/item_size;
result = (parsed->raw_data + ds->off);
+139 -139
View File
@@ -1,105 +1,105 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBGI_PARSE_H
#define RADDBGI_PARSE_H
#ifndef RDI_PARSE_H
#define RDI_PARSE_H
////////////////////////////////
//~ RADDBG Parsing Helpers
typedef struct RADDBGI_Parsed{
typedef struct RDI_Parsed{
// raw data & data sections (part 1)
RADDBGI_U8 *raw_data;
RADDBGI_U64 raw_data_size;
RADDBGI_DataSection *dsecs;
RADDBGI_U64 dsec_count;
RADDBGI_U32 dsec_idx[RADDBGI_DataSectionTag_PRIMARY_COUNT];
RDI_U8 *raw_data;
RDI_U64 raw_data_size;
RDI_DataSection *dsecs;
RDI_U64 dsec_count;
RDI_U32 dsec_idx[RDI_DataSectionTag_PRIMARY_COUNT];
// primary data structures (part 2)
// handled by helper APIs
RADDBGI_U8* string_data;
RADDBGI_U64 string_data_size;
RADDBGI_U32* string_offs;
RADDBGI_U64 string_count;
RADDBGI_U32* idx_run_data;
RADDBGI_U32 idx_run_count;
RDI_U8* string_data;
RDI_U64 string_data_size;
RDI_U32* string_offs;
RDI_U64 string_count;
RDI_U32* idx_run_data;
RDI_U32 idx_run_count;
// directly readable by users
// (any of these may be empty and null even in a successful parse)
RADDBGI_TopLevelInfo* top_level_info;
RDI_TopLevelInfo* top_level_info;
RADDBGI_BinarySection* binary_sections;
RADDBGI_U64 binary_sections_count;
RADDBGI_FilePathNode* file_paths;
RADDBGI_U64 file_paths_count;
RADDBGI_SourceFile* source_files;
RADDBGI_U64 source_files_count;
RADDBGI_Unit* units;
RADDBGI_U64 units_count;
RADDBGI_VMapEntry* unit_vmap;
RADDBGI_U64 unit_vmap_count;
RADDBGI_TypeNode* type_nodes;
RADDBGI_U64 type_nodes_count;
RADDBGI_UDT* udts;
RADDBGI_U64 udts_count;
RADDBGI_Member* members;
RADDBGI_U64 members_count;
RADDBGI_EnumMember* enum_members;
RADDBGI_U64 enum_members_count;
RADDBGI_GlobalVariable* global_variables;
RADDBGI_U64 global_variables_count;
RADDBGI_VMapEntry* global_vmap;
RADDBGI_U64 global_vmap_count;
RADDBGI_ThreadVariable* thread_variables;
RADDBGI_U64 thread_variables_count;
RADDBGI_Procedure* procedures;
RADDBGI_U64 procedures_count;
RADDBGI_Scope* scopes;
RADDBGI_U64 scopes_count;
RADDBGI_U64* scope_voffs;
RADDBGI_U64 scope_voffs_count;
RADDBGI_VMapEntry* scope_vmap;
RADDBGI_U64 scope_vmap_count;
RADDBGI_Local* locals;
RADDBGI_U64 locals_count;
RADDBGI_LocationBlock* location_blocks;
RADDBGI_U64 location_blocks_count;
RADDBGI_U8* location_data;
RADDBGI_U64 location_data_size;
RADDBGI_NameMap* name_maps;
RADDBGI_U64 name_maps_count;
RDI_BinarySection* binary_sections;
RDI_U64 binary_sections_count;
RDI_FilePathNode* file_paths;
RDI_U64 file_paths_count;
RDI_SourceFile* source_files;
RDI_U64 source_files_count;
RDI_Unit* units;
RDI_U64 units_count;
RDI_VMapEntry* unit_vmap;
RDI_U64 unit_vmap_count;
RDI_TypeNode* type_nodes;
RDI_U64 type_nodes_count;
RDI_UDT* udts;
RDI_U64 udts_count;
RDI_Member* members;
RDI_U64 members_count;
RDI_EnumMember* enum_members;
RDI_U64 enum_members_count;
RDI_GlobalVariable* global_variables;
RDI_U64 global_variables_count;
RDI_VMapEntry* global_vmap;
RDI_U64 global_vmap_count;
RDI_ThreadVariable* thread_variables;
RDI_U64 thread_variables_count;
RDI_Procedure* procedures;
RDI_U64 procedures_count;
RDI_Scope* scopes;
RDI_U64 scopes_count;
RDI_U64* scope_voffs;
RDI_U64 scope_voffs_count;
RDI_VMapEntry* scope_vmap;
RDI_U64 scope_vmap_count;
RDI_Local* locals;
RDI_U64 locals_count;
RDI_LocationBlock* location_blocks;
RDI_U64 location_blocks_count;
RDI_U8* location_data;
RDI_U64 location_data_size;
RDI_NameMap* name_maps;
RDI_U64 name_maps_count;
// other helpers
RADDBGI_NameMap* name_maps_by_kind[RADDBGI_NameMapKind_COUNT];
RDI_NameMap* name_maps_by_kind[RDI_NameMapKind_COUNT];
} RADDBGI_Parsed;
} RDI_Parsed;
typedef enum{
RADDBGI_ParseStatus_Good = 0,
RADDBGI_ParseStatus_HeaderDoesNotMatch = 1,
RADDBGI_ParseStatus_UnsupportedVersionNumber = 2,
RADDBGI_ParseStatus_InvalidDataSecionLayout = 3,
RADDBGI_ParseStatus_MissingStringDataSection = 4,
RADDBGI_ParseStatus_MissingStringTableSection = 5,
RADDBGI_ParseStatus_MissingIndexRunSection = 6,
} RADDBGI_ParseStatus;
RDI_ParseStatus_Good = 0,
RDI_ParseStatus_HeaderDoesNotMatch = 1,
RDI_ParseStatus_UnsupportedVersionNumber = 2,
RDI_ParseStatus_InvalidDataSecionLayout = 3,
RDI_ParseStatus_MissingStringDataSection = 4,
RDI_ParseStatus_MissingStringTableSection = 5,
RDI_ParseStatus_MissingIndexRunSection = 6,
} RDI_ParseStatus;
typedef struct RADDBGI_ParsedLineInfo{
typedef struct RDI_ParsedLineInfo{
// NOTE: Mapping VOFF -> LINE_INFO
//
// * [ voff[i], voff[i + 1] ) forms the voff range
// * for the line info at lines[i] (and cols[i] if i < col_count)
RADDBGI_U64* voffs; // [count + 1] sorted
RADDBGI_Line* lines; // [count]
RADDBGI_Column* cols; // [col_count]
RADDBGI_U64 count;
RADDBGI_U64 col_count;
} RADDBGI_ParsedLineInfo;
RDI_U64* voffs; // [count + 1] sorted
RDI_Line* lines; // [count]
RDI_Column* cols; // [col_count]
RDI_U64 count;
RDI_U64 col_count;
} RDI_ParsedLineInfo;
typedef struct RADDBGI_ParsedLineMap{
typedef struct RDI_ParsedLineMap{
// NOTE: Mapping LINE_NUMBER -> VOFFs
//
// * nums[i] gives a line number
@@ -109,111 +109,111 @@ typedef struct RADDBGI_ParsedLineMap{
// * let k span over the range [ ranges[i], ranges[i + 1] )
// * voffs[k] gives the associated voffs
RADDBGI_U32* nums; // [count] sorted
RADDBGI_U32* ranges; // [count + 1]
RADDBGI_U64* voffs; // [voff_count]
RADDBGI_U64 count;
RADDBGI_U64 voff_count;
} RADDBGI_ParsedLineMap;
RDI_U32* nums; // [count] sorted
RDI_U32* ranges; // [count + 1]
RDI_U64* voffs; // [voff_count]
RDI_U64 count;
RDI_U64 voff_count;
} RDI_ParsedLineMap;
typedef struct RADDBGI_ParsedNameMap{
RADDBGI_NameMapBucket *buckets;
RADDBGI_NameMapNode *nodes;
RADDBGI_U64 bucket_count;
RADDBGI_U64 node_count;
} RADDBGI_ParsedNameMap;
typedef struct RDI_ParsedNameMap{
RDI_NameMapBucket *buckets;
RDI_NameMapNode *nodes;
RDI_U64 bucket_count;
RDI_U64 node_count;
} RDI_ParsedNameMap;
////////////////////////////////
//~ Global Nils
#if !defined(RADDBGI_DISABLE_NILS)
static RADDBGI_BinarySection raddbgi_binary_section_nil = {0};
static RADDBGI_FilePathNode raddbgi_file_path_node_nil = {0};
static RADDBGI_SourceFile raddbgi_source_file_nil = {0};
static RADDBGI_Unit raddbgi_unit_nil = {0};
static RADDBGI_VMapEntry raddbgi_vmap_entry_nil = {0};
static RADDBGI_TypeNode raddbgi_type_node_nil = {0};
static RADDBGI_UDT raddbgi_udt_nil = {0};
static RADDBGI_Member raddbgi_member_nil = {0};
static RADDBGI_EnumMember raddbgi_enum_member_nil = {0};
static RADDBGI_GlobalVariable raddbgi_global_variable_nil = {0};
static RADDBGI_ThreadVariable raddbgi_thread_variable_nil = {0};
static RADDBGI_Procedure raddbgi_procedure_nil = {0};
static RADDBGI_Scope raddbgi_scope_nil = {0};
static RADDBGI_U64 raddbgi_voff_nil = 0;
static RADDBGI_LocationBlock raddbgi_location_block_nil = {0};
static RADDBGI_Local raddbgi_local_nil = {0};
#if !defined(RDI_DISABLE_NILS)
static RDI_BinarySection rdi_binary_section_nil = {0};
static RDI_FilePathNode rdi_file_path_node_nil = {0};
static RDI_SourceFile rdi_source_file_nil = {0};
static RDI_Unit rdi_unit_nil = {0};
static RDI_VMapEntry rdi_vmap_entry_nil = {0};
static RDI_TypeNode rdi_type_node_nil = {0};
static RDI_UDT rdi_udt_nil = {0};
static RDI_Member rdi_member_nil = {0};
static RDI_EnumMember rdi_enum_member_nil = {0};
static RDI_GlobalVariable rdi_global_variable_nil = {0};
static RDI_ThreadVariable rdi_thread_variable_nil = {0};
static RDI_Procedure rdi_procedure_nil = {0};
static RDI_Scope rdi_scope_nil = {0};
static RDI_U64 rdi_voff_nil = 0;
static RDI_LocationBlock rdi_location_block_nil = {0};
static RDI_Local rdi_local_nil = {0};
#endif
////////////////////////////////
//~ RADDBG Parse API
RADDBGI_PROC RADDBGI_ParseStatus
raddbgi_parse(RADDBGI_U8 *data, RADDBGI_U64 size, RADDBGI_Parsed *out);
RDI_PROC RDI_ParseStatus
rdi_parse(RDI_U8 *data, RDI_U64 size, RDI_Parsed *out);
RADDBGI_PROC RADDBGI_U8*
raddbgi_string_from_idx(RADDBGI_Parsed *parsed, RADDBGI_U32 idx, RADDBGI_U64 *len_out);
RDI_PROC RDI_U8*
rdi_string_from_idx(RDI_Parsed *parsed, RDI_U32 idx, RDI_U64 *len_out);
RADDBGI_PROC RADDBGI_U32*
raddbgi_idx_run_from_first_count(RADDBGI_Parsed *parsed, RADDBGI_U32 first, RADDBGI_U32 raw_count,
RADDBGI_U32 *n_out);
RDI_PROC RDI_U32*
rdi_idx_run_from_first_count(RDI_Parsed *parsed, RDI_U32 first, RDI_U32 raw_count,
RDI_U32 *n_out);
//- table lookups
#define raddbgi_element_from_idx(parsed, name, idx) ((0 <= (idx) && (idx) < (parsed)->name##_count) ? &(parsed)->name[idx] : (parsed)->name ? &(parsed)->name[0] : 0)
#define rdi_element_from_idx(parsed, name, idx) ((0 <= (idx) && (idx) < (parsed)->name##_count) ? &(parsed)->name[idx] : (parsed)->name ? &(parsed)->name[0] : 0)
//- line info
RADDBGI_PROC void
raddbgi_line_info_from_unit(RADDBGI_Parsed *p, RADDBGI_Unit *unit, RADDBGI_ParsedLineInfo *out);
RDI_PROC void
rdi_line_info_from_unit(RDI_Parsed *p, RDI_Unit *unit, RDI_ParsedLineInfo *out);
RADDBGI_PROC RADDBGI_U64
raddbgi_line_info_idx_from_voff(RADDBGI_ParsedLineInfo *line_info, RADDBGI_U64 voff);
RDI_PROC RDI_U64
rdi_line_info_idx_from_voff(RDI_ParsedLineInfo *line_info, RDI_U64 voff);
RADDBGI_PROC void
raddbgi_line_map_from_source_file(RADDBGI_Parsed *p, RADDBGI_SourceFile *srcfile,
RADDBGI_ParsedLineMap *out);
RDI_PROC void
rdi_line_map_from_source_file(RDI_Parsed *p, RDI_SourceFile *srcfile,
RDI_ParsedLineMap *out);
RADDBGI_PROC RADDBGI_U64*
raddbgi_line_voffs_from_num(RADDBGI_ParsedLineMap *map, RADDBGI_U32 linenum, RADDBGI_U32 *n_out);
RDI_PROC RDI_U64*
rdi_line_voffs_from_num(RDI_ParsedLineMap *map, RDI_U32 linenum, RDI_U32 *n_out);
//- vmaps
RADDBGI_PROC RADDBGI_U64
raddbgi_vmap_idx_from_voff(RADDBGI_VMapEntry *vmap, RADDBGI_U32 vmap_count, RADDBGI_U64 voff);
RDI_PROC RDI_U64
rdi_vmap_idx_from_voff(RDI_VMapEntry *vmap, RDI_U32 vmap_count, RDI_U64 voff);
//- name maps
RADDBGI_PROC RADDBGI_NameMap*
raddbgi_name_map_from_kind(RADDBGI_Parsed *p, RADDBGI_NameMapKind kind);
RDI_PROC RDI_NameMap*
rdi_name_map_from_kind(RDI_Parsed *p, RDI_NameMapKind kind);
RADDBGI_PROC void
raddbgi_name_map_parse(RADDBGI_Parsed* p, RADDBGI_NameMap *mapptr, RADDBGI_ParsedNameMap *out);
RDI_PROC void
rdi_name_map_parse(RDI_Parsed* p, RDI_NameMap *mapptr, RDI_ParsedNameMap *out);
RADDBGI_PROC RADDBGI_NameMapNode*
raddbgi_name_map_lookup(RADDBGI_Parsed *p, RADDBGI_ParsedNameMap *map,
RADDBGI_U8 *str, RADDBGI_U64 len);
RDI_PROC RDI_NameMapNode*
rdi_name_map_lookup(RDI_Parsed *p, RDI_ParsedNameMap *map,
RDI_U8 *str, RDI_U64 len);
RADDBGI_PROC RADDBGI_U32*
raddbgi_matches_from_map_node(RADDBGI_Parsed *p, RADDBGI_NameMapNode *node, RADDBGI_U32 *n_out);
RDI_PROC RDI_U32*
rdi_matches_from_map_node(RDI_Parsed *p, RDI_NameMapNode *node, RDI_U32 *n_out);
//- common helpers
RADDBGI_PROC RADDBGI_U64
raddbgi_first_voff_from_proc(RADDBGI_Parsed *p, RADDBGI_U32 proc_id);
RDI_PROC RDI_U64
rdi_first_voff_from_proc(RDI_Parsed *p, RDI_U32 proc_id);
////////////////////////////////
//~ RADDBG Parsing Helpers
#define raddbgi_parse__extract_primary(p,outptr,outn,pritag) \
#define rdi_parse__extract_primary(p,outptr,outn,pritag) \
( (*(void**)&(outptr)) = \
raddbgi_data_from_dsec((p),(p)->dsec_idx[pritag],sizeof(*(outptr)),(pritag),(outn)) )
rdi_data_from_dsec((p),(p)->dsec_idx[pritag],sizeof(*(outptr)),(pritag),(outn)) )
RADDBGI_PROC void*
raddbgi_data_from_dsec(RADDBGI_Parsed *p, RADDBGI_U32 idx, RADDBGI_U32 item_size,
RADDBGI_DataSectionTag expected_tag, RADDBGI_U64 *n_out);
RDI_PROC void*
rdi_data_from_dsec(RDI_Parsed *p, RDI_U32 idx, RDI_U32 item_size,
RDI_DataSectionTag expected_tag, RDI_U64 *n_out);
#define raddbgi_parse__min(a,b) (((a)<(b))?(a):(b))
#define rdi_parse__min(a,b) (((a)<(b))?(a):(b))
#endif // RADDBGI_PARSE_H
#endif // RDI_PARSE_H
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+45 -45
View File
@@ -161,12 +161,12 @@ main(int argc, char **argv){
// will we try to parse an input file
B32 try_parse_input = (params->errors.node_count == 0);
RADDBGI_ParseStatus parse_status = RADDBGI_ParseStatus_Good;
RADDBGI_Parsed raddbg__ = {0};
RADDBGI_Parsed *raddbg = 0;
RDI_ParseStatus parse_status = RDI_ParseStatus_Good;
RDI_Parsed raddbg__ = {0};
RDI_Parsed *raddbg = 0;
if (try_parse_input){
parse_status = raddbgi_parse(params->input_data.str, params->input_data.size, &raddbg__);
if (parse_status == RADDBGI_ParseStatus_Good){
parse_status = rdi_parse(params->input_data.str, params->input_data.size, &raddbg__);
if (parse_status == RDI_ParseStatus_Good){
raddbg = &raddbg__;
}
}
@@ -183,24 +183,24 @@ main(int argc, char **argv){
// DATA SECTIONS
if (raddbg->dsecs != 0 && params->dump_data_sections){
str8_list_pushf(arena, &dump, "# DATA SECTIONS:\n");
raddbgi_stringize_data_sections(arena, &dump, raddbg, 1);
rdi_stringize_data_sections(arena, &dump, raddbg, 1);
str8_list_push(arena, &dump, str8_lit("\n"));
}
// TOP LEVEL INFO
if (raddbg->top_level_info != 0 && params->dump_top_level_info){
str8_list_pushf(arena, &dump, "# TOP LEVEL INFO:\n");
raddbgi_stringize_top_level_info(arena, &dump, raddbg, raddbg->top_level_info, 1);
rdi_stringize_top_level_info(arena, &dump, raddbg, raddbg->top_level_info, 1);
str8_list_push(arena, &dump, str8_lit("\n"));
}
// BINARY SECTIONS
if (raddbg->binary_sections != 0 && params->dump_binary_sections){
str8_list_pushf(arena, &dump, "# BINARY SECTIONS:\n");
RADDBGI_BinarySection *ptr = raddbg->binary_sections;
RDI_BinarySection *ptr = raddbg->binary_sections;
for (U32 i = 0; i < raddbg->binary_sections_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " section[%u]:\n", i);
raddbgi_stringize_binary_section(arena, &dump, raddbg, ptr, 2);
rdi_stringize_binary_section(arena, &dump, raddbg, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n"));
}
str8_list_push(arena, &dump, str8_lit("\n"));
@@ -208,17 +208,17 @@ main(int argc, char **argv){
// FILE PATHS
if (raddbg->file_paths != 0 && params->dump_file_paths){
RADDBGI_FilePathBundle file_path_bundle = {0};
RDI_FilePathBundle file_path_bundle = {0};
{
file_path_bundle.file_paths = raddbg->file_paths;
file_path_bundle.file_path_count = raddbg->file_paths_count;
}
str8_list_pushf(arena, &dump, "# FILE PATHS\n");
RADDBGI_FilePathNode *ptr = raddbg->file_paths;
RDI_FilePathNode *ptr = raddbg->file_paths;
for (U32 i = 0; i < raddbg->file_paths_count; i += 1, ptr += 1){
if (ptr->parent_path_node == 0){
raddbgi_stringize_file_path(arena, &dump, raddbg, &file_path_bundle, ptr, 1);
rdi_stringize_file_path(arena, &dump, raddbg, &file_path_bundle, ptr, 1);
}
}
str8_list_push(arena, &dump, str8_lit("\n"));
@@ -227,10 +227,10 @@ main(int argc, char **argv){
// SOURCE FILES
if (raddbg->source_files != 0 && params->dump_source_files){
str8_list_pushf(arena, &dump, "# SOURCE FILES\n");
RADDBGI_SourceFile *ptr = raddbg->source_files;
RDI_SourceFile *ptr = raddbg->source_files;
for (U32 i = 0; i < raddbg->source_files_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " source_file[%u]:\n", i);
raddbgi_stringize_source_file(arena, &dump, raddbg, ptr, 2);
rdi_stringize_source_file(arena, &dump, raddbg, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n"));
}
str8_list_push(arena, &dump, str8_lit("\n"));
@@ -239,10 +239,10 @@ main(int argc, char **argv){
// UNITS
if (raddbg->units != 0 && params->dump_units){
str8_list_pushf(arena, &dump, "# UNITS\n");
RADDBGI_Unit *ptr = raddbg->units;
RDI_Unit *ptr = raddbg->units;
for (U32 i = 0; i < raddbg->units_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " unit[%u]:\n", i);
raddbgi_stringize_unit(arena, &dump, raddbg, ptr, 2);
rdi_stringize_unit(arena, &dump, raddbg, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n"));
}
str8_list_push(arena, &dump, str8_lit("\n"));
@@ -251,7 +251,7 @@ main(int argc, char **argv){
// UNIT VMAP
if (raddbg->unit_vmap != 0 && params->dump_unit_vmap){
str8_list_pushf(arena, &dump, "# UNIT VMAP\n");
RADDBGI_VMapEntry *ptr = raddbg->unit_vmap;
RDI_VMapEntry *ptr = raddbg->unit_vmap;
for (U32 i = 0; i < raddbg->unit_vmap_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " 0x%08x: %llu\n", ptr->voff, ptr->idx);
}
@@ -261,10 +261,10 @@ main(int argc, char **argv){
// TYPE NODES
if (raddbg->type_nodes != 0 && params->dump_type_nodes){
str8_list_pushf(arena, &dump, "# TYPE NODES:\n");
RADDBGI_TypeNode *ptr = raddbg->type_nodes;
RDI_TypeNode *ptr = raddbg->type_nodes;
for (U32 i = 0; i < raddbg->type_nodes_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " type[%u]:\n", i);
raddbgi_stringize_type_node(arena, &dump, raddbg, ptr, 2);
rdi_stringize_type_node(arena, &dump, raddbg, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n"));
}
str8_list_push(arena, &dump, str8_lit("\n"));
@@ -272,7 +272,7 @@ main(int argc, char **argv){
// UDT DATA
if (raddbg->udts != 0 && params->dump_udt_data){
RADDBGI_UDTMemberBundle member_bundle = {0};
RDI_UDTMemberBundle member_bundle = {0};
{
member_bundle.members = raddbg->members;
member_bundle.enum_members = raddbg->enum_members;
@@ -281,10 +281,10 @@ main(int argc, char **argv){
}
str8_list_pushf(arena, &dump, "# UDTS:\n");
RADDBGI_UDT *ptr = raddbg->udts;
RDI_UDT *ptr = raddbg->udts;
for (U32 i = 0; i < raddbg->udts_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " udt[%u]:\n", i);
raddbgi_stringize_udt(arena, &dump, raddbg, &member_bundle, ptr, 2);
rdi_stringize_udt(arena, &dump, raddbg, &member_bundle, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n"));
}
str8_list_push(arena, &dump, str8_lit("\n"));
@@ -293,10 +293,10 @@ main(int argc, char **argv){
// GLOBAL VARIABLES
if (raddbg->global_variables != 0 && params->dump_global_variables){
str8_list_pushf(arena, &dump, "# GLOBAL VARIABLES:\n");
RADDBGI_GlobalVariable *ptr = raddbg->global_variables;
RDI_GlobalVariable *ptr = raddbg->global_variables;
for (U32 i = 0; i < raddbg->global_variables_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " global_variable[%u]:\n", i);
raddbgi_stringize_global_variable(arena, &dump, raddbg, ptr, 2);
rdi_stringize_global_variable(arena, &dump, raddbg, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n"));
}
str8_list_push(arena, &dump, str8_lit("\n"));
@@ -305,7 +305,7 @@ main(int argc, char **argv){
// GLOBAL VMAP
if (raddbg->global_vmap != 0 && params->dump_global_vmap){
str8_list_pushf(arena, &dump, "# GLOBAL VMAP:\n");
RADDBGI_VMapEntry *ptr = raddbg->global_vmap;
RDI_VMapEntry *ptr = raddbg->global_vmap;
for (U32 i = 0; i < raddbg->global_vmap_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " 0x%08x: %llu\n", ptr->voff, ptr->idx);
}
@@ -315,10 +315,10 @@ main(int argc, char **argv){
// THREAD LOCAL VARIABLES
if (raddbg->thread_variables != 0 && params->dump_thread_variables){
str8_list_pushf(arena, &dump, "# THREAD VARIABLES:\n");
RADDBGI_ThreadVariable *ptr = raddbg->thread_variables;
RDI_ThreadVariable *ptr = raddbg->thread_variables;
for (U32 i = 0; i < raddbg->thread_variables_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " thread_variable[%u]:\n", i);
raddbgi_stringize_thread_variable(arena, &dump, raddbg, ptr, 2);
rdi_stringize_thread_variable(arena, &dump, raddbg, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n"));
}
str8_list_push(arena, &dump, str8_lit("\n"));
@@ -327,10 +327,10 @@ main(int argc, char **argv){
// PROCEDURES
if (raddbg->procedures != 0 && params->dump_procedures){
str8_list_pushf(arena, &dump, "# PROCEDURES:\n");
RADDBGI_Procedure *ptr = raddbg->procedures;
RDI_Procedure *ptr = raddbg->procedures;
for (U32 i = 0; i < raddbg->procedures_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " procedure[%u]:\n", i);
raddbgi_stringize_procedure(arena, &dump, raddbg, ptr, 2);
rdi_stringize_procedure(arena, &dump, raddbg, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n"));
}
str8_list_push(arena, &dump, str8_lit("\n"));
@@ -338,7 +338,7 @@ main(int argc, char **argv){
// SCOPES
if (raddbg->scopes != 0 && params->dump_scopes){
RADDBGI_ScopeBundle scope_bundle = {0};
RDI_ScopeBundle scope_bundle = {0};
{
scope_bundle.scopes = raddbg->scopes;
scope_bundle.scope_count = raddbg->scopes_count;
@@ -353,10 +353,10 @@ main(int argc, char **argv){
}
str8_list_pushf(arena, &dump, "# SCOPES:\n");
RADDBGI_Scope *ptr = raddbg->scopes;
RDI_Scope *ptr = raddbg->scopes;
for (U32 i = 0; i < raddbg->scopes_count; i += 1, ptr += 1){
if (ptr->parent_scope_idx == 0){
raddbgi_stringize_scope(arena, &dump, raddbg, &scope_bundle, ptr, 1);
rdi_stringize_scope(arena, &dump, raddbg, &scope_bundle, ptr, 1);
str8_list_push(arena, &dump, str8_lit("\n"));
}
}
@@ -366,7 +366,7 @@ main(int argc, char **argv){
// SCOPE VMAP
if (raddbg->scope_vmap != 0 && params->dump_scope_vmap){
str8_list_pushf(arena, &dump, "# SCOPE VMAP:\n");
RADDBGI_VMapEntry *ptr = raddbg->scope_vmap;
RDI_VMapEntry *ptr = raddbg->scope_vmap;
for (U32 i = 0; i < raddbg->scope_vmap_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " 0x%08x: %llu\n", ptr->voff, ptr->idx);
}
@@ -376,33 +376,33 @@ main(int argc, char **argv){
// NAME MAPS
if (raddbg->name_maps != 0 && params->dump_name_map){
str8_list_pushf(arena, &dump, "# NAME MAP:\n");
RADDBGI_NameMap *ptr = raddbg->name_maps;
RDI_NameMap *ptr = raddbg->name_maps;
for (U32 i = 0; i < raddbg->name_maps_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " name_map[%u]:\n", i);
RADDBGI_ParsedNameMap name_map = {0};
raddbgi_name_map_parse(raddbg, ptr, &name_map);
RDI_ParsedNameMap name_map = {0};
rdi_name_map_parse(raddbg, ptr, &name_map);
RADDBGI_NameMapBucket *bucket = name_map.buckets;
RDI_NameMapBucket *bucket = name_map.buckets;
for (U32 j = 0; j < name_map.bucket_count; j += 1, bucket += 1){
if (bucket->node_count > 0){
str8_list_pushf(arena, &dump, " bucket[%u]:\n", j);
RADDBGI_NameMapNode *node = name_map.nodes + bucket->first_node;
RADDBGI_NameMapNode *node_opl = node + bucket->node_count;
RDI_NameMapNode *node = name_map.nodes + bucket->first_node;
RDI_NameMapNode *node_opl = node + bucket->node_count;
for (; node < node_opl; node += 1){
String8 string = {0};
string.str = raddbgi_string_from_idx(raddbg, node->string_idx, &string.size);
string.str = rdi_string_from_idx(raddbg, node->string_idx, &string.size);
str8_list_pushf(arena, &dump, " match \"%.*s\": ", str8_varg(string));
if (node->match_count == 1){
str8_list_pushf(arena, &dump, "%u", node->match_idx_or_idx_run_first);
}
else{
RADDBGI_U32 idx_count = 0;
RADDBGI_U32 *idx_run =
raddbgi_idx_run_from_first_count(raddbg, node->match_idx_or_idx_run_first,
node->match_count, &idx_count);
RDI_U32 idx_count = 0;
RDI_U32 *idx_run =
rdi_idx_run_from_first_count(raddbg, node->match_idx_or_idx_run_first,
node->match_count, &idx_count);
if (idx_count > 0){
RADDBGI_U32 last = idx_count - 1;
RDI_U32 last = idx_count - 1;
for (U32 k = 0; k < last; k += 1){
str8_list_pushf(arena, &dump, "%u, ", idx_run[k]);
}
+3 -3
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBGI_DUMP_H
#define RADDBGI_DUMP_H
#ifndef RDI_DUMP_H
#define RDI_DUMP_H
////////////////////////////////
//~ Program Parameters Type
@@ -42,4 +42,4 @@ typedef struct RADDBGIDUMP_Params{
static RADDBGIDUMP_Params *raddbgidump_params_from_cmd_line(Arena *arena, CmdLine *cmdline);
#endif //RADDBGI_DUMP_H
#endif //RDI_DUMP_H
+214 -214
View File
@@ -5,12 +5,12 @@
//~ RADDBG Common Stringize Functions
static String8
raddbgi_string_from_data_section_tag(RADDBGI_DataSectionTag tag){
rdi_string_from_data_section_tag(RDI_DataSectionTag tag){
String8 result = {0};
switch (tag){
#define X(N,C) case C: result = str8_lit(#N); break;
#define Y(N)
RADDBGI_DataSectionTagXList(X,Y)
RDI_DataSectionTagXList(X,Y)
#undef X
#undef Y
}
@@ -18,36 +18,36 @@ raddbgi_string_from_data_section_tag(RADDBGI_DataSectionTag tag){
}
static String8
raddbgi_string_from_arch(RADDBGI_Arch arch){
rdi_string_from_arch(RDI_Arch arch){
String8 result = {0};
switch (arch){
default: result = str8_lit("<invalid-arch>"); break;
case RADDBGI_Arch_X86: result = str8_lit("x86"); break;
case RADDBGI_Arch_X64: result = str8_lit("x64"); break;
case RDI_Arch_X86: result = str8_lit("x86"); break;
case RDI_Arch_X64: result = str8_lit("x64"); break;
}
return(result);
}
static String8
raddbgi_string_from_language(RADDBGI_Language language){
rdi_string_from_language(RDI_Language language){
String8 result = {0};
switch (language){
#define X(name,code) case code: result = str8_lit(#name); break;
RADDBGI_LanguageXList(X)
RDI_LanguageXList(X)
#undef X
}
return(result);
}
static String8
raddbgi_string_from_type_kind(RADDBGI_TypeKind type_kind){
rdi_string_from_type_kind(RDI_TypeKind type_kind){
String8 result = {0};
switch (type_kind){
default: result = str8_lit("<invalid-type-kind>"); break;
#define X(name,code) case code: result = str8_lit(#name); break;
#define XZ(name,code,size) X(name,code)
#define Y(a,n)
RADDBGI_TypeKindXList(X,XZ,Y)
RDI_TypeKindXList(X,XZ,Y)
#undef X
#undef XZ
#undef Y
@@ -56,24 +56,24 @@ raddbgi_string_from_type_kind(RADDBGI_TypeKind type_kind){
}
static String8
raddbgi_string_from_member_kind(RADDBGI_MemberKind member_kind){
rdi_string_from_member_kind(RDI_MemberKind member_kind){
String8 result = {0};
switch (member_kind){
default: result = str8_lit("<invalid-member-kind>"); break;
#define X(N,C) case C: result = str8_lit(#N); break;
RADDBGI_MemberKindXList(X)
RDI_MemberKindXList(X)
#undef X
}
return(result);
}
static String8
raddbgi_string_from_local_kind(RADDBGI_LocalKind local_kind){
rdi_string_from_local_kind(RDI_LocalKind local_kind){
String8 result = {0};
switch (local_kind){
default: result = str8_lit("<invalid-local-kind>"); break;
case RADDBGI_LocalKind_Parameter: result = str8_lit("Parameter"); break;
case RADDBGI_LocalKind_Variable: result = str8_lit("Variable"); break;
case RDI_LocalKind_Parameter: result = str8_lit("Parameter"); break;
case RDI_LocalKind_Variable: result = str8_lit("Variable"); break;
}
return(result);
}
@@ -83,59 +83,59 @@ raddbgi_string_from_local_kind(RADDBGI_LocalKind local_kind){
//~ RADDBG Flags Stringize Functions
static void
raddbgi_stringize_binary_section_flags(Arena *arena, String8List *out,
RADDBGI_BinarySectionFlags flags){
rdi_stringize_binary_section_flags(Arena *arena, String8List *out,
RDI_BinarySectionFlags flags){
if (flags == 0){
str8_list_push(arena, out, str8_lit("0"));
}
if (flags & RADDBGI_BinarySectionFlag_Read){
if (flags & RDI_BinarySectionFlag_Read){
str8_list_push(arena, out, str8_lit("Read "));
}
if (flags & RADDBGI_BinarySectionFlag_Write){
if (flags & RDI_BinarySectionFlag_Write){
str8_list_push(arena, out, str8_lit("Write "));
}
if (flags & RADDBGI_BinarySectionFlag_Execute){
if (flags & RDI_BinarySectionFlag_Execute){
str8_list_push(arena, out, str8_lit("Execute "));
}
}
static void
raddbgi_stringize_type_modifier_flags(Arena *arena, String8List *out,
RADDBGI_TypeModifierFlags flags){
rdi_stringize_type_modifier_flags(Arena *arena, String8List *out,
RDI_TypeModifierFlags flags){
if (flags == 0){
str8_list_push(arena, out, str8_lit("0"));
}
if (flags & RADDBGI_TypeModifierFlag_Const){
if (flags & RDI_TypeModifierFlag_Const){
str8_list_push(arena, out, str8_lit("Const "));
}
if (flags & RADDBGI_TypeModifierFlag_Volatile){
if (flags & RDI_TypeModifierFlag_Volatile){
str8_list_push(arena, out, str8_lit("Volatile "));
}
}
static void
raddbgi_stringize_user_defined_type_flags(Arena *arena, String8List *out,
RADDBGI_UserDefinedTypeFlags flags){
rdi_stringize_user_defined_type_flags(Arena *arena, String8List *out,
RDI_UserDefinedTypeFlags flags){
if (flags == 0){
str8_list_push(arena, out, str8_lit("0"));
}
if (flags & RADDBGI_UserDefinedTypeFlag_EnumMembers){
if (flags & RDI_UserDefinedTypeFlag_EnumMembers){
str8_list_push(arena, out, str8_lit("EnumMembers "));
}
}
static void
raddbgi_stringize_link_flags(Arena *arena, String8List *out, RADDBGI_LinkFlags flags){
rdi_stringize_link_flags(Arena *arena, String8List *out, RDI_LinkFlags flags){
if (flags == 0){
str8_list_push(arena, out, str8_lit("0"));
}
if (flags & RADDBGI_LinkFlag_External){
if (flags & RDI_LinkFlag_External){
str8_list_push(arena, out, str8_lit("External "));
}
if (flags & RADDBGI_LinkFlag_TypeScoped){
if (flags & RDI_LinkFlag_TypeScoped){
str8_list_push(arena, out, str8_lit("TypeScoped "));
}
if (flags & RADDBGI_LinkFlag_ProcScoped){
if (flags & RDI_LinkFlag_ProcScoped){
str8_list_push(arena, out, str8_lit("ProcScoped "));
}
}
@@ -144,82 +144,82 @@ raddbgi_stringize_link_flags(Arena *arena, String8List *out, RADDBGI_LinkFlags f
////////////////////////////////
//~ RADDBG Compound Stringize Functions
static char raddbgi_stringize_spaces[] = " ";
static char rdi_stringize_spaces[] = " ";
static void
raddbgi_stringize_data_sections(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
U32 indent_level){
rdi_stringize_data_sections(Arena *arena, String8List *out, RDI_Parsed *parsed,
U32 indent_level){
U64 data_section_count = parsed->dsec_count;
RADDBGI_DataSection *ptr = parsed->dsecs;
RDI_DataSection *ptr = parsed->dsecs;
for (U64 i = 0; i < data_section_count; i += 1, ptr += 1){
String8 tag_str = raddbgi_string_from_data_section_tag(ptr->tag);
String8 tag_str = rdi_string_from_data_section_tag(ptr->tag);
str8_list_pushf(arena, out, "%.*sdata_section[%5u] = {0x%08llx, %7u, %7u} %.*s\n",
indent_level, raddbgi_stringize_spaces,
indent_level, rdi_stringize_spaces,
i, ptr->off, ptr->encoded_size, ptr->unpacked_size, str8_varg(tag_str));
}
}
static void
raddbgi_stringize_top_level_info(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_TopLevelInfo *tli, U32 indent_level){
String8 arch_str = raddbgi_string_from_arch(tli->architecture);
rdi_stringize_top_level_info(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_TopLevelInfo *tli, U32 indent_level){
String8 arch_str = rdi_string_from_arch(tli->architecture);
String8 exe_name = {0};
exe_name.str = raddbgi_string_from_idx(parsed, tli->exe_name_string_idx, &exe_name.size);
exe_name.str = rdi_string_from_idx(parsed, tli->exe_name_string_idx, &exe_name.size);
str8_list_pushf(arena, out, "%.*sarchitecture=%.*s\n",
indent_level, raddbgi_stringize_spaces, str8_varg(arch_str));
indent_level, rdi_stringize_spaces, str8_varg(arch_str));
str8_list_pushf(arena, out, "%.*sexe_name='%.*s'\n",
indent_level, raddbgi_stringize_spaces, str8_varg(exe_name));
indent_level, rdi_stringize_spaces, str8_varg(exe_name));
str8_list_pushf(arena, out, "%.*svoff_max=0x%08llx\n",
indent_level, raddbgi_stringize_spaces, tli->voff_max);
indent_level, rdi_stringize_spaces, tli->voff_max);
}
static void
raddbgi_stringize_binary_section(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_BinarySection *bin_section, U32 indent_level){
rdi_stringize_binary_section(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_BinarySection *bin_section, U32 indent_level){
String8 name = {0};
name.str = raddbgi_string_from_idx(parsed, bin_section->name_string_idx, &name.size);
name.str = rdi_string_from_idx(parsed, bin_section->name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*sname='%.*s'\n",
indent_level, raddbgi_stringize_spaces, str8_varg(name));
indent_level, rdi_stringize_spaces, str8_varg(name));
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbgi_stringize_spaces);
raddbgi_stringize_binary_section_flags(arena, out, bin_section->flags);
str8_list_pushf(arena, out, "%.*sflags=", indent_level, rdi_stringize_spaces);
rdi_stringize_binary_section_flags(arena, out, bin_section->flags);
str8_list_pushf(arena, out, "\n");
str8_list_pushf(arena, out, "%.*svoff_first=0x%08x\n",
indent_level, raddbgi_stringize_spaces, bin_section->voff_first);
indent_level, rdi_stringize_spaces, bin_section->voff_first);
str8_list_pushf(arena, out, "%.*svoff_opl =0x%08x\n",
indent_level, raddbgi_stringize_spaces, bin_section->voff_opl);
indent_level, rdi_stringize_spaces, bin_section->voff_opl);
str8_list_pushf(arena, out, "%.*sfoff_first=0x%08x\n",
indent_level, raddbgi_stringize_spaces, bin_section->foff_first);
indent_level, rdi_stringize_spaces, bin_section->foff_first);
str8_list_pushf(arena, out, "%.*sfoff_opl =0x%08x\n",
indent_level, raddbgi_stringize_spaces, bin_section->foff_opl);
indent_level, rdi_stringize_spaces, bin_section->foff_opl);
}
static void
raddbgi_stringize_file_path(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_FilePathBundle *bundle, RADDBGI_FilePathNode *file_path,
U32 indent_level){
rdi_stringize_file_path(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_FilePathBundle *bundle, RDI_FilePathNode *file_path,
U32 indent_level){
String8 name = {0};
name.str = raddbgi_string_from_idx(parsed, file_path->name_string_idx, &name.size);
name.str = rdi_string_from_idx(parsed, file_path->name_string_idx, &name.size);
U32 this_idx = (U32)(file_path - bundle->file_paths);
if (file_path->source_file_idx == 0){
str8_list_pushf(arena, out, "%.*s[%u] '%.*s'\n",
indent_level, raddbgi_stringize_spaces,
indent_level, rdi_stringize_spaces,
this_idx, str8_varg(name));
}
else{
str8_list_pushf(arena, out, "%.*s[%u] '%.*s'; source_file=%u\n",
indent_level, raddbgi_stringize_spaces,
indent_level, rdi_stringize_spaces,
this_idx, str8_varg(name), file_path->source_file_idx);
}
for (U32 child = file_path->first_child;
child != 0;){
// get node for child
RADDBGI_FilePathNode *child_node = 0;
RDI_FilePathNode *child_node = 0;
if (child < bundle->file_path_count){
child_node = bundle->file_paths + child;
}
@@ -228,7 +228,7 @@ raddbgi_stringize_file_path(Arena *arena, String8List *out, RADDBGI_Parsed *pars
}
// stringize child
raddbgi_stringize_file_path(arena, out, parsed, bundle, child_node, indent_level + 1);
rdi_stringize_file_path(arena, out, parsed, bundle, child_node, indent_level + 1);
// increment iterator
child = child_node->next_sibling;
@@ -236,14 +236,14 @@ raddbgi_stringize_file_path(Arena *arena, String8List *out, RADDBGI_Parsed *pars
}
static void
raddbgi_stringize_source_file(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_SourceFile *source_file, U32 indent_level){
rdi_stringize_source_file(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_SourceFile *source_file, U32 indent_level){
// extract line map data
RADDBGI_ParsedLineMap line_map = {0};
raddbgi_line_map_from_source_file(parsed, source_file, &line_map);
RDI_ParsedLineMap line_map = {0};
rdi_line_map_from_source_file(parsed, source_file, &line_map);
// stringize line map data
str8_list_pushf(arena, out, "%.*slines:\n", indent_level, raddbgi_stringize_spaces);
str8_list_pushf(arena, out, "%.*slines:\n", indent_level, rdi_stringize_spaces);
for (U32 i = 0; i < line_map.count; i += 1){
U32 line_num = line_map.nums[i];
@@ -261,7 +261,7 @@ raddbgi_stringize_source_file(Arena *arena, String8List *out, RADDBGI_Parsed *pa
}
str8_list_pushf(arena, out, "%.*s %u: ",
indent_level, raddbgi_stringize_spaces, line_num);
indent_level, rdi_stringize_spaces, line_num);
U32 first = line_map.ranges[i];
U32 opl_raw = line_map.ranges[i + 1];
@@ -272,7 +272,7 @@ raddbgi_stringize_source_file(Arena *arena, String8List *out, RADDBGI_Parsed *pa
}
else{
str8_list_pushf(arena, out, "%.*s0x%08x\n",
indent_level + digit_count + 3, raddbgi_stringize_spaces,
indent_level + digit_count + 3, rdi_stringize_spaces,
line_map.voffs[j]);
}
}
@@ -280,57 +280,57 @@ raddbgi_stringize_source_file(Arena *arena, String8List *out, RADDBGI_Parsed *pa
}
static void
raddbgi_stringize_unit(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_Unit *unit, U32 indent_level){
rdi_stringize_unit(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_Unit *unit, U32 indent_level){
String8 unit_name = {0};
unit_name.str = raddbgi_string_from_idx(parsed, unit->unit_name_string_idx, &unit_name.size);
unit_name.str = rdi_string_from_idx(parsed, unit->unit_name_string_idx, &unit_name.size);
String8 compiler_name = {0};
compiler_name.str = raddbgi_string_from_idx(parsed, unit->compiler_name_string_idx,
&compiler_name.size);
compiler_name.str = rdi_string_from_idx(parsed, unit->compiler_name_string_idx,
&compiler_name.size);
str8_list_pushf(arena, out, "%.*sunit_name='%.*s'\n",
indent_level, raddbgi_stringize_spaces, str8_varg(unit_name));
indent_level, rdi_stringize_spaces, str8_varg(unit_name));
str8_list_pushf(arena, out, "%.*scompiler_name='%.*s'\n",
indent_level, raddbgi_stringize_spaces, str8_varg(compiler_name));
indent_level, rdi_stringize_spaces, str8_varg(compiler_name));
str8_list_pushf(arena, out, "%.*ssource_file_path=%u\n",
indent_level, raddbgi_stringize_spaces, unit->source_file_path_node);
indent_level, rdi_stringize_spaces, unit->source_file_path_node);
str8_list_pushf(arena, out, "%.*sobject_file_path=%u\n",
indent_level, raddbgi_stringize_spaces, unit->object_file_path_node);
indent_level, rdi_stringize_spaces, unit->object_file_path_node);
str8_list_pushf(arena, out, "%.*sarchive_file_path=%u\n",
indent_level, raddbgi_stringize_spaces, unit->archive_file_path_node);
indent_level, rdi_stringize_spaces, unit->archive_file_path_node);
str8_list_pushf(arena, out, "%.*sbuild_path=%u\n",
indent_level, raddbgi_stringize_spaces, unit->build_path_node);
indent_level, rdi_stringize_spaces, unit->build_path_node);
String8 language_str = raddbgi_string_from_language(unit->language);
String8 language_str = rdi_string_from_language(unit->language);
str8_list_pushf(arena, out, "%.*slanguage=%.*s\n",
indent_level, raddbgi_stringize_spaces, str8_varg(language_str));
indent_level, rdi_stringize_spaces, str8_varg(language_str));
// extract line info data
RADDBGI_ParsedLineInfo line_info = {0};
raddbgi_line_info_from_unit(parsed, unit, &line_info);
RDI_ParsedLineInfo line_info = {0};
rdi_line_info_from_unit(parsed, unit, &line_info);
// stringize line info
str8_list_pushf(arena, out, "%.*slines:\n", indent_level, raddbgi_stringize_spaces);
str8_list_pushf(arena, out, "%.*slines:\n", indent_level, rdi_stringize_spaces);
for (U32 i = 0; i < line_info.count; i += 1){
U64 first = line_info.voffs[i];
U64 opl = line_info.voffs[i + 1];
RADDBGI_Line *line = line_info.lines + i;
RADDBGI_Column *col = 0;
RDI_Line *line = line_info.lines + i;
RDI_Column *col = 0;
if (i < line_info.col_count){
col = line_info.cols + i;
}
if (col == 0){
str8_list_pushf(arena, out, "%.*s [0x%08llx,0x%08llx) file=%u; line=%u\n",
indent_level, raddbgi_stringize_spaces,
indent_level, rdi_stringize_spaces,
first, opl, line->file_idx, line->line_num);
}
else{
str8_list_pushf(arena, out, "%.*s [0x%08llx,0x%08llx) file=%u; line=%u; columns=[%u,%u)\n",
indent_level, raddbgi_stringize_spaces,
indent_level, rdi_stringize_spaces,
first, opl, line->file_idx, line->line_num,
col->col_first, col->col_opl);
}
@@ -338,19 +338,19 @@ raddbgi_stringize_unit(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
}
static void
raddbgi_stringize_type_node(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_TypeNode *type, U32 indent_level){
RADDBGI_TypeKind kind = type->kind;
String8 type_kind_str = raddbgi_string_from_type_kind(kind);
rdi_stringize_type_node(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_TypeNode *type, U32 indent_level){
RDI_TypeKind kind = type->kind;
String8 type_kind_str = rdi_string_from_type_kind(kind);
str8_list_pushf(arena, out, "%.*skind=%.*s\n",
indent_level, raddbgi_stringize_spaces, str8_varg(type_kind_str));
indent_level, rdi_stringize_spaces, str8_varg(type_kind_str));
switch (type->kind){
case RADDBGI_TypeKind_Modifier:
case RDI_TypeKind_Modifier:
{
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbgi_stringize_spaces);
raddbgi_stringize_type_modifier_flags(arena, out, type->flags);
str8_list_pushf(arena, out, "%.*sflags=", indent_level, rdi_stringize_spaces);
rdi_stringize_type_modifier_flags(arena, out, type->flags);
str8_list_push(arena, out, str8_lit("\n"));
}break;
@@ -358,42 +358,42 @@ raddbgi_stringize_type_node(Arena *arena, String8List *out, RADDBGI_Parsed *pars
{
if (type->flags != 0){
str8_list_pushf(arena, out, "%.*sflags=%x (missing stringizer path)",
indent_level, raddbgi_stringize_spaces, type->flags);
indent_level, rdi_stringize_spaces, type->flags);
}
}break;
}
str8_list_pushf(arena, out, "%.*sbyte_size=%u\n",
indent_level, raddbgi_stringize_spaces, type->byte_size);
indent_level, rdi_stringize_spaces, type->byte_size);
if (RADDBGI_TypeKind_FirstBuiltIn <= kind &&
kind <= RADDBGI_TypeKind_LastBuiltIn){
if (RDI_TypeKind_FirstBuiltIn <= kind &&
kind <= RDI_TypeKind_LastBuiltIn){
String8 name = {0};
name.str = raddbgi_string_from_idx(parsed, type->built_in.name_string_idx, &name.size);
name.str = rdi_string_from_idx(parsed, type->built_in.name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*sbuilt_in.name='%.*s'\n",
indent_level, raddbgi_stringize_spaces, str8_varg(name));
indent_level, rdi_stringize_spaces, str8_varg(name));
}
else if (RADDBGI_TypeKind_FirstConstructed <= kind &&
kind <= RADDBGI_TypeKind_LastConstructed){
else if (RDI_TypeKind_FirstConstructed <= kind &&
kind <= RDI_TypeKind_LastConstructed){
str8_list_pushf(arena, out, "%.*sconstructed.direct_type=%u\n",
indent_level, raddbgi_stringize_spaces, type->constructed.direct_type_idx);
indent_level, rdi_stringize_spaces, type->constructed.direct_type_idx);
if (type->kind == RADDBGI_TypeKind_Array){
if (type->kind == RDI_TypeKind_Array){
str8_list_pushf(arena, out, "%.*sconstructed.array_count=%u\n",
indent_level, raddbgi_stringize_spaces, type->constructed.count);
indent_level, rdi_stringize_spaces, type->constructed.count);
}
if (type->kind == RADDBGI_TypeKind_Function ||
type->kind == RADDBGI_TypeKind_Method){
if (type->kind == RDI_TypeKind_Function ||
type->kind == RDI_TypeKind_Method){
U32 run_first = type->constructed.param_idx_run_first;
U32 run_count_raw = type->constructed.count;
U32 run_count = 0;
U32 *run = raddbgi_idx_run_from_first_count(parsed, run_first, run_count_raw, &run_count);
U32 *run = rdi_idx_run_from_first_count(parsed, run_first, run_count_raw, &run_count);
U32 this_type_idx = 0;
if (run_count > 0 && type->kind == RADDBGI_TypeKind_Method){
if (run_count > 0 && type->kind == RDI_TypeKind_Method){
this_type_idx = run[0];
run += 1;
run_count -= 1;
@@ -401,11 +401,11 @@ raddbgi_stringize_type_node(Arena *arena, String8List *out, RADDBGI_Parsed *pars
if (this_type_idx != 0){
str8_list_pushf(arena, out, "%.*sconstructed.this_type=%u\n",
indent_level, raddbgi_stringize_spaces, this_type_idx);
indent_level, rdi_stringize_spaces, this_type_idx);
}
str8_list_pushf(arena, out, "%.*sconstructed.params={",
indent_level, raddbgi_stringize_spaces);
indent_level, rdi_stringize_spaces);
if (run_count > 0){
U32 last = run_count - 1;
@@ -419,63 +419,63 @@ raddbgi_stringize_type_node(Arena *arena, String8List *out, RADDBGI_Parsed *pars
}
}
else if (RADDBGI_TypeKind_FirstUserDefined <= kind &&
kind <= RADDBGI_TypeKind_LastUserDefined){
else if (RDI_TypeKind_FirstUserDefined <= kind &&
kind <= RDI_TypeKind_LastUserDefined){
String8 name = {0};
name.str = raddbgi_string_from_idx(parsed, type->user_defined.name_string_idx, &name.size);
name.str = rdi_string_from_idx(parsed, type->user_defined.name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*suser_defined.name='%.*s'\n",
indent_level, raddbgi_stringize_spaces, str8_varg(name));
indent_level, rdi_stringize_spaces, str8_varg(name));
str8_list_pushf(arena, out, "%.*suser_defined.direct_type=%u\n",
indent_level, raddbgi_stringize_spaces,
indent_level, rdi_stringize_spaces,
type->user_defined.direct_type_idx);
str8_list_pushf(arena, out, "%.*suser_defined.udt=%u\n",
indent_level, raddbgi_stringize_spaces,
indent_level, rdi_stringize_spaces,
type->user_defined.udt_idx);
}
else if (kind == RADDBGI_TypeKind_Bitfield){
else if (kind == RDI_TypeKind_Bitfield){
str8_list_pushf(arena, out, "%.*sbitfield.off=%u\n",
indent_level, raddbgi_stringize_spaces, type->bitfield.off);
indent_level, rdi_stringize_spaces, type->bitfield.off);
str8_list_pushf(arena, out, "%.*sbitfield.size=%u\n",
indent_level, raddbgi_stringize_spaces, type->bitfield.size);
indent_level, rdi_stringize_spaces, type->bitfield.size);
}
}
static void
raddbgi_stringize_udt(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_UDTMemberBundle *member_bundle, RADDBGI_UDT *udt,
U32 indent_level){
rdi_stringize_udt(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_UDTMemberBundle *member_bundle, RDI_UDT *udt,
U32 indent_level){
str8_list_pushf(arena, out, "%.*sself_type=%u\n",
indent_level, raddbgi_stringize_spaces, udt->self_type_idx);
indent_level, rdi_stringize_spaces, udt->self_type_idx);
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbgi_stringize_spaces);
raddbgi_stringize_user_defined_type_flags(arena, out, udt->flags);
str8_list_pushf(arena, out, "%.*sflags=", indent_level, rdi_stringize_spaces);
rdi_stringize_user_defined_type_flags(arena, out, udt->flags);
str8_list_push(arena, out, str8_lit("\n"));
if (udt->file_idx != 0){
str8_list_pushf(arena, out, "%.*sloc={file=%u; line=%u; col=%u}\n",
indent_level, raddbgi_stringize_spaces,
indent_level, rdi_stringize_spaces,
udt->file_idx, udt->line, udt->col);
}
// enum members
if (udt->flags & RADDBGI_UserDefinedTypeFlag_EnumMembers){
if (udt->flags & RDI_UserDefinedTypeFlag_EnumMembers){
U32 first_raw = udt->member_first;
U32 opl_raw = first_raw + udt->member_count;
U32 opl = ClampTop(opl_raw, member_bundle->enum_member_count);
U32 first = ClampTop(first_raw, opl);
if (first < opl){
str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, raddbgi_stringize_spaces);
RADDBGI_EnumMember *enum_member = member_bundle->enum_members + first;
str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, rdi_stringize_spaces);
RDI_EnumMember *enum_member = member_bundle->enum_members + first;
for (U32 i = first; i < opl; i += 1, enum_member += 1){
String8 name = {0};
name.str = raddbgi_string_from_idx(parsed, enum_member->name_string_idx, &name.size);
name.str = rdi_string_from_idx(parsed, enum_member->name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*s '%.*s' %llu\n",
indent_level, raddbgi_stringize_spaces,
indent_level, rdi_stringize_spaces,
str8_varg(name), enum_member->val);
}
str8_list_pushf(arena, out, "%.*s}\n", indent_level, raddbgi_stringize_spaces);
str8_list_pushf(arena, out, "%.*s}\n", indent_level, rdi_stringize_spaces);
}
}
@@ -487,117 +487,117 @@ raddbgi_stringize_udt(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
U32 first = ClampTop(first_raw, opl);
if (first < opl){
str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, raddbgi_stringize_spaces);
RADDBGI_Member *member = member_bundle->members + first;
str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, rdi_stringize_spaces);
RDI_Member *member = member_bundle->members + first;
for (U32 i = first; i < opl; i += 1, member += 1){
str8_list_pushf(arena, out, "%.*s {\n", indent_level, raddbgi_stringize_spaces);
str8_list_pushf(arena, out, "%.*s {\n", indent_level, rdi_stringize_spaces);
String8 kind_str = raddbgi_string_from_member_kind(member->kind);
String8 kind_str = rdi_string_from_member_kind(member->kind);
str8_list_pushf(arena, out, "%.*s kind=%.*s\n",
indent_level, raddbgi_stringize_spaces, str8_varg(kind_str));
indent_level, rdi_stringize_spaces, str8_varg(kind_str));
if (member->name_string_idx != 0){
String8 name = {0};
name.str = raddbgi_string_from_idx(parsed, member->name_string_idx, &name.size);
name.str = rdi_string_from_idx(parsed, member->name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*s name='%.*s'\n",
indent_level, raddbgi_stringize_spaces, str8_varg(name));
indent_level, rdi_stringize_spaces, str8_varg(name));
}
str8_list_pushf(arena, out, "%.*s type=%u\n",
indent_level, raddbgi_stringize_spaces, member->type_idx);
indent_level, rdi_stringize_spaces, member->type_idx);
str8_list_pushf(arena, out, "%.*s off=%u\n",
indent_level, raddbgi_stringize_spaces, member->off);
indent_level, rdi_stringize_spaces, member->off);
str8_list_pushf(arena, out, "%.*s }\n", indent_level, raddbgi_stringize_spaces);
str8_list_pushf(arena, out, "%.*s }\n", indent_level, rdi_stringize_spaces);
}
str8_list_pushf(arena, out, "%.*s}\n", indent_level, raddbgi_stringize_spaces);
str8_list_pushf(arena, out, "%.*s}\n", indent_level, rdi_stringize_spaces);
}
}
}
static void
raddbgi_stringize_global_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_GlobalVariable *global_variable, U32 indent_level){
rdi_stringize_global_variable(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_GlobalVariable *global_variable, U32 indent_level){
String8 name = {0};
name.str = raddbgi_string_from_idx(parsed, global_variable->name_string_idx, &name.size);
name.str = rdi_string_from_idx(parsed, global_variable->name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*sname='%.*s'\n",
indent_level, raddbgi_stringize_spaces, str8_varg(name));
indent_level, rdi_stringize_spaces, str8_varg(name));
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbgi_stringize_spaces);
raddbgi_stringize_link_flags(arena, out, global_variable->link_flags);
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, rdi_stringize_spaces);
rdi_stringize_link_flags(arena, out, global_variable->link_flags);
str8_list_push(arena, out, str8_lit("\n"));
str8_list_pushf(arena, out, "%.*svoff=0x%08llx\n",
indent_level, raddbgi_stringize_spaces, global_variable->voff);
indent_level, rdi_stringize_spaces, global_variable->voff);
str8_list_pushf(arena, out, "%.*stype_idx=%u\n",
indent_level, raddbgi_stringize_spaces, global_variable->type_idx);
indent_level, rdi_stringize_spaces, global_variable->type_idx);
str8_list_pushf(arena, out, "%.*scontainer_idx=%u\n",
indent_level, raddbgi_stringize_spaces, global_variable->container_idx);
indent_level, rdi_stringize_spaces, global_variable->container_idx);
}
static void
raddbgi_stringize_thread_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_ThreadVariable *thread_var,
U32 indent_level){
rdi_stringize_thread_variable(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_ThreadVariable *thread_var,
U32 indent_level){
String8 name = {0};
name.str = raddbgi_string_from_idx(parsed, thread_var->name_string_idx, &name.size);
name.str = rdi_string_from_idx(parsed, thread_var->name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*sname='%.*s'\n",
indent_level, raddbgi_stringize_spaces, str8_varg(name));
indent_level, rdi_stringize_spaces, str8_varg(name));
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbgi_stringize_spaces);
raddbgi_stringize_link_flags(arena, out, thread_var->link_flags);
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, rdi_stringize_spaces);
rdi_stringize_link_flags(arena, out, thread_var->link_flags);
str8_list_push(arena, out, str8_lit("\n"));
str8_list_pushf(arena, out, "%.*stls_off=0x%08x\n",
indent_level, raddbgi_stringize_spaces, thread_var->tls_off);
indent_level, rdi_stringize_spaces, thread_var->tls_off);
str8_list_pushf(arena, out, "%.*stype_idx=%u\n",
indent_level, raddbgi_stringize_spaces, thread_var->type_idx);
indent_level, rdi_stringize_spaces, thread_var->type_idx);
str8_list_pushf(arena, out, "%.*scontainer_idx=%u\n",
indent_level, raddbgi_stringize_spaces, thread_var->container_idx);
indent_level, rdi_stringize_spaces, thread_var->container_idx);
}
static void
raddbgi_stringize_procedure(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_Procedure *proc, U32 indent_level){
rdi_stringize_procedure(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_Procedure *proc, U32 indent_level){
String8 name = {0};
name.str = raddbgi_string_from_idx(parsed, proc->name_string_idx, &name.size);
name.str = rdi_string_from_idx(parsed, proc->name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*sname='%.*s'\n",
indent_level, raddbgi_stringize_spaces, str8_varg(name));
indent_level, rdi_stringize_spaces, str8_varg(name));
String8 link_name = {0};
link_name.str = raddbgi_string_from_idx(parsed, proc->link_name_string_idx, &link_name.size);
link_name.str = rdi_string_from_idx(parsed, proc->link_name_string_idx, &link_name.size);
str8_list_pushf(arena, out, "%.*slink_name='%.*s'\n",
indent_level, raddbgi_stringize_spaces, str8_varg(link_name));
indent_level, rdi_stringize_spaces, str8_varg(link_name));
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbgi_stringize_spaces);
raddbgi_stringize_link_flags(arena, out, proc->link_flags);
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, rdi_stringize_spaces);
rdi_stringize_link_flags(arena, out, proc->link_flags);
str8_list_push(arena, out, str8_lit("\n"));
str8_list_pushf(arena, out, "%.*stype_idx=%u\n",
indent_level, raddbgi_stringize_spaces, proc->type_idx);
indent_level, rdi_stringize_spaces, proc->type_idx);
str8_list_pushf(arena, out, "%.*sroot_scope_idx=%u\n",
indent_level, raddbgi_stringize_spaces, proc->root_scope_idx);
indent_level, rdi_stringize_spaces, proc->root_scope_idx);
str8_list_pushf(arena, out, "%.*scontainer_idx=%u\n",
indent_level, raddbgi_stringize_spaces, proc->container_idx);
indent_level, rdi_stringize_spaces, proc->container_idx);
}
static void
raddbgi_stringize_scope(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_ScopeBundle *bundle, RADDBGI_Scope *scope, U32 indent_level){
rdi_stringize_scope(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_ScopeBundle *bundle, RDI_Scope *scope, U32 indent_level){
U32 this_idx = (U32)(scope - bundle->scopes);
str8_list_pushf(arena, out, "%.*s[%u]\n",
indent_level, raddbgi_stringize_spaces, this_idx);
indent_level, rdi_stringize_spaces, this_idx);
str8_list_pushf(arena, out, "%.*s proc_idx=%u\n",
indent_level, raddbgi_stringize_spaces, scope->proc_idx);
indent_level, rdi_stringize_spaces, scope->proc_idx);
// voff ranges
{
@@ -614,18 +614,18 @@ raddbgi_stringize_scope(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
if (voff_range_opl - voff_range_first > 2){
str8_list_pushf(arena, out, "%.*s voff_ranges={\n",
indent_level, raddbgi_stringize_spaces);
indent_level, rdi_stringize_spaces);
for (U32 i = voff_range_first; i < voff_range_opl; i += 2, voff_ptr += 2){
str8_list_pushf(arena, out, "%.*s [0x%08llx, 0x%08llx)\n",
indent_level, raddbgi_stringize_spaces,
indent_level, rdi_stringize_spaces,
voff_ptr[0], voff_ptr[1]);
}
str8_list_pushf(arena, out, "%.*s }\n",
indent_level, raddbgi_stringize_spaces);
indent_level, rdi_stringize_spaces);
}
else if (voff_range_opl - voff_range_first == 2){
str8_list_pushf(arena, out, "%.*s voff_range=[0x%08llx, 0x%08llx)\n",
indent_level, raddbgi_stringize_spaces,
indent_level, rdi_stringize_spaces,
voff_ptr[0], voff_ptr[1]);
}
}
@@ -637,60 +637,60 @@ raddbgi_stringize_scope(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
U32 local_opl = ClampTop(local_opl_raw, bundle->local_count);
if (local_first < local_opl){
RADDBGI_Local *local_ptr = bundle->locals + local_first;
RDI_Local *local_ptr = bundle->locals + local_first;
for (U32 i = local_first; i < local_opl; i += 1, local_ptr += 1){
str8_list_pushf(arena, out, "%.*s local[%u]\n",
indent_level, raddbgi_stringize_spaces, i);
indent_level, rdi_stringize_spaces, i);
String8 local_kind_str = raddbgi_string_from_local_kind(local_ptr->kind);
String8 local_kind_str = rdi_string_from_local_kind(local_ptr->kind);
str8_list_pushf(arena, out, "%.*s kind=%.*s\n",
indent_level, raddbgi_stringize_spaces, str8_varg(local_kind_str));
indent_level, rdi_stringize_spaces, str8_varg(local_kind_str));
String8 name = {0};
name.str = raddbgi_string_from_idx(parsed, local_ptr->name_string_idx, &name.size);
name.str = rdi_string_from_idx(parsed, local_ptr->name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*s name='%.*s'\n",
indent_level, raddbgi_stringize_spaces, str8_varg(name));
indent_level, rdi_stringize_spaces, str8_varg(name));
str8_list_pushf(arena, out, "%.*s type_idx=%u\n",
indent_level, raddbgi_stringize_spaces, local_ptr->type_idx);
indent_level, rdi_stringize_spaces, local_ptr->type_idx);
U32 location_first = local_ptr->location_first;
U32 location_opl_raw = local_ptr->location_opl;
U32 location_opl = ClampTop(location_opl_raw, bundle->location_block_count);
if (location_first < location_opl){
str8_list_pushf(arena, out, "%.*s locations:\n", indent_level, raddbgi_stringize_spaces);
RADDBGI_LocationBlock *block_ptr = bundle->location_blocks + location_first;
str8_list_pushf(arena, out, "%.*s locations:\n", indent_level, rdi_stringize_spaces);
RDI_LocationBlock *block_ptr = bundle->location_blocks + location_first;
for (U32 j = location_first; j < location_opl; j += 1, block_ptr += 1){
if (block_ptr->scope_off_first == 0 && block_ptr->scope_off_opl == max_U32){
str8_list_pushf(arena, out, "%.*s case *always*:\n", indent_level, raddbgi_stringize_spaces);
str8_list_pushf(arena, out, "%.*s case *always*:\n", indent_level, rdi_stringize_spaces);
}
else{
str8_list_pushf(arena, out, "%.*s case [0x%08x, 0x%08x):\n",
indent_level, raddbgi_stringize_spaces,
indent_level, rdi_stringize_spaces,
block_ptr->scope_off_first, block_ptr->scope_off_opl);
}
if (block_ptr->location_data_off >= bundle->location_data_size){
str8_list_pushf(arena, out, "%.*s <bad-location-data-offset>\n",
indent_level, raddbgi_stringize_spaces);
indent_level, rdi_stringize_spaces);
}
else{
str8_list_pushf(arena, out, "%.*s ", indent_level, raddbgi_stringize_spaces);
str8_list_pushf(arena, out, "%.*s ", indent_level, rdi_stringize_spaces);
U8 *loc_data_opl = bundle->location_data + bundle->location_data_size;
U8 *loc_base_ptr = bundle->location_data + block_ptr->location_data_off;
RADDBGI_LocationKind kind = (RADDBGI_LocationKind)*loc_base_ptr;
RDI_LocationKind kind = (RDI_LocationKind)*loc_base_ptr;
switch (kind){
default:
{
str8_list_pushf(arena, out, "<invalid-location-kind>\n");
}break;
case RADDBGI_LocationKind_AddrBytecodeStream:
case RDI_LocationKind_AddrBytecodeStream:
{
str8_list_pushf(arena, out, "AddrBytecodeStream\n");
str8_list_pushf(arena, out, "%.*s ", indent_level, raddbgi_stringize_spaces);
str8_list_pushf(arena, out, "%.*s ", indent_level, rdi_stringize_spaces);
U8 *bytecode_ptr = loc_base_ptr + 1;
for (;bytecode_ptr < loc_data_opl && *bytecode_ptr != 0; bytecode_ptr += 1){
str8_list_pushf(arena, out, "%02x ", *bytecode_ptr);
@@ -698,10 +698,10 @@ raddbgi_stringize_scope(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
str8_list_pushf(arena, out, "\n");
}break;
case RADDBGI_LocationKind_ValBytecodeStream:
case RDI_LocationKind_ValBytecodeStream:
{
str8_list_pushf(arena, out, "ValBytecodeStream\n");
str8_list_pushf(arena, out, "%.*s ", indent_level, raddbgi_stringize_spaces);
str8_list_pushf(arena, out, "%.*s ", indent_level, rdi_stringize_spaces);
U8 *bytecode_ptr = loc_base_ptr + 1;
for (;bytecode_ptr < loc_data_opl && *bytecode_ptr != 0; bytecode_ptr += 1){
str8_list_pushf(arena, out, "%02x ", *bytecode_ptr);
@@ -709,37 +709,37 @@ raddbgi_stringize_scope(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
str8_list_pushf(arena, out, "\n");
}break;
case RADDBGI_LocationKind_AddrRegisterPlusU16:
case RDI_LocationKind_AddrRegisterPlusU16:
{
if (loc_base_ptr + sizeof(RADDBGI_LocationRegisterPlusU16) > loc_data_opl){
if (loc_base_ptr + sizeof(RDI_LocationRegisterPlusU16) > loc_data_opl){
str8_list_pushf(arena, out, "AddrRegisterPlusU16( <invalid-encoding> )\n");
}
else{
RADDBGI_LocationRegisterPlusU16 *loc = (RADDBGI_LocationRegisterPlusU16*)loc_base_ptr;
RDI_LocationRegisterPlusU16 *loc = (RDI_LocationRegisterPlusU16*)loc_base_ptr;
str8_list_pushf(arena, out, "AddrRegisterPlusU16(reg: %u, off: %u)\n",
loc->register_code, loc->offset);
}
}break;
case RADDBGI_LocationKind_AddrAddrRegisterPlusU16:
case RDI_LocationKind_AddrAddrRegisterPlusU16:
{
if (loc_base_ptr + sizeof(RADDBGI_LocationRegisterPlusU16) > loc_data_opl){
if (loc_base_ptr + sizeof(RDI_LocationRegisterPlusU16) > loc_data_opl){
str8_list_pushf(arena, out, "AddrAddrRegisterPlusU16( <invalid-encoding> )\n");
}
else{
RADDBGI_LocationRegisterPlusU16 *loc = (RADDBGI_LocationRegisterPlusU16*)loc_base_ptr;
RDI_LocationRegisterPlusU16 *loc = (RDI_LocationRegisterPlusU16*)loc_base_ptr;
str8_list_pushf(arena, out, "AddrAddrRegisterPlusU16(reg: %u, off: %u)\n",
loc->register_code, loc->offset);
}
}break;
case RADDBGI_LocationKind_ValRegister:
case RDI_LocationKind_ValRegister:
{
if (loc_base_ptr + sizeof(RADDBGI_LocationRegister) > loc_data_opl){
if (loc_base_ptr + sizeof(RDI_LocationRegister) > loc_data_opl){
str8_list_pushf(arena, out, "ValRegister( <invalid-encoding> )\n");
}
else{
RADDBGI_LocationRegister *loc = (RADDBGI_LocationRegister*)loc_base_ptr;
RDI_LocationRegister *loc = (RDI_LocationRegister*)loc_base_ptr;
str8_list_pushf(arena, out, "ValRegister(reg: %u)\n", loc->register_code);
}
}break;
@@ -756,7 +756,7 @@ raddbgi_stringize_scope(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
for (U32 child = scope->first_child_scope_idx;
child != 0;){
// get scope for child
RADDBGI_Scope *child_scope = 0;
RDI_Scope *child_scope = 0;
if (child < bundle->scope_count){
child_scope = bundle->scopes + child;
}
@@ -765,12 +765,12 @@ raddbgi_stringize_scope(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
}
// stringize child
raddbgi_stringize_scope(arena, out, parsed, bundle, child_scope, indent_level + 1);
rdi_stringize_scope(arena, out, parsed, bundle, child_scope, indent_level + 1);
// increment iterator
child = child_scope->next_sibling_scope_idx;
}
str8_list_pushf(arena, out, "%.*s[/%u]\n",
indent_level, raddbgi_stringize_spaces, this_idx);
indent_level, rdi_stringize_spaces, this_idx);
}
+59 -59
View File
@@ -7,108 +7,108 @@
////////////////////////////////
//~ RADDBG Stringize Helper Types
typedef struct RADDBGI_FilePathBundle{
RADDBGI_FilePathNode *file_paths;
typedef struct RDI_FilePathBundle{
RDI_FilePathNode *file_paths;
U32 file_path_count;
} RADDBGI_FilePathBundle;
} RDI_FilePathBundle;
typedef struct RADDBGI_UDTMemberBundle{
RADDBGI_Member *members;
RADDBGI_EnumMember *enum_members;
typedef struct RDI_UDTMemberBundle{
RDI_Member *members;
RDI_EnumMember *enum_members;
U32 member_count;
U32 enum_member_count;
} RADDBGI_UDTMemberBundle;
} RDI_UDTMemberBundle;
typedef struct RADDBGI_ScopeBundle{
RADDBGI_Scope *scopes;
typedef struct RDI_ScopeBundle{
RDI_Scope *scopes;
U64 *scope_voffs;
RADDBGI_Local *locals;
RADDBGI_LocationBlock *location_blocks;
RDI_Local *locals;
RDI_LocationBlock *location_blocks;
U8 *location_data;
U32 scope_count;
U32 scope_voff_count;
U32 local_count;
U32 location_block_count;
U32 location_data_size;
} RADDBGI_ScopeBundle;
} RDI_ScopeBundle;
////////////////////////////////
//~ RADDBG Common Stringize Functions
static String8 raddbgi_string_from_data_section_tag(RADDBGI_DataSectionTag tag);
static String8 raddbgi_string_from_arch(RADDBGI_Arch arch);
static String8 raddbgi_string_from_language(RADDBGI_Language language);
static String8 raddbgi_string_from_type_kind(RADDBGI_TypeKind type_kind);
static String8 raddbgi_string_from_member_kind(RADDBGI_MemberKind member_kind);
static String8 raddbgi_string_from_local_kind(RADDBGI_LocalKind local_kind);
static String8 rdi_string_from_data_section_tag(RDI_DataSectionTag tag);
static String8 rdi_string_from_arch(RDI_Arch arch);
static String8 rdi_string_from_language(RDI_Language language);
static String8 rdi_string_from_type_kind(RDI_TypeKind type_kind);
static String8 rdi_string_from_member_kind(RDI_MemberKind member_kind);
static String8 rdi_string_from_local_kind(RDI_LocalKind local_kind);
////////////////////////////////
//~ RADDBG Flags Stringize Functions
static void raddbgi_stringize_binary_section_flags(Arena *arena, String8List *out,
RADDBGI_BinarySectionFlags flags);
static void rdi_stringize_binary_section_flags(Arena *arena, String8List *out,
RDI_BinarySectionFlags flags);
static void raddbgi_stringize_type_modifier_flags(Arena *arena, String8List *out,
RADDBGI_TypeModifierFlags flags);
static void rdi_stringize_type_modifier_flags(Arena *arena, String8List *out,
RDI_TypeModifierFlags flags);
static void raddbgi_stringize_user_defined_type_flags(Arena *arena, String8List *out,
RADDBGI_UserDefinedTypeFlags flags);
static void rdi_stringize_user_defined_type_flags(Arena *arena, String8List *out,
RDI_UserDefinedTypeFlags flags);
static void raddbgi_stringize_link_flags(Arena *arena, String8List *out,
RADDBGI_LinkFlags flags);
static void rdi_stringize_link_flags(Arena *arena, String8List *out,
RDI_LinkFlags flags);
////////////////////////////////
//~ RADDBG Compound Stringize Functions
static void
raddbgi_stringize_data_sections(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
U32 indent_level);
static void
raddbgi_stringize_top_level_info(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_TopLevelInfo *tli, U32 indent_level);
static void
raddbgi_stringize_binary_section(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_BinarySection *bin_section, U32 indent_level);
static void
raddbgi_stringize_file_path(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_FilePathBundle *bundle, RADDBGI_FilePathNode *file_path,
rdi_stringize_data_sections(Arena *arena, String8List *out, RDI_Parsed *parsed,
U32 indent_level);
static void
raddbgi_stringize_source_file(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_SourceFile *source_file, U32 indent_level);
rdi_stringize_top_level_info(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_TopLevelInfo *tli, U32 indent_level);
static void
raddbgi_stringize_unit(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_Unit *unit, U32 indent_level);
rdi_stringize_binary_section(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_BinarySection *bin_section, U32 indent_level);
static void
raddbgi_stringize_type_node(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_TypeNode *type, U32 indent_level);
rdi_stringize_file_path(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_FilePathBundle *bundle, RDI_FilePathNode *file_path,
U32 indent_level);
static void
raddbgi_stringize_udt(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_UDTMemberBundle *bundle, RADDBGI_UDT *udt,
U32 indent_level);
rdi_stringize_source_file(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_SourceFile *source_file, U32 indent_level);
static void
raddbgi_stringize_global_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_GlobalVariable *global_variable, U32 indent_level);
rdi_stringize_unit(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_Unit *unit, U32 indent_level);
static void
raddbgi_stringize_thread_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_ThreadVariable *thread_var,
U32 indent_level);
rdi_stringize_type_node(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_TypeNode *type, U32 indent_level);
static void
raddbgi_stringize_procedure(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_Procedure *proc, U32 indent_level);
rdi_stringize_udt(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_UDTMemberBundle *bundle, RDI_UDT *udt,
U32 indent_level);
static void
raddbgi_stringize_scope(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_ScopeBundle *bundle, RADDBGI_Scope *scope, U32 indent_level);
rdi_stringize_global_variable(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_GlobalVariable *global_variable, U32 indent_level);
#endif //RADDBGI_STRINGIZE_H
static void
rdi_stringize_thread_variable(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_ThreadVariable *thread_var,
U32 indent_level);
static void
rdi_stringize_procedure(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_Procedure *proc, U32 indent_level);
static void
rdi_stringize_scope(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_ScopeBundle *bundle, RDI_Scope *scope, U32 indent_level);
#endif // RADDBGI_STRINGIZE_H
+120 -120
View File
@@ -151,21 +151,21 @@ p2r_params_from_cmd_line(Arena *arena, CmdLine *cmdline)
////////////////////////////////
//~ rjf: COFF <-> RADDBGI Canonical Conversions
internal RADDBGI_BinarySectionFlags
raddbgi_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags)
internal RDI_BinarySectionFlags
rdi_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags)
{
RADDBGI_BinarySectionFlags result = 0;
RDI_BinarySectionFlags result = 0;
if(flags & COFF_SectionFlag_MEM_READ)
{
result |= RADDBGI_BinarySectionFlag_Read;
result |= RDI_BinarySectionFlag_Read;
}
if(flags & COFF_SectionFlag_MEM_WRITE)
{
result |= RADDBGI_BinarySectionFlag_Write;
result |= RDI_BinarySectionFlag_Write;
}
if(flags & COFF_SectionFlag_MEM_EXECUTE)
{
result |= RADDBGI_BinarySectionFlag_Execute;
result |= RDI_BinarySectionFlag_Execute;
}
return(result);
}
@@ -173,14 +173,14 @@ raddbgi_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags)
////////////////////////////////
//~ rjf: CodeView <-> RADDBGI Canonical Conversions
internal RADDBGI_Arch
raddbgi_arch_from_cv_arch(CV_Arch cv_arch)
internal RDI_Arch
rdi_arch_from_cv_arch(CV_Arch cv_arch)
{
RADDBGI_Arch result = 0;
RDI_Arch result = 0;
switch(cv_arch)
{
case CV_Arch_8086: result = RADDBGI_Arch_X86; break;
case CV_Arch_X64: result = RADDBGI_Arch_X64; break;
case CV_Arch_8086: result = RDI_Arch_X86; break;
case CV_Arch_X64: result = RDI_Arch_X64; break;
//case CV_Arch_8080: break;
//case CV_Arch_80286: break;
//case CV_Arch_80386: break;
@@ -243,26 +243,26 @@ raddbgi_arch_from_cv_arch(CV_Arch cv_arch)
return(result);
}
internal RADDBGI_RegisterCode
raddbgi_reg_code_from_cv_reg_code(RADDBGI_Arch arch, CV_Reg reg_code)
internal RDI_RegisterCode
rdi_reg_code_from_cv_reg_code(RDI_Arch arch, CV_Reg reg_code)
{
RADDBGI_RegisterCode result = 0;
RDI_RegisterCode result = 0;
switch(arch)
{
case RADDBGI_Arch_X86:
case RDI_Arch_X86:
{
switch(reg_code)
{
#define X(CVN,C,RDN,BP,BZ) case C: result = RADDBGI_RegisterCode_X86_##RDN; break;
#define X(CVN,C,RDN,BP,BZ) case C: result = RDI_RegisterCode_X86_##RDN; break;
CV_Reg_X86_XList(X)
#undef X
}
}break;
case RADDBGI_Arch_X64:
case RDI_Arch_X64:
{
switch(reg_code)
{
#define X(CVN,C,RDN,BP,BZ) case C: result = RADDBGI_RegisterCode_X64_##RDN; break;
#define X(CVN,C,RDN,BP,BZ) case C: result = RDI_RegisterCode_X64_##RDN; break;
CV_Reg_X64_XList(X)
#undef X
}
@@ -271,14 +271,14 @@ raddbgi_reg_code_from_cv_reg_code(RADDBGI_Arch arch, CV_Reg reg_code)
return(result);
}
internal RADDBGI_Language
raddbgi_language_from_cv_language(CV_Language cv_language)
internal RDI_Language
rdi_language_from_cv_language(CV_Language cv_language)
{
RADDBGI_Language result = 0;
RDI_Language result = 0;
switch(cv_language)
{
case CV_Language_C: result = RADDBGI_Language_C; break;
case CV_Language_CXX: result = RADDBGI_Language_CPlusPlus; break;
case CV_Language_C: result = RDI_Language_C; break;
case CV_Language_CXX: result = RDI_Language_CPlusPlus; break;
//case CV_Language_FORTRAN: result = ; break;
//case CV_Language_MASM: result = ; break;
//case CV_Language_PASCAL: result = ; break;
@@ -310,7 +310,7 @@ p2r_ctx_alloc(P2R_CtxParams *params, RDIM_Root *out_root)
P2R_Ctx *pdb_ctx = push_array(arena, P2R_Ctx, 1);
pdb_ctx->arena = arena;
pdb_ctx->arch = params->arch;
pdb_ctx->addr_size = raddbgi_addr_size_from_arch(pdb_ctx->arch);
pdb_ctx->addr_size = rdi_addr_size_from_arch(pdb_ctx->arch);
pdb_ctx->hash = params->tpi_hash;
pdb_ctx->leaf = params->tpi_leaf;
pdb_ctx->sections = params->sections->sections;
@@ -1217,165 +1217,165 @@ p2r_type_cons_basic(P2R_Ctx *ctx, CV_TypeId itype)
{
case CV_BasicType_VOID:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_Void, str8_lit("void"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_Void, str8_lit("void"));
}break;
case CV_BasicType_HRESULT:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_Handle, str8_lit("HRESULT"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_Handle, str8_lit("HRESULT"));
}break;
case CV_BasicType_RCHAR:
case CV_BasicType_CHAR:
case CV_BasicType_CHAR8:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_Char8, str8_lit("char"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_Char8, str8_lit("char"));
}break;
case CV_BasicType_UCHAR:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_UChar8, str8_lit("UCHAR"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_UChar8, str8_lit("UCHAR"));
}break;
case CV_BasicType_WCHAR:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_UChar16, str8_lit("WCHAR"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_UChar16, str8_lit("WCHAR"));
}break;
case CV_BasicType_CHAR16:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_Char16, str8_lit("CHAR16"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_Char16, str8_lit("CHAR16"));
}break;
case CV_BasicType_CHAR32:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_Char32, str8_lit("CHAR32"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_Char32, str8_lit("CHAR32"));
}break;
case CV_BasicType_BOOL8:
case CV_BasicType_INT8:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_S8, str8_lit("S8"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_S8, str8_lit("S8"));
}break;
case CV_BasicType_BOOL16:
case CV_BasicType_INT16:
case CV_BasicType_SHORT:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_S16, str8_lit("S16"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_S16, str8_lit("S16"));
}break;
case CV_BasicType_BOOL32:
case CV_BasicType_INT32:
case CV_BasicType_LONG:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_S32, str8_lit("S32"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_S32, str8_lit("S32"));
}break;
case CV_BasicType_BOOL64:
case CV_BasicType_INT64:
case CV_BasicType_QUAD:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_S64, str8_lit("S64"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_S64, str8_lit("S64"));
}break;
case CV_BasicType_INT128:
case CV_BasicType_OCT:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_S128, str8_lit("S128"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_S128, str8_lit("S128"));
}break;
case CV_BasicType_UINT8:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_U8, str8_lit("U8"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_U8, str8_lit("U8"));
}break;
case CV_BasicType_UINT16:
case CV_BasicType_USHORT:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_U16, str8_lit("U16"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_U16, str8_lit("U16"));
}break;
case CV_BasicType_UINT32:
case CV_BasicType_ULONG:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_U32, str8_lit("U32"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_U32, str8_lit("U32"));
}break;
case CV_BasicType_UINT64:
case CV_BasicType_UQUAD:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_U64, str8_lit("U64"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_U64, str8_lit("U64"));
}break;
case CV_BasicType_UINT128:
case CV_BasicType_UOCT:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_U128, str8_lit("U128"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_U128, str8_lit("U128"));
}break;
case CV_BasicType_FLOAT16:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_F16, str8_lit("F16"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_F16, str8_lit("F16"));
}break;
case CV_BasicType_FLOAT32:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_F32, str8_lit("F32"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_F32, str8_lit("F32"));
}break;
case CV_BasicType_FLOAT32PP:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_F32PP, str8_lit("F32PP"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_F32PP, str8_lit("F32PP"));
}break;
case CV_BasicType_FLOAT48:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_F48, str8_lit("F48"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_F48, str8_lit("F48"));
}break;
case CV_BasicType_FLOAT64:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_F64, str8_lit("F64"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_F64, str8_lit("F64"));
}break;
case CV_BasicType_FLOAT80:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_F80, str8_lit("F80"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_F80, str8_lit("F80"));
}break;
case CV_BasicType_FLOAT128:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_F128, str8_lit("F128"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_F128, str8_lit("F128"));
}break;
case CV_BasicType_COMPLEX32:
{
basic_type =
rdim_type_basic(ctx->root, RADDBGI_TypeKind_ComplexF32, str8_lit("ComplexF32"));
rdim_type_basic(ctx->root, RDI_TypeKind_ComplexF32, str8_lit("ComplexF32"));
}break;
case CV_BasicType_COMPLEX64:
{
basic_type =
rdim_type_basic(ctx->root, RADDBGI_TypeKind_ComplexF64, str8_lit("ComplexF64"));
rdim_type_basic(ctx->root, RDI_TypeKind_ComplexF64, str8_lit("ComplexF64"));
}break;
case CV_BasicType_COMPLEX80:
{
basic_type =
rdim_type_basic(ctx->root, RADDBGI_TypeKind_ComplexF80, str8_lit("ComplexF80"));
rdim_type_basic(ctx->root, RDI_TypeKind_ComplexF80, str8_lit("ComplexF80"));
}break;
case CV_BasicType_COMPLEX128:
{
basic_type =
rdim_type_basic(ctx->root, RADDBGI_TypeKind_ComplexF128, str8_lit("ComplexF128"));
rdim_type_basic(ctx->root, RDI_TypeKind_ComplexF128, str8_lit("ComplexF128"));
}break;
case CV_BasicType_PTR:
{
basic_type = rdim_type_basic(ctx->root, RADDBGI_TypeKind_Handle, str8_lit("PTR"));
basic_type = rdim_type_basic(ctx->root, RDI_TypeKind_Handle, str8_lit("PTR"));
}break;
}
@@ -1397,7 +1397,7 @@ p2r_type_cons_basic(P2R_Ctx *ctx, CV_TypeId itype)
case CV_BasicPointerKind_16_32BIT:
case CV_BasicPointerKind_64BIT:
{
constructed_type = rdim_type_pointer(ctx->root, basic_type, RADDBGI_TypeKind_Ptr);
constructed_type = rdim_type_pointer(ctx->root, basic_type, RDI_TypeKind_Ptr);
}break;
}
@@ -1440,14 +1440,14 @@ p2r_type_cons_leaf_record(P2R_Ctx *ctx, CV_TypeId itype)
{
CV_LeafModifier *modifier = (CV_LeafModifier*)first;
RADDBGI_TypeModifierFlags flags = 0;
RDI_TypeModifierFlags flags = 0;
if(modifier->flags & CV_ModifierFlag_Const)
{
flags |= RADDBGI_TypeModifierFlag_Const;
flags |= RDI_TypeModifierFlag_Const;
}
if(modifier->flags & CV_ModifierFlag_Volatile)
{
flags |= RADDBGI_TypeModifierFlag_Volatile;
flags |= RDI_TypeModifierFlag_Volatile;
}
RDIM_Type *direct_type = p2r_type_resolve_and_check(ctx, modifier->itype);
@@ -1476,33 +1476,33 @@ p2r_type_cons_leaf_record(P2R_Ctx *ctx, CV_TypeId itype)
// TODO(allen): if ptr_mode in {PtrMem, PtrMethod} then output a member pointer instead
// extract modifier flags
RADDBGI_TypeModifierFlags modifier_flags = 0;
RDI_TypeModifierFlags modifier_flags = 0;
if(pointer->attribs & CV_PointerAttrib_Const)
{
modifier_flags |= RADDBGI_TypeModifierFlag_Const;
modifier_flags |= RDI_TypeModifierFlag_Const;
}
if(pointer->attribs & CV_PointerAttrib_Volatile)
{
modifier_flags |= RADDBGI_TypeModifierFlag_Volatile;
modifier_flags |= RDI_TypeModifierFlag_Volatile;
}
// determine type kind
RADDBGI_TypeKind type_kind = RADDBGI_TypeKind_Ptr;
RDI_TypeKind type_kind = RDI_TypeKind_Ptr;
if(pointer->attribs & CV_PointerAttrib_LRef)
{
type_kind = RADDBGI_TypeKind_LRef;
type_kind = RDI_TypeKind_LRef;
}
else if(pointer->attribs & CV_PointerAttrib_RRef)
{
type_kind = RADDBGI_TypeKind_RRef;
type_kind = RDI_TypeKind_RRef;
}
if(ptr_mode == CV_PointerMode_LRef)
{
type_kind = RADDBGI_TypeKind_LRef;
type_kind = RDI_TypeKind_LRef;
}
else if(ptr_mode == CV_PointerMode_RRef)
{
type_kind = RADDBGI_TypeKind_RRef;
type_kind = RDI_TypeKind_RRef;
}
RDIM_Type *direct_type = p2r_type_resolve_and_check(ctx, pointer->itype);
@@ -1628,10 +1628,10 @@ p2r_type_cons_leaf_record(P2R_Ctx *ctx, CV_TypeId itype)
// incomplete type
if(lf_struct->props & CV_TypeProp_FwdRef)
{
RADDBGI_TypeKind type_kind = RADDBGI_TypeKind_IncompleteStruct;
RDI_TypeKind type_kind = RDI_TypeKind_IncompleteStruct;
if(range->hdr.kind == CV_LeafKind_CLASS)
{
type_kind = RADDBGI_TypeKind_IncompleteClass;
type_kind = RDI_TypeKind_IncompleteClass;
}
result = rdim_type_incomplete(ctx->root, type_kind, name);
}
@@ -1639,10 +1639,10 @@ p2r_type_cons_leaf_record(P2R_Ctx *ctx, CV_TypeId itype)
// complete type
else
{
RADDBGI_TypeKind type_kind = RADDBGI_TypeKind_Struct;
RDI_TypeKind type_kind = RDI_TypeKind_Struct;
if(range->hdr.kind == CV_LeafKind_CLASS)
{
type_kind = RADDBGI_TypeKind_Class;
type_kind = RDI_TypeKind_Class;
}
result = rdim_type_udt(ctx->root, type_kind, name, size_u64);
@@ -1679,10 +1679,10 @@ p2r_type_cons_leaf_record(P2R_Ctx *ctx, CV_TypeId itype)
// incomplete type
if(lf_struct->props & CV_TypeProp_FwdRef)
{
RADDBGI_TypeKind type_kind = RADDBGI_TypeKind_IncompleteStruct;
RDI_TypeKind type_kind = RDI_TypeKind_IncompleteStruct;
if(range->hdr.kind == CV_LeafKind_CLASS2)
{
type_kind = RADDBGI_TypeKind_IncompleteClass;
type_kind = RDI_TypeKind_IncompleteClass;
}
result = rdim_type_incomplete(ctx->root, type_kind, name);
}
@@ -1690,10 +1690,10 @@ p2r_type_cons_leaf_record(P2R_Ctx *ctx, CV_TypeId itype)
// complete type
else
{
RADDBGI_TypeKind type_kind = RADDBGI_TypeKind_Struct;
RDI_TypeKind type_kind = RDI_TypeKind_Struct;
if(range->hdr.kind == CV_LeafKind_CLASS2)
{
type_kind = RADDBGI_TypeKind_Class;
type_kind = RDI_TypeKind_Class;
}
result = rdim_type_udt(ctx->root, type_kind, name, size_u64);
@@ -1730,13 +1730,13 @@ p2r_type_cons_leaf_record(P2R_Ctx *ctx, CV_TypeId itype)
if(lf_union->props & CV_TypeProp_FwdRef)
{
result =
rdim_type_incomplete(ctx->root, RADDBGI_TypeKind_IncompleteUnion, name);
rdim_type_incomplete(ctx->root, RDI_TypeKind_IncompleteUnion, name);
}
// complete type
else
{
result = rdim_type_udt(ctx->root, RADDBGI_TypeKind_Union, name, size_u64);
result = rdim_type_udt(ctx->root, RDI_TypeKind_Union, name, size_u64);
// remember to revisit this for members
{
@@ -1765,7 +1765,7 @@ p2r_type_cons_leaf_record(P2R_Ctx *ctx, CV_TypeId itype)
// incomplete type
if(lf_enum->props & CV_TypeProp_FwdRef)
{
result = rdim_type_incomplete(ctx->root, RADDBGI_TypeKind_IncompleteEnum, name);
result = rdim_type_incomplete(ctx->root, RDI_TypeKind_IncompleteEnum, name);
}
// complete type
@@ -2092,7 +2092,7 @@ p2r_symbol_cons(P2R_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id)
Temp scratch = scratch_begin(0, 0);
String8 data = sym->data;
U64 user_id_base = (((U64)sym_unique_id) << 32);
U64 sym_unique_id_hash = raddbgi_hash((U8*)&sym_unique_id, sizeof(sym_unique_id));
U64 sym_unique_id_hash = rdi_hash((U8*)&sym_unique_id, sizeof(sym_unique_id));
//////////////////////////////
//- rjf: PASS 1: map out data associations
@@ -2388,17 +2388,17 @@ p2r_symbol_cons(P2R_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id)
U32 var_off = regrel32->reg_off;
// need arch for analyzing register stuff
RADDBGI_Arch arch = ctx->arch;
RDI_Arch arch = ctx->arch;
U64 addr_size = ctx->addr_size;
// determine if this is a parameter
RADDBGI_LocalKind local_kind = RADDBGI_LocalKind_Variable;
RDI_LocalKind local_kind = RDI_LocalKind_Variable;
{
B32 is_stack_reg = 0;
switch (arch)
{
case RADDBGI_Arch_X86: is_stack_reg = (cv_reg == CV_Regx86_ESP); break;
case RADDBGI_Arch_X64: is_stack_reg = (cv_reg == CV_Regx64_RSP); break;
case RDI_Arch_X86: is_stack_reg = (cv_reg == CV_Regx86_ESP); break;
case RDI_Arch_X64: is_stack_reg = (cv_reg == CV_Regx64_RSP); break;
}
if(is_stack_reg)
{
@@ -2411,7 +2411,7 @@ p2r_symbol_cons(P2R_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id)
}
if(var_off > frame_size)
{
local_kind = RADDBGI_LocalKind_Parameter;
local_kind = RDI_LocalKind_Parameter;
}
}
}
@@ -2435,18 +2435,18 @@ p2r_symbol_cons(P2R_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id)
B32 extra_indirection_to_value = 0;
switch (arch)
{
case RADDBGI_Arch_X86:
case RDI_Arch_X86:
{
if(local_kind == RADDBGI_LocalKind_Parameter &&
if(local_kind == RDI_LocalKind_Parameter &&
(type->byte_size > 4 || !IsPow2OrZero(type->byte_size)))
{
extra_indirection_to_value = 1;
}
}break;
case RADDBGI_Arch_X64:
case RDI_Arch_X64:
{
if(local_kind == RADDBGI_LocalKind_Parameter &&
if(local_kind == RDI_LocalKind_Parameter &&
(type->byte_size > 8 || !IsPow2OrZero(type->byte_size)))
{
extra_indirection_to_value = 1;
@@ -2455,7 +2455,7 @@ p2r_symbol_cons(P2R_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id)
}
// get raddbg register code
RADDBGI_RegisterCode register_code = raddbgi_reg_code_from_cv_reg_code(arch, cv_reg);
RDI_RegisterCode register_code = rdi_reg_code_from_cv_reg_code(arch, cv_reg);
// TODO(allen): real byte_size & byte_pos from cv_reg goes here
U32 byte_size = 8;
U32 byte_pos = 0;
@@ -2542,10 +2542,10 @@ p2r_symbol_cons(P2R_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id)
else
{
// local kind
RADDBGI_LocalKind local_kind = RADDBGI_LocalKind_Variable;
RDI_LocalKind local_kind = RDI_LocalKind_Variable;
if(slocal->flags & CV_LocalFlag_Param)
{
local_kind = RADDBGI_LocalKind_Parameter;
local_kind = RDI_LocalKind_Parameter;
}
// emit local
@@ -2565,7 +2565,7 @@ p2r_symbol_cons(P2R_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id)
rdim_local_set_basic_info(ctx->root, local_var, &info);
defrange_target = rdim_location_set_from_local(ctx->root, local_var);
defrange_target_is_param = (local_kind == RADDBGI_LocalKind_Parameter);
defrange_target_is_param = (local_kind == RDI_LocalKind_Parameter);
}
}break;
@@ -2576,9 +2576,9 @@ p2r_symbol_cons(P2R_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id)
CV_SymDefrangeRegister *defrange_register = (CV_SymDefrangeRegister*)sym_header_struct_base;
// TODO(allen): offset & size from cv_reg code
RADDBGI_Arch arch = ctx->arch;
RDI_Arch arch = ctx->arch;
CV_Reg cv_reg = defrange_register->reg;
RADDBGI_RegisterCode register_code = raddbgi_reg_code_from_cv_reg_code(arch, cv_reg);
RDI_RegisterCode register_code = rdi_reg_code_from_cv_reg_code(arch, cv_reg);
// setup location
RDIM_Location *location = rdim_location_val_reg(ctx->root, register_code);
@@ -2602,7 +2602,7 @@ p2r_symbol_cons(P2R_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id)
// select frame pointer register
CV_EncodedFramePtrReg encoded_fp_reg =
p2r_cv_encoded_fp_reg_from_proc(ctx, current_procedure, defrange_target_is_param);
RADDBGI_RegisterCode fp_register_code =
RDI_RegisterCode fp_register_code =
p2r_reg_code_from_arch_encoded_fp_reg(ctx->arch, encoded_fp_reg);
// setup location
@@ -2635,9 +2635,9 @@ p2r_symbol_cons(P2R_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id)
{
// TODO(allen): offset & size from cv_reg code
RADDBGI_Arch arch = ctx->arch;
RDI_Arch arch = ctx->arch;
CV_Reg cv_reg = defrange_subfield_register->reg;
RADDBGI_RegisterCode register_code = raddbgi_reg_code_from_cv_reg_code(arch, cv_reg);
RDI_RegisterCode register_code = rdi_reg_code_from_cv_reg_code(arch, cv_reg);
// setup location
RDIM_Location *location = rdim_location_val_reg(ctx->root, register_code);
@@ -2663,7 +2663,7 @@ p2r_symbol_cons(P2R_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id)
// select frame pointer register
CV_EncodedFramePtrReg encoded_fp_reg =
p2r_cv_encoded_fp_reg_from_proc(ctx, current_procedure, defrange_target_is_param);
RADDBGI_RegisterCode fp_register_code =
RDI_RegisterCode fp_register_code =
p2r_reg_code_from_arch_encoded_fp_reg(ctx->arch, encoded_fp_reg);
// setup location
@@ -2687,9 +2687,9 @@ p2r_symbol_cons(P2R_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id)
CV_SymDefrangeRegisterRel *defrange_register_rel = (CV_SymDefrangeRegisterRel*)sym_header_struct_base;
// TODO(allen): offset & size from cv_reg code
RADDBGI_Arch arch = ctx->arch;
RDI_Arch arch = ctx->arch;
CV_Reg cv_reg = defrange_register_rel->reg;
RADDBGI_RegisterCode register_code = raddbgi_reg_code_from_cv_reg_code(arch, cv_reg);
RDI_RegisterCode register_code = rdi_reg_code_from_cv_reg_code(arch, cv_reg);
U32 byte_size = ctx->addr_size;
U32 byte_pos = 0;
@@ -3009,7 +3009,7 @@ p2r_known_global_insert(Arena *arena, P2R_KnownGlobalSet *set, String8 name, U64
internal RDIM_Location*
p2r_location_from_addr_reg_off(P2R_Ctx *ctx,
RADDBGI_RegisterCode reg_code,
RDI_RegisterCode reg_code,
U32 reg_byte_size,
U32 reg_byte_pos,
S64 offset,
@@ -3032,13 +3032,13 @@ p2r_location_from_addr_reg_off(P2R_Ctx *ctx,
Arena *arena = ctx->arena;
RDIM_EvalBytecode bytecode = {0};
U32 regread_param = RADDBGI_EncodeRegReadParam(reg_code, reg_byte_size, reg_byte_pos);
rdim_bytecode_push_op(arena, &bytecode, RADDBGI_EvalOp_RegRead, regread_param);
U32 regread_param = RDI_EncodeRegReadParam(reg_code, reg_byte_size, reg_byte_pos);
rdim_bytecode_push_op(arena, &bytecode, RDI_EvalOp_RegRead, regread_param);
rdim_bytecode_push_sconst(arena, &bytecode, offset);
rdim_bytecode_push_op(arena, &bytecode, RADDBGI_EvalOp_Add, 0);
rdim_bytecode_push_op(arena, &bytecode, RDI_EvalOp_Add, 0);
if(extra_indirection)
{
rdim_bytecode_push_op(arena, &bytecode, RADDBGI_EvalOp_MemRead, ctx->addr_size);
rdim_bytecode_push_op(arena, &bytecode, RDI_EvalOp_MemRead, ctx->addr_size);
}
result = rdim_location_addr_bytecode_stream(ctx->root, &bytecode);
@@ -3067,14 +3067,14 @@ p2r_cv_encoded_fp_reg_from_proc(P2R_Ctx *ctx, RDIM_Symbol *proc, B32 param_base)
return(result);
}
internal RADDBGI_RegisterCode
p2r_reg_code_from_arch_encoded_fp_reg(RADDBGI_Arch arch, CV_EncodedFramePtrReg encoded_reg)
internal RDI_RegisterCode
p2r_reg_code_from_arch_encoded_fp_reg(RDI_Arch arch, CV_EncodedFramePtrReg encoded_reg)
{
RADDBGI_RegisterCode result = 0;
RDI_RegisterCode result = 0;
switch (arch)
{
case RADDBGI_Arch_X86:
case RDI_Arch_X86:
{
switch (encoded_reg)
{
@@ -3085,30 +3085,30 @@ p2r_reg_code_from_arch_encoded_fp_reg(RADDBGI_Arch arch, CV_EncodedFramePtrReg e
}break;
case CV_EncodedFramePtrReg_FramePtr:
{
result = RADDBGI_RegisterCode_X86_ebp;
result = RDI_RegisterCode_X86_ebp;
}break;
case CV_EncodedFramePtrReg_BasePtr:
{
result = RADDBGI_RegisterCode_X86_ebx;
result = RDI_RegisterCode_X86_ebx;
}break;
}
}break;
case RADDBGI_Arch_X64:
case RDI_Arch_X64:
{
switch (encoded_reg)
{
case CV_EncodedFramePtrReg_StackPtr:
{
result = RADDBGI_RegisterCode_X64_rsp;
result = RDI_RegisterCode_X64_rsp;
}break;
case CV_EncodedFramePtrReg_FramePtr:
{
result = RADDBGI_RegisterCode_X64_rbp;
result = RDI_RegisterCode_X64_rbp;
}break;
case CV_EncodedFramePtrReg_BasePtr:
{
result = RADDBGI_RegisterCode_X64_r13;
result = RDI_RegisterCode_X64_r13;
}break;
}
}break;
@@ -3435,7 +3435,7 @@ str8_list_pushf(arena, &out->errors, fmt, __VA_ARGS__);\
U64 exe_hash = 0;
if(out->good_parse && params->input_exe_data.size > 0) ProfScope("hash exe")
{
exe_hash = raddbgi_hash(params->input_exe_data.str, params->input_exe_data.size);
exe_hash = rdi_hash(params->input_exe_data.str, params->input_exe_data.size);
}
// output generation
@@ -3444,7 +3444,7 @@ str8_list_pushf(arena, &out->errors, fmt, __VA_ARGS__);\
{
// determine arch
RADDBGI_Arch architecture = RADDBGI_Arch_NULL;
RDI_Arch architecture = RDI_Arch_NULL;
// TODO(rjf): in some cases, the first compilation unit has a zero
// architecture, as it's sometimes used as a "nil" unit. this causes bugs
// in later stages of conversion - particularly, this was detected via
@@ -3462,14 +3462,14 @@ str8_list_pushf(arena, &out->errors, fmt, __VA_ARGS__);\
{
if(sym_for_unit[comp_unit_idx] != 0)
{
architecture = raddbgi_arch_from_cv_arch(sym_for_unit[comp_unit_idx]->info.arch);
architecture = rdi_arch_from_cv_arch(sym_for_unit[comp_unit_idx]->info.arch);
if(architecture != 0)
{
break;
}
}
}
U64 addr_size = raddbgi_addr_size_from_arch(architecture);
U64 addr_size = rdi_addr_size_from_arch(architecture);
// predict symbol counts
@@ -3541,8 +3541,8 @@ str8_list_pushf(arena, &out->errors, fmt, __VA_ARGS__);\
char *name_first = (char*)coff_ptr->name;
char *name_opl = name_first + sizeof(coff_ptr->name);
String8 name = str8_cstring_capped(name_first, name_opl);
RADDBGI_BinarySectionFlags flags =
raddbgi_binary_section_flags_from_coff_section_flags(coff_ptr->flags);
RDI_BinarySectionFlags flags =
rdi_binary_section_flags_from_coff_section_flags(coff_ptr->flags);
rdim_add_binary_section(root, name, flags,
coff_ptr->voff, coff_ptr->voff + coff_ptr->vsize,
coff_ptr->foff, coff_ptr->foff + coff_ptr->fsize);
@@ -3589,7 +3589,7 @@ str8_list_pushf(arena, &out->errors, fmt, __VA_ARGS__);\
String8 archive_file = unit->group_name;
// extract langauge
RADDBGI_Language lang = raddbgi_language_from_cv_language(sym->info.language);
RDI_Language lang = rdi_language_from_cv_language(sym->info.language);
// basic per unit info
RDIM_Unit *unit_handle = rdim_unit_handle_from_user_id(root, i, i);
+12 -12
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBGI_FROM_PDB_H
#define RADDBGI_FROM_PDB_H
#ifndef RDI_FROM_PDB_H
#define RDI_FROM_PDB_H
////////////////////////////////
//~ rjf: Conversion Parameters Type
@@ -130,7 +130,7 @@ struct P2R_KnownGlobalSet
typedef struct P2R_CtxParams P2R_CtxParams;
struct P2R_CtxParams
{
RADDBGI_Arch arch;
RDI_Arch arch;
PDB_TpiHashParsed *tpi_hash;
CV_LeafParsed *tpi_leaf;
PDB_CoffSectionArray *sections;
@@ -171,7 +171,7 @@ struct P2R_Ctx
Arena *arena;
// INPUT data
RADDBGI_Arch arch;
RDI_Arch arch;
U64 addr_size;
PDB_TpiHashParsed *hash;
CV_LeafParsed *leaf;
@@ -214,14 +214,14 @@ internal P2R_Params *p2r_params_from_cmd_line(Arena *arena, CmdLine *cmdline);
////////////////////////////////
//~ rjf: COFF => RADDBGI Canonical Conversions
internal RADDBGI_BinarySectionFlags raddbgi_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags);
internal RDI_BinarySectionFlags rdi_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags);
////////////////////////////////
//~ rjf: CodeView => RADDBGI Canonical Conversions
internal RADDBGI_Arch raddbgi_arch_from_cv_arch(CV_Arch arch);
internal RADDBGI_RegisterCode raddbgi_reg_code_from_cv_reg_code(RADDBGI_Arch arch, CV_Reg reg_code);
internal RADDBGI_Language raddbgi_language_from_cv_language(CV_Language language);
internal RDI_Arch rdi_arch_from_cv_arch(CV_Arch arch);
internal RDI_RegisterCode rdi_reg_code_from_cv_reg_code(RDI_Arch arch, CV_Reg reg_code);
internal RDI_Language rdi_language_from_cv_language(CV_Language language);
////////////////////////////////
//~ rjf: Conversion Implementation Helpers
@@ -303,7 +303,7 @@ internal void p2r_known_global_insert(Arena *arena, P2R_KnownGlobalSet *set,
// location info helpers
internal RDIM_Location* p2r_location_from_addr_reg_off(P2R_Ctx *ctx,
RADDBGI_RegisterCode reg_code,
RDI_RegisterCode reg_code,
U32 reg_byte_size,
U32 reg_byte_pos,
S64 offset,
@@ -313,8 +313,8 @@ internal CV_EncodedFramePtrReg p2r_cv_encoded_fp_reg_from_proc(P2R_Ctx *ctx,
RDIM_Symbol *proc,
B32 param_base);
internal RADDBGI_RegisterCode p2r_reg_code_from_arch_encoded_fp_reg(RADDBGI_Arch arch,
CV_EncodedFramePtrReg encoded_reg);
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,
@@ -332,4 +332,4 @@ internal String8 p2r_link_name_find(P2R_LinkNameMap *map, U64 voff);
internal P2R_Out *p2r_convert(Arena *arena, P2R_Params *params);
#endif // RADDBGI_FROM_PDB_H
#endif // RDI_FROM_PDB_H
+5 -5
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBGI_CONS_LOCAL_H
#define RADDBGI_CONS_LOCAL_H
#ifndef RDI_CONS_LOCAL_H
#define RDI_CONS_LOCAL_H
// rjf: base layer memory ops
#define RDIM_MEMSET_OVERRIDE
@@ -11,11 +11,11 @@
#define rdim_memcpy MemoryCopy
// rjf: base layer string overrides
#define RADDBGI_STRING8_OVERRIDE
#define RDI_STRING8_OVERRIDE
#define RDIM_String8 String8
#define RDIM_String8_BaseMember str
#define RDIM_String8_SizeMember size
#define RADDBGI_STRING8LIST_OVERRIDE
#define RDI_STRING8LIST_OVERRIDE
#define RDIM_String8Node String8Node
#define RDIM_String8Node_NextPtrMember next
#define RDIM_String8Node_StringMember string
@@ -43,4 +43,4 @@
#include "lib_raddbgi_make/raddbgi_make.h"
#endif // RADDBGI_CONS_LOCAL_H
#endif // RDI_CONS_LOCAL_H
+275 -275
View File
@@ -3,9 +3,9 @@
//- GENERATED CODE
internal RADDBGI_RegisterCode regs_raddbgi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code)
internal RDI_RegisterCode regs_rdi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code)
{
RADDBGI_RegisterCode result = 0;
RDI_RegisterCode result = 0;
switch(arch)
{
default:{}break;
@@ -14,82 +14,82 @@ case Architecture_x64:
switch(code)
{
default:{}break;
case REGS_RegCodeX64_rax:{result = RADDBGI_RegisterCode_X64_rax;}break;
case REGS_RegCodeX64_rcx:{result = RADDBGI_RegisterCode_X64_rcx;}break;
case REGS_RegCodeX64_rdx:{result = RADDBGI_RegisterCode_X64_rdx;}break;
case REGS_RegCodeX64_rbx:{result = RADDBGI_RegisterCode_X64_rbx;}break;
case REGS_RegCodeX64_rsp:{result = RADDBGI_RegisterCode_X64_rsp;}break;
case REGS_RegCodeX64_rbp:{result = RADDBGI_RegisterCode_X64_rbp;}break;
case REGS_RegCodeX64_rsi:{result = RADDBGI_RegisterCode_X64_rsi;}break;
case REGS_RegCodeX64_rdi:{result = RADDBGI_RegisterCode_X64_rdi;}break;
case REGS_RegCodeX64_r8:{result = RADDBGI_RegisterCode_X64_r8;}break;
case REGS_RegCodeX64_r9:{result = RADDBGI_RegisterCode_X64_r9;}break;
case REGS_RegCodeX64_r10:{result = RADDBGI_RegisterCode_X64_r10;}break;
case REGS_RegCodeX64_r11:{result = RADDBGI_RegisterCode_X64_r11;}break;
case REGS_RegCodeX64_r12:{result = RADDBGI_RegisterCode_X64_r12;}break;
case REGS_RegCodeX64_r13:{result = RADDBGI_RegisterCode_X64_r13;}break;
case REGS_RegCodeX64_r14:{result = RADDBGI_RegisterCode_X64_r14;}break;
case REGS_RegCodeX64_r15:{result = RADDBGI_RegisterCode_X64_r15;}break;
case REGS_RegCodeX64_fsbase:{result = RADDBGI_RegisterCode_X64_fsbase;}break;
case REGS_RegCodeX64_gsbase:{result = RADDBGI_RegisterCode_X64_gsbase;}break;
case REGS_RegCodeX64_rip:{result = RADDBGI_RegisterCode_X64_rip;}break;
case REGS_RegCodeX64_rflags:{result = RADDBGI_RegisterCode_X64_rflags;}break;
case REGS_RegCodeX64_dr0:{result = RADDBGI_RegisterCode_X64_dr0;}break;
case REGS_RegCodeX64_dr1:{result = RADDBGI_RegisterCode_X64_dr1;}break;
case REGS_RegCodeX64_dr2:{result = RADDBGI_RegisterCode_X64_dr2;}break;
case REGS_RegCodeX64_dr3:{result = RADDBGI_RegisterCode_X64_dr3;}break;
case REGS_RegCodeX64_dr4:{result = RADDBGI_RegisterCode_X64_dr4;}break;
case REGS_RegCodeX64_dr5:{result = RADDBGI_RegisterCode_X64_dr5;}break;
case REGS_RegCodeX64_dr6:{result = RADDBGI_RegisterCode_X64_dr6;}break;
case REGS_RegCodeX64_dr7:{result = RADDBGI_RegisterCode_X64_dr7;}break;
case REGS_RegCodeX64_fpr0:{result = RADDBGI_RegisterCode_X64_fpr0;}break;
case REGS_RegCodeX64_fpr1:{result = RADDBGI_RegisterCode_X64_fpr1;}break;
case REGS_RegCodeX64_fpr2:{result = RADDBGI_RegisterCode_X64_fpr2;}break;
case REGS_RegCodeX64_fpr3:{result = RADDBGI_RegisterCode_X64_fpr3;}break;
case REGS_RegCodeX64_fpr4:{result = RADDBGI_RegisterCode_X64_fpr4;}break;
case REGS_RegCodeX64_fpr5:{result = RADDBGI_RegisterCode_X64_fpr5;}break;
case REGS_RegCodeX64_fpr6:{result = RADDBGI_RegisterCode_X64_fpr6;}break;
case REGS_RegCodeX64_fpr7:{result = RADDBGI_RegisterCode_X64_fpr7;}break;
case REGS_RegCodeX64_st0:{result = RADDBGI_RegisterCode_X64_st0;}break;
case REGS_RegCodeX64_st1:{result = RADDBGI_RegisterCode_X64_st1;}break;
case REGS_RegCodeX64_st2:{result = RADDBGI_RegisterCode_X64_st2;}break;
case REGS_RegCodeX64_st3:{result = RADDBGI_RegisterCode_X64_st3;}break;
case REGS_RegCodeX64_st4:{result = RADDBGI_RegisterCode_X64_st4;}break;
case REGS_RegCodeX64_st5:{result = RADDBGI_RegisterCode_X64_st5;}break;
case REGS_RegCodeX64_st6:{result = RADDBGI_RegisterCode_X64_st6;}break;
case REGS_RegCodeX64_st7:{result = RADDBGI_RegisterCode_X64_st7;}break;
case REGS_RegCodeX64_fcw:{result = RADDBGI_RegisterCode_X64_fcw;}break;
case REGS_RegCodeX64_fsw:{result = RADDBGI_RegisterCode_X64_fsw;}break;
case REGS_RegCodeX64_ftw:{result = RADDBGI_RegisterCode_X64_ftw;}break;
case REGS_RegCodeX64_fop:{result = RADDBGI_RegisterCode_X64_fop;}break;
case REGS_RegCodeX64_fcs:{result = RADDBGI_RegisterCode_X64_fcs;}break;
case REGS_RegCodeX64_fds:{result = RADDBGI_RegisterCode_X64_fds;}break;
case REGS_RegCodeX64_fip:{result = RADDBGI_RegisterCode_X64_fip;}break;
case REGS_RegCodeX64_fdp:{result = RADDBGI_RegisterCode_X64_fdp;}break;
case REGS_RegCodeX64_mxcsr:{result = RADDBGI_RegisterCode_X64_mxcsr;}break;
case REGS_RegCodeX64_mxcsr_mask:{result = RADDBGI_RegisterCode_X64_mxcsr_mask;}break;
case REGS_RegCodeX64_ss:{result = RADDBGI_RegisterCode_X64_ss;}break;
case REGS_RegCodeX64_cs:{result = RADDBGI_RegisterCode_X64_cs;}break;
case REGS_RegCodeX64_ds:{result = RADDBGI_RegisterCode_X64_ds;}break;
case REGS_RegCodeX64_es:{result = RADDBGI_RegisterCode_X64_es;}break;
case REGS_RegCodeX64_fs:{result = RADDBGI_RegisterCode_X64_fs;}break;
case REGS_RegCodeX64_gs:{result = RADDBGI_RegisterCode_X64_gs;}break;
case REGS_RegCodeX64_ymm0:{result = RADDBGI_RegisterCode_X64_ymm0;}break;
case REGS_RegCodeX64_ymm1:{result = RADDBGI_RegisterCode_X64_ymm1;}break;
case REGS_RegCodeX64_ymm2:{result = RADDBGI_RegisterCode_X64_ymm2;}break;
case REGS_RegCodeX64_ymm3:{result = RADDBGI_RegisterCode_X64_ymm3;}break;
case REGS_RegCodeX64_ymm4:{result = RADDBGI_RegisterCode_X64_ymm4;}break;
case REGS_RegCodeX64_ymm5:{result = RADDBGI_RegisterCode_X64_ymm5;}break;
case REGS_RegCodeX64_ymm6:{result = RADDBGI_RegisterCode_X64_ymm6;}break;
case REGS_RegCodeX64_ymm7:{result = RADDBGI_RegisterCode_X64_ymm7;}break;
case REGS_RegCodeX64_ymm8:{result = RADDBGI_RegisterCode_X64_ymm8;}break;
case REGS_RegCodeX64_ymm9:{result = RADDBGI_RegisterCode_X64_ymm9;}break;
case REGS_RegCodeX64_ymm10:{result = RADDBGI_RegisterCode_X64_ymm10;}break;
case REGS_RegCodeX64_ymm11:{result = RADDBGI_RegisterCode_X64_ymm11;}break;
case REGS_RegCodeX64_ymm12:{result = RADDBGI_RegisterCode_X64_ymm12;}break;
case REGS_RegCodeX64_ymm13:{result = RADDBGI_RegisterCode_X64_ymm13;}break;
case REGS_RegCodeX64_ymm14:{result = RADDBGI_RegisterCode_X64_ymm14;}break;
case REGS_RegCodeX64_ymm15:{result = RADDBGI_RegisterCode_X64_ymm15;}break;
case REGS_RegCodeX64_rax:{result = RDI_RegisterCode_X64_rax;}break;
case REGS_RegCodeX64_rcx:{result = RDI_RegisterCode_X64_rcx;}break;
case REGS_RegCodeX64_rdx:{result = RDI_RegisterCode_X64_rdx;}break;
case REGS_RegCodeX64_rbx:{result = RDI_RegisterCode_X64_rbx;}break;
case REGS_RegCodeX64_rsp:{result = RDI_RegisterCode_X64_rsp;}break;
case REGS_RegCodeX64_rbp:{result = RDI_RegisterCode_X64_rbp;}break;
case REGS_RegCodeX64_rsi:{result = RDI_RegisterCode_X64_rsi;}break;
case REGS_RegCodeX64_rdi:{result = RDI_RegisterCode_X64_rdi;}break;
case REGS_RegCodeX64_r8:{result = RDI_RegisterCode_X64_r8;}break;
case REGS_RegCodeX64_r9:{result = RDI_RegisterCode_X64_r9;}break;
case REGS_RegCodeX64_r10:{result = RDI_RegisterCode_X64_r10;}break;
case REGS_RegCodeX64_r11:{result = RDI_RegisterCode_X64_r11;}break;
case REGS_RegCodeX64_r12:{result = RDI_RegisterCode_X64_r12;}break;
case REGS_RegCodeX64_r13:{result = RDI_RegisterCode_X64_r13;}break;
case REGS_RegCodeX64_r14:{result = RDI_RegisterCode_X64_r14;}break;
case REGS_RegCodeX64_r15:{result = RDI_RegisterCode_X64_r15;}break;
case REGS_RegCodeX64_fsbase:{result = RDI_RegisterCode_X64_fsbase;}break;
case REGS_RegCodeX64_gsbase:{result = RDI_RegisterCode_X64_gsbase;}break;
case REGS_RegCodeX64_rip:{result = RDI_RegisterCode_X64_rip;}break;
case REGS_RegCodeX64_rflags:{result = RDI_RegisterCode_X64_rflags;}break;
case REGS_RegCodeX64_dr0:{result = RDI_RegisterCode_X64_dr0;}break;
case REGS_RegCodeX64_dr1:{result = RDI_RegisterCode_X64_dr1;}break;
case REGS_RegCodeX64_dr2:{result = RDI_RegisterCode_X64_dr2;}break;
case REGS_RegCodeX64_dr3:{result = RDI_RegisterCode_X64_dr3;}break;
case REGS_RegCodeX64_dr4:{result = RDI_RegisterCode_X64_dr4;}break;
case REGS_RegCodeX64_dr5:{result = RDI_RegisterCode_X64_dr5;}break;
case REGS_RegCodeX64_dr6:{result = RDI_RegisterCode_X64_dr6;}break;
case REGS_RegCodeX64_dr7:{result = RDI_RegisterCode_X64_dr7;}break;
case REGS_RegCodeX64_fpr0:{result = RDI_RegisterCode_X64_fpr0;}break;
case REGS_RegCodeX64_fpr1:{result = RDI_RegisterCode_X64_fpr1;}break;
case REGS_RegCodeX64_fpr2:{result = RDI_RegisterCode_X64_fpr2;}break;
case REGS_RegCodeX64_fpr3:{result = RDI_RegisterCode_X64_fpr3;}break;
case REGS_RegCodeX64_fpr4:{result = RDI_RegisterCode_X64_fpr4;}break;
case REGS_RegCodeX64_fpr5:{result = RDI_RegisterCode_X64_fpr5;}break;
case REGS_RegCodeX64_fpr6:{result = RDI_RegisterCode_X64_fpr6;}break;
case REGS_RegCodeX64_fpr7:{result = RDI_RegisterCode_X64_fpr7;}break;
case REGS_RegCodeX64_st0:{result = RDI_RegisterCode_X64_st0;}break;
case REGS_RegCodeX64_st1:{result = RDI_RegisterCode_X64_st1;}break;
case REGS_RegCodeX64_st2:{result = RDI_RegisterCode_X64_st2;}break;
case REGS_RegCodeX64_st3:{result = RDI_RegisterCode_X64_st3;}break;
case REGS_RegCodeX64_st4:{result = RDI_RegisterCode_X64_st4;}break;
case REGS_RegCodeX64_st5:{result = RDI_RegisterCode_X64_st5;}break;
case REGS_RegCodeX64_st6:{result = RDI_RegisterCode_X64_st6;}break;
case REGS_RegCodeX64_st7:{result = RDI_RegisterCode_X64_st7;}break;
case REGS_RegCodeX64_fcw:{result = RDI_RegisterCode_X64_fcw;}break;
case REGS_RegCodeX64_fsw:{result = RDI_RegisterCode_X64_fsw;}break;
case REGS_RegCodeX64_ftw:{result = RDI_RegisterCode_X64_ftw;}break;
case REGS_RegCodeX64_fop:{result = RDI_RegisterCode_X64_fop;}break;
case REGS_RegCodeX64_fcs:{result = RDI_RegisterCode_X64_fcs;}break;
case REGS_RegCodeX64_fds:{result = RDI_RegisterCode_X64_fds;}break;
case REGS_RegCodeX64_fip:{result = RDI_RegisterCode_X64_fip;}break;
case REGS_RegCodeX64_fdp:{result = RDI_RegisterCode_X64_fdp;}break;
case REGS_RegCodeX64_mxcsr:{result = RDI_RegisterCode_X64_mxcsr;}break;
case REGS_RegCodeX64_mxcsr_mask:{result = RDI_RegisterCode_X64_mxcsr_mask;}break;
case REGS_RegCodeX64_ss:{result = RDI_RegisterCode_X64_ss;}break;
case REGS_RegCodeX64_cs:{result = RDI_RegisterCode_X64_cs;}break;
case REGS_RegCodeX64_ds:{result = RDI_RegisterCode_X64_ds;}break;
case REGS_RegCodeX64_es:{result = RDI_RegisterCode_X64_es;}break;
case REGS_RegCodeX64_fs:{result = RDI_RegisterCode_X64_fs;}break;
case REGS_RegCodeX64_gs:{result = RDI_RegisterCode_X64_gs;}break;
case REGS_RegCodeX64_ymm0:{result = RDI_RegisterCode_X64_ymm0;}break;
case REGS_RegCodeX64_ymm1:{result = RDI_RegisterCode_X64_ymm1;}break;
case REGS_RegCodeX64_ymm2:{result = RDI_RegisterCode_X64_ymm2;}break;
case REGS_RegCodeX64_ymm3:{result = RDI_RegisterCode_X64_ymm3;}break;
case REGS_RegCodeX64_ymm4:{result = RDI_RegisterCode_X64_ymm4;}break;
case REGS_RegCodeX64_ymm5:{result = RDI_RegisterCode_X64_ymm5;}break;
case REGS_RegCodeX64_ymm6:{result = RDI_RegisterCode_X64_ymm6;}break;
case REGS_RegCodeX64_ymm7:{result = RDI_RegisterCode_X64_ymm7;}break;
case REGS_RegCodeX64_ymm8:{result = RDI_RegisterCode_X64_ymm8;}break;
case REGS_RegCodeX64_ymm9:{result = RDI_RegisterCode_X64_ymm9;}break;
case REGS_RegCodeX64_ymm10:{result = RDI_RegisterCode_X64_ymm10;}break;
case REGS_RegCodeX64_ymm11:{result = RDI_RegisterCode_X64_ymm11;}break;
case REGS_RegCodeX64_ymm12:{result = RDI_RegisterCode_X64_ymm12;}break;
case REGS_RegCodeX64_ymm13:{result = RDI_RegisterCode_X64_ymm13;}break;
case REGS_RegCodeX64_ymm14:{result = RDI_RegisterCode_X64_ymm14;}break;
case REGS_RegCodeX64_ymm15:{result = RDI_RegisterCode_X64_ymm15;}break;
}
}break;
case Architecture_x86:
@@ -97,72 +97,72 @@ case Architecture_x86:
switch(code)
{
default:{}break;
case REGS_RegCodeX86_eax:{result = RADDBGI_RegisterCode_X86_eax;}break;
case REGS_RegCodeX86_ecx:{result = RADDBGI_RegisterCode_X86_ecx;}break;
case REGS_RegCodeX86_edx:{result = RADDBGI_RegisterCode_X86_edx;}break;
case REGS_RegCodeX86_ebx:{result = RADDBGI_RegisterCode_X86_ebx;}break;
case REGS_RegCodeX86_esp:{result = RADDBGI_RegisterCode_X86_esp;}break;
case REGS_RegCodeX86_ebp:{result = RADDBGI_RegisterCode_X86_ebp;}break;
case REGS_RegCodeX86_esi:{result = RADDBGI_RegisterCode_X86_esi;}break;
case REGS_RegCodeX86_edi:{result = RADDBGI_RegisterCode_X86_edi;}break;
case REGS_RegCodeX86_fsbase:{result = RADDBGI_RegisterCode_X86_fsbase;}break;
case REGS_RegCodeX86_gsbase:{result = RADDBGI_RegisterCode_X86_gsbase;}break;
case REGS_RegCodeX86_eflags:{result = RADDBGI_RegisterCode_X86_eflags;}break;
case REGS_RegCodeX86_eip:{result = RADDBGI_RegisterCode_X86_eip;}break;
case REGS_RegCodeX86_dr0:{result = RADDBGI_RegisterCode_X86_dr0;}break;
case REGS_RegCodeX86_dr1:{result = RADDBGI_RegisterCode_X86_dr1;}break;
case REGS_RegCodeX86_dr2:{result = RADDBGI_RegisterCode_X86_dr2;}break;
case REGS_RegCodeX86_dr3:{result = RADDBGI_RegisterCode_X86_dr3;}break;
case REGS_RegCodeX86_dr4:{result = RADDBGI_RegisterCode_X86_dr4;}break;
case REGS_RegCodeX86_dr5:{result = RADDBGI_RegisterCode_X86_dr5;}break;
case REGS_RegCodeX86_dr6:{result = RADDBGI_RegisterCode_X86_dr6;}break;
case REGS_RegCodeX86_dr7:{result = RADDBGI_RegisterCode_X86_dr7;}break;
case REGS_RegCodeX86_fpr0:{result = RADDBGI_RegisterCode_X86_fpr0;}break;
case REGS_RegCodeX86_fpr1:{result = RADDBGI_RegisterCode_X86_fpr1;}break;
case REGS_RegCodeX86_fpr2:{result = RADDBGI_RegisterCode_X86_fpr2;}break;
case REGS_RegCodeX86_fpr3:{result = RADDBGI_RegisterCode_X86_fpr3;}break;
case REGS_RegCodeX86_fpr4:{result = RADDBGI_RegisterCode_X86_fpr4;}break;
case REGS_RegCodeX86_fpr5:{result = RADDBGI_RegisterCode_X86_fpr5;}break;
case REGS_RegCodeX86_fpr6:{result = RADDBGI_RegisterCode_X86_fpr6;}break;
case REGS_RegCodeX86_fpr7:{result = RADDBGI_RegisterCode_X86_fpr7;}break;
case REGS_RegCodeX86_st0:{result = RADDBGI_RegisterCode_X86_st0;}break;
case REGS_RegCodeX86_st1:{result = RADDBGI_RegisterCode_X86_st1;}break;
case REGS_RegCodeX86_st2:{result = RADDBGI_RegisterCode_X86_st2;}break;
case REGS_RegCodeX86_st3:{result = RADDBGI_RegisterCode_X86_st3;}break;
case REGS_RegCodeX86_st4:{result = RADDBGI_RegisterCode_X86_st4;}break;
case REGS_RegCodeX86_st5:{result = RADDBGI_RegisterCode_X86_st5;}break;
case REGS_RegCodeX86_st6:{result = RADDBGI_RegisterCode_X86_st6;}break;
case REGS_RegCodeX86_st7:{result = RADDBGI_RegisterCode_X86_st7;}break;
case REGS_RegCodeX86_fcw:{result = RADDBGI_RegisterCode_X86_fcw;}break;
case REGS_RegCodeX86_fsw:{result = RADDBGI_RegisterCode_X86_fsw;}break;
case REGS_RegCodeX86_ftw:{result = RADDBGI_RegisterCode_X86_ftw;}break;
case REGS_RegCodeX86_fop:{result = RADDBGI_RegisterCode_X86_fop;}break;
case REGS_RegCodeX86_fcs:{result = RADDBGI_RegisterCode_X86_fcs;}break;
case REGS_RegCodeX86_fds:{result = RADDBGI_RegisterCode_X86_fds;}break;
case REGS_RegCodeX86_fip:{result = RADDBGI_RegisterCode_X86_fip;}break;
case REGS_RegCodeX86_fdp:{result = RADDBGI_RegisterCode_X86_fdp;}break;
case REGS_RegCodeX86_mxcsr:{result = RADDBGI_RegisterCode_X86_mxcsr;}break;
case REGS_RegCodeX86_mxcsr_mask:{result = RADDBGI_RegisterCode_X86_mxcsr_mask;}break;
case REGS_RegCodeX86_ss:{result = RADDBGI_RegisterCode_X86_ss;}break;
case REGS_RegCodeX86_cs:{result = RADDBGI_RegisterCode_X86_cs;}break;
case REGS_RegCodeX86_ds:{result = RADDBGI_RegisterCode_X86_ds;}break;
case REGS_RegCodeX86_es:{result = RADDBGI_RegisterCode_X86_es;}break;
case REGS_RegCodeX86_fs:{result = RADDBGI_RegisterCode_X86_fs;}break;
case REGS_RegCodeX86_gs:{result = RADDBGI_RegisterCode_X86_gs;}break;
case REGS_RegCodeX86_ymm0:{result = RADDBGI_RegisterCode_X86_ymm0;}break;
case REGS_RegCodeX86_ymm1:{result = RADDBGI_RegisterCode_X86_ymm1;}break;
case REGS_RegCodeX86_ymm2:{result = RADDBGI_RegisterCode_X86_ymm2;}break;
case REGS_RegCodeX86_ymm3:{result = RADDBGI_RegisterCode_X86_ymm3;}break;
case REGS_RegCodeX86_ymm4:{result = RADDBGI_RegisterCode_X86_ymm4;}break;
case REGS_RegCodeX86_ymm5:{result = RADDBGI_RegisterCode_X86_ymm5;}break;
case REGS_RegCodeX86_ymm6:{result = RADDBGI_RegisterCode_X86_ymm6;}break;
case REGS_RegCodeX86_ymm7:{result = RADDBGI_RegisterCode_X86_ymm7;}break;
case REGS_RegCodeX86_eax:{result = RDI_RegisterCode_X86_eax;}break;
case REGS_RegCodeX86_ecx:{result = RDI_RegisterCode_X86_ecx;}break;
case REGS_RegCodeX86_edx:{result = RDI_RegisterCode_X86_edx;}break;
case REGS_RegCodeX86_ebx:{result = RDI_RegisterCode_X86_ebx;}break;
case REGS_RegCodeX86_esp:{result = RDI_RegisterCode_X86_esp;}break;
case REGS_RegCodeX86_ebp:{result = RDI_RegisterCode_X86_ebp;}break;
case REGS_RegCodeX86_esi:{result = RDI_RegisterCode_X86_esi;}break;
case REGS_RegCodeX86_edi:{result = RDI_RegisterCode_X86_edi;}break;
case REGS_RegCodeX86_fsbase:{result = RDI_RegisterCode_X86_fsbase;}break;
case REGS_RegCodeX86_gsbase:{result = RDI_RegisterCode_X86_gsbase;}break;
case REGS_RegCodeX86_eflags:{result = RDI_RegisterCode_X86_eflags;}break;
case REGS_RegCodeX86_eip:{result = RDI_RegisterCode_X86_eip;}break;
case REGS_RegCodeX86_dr0:{result = RDI_RegisterCode_X86_dr0;}break;
case REGS_RegCodeX86_dr1:{result = RDI_RegisterCode_X86_dr1;}break;
case REGS_RegCodeX86_dr2:{result = RDI_RegisterCode_X86_dr2;}break;
case REGS_RegCodeX86_dr3:{result = RDI_RegisterCode_X86_dr3;}break;
case REGS_RegCodeX86_dr4:{result = RDI_RegisterCode_X86_dr4;}break;
case REGS_RegCodeX86_dr5:{result = RDI_RegisterCode_X86_dr5;}break;
case REGS_RegCodeX86_dr6:{result = RDI_RegisterCode_X86_dr6;}break;
case REGS_RegCodeX86_dr7:{result = RDI_RegisterCode_X86_dr7;}break;
case REGS_RegCodeX86_fpr0:{result = RDI_RegisterCode_X86_fpr0;}break;
case REGS_RegCodeX86_fpr1:{result = RDI_RegisterCode_X86_fpr1;}break;
case REGS_RegCodeX86_fpr2:{result = RDI_RegisterCode_X86_fpr2;}break;
case REGS_RegCodeX86_fpr3:{result = RDI_RegisterCode_X86_fpr3;}break;
case REGS_RegCodeX86_fpr4:{result = RDI_RegisterCode_X86_fpr4;}break;
case REGS_RegCodeX86_fpr5:{result = RDI_RegisterCode_X86_fpr5;}break;
case REGS_RegCodeX86_fpr6:{result = RDI_RegisterCode_X86_fpr6;}break;
case REGS_RegCodeX86_fpr7:{result = RDI_RegisterCode_X86_fpr7;}break;
case REGS_RegCodeX86_st0:{result = RDI_RegisterCode_X86_st0;}break;
case REGS_RegCodeX86_st1:{result = RDI_RegisterCode_X86_st1;}break;
case REGS_RegCodeX86_st2:{result = RDI_RegisterCode_X86_st2;}break;
case REGS_RegCodeX86_st3:{result = RDI_RegisterCode_X86_st3;}break;
case REGS_RegCodeX86_st4:{result = RDI_RegisterCode_X86_st4;}break;
case REGS_RegCodeX86_st5:{result = RDI_RegisterCode_X86_st5;}break;
case REGS_RegCodeX86_st6:{result = RDI_RegisterCode_X86_st6;}break;
case REGS_RegCodeX86_st7:{result = RDI_RegisterCode_X86_st7;}break;
case REGS_RegCodeX86_fcw:{result = RDI_RegisterCode_X86_fcw;}break;
case REGS_RegCodeX86_fsw:{result = RDI_RegisterCode_X86_fsw;}break;
case REGS_RegCodeX86_ftw:{result = RDI_RegisterCode_X86_ftw;}break;
case REGS_RegCodeX86_fop:{result = RDI_RegisterCode_X86_fop;}break;
case REGS_RegCodeX86_fcs:{result = RDI_RegisterCode_X86_fcs;}break;
case REGS_RegCodeX86_fds:{result = RDI_RegisterCode_X86_fds;}break;
case REGS_RegCodeX86_fip:{result = RDI_RegisterCode_X86_fip;}break;
case REGS_RegCodeX86_fdp:{result = RDI_RegisterCode_X86_fdp;}break;
case REGS_RegCodeX86_mxcsr:{result = RDI_RegisterCode_X86_mxcsr;}break;
case REGS_RegCodeX86_mxcsr_mask:{result = RDI_RegisterCode_X86_mxcsr_mask;}break;
case REGS_RegCodeX86_ss:{result = RDI_RegisterCode_X86_ss;}break;
case REGS_RegCodeX86_cs:{result = RDI_RegisterCode_X86_cs;}break;
case REGS_RegCodeX86_ds:{result = RDI_RegisterCode_X86_ds;}break;
case REGS_RegCodeX86_es:{result = RDI_RegisterCode_X86_es;}break;
case REGS_RegCodeX86_fs:{result = RDI_RegisterCode_X86_fs;}break;
case REGS_RegCodeX86_gs:{result = RDI_RegisterCode_X86_gs;}break;
case REGS_RegCodeX86_ymm0:{result = RDI_RegisterCode_X86_ymm0;}break;
case REGS_RegCodeX86_ymm1:{result = RDI_RegisterCode_X86_ymm1;}break;
case REGS_RegCodeX86_ymm2:{result = RDI_RegisterCode_X86_ymm2;}break;
case REGS_RegCodeX86_ymm3:{result = RDI_RegisterCode_X86_ymm3;}break;
case REGS_RegCodeX86_ymm4:{result = RDI_RegisterCode_X86_ymm4;}break;
case REGS_RegCodeX86_ymm5:{result = RDI_RegisterCode_X86_ymm5;}break;
case REGS_RegCodeX86_ymm6:{result = RDI_RegisterCode_X86_ymm6;}break;
case REGS_RegCodeX86_ymm7:{result = RDI_RegisterCode_X86_ymm7;}break;
}
}break;
}
return result;
}
internal REGS_RegCode regs_reg_code_from_arch_raddbgi_code(Architecture arch, RADDBGI_RegisterCode code)
internal REGS_RegCode regs_reg_code_from_arch_rdi_code(Architecture arch, RDI_RegisterCode code)
{
REGS_RegCode result = 0;
switch(arch)
@@ -173,82 +173,82 @@ case Architecture_x64:
switch(code)
{
default:{}break;
case RADDBGI_RegisterCode_X64_rax:{result = REGS_RegCodeX64_rax;}break;
case RADDBGI_RegisterCode_X64_rcx:{result = REGS_RegCodeX64_rcx;}break;
case RADDBGI_RegisterCode_X64_rdx:{result = REGS_RegCodeX64_rdx;}break;
case RADDBGI_RegisterCode_X64_rbx:{result = REGS_RegCodeX64_rbx;}break;
case RADDBGI_RegisterCode_X64_rsp:{result = REGS_RegCodeX64_rsp;}break;
case RADDBGI_RegisterCode_X64_rbp:{result = REGS_RegCodeX64_rbp;}break;
case RADDBGI_RegisterCode_X64_rsi:{result = REGS_RegCodeX64_rsi;}break;
case RADDBGI_RegisterCode_X64_rdi:{result = REGS_RegCodeX64_rdi;}break;
case RADDBGI_RegisterCode_X64_r8:{result = REGS_RegCodeX64_r8;}break;
case RADDBGI_RegisterCode_X64_r9:{result = REGS_RegCodeX64_r9;}break;
case RADDBGI_RegisterCode_X64_r10:{result = REGS_RegCodeX64_r10;}break;
case RADDBGI_RegisterCode_X64_r11:{result = REGS_RegCodeX64_r11;}break;
case RADDBGI_RegisterCode_X64_r12:{result = REGS_RegCodeX64_r12;}break;
case RADDBGI_RegisterCode_X64_r13:{result = REGS_RegCodeX64_r13;}break;
case RADDBGI_RegisterCode_X64_r14:{result = REGS_RegCodeX64_r14;}break;
case RADDBGI_RegisterCode_X64_r15:{result = REGS_RegCodeX64_r15;}break;
case RADDBGI_RegisterCode_X64_fsbase:{result = REGS_RegCodeX64_fsbase;}break;
case RADDBGI_RegisterCode_X64_gsbase:{result = REGS_RegCodeX64_gsbase;}break;
case RADDBGI_RegisterCode_X64_rip:{result = REGS_RegCodeX64_rip;}break;
case RADDBGI_RegisterCode_X64_rflags:{result = REGS_RegCodeX64_rflags;}break;
case RADDBGI_RegisterCode_X64_dr0:{result = REGS_RegCodeX64_dr0;}break;
case RADDBGI_RegisterCode_X64_dr1:{result = REGS_RegCodeX64_dr1;}break;
case RADDBGI_RegisterCode_X64_dr2:{result = REGS_RegCodeX64_dr2;}break;
case RADDBGI_RegisterCode_X64_dr3:{result = REGS_RegCodeX64_dr3;}break;
case RADDBGI_RegisterCode_X64_dr4:{result = REGS_RegCodeX64_dr4;}break;
case RADDBGI_RegisterCode_X64_dr5:{result = REGS_RegCodeX64_dr5;}break;
case RADDBGI_RegisterCode_X64_dr6:{result = REGS_RegCodeX64_dr6;}break;
case RADDBGI_RegisterCode_X64_dr7:{result = REGS_RegCodeX64_dr7;}break;
case RADDBGI_RegisterCode_X64_fpr0:{result = REGS_RegCodeX64_fpr0;}break;
case RADDBGI_RegisterCode_X64_fpr1:{result = REGS_RegCodeX64_fpr1;}break;
case RADDBGI_RegisterCode_X64_fpr2:{result = REGS_RegCodeX64_fpr2;}break;
case RADDBGI_RegisterCode_X64_fpr3:{result = REGS_RegCodeX64_fpr3;}break;
case RADDBGI_RegisterCode_X64_fpr4:{result = REGS_RegCodeX64_fpr4;}break;
case RADDBGI_RegisterCode_X64_fpr5:{result = REGS_RegCodeX64_fpr5;}break;
case RADDBGI_RegisterCode_X64_fpr6:{result = REGS_RegCodeX64_fpr6;}break;
case RADDBGI_RegisterCode_X64_fpr7:{result = REGS_RegCodeX64_fpr7;}break;
case RADDBGI_RegisterCode_X64_st0:{result = REGS_RegCodeX64_st0;}break;
case RADDBGI_RegisterCode_X64_st1:{result = REGS_RegCodeX64_st1;}break;
case RADDBGI_RegisterCode_X64_st2:{result = REGS_RegCodeX64_st2;}break;
case RADDBGI_RegisterCode_X64_st3:{result = REGS_RegCodeX64_st3;}break;
case RADDBGI_RegisterCode_X64_st4:{result = REGS_RegCodeX64_st4;}break;
case RADDBGI_RegisterCode_X64_st5:{result = REGS_RegCodeX64_st5;}break;
case RADDBGI_RegisterCode_X64_st6:{result = REGS_RegCodeX64_st6;}break;
case RADDBGI_RegisterCode_X64_st7:{result = REGS_RegCodeX64_st7;}break;
case RADDBGI_RegisterCode_X64_fcw:{result = REGS_RegCodeX64_fcw;}break;
case RADDBGI_RegisterCode_X64_fsw:{result = REGS_RegCodeX64_fsw;}break;
case RADDBGI_RegisterCode_X64_ftw:{result = REGS_RegCodeX64_ftw;}break;
case RADDBGI_RegisterCode_X64_fop:{result = REGS_RegCodeX64_fop;}break;
case RADDBGI_RegisterCode_X64_fcs:{result = REGS_RegCodeX64_fcs;}break;
case RADDBGI_RegisterCode_X64_fds:{result = REGS_RegCodeX64_fds;}break;
case RADDBGI_RegisterCode_X64_fip:{result = REGS_RegCodeX64_fip;}break;
case RADDBGI_RegisterCode_X64_fdp:{result = REGS_RegCodeX64_fdp;}break;
case RADDBGI_RegisterCode_X64_mxcsr:{result = REGS_RegCodeX64_mxcsr;}break;
case RADDBGI_RegisterCode_X64_mxcsr_mask:{result = REGS_RegCodeX64_mxcsr_mask;}break;
case RADDBGI_RegisterCode_X64_ss:{result = REGS_RegCodeX64_ss;}break;
case RADDBGI_RegisterCode_X64_cs:{result = REGS_RegCodeX64_cs;}break;
case RADDBGI_RegisterCode_X64_ds:{result = REGS_RegCodeX64_ds;}break;
case RADDBGI_RegisterCode_X64_es:{result = REGS_RegCodeX64_es;}break;
case RADDBGI_RegisterCode_X64_fs:{result = REGS_RegCodeX64_fs;}break;
case RADDBGI_RegisterCode_X64_gs:{result = REGS_RegCodeX64_gs;}break;
case RADDBGI_RegisterCode_X64_ymm0:{result = REGS_RegCodeX64_ymm0;}break;
case RADDBGI_RegisterCode_X64_ymm1:{result = REGS_RegCodeX64_ymm1;}break;
case RADDBGI_RegisterCode_X64_ymm2:{result = REGS_RegCodeX64_ymm2;}break;
case RADDBGI_RegisterCode_X64_ymm3:{result = REGS_RegCodeX64_ymm3;}break;
case RADDBGI_RegisterCode_X64_ymm4:{result = REGS_RegCodeX64_ymm4;}break;
case RADDBGI_RegisterCode_X64_ymm5:{result = REGS_RegCodeX64_ymm5;}break;
case RADDBGI_RegisterCode_X64_ymm6:{result = REGS_RegCodeX64_ymm6;}break;
case RADDBGI_RegisterCode_X64_ymm7:{result = REGS_RegCodeX64_ymm7;}break;
case RADDBGI_RegisterCode_X64_ymm8:{result = REGS_RegCodeX64_ymm8;}break;
case RADDBGI_RegisterCode_X64_ymm9:{result = REGS_RegCodeX64_ymm9;}break;
case RADDBGI_RegisterCode_X64_ymm10:{result = REGS_RegCodeX64_ymm10;}break;
case RADDBGI_RegisterCode_X64_ymm11:{result = REGS_RegCodeX64_ymm11;}break;
case RADDBGI_RegisterCode_X64_ymm12:{result = REGS_RegCodeX64_ymm12;}break;
case RADDBGI_RegisterCode_X64_ymm13:{result = REGS_RegCodeX64_ymm13;}break;
case RADDBGI_RegisterCode_X64_ymm14:{result = REGS_RegCodeX64_ymm14;}break;
case RADDBGI_RegisterCode_X64_ymm15:{result = REGS_RegCodeX64_ymm15;}break;
case RDI_RegisterCode_X64_rax:{result = REGS_RegCodeX64_rax;}break;
case RDI_RegisterCode_X64_rcx:{result = REGS_RegCodeX64_rcx;}break;
case RDI_RegisterCode_X64_rdx:{result = REGS_RegCodeX64_rdx;}break;
case RDI_RegisterCode_X64_rbx:{result = REGS_RegCodeX64_rbx;}break;
case RDI_RegisterCode_X64_rsp:{result = REGS_RegCodeX64_rsp;}break;
case RDI_RegisterCode_X64_rbp:{result = REGS_RegCodeX64_rbp;}break;
case RDI_RegisterCode_X64_rsi:{result = REGS_RegCodeX64_rsi;}break;
case RDI_RegisterCode_X64_rdi:{result = REGS_RegCodeX64_rdi;}break;
case RDI_RegisterCode_X64_r8:{result = REGS_RegCodeX64_r8;}break;
case RDI_RegisterCode_X64_r9:{result = REGS_RegCodeX64_r9;}break;
case RDI_RegisterCode_X64_r10:{result = REGS_RegCodeX64_r10;}break;
case RDI_RegisterCode_X64_r11:{result = REGS_RegCodeX64_r11;}break;
case RDI_RegisterCode_X64_r12:{result = REGS_RegCodeX64_r12;}break;
case RDI_RegisterCode_X64_r13:{result = REGS_RegCodeX64_r13;}break;
case RDI_RegisterCode_X64_r14:{result = REGS_RegCodeX64_r14;}break;
case RDI_RegisterCode_X64_r15:{result = REGS_RegCodeX64_r15;}break;
case RDI_RegisterCode_X64_fsbase:{result = REGS_RegCodeX64_fsbase;}break;
case RDI_RegisterCode_X64_gsbase:{result = REGS_RegCodeX64_gsbase;}break;
case RDI_RegisterCode_X64_rip:{result = REGS_RegCodeX64_rip;}break;
case RDI_RegisterCode_X64_rflags:{result = REGS_RegCodeX64_rflags;}break;
case RDI_RegisterCode_X64_dr0:{result = REGS_RegCodeX64_dr0;}break;
case RDI_RegisterCode_X64_dr1:{result = REGS_RegCodeX64_dr1;}break;
case RDI_RegisterCode_X64_dr2:{result = REGS_RegCodeX64_dr2;}break;
case RDI_RegisterCode_X64_dr3:{result = REGS_RegCodeX64_dr3;}break;
case RDI_RegisterCode_X64_dr4:{result = REGS_RegCodeX64_dr4;}break;
case RDI_RegisterCode_X64_dr5:{result = REGS_RegCodeX64_dr5;}break;
case RDI_RegisterCode_X64_dr6:{result = REGS_RegCodeX64_dr6;}break;
case RDI_RegisterCode_X64_dr7:{result = REGS_RegCodeX64_dr7;}break;
case RDI_RegisterCode_X64_fpr0:{result = REGS_RegCodeX64_fpr0;}break;
case RDI_RegisterCode_X64_fpr1:{result = REGS_RegCodeX64_fpr1;}break;
case RDI_RegisterCode_X64_fpr2:{result = REGS_RegCodeX64_fpr2;}break;
case RDI_RegisterCode_X64_fpr3:{result = REGS_RegCodeX64_fpr3;}break;
case RDI_RegisterCode_X64_fpr4:{result = REGS_RegCodeX64_fpr4;}break;
case RDI_RegisterCode_X64_fpr5:{result = REGS_RegCodeX64_fpr5;}break;
case RDI_RegisterCode_X64_fpr6:{result = REGS_RegCodeX64_fpr6;}break;
case RDI_RegisterCode_X64_fpr7:{result = REGS_RegCodeX64_fpr7;}break;
case RDI_RegisterCode_X64_st0:{result = REGS_RegCodeX64_st0;}break;
case RDI_RegisterCode_X64_st1:{result = REGS_RegCodeX64_st1;}break;
case RDI_RegisterCode_X64_st2:{result = REGS_RegCodeX64_st2;}break;
case RDI_RegisterCode_X64_st3:{result = REGS_RegCodeX64_st3;}break;
case RDI_RegisterCode_X64_st4:{result = REGS_RegCodeX64_st4;}break;
case RDI_RegisterCode_X64_st5:{result = REGS_RegCodeX64_st5;}break;
case RDI_RegisterCode_X64_st6:{result = REGS_RegCodeX64_st6;}break;
case RDI_RegisterCode_X64_st7:{result = REGS_RegCodeX64_st7;}break;
case RDI_RegisterCode_X64_fcw:{result = REGS_RegCodeX64_fcw;}break;
case RDI_RegisterCode_X64_fsw:{result = REGS_RegCodeX64_fsw;}break;
case RDI_RegisterCode_X64_ftw:{result = REGS_RegCodeX64_ftw;}break;
case RDI_RegisterCode_X64_fop:{result = REGS_RegCodeX64_fop;}break;
case RDI_RegisterCode_X64_fcs:{result = REGS_RegCodeX64_fcs;}break;
case RDI_RegisterCode_X64_fds:{result = REGS_RegCodeX64_fds;}break;
case RDI_RegisterCode_X64_fip:{result = REGS_RegCodeX64_fip;}break;
case RDI_RegisterCode_X64_fdp:{result = REGS_RegCodeX64_fdp;}break;
case RDI_RegisterCode_X64_mxcsr:{result = REGS_RegCodeX64_mxcsr;}break;
case RDI_RegisterCode_X64_mxcsr_mask:{result = REGS_RegCodeX64_mxcsr_mask;}break;
case RDI_RegisterCode_X64_ss:{result = REGS_RegCodeX64_ss;}break;
case RDI_RegisterCode_X64_cs:{result = REGS_RegCodeX64_cs;}break;
case RDI_RegisterCode_X64_ds:{result = REGS_RegCodeX64_ds;}break;
case RDI_RegisterCode_X64_es:{result = REGS_RegCodeX64_es;}break;
case RDI_RegisterCode_X64_fs:{result = REGS_RegCodeX64_fs;}break;
case RDI_RegisterCode_X64_gs:{result = REGS_RegCodeX64_gs;}break;
case RDI_RegisterCode_X64_ymm0:{result = REGS_RegCodeX64_ymm0;}break;
case RDI_RegisterCode_X64_ymm1:{result = REGS_RegCodeX64_ymm1;}break;
case RDI_RegisterCode_X64_ymm2:{result = REGS_RegCodeX64_ymm2;}break;
case RDI_RegisterCode_X64_ymm3:{result = REGS_RegCodeX64_ymm3;}break;
case RDI_RegisterCode_X64_ymm4:{result = REGS_RegCodeX64_ymm4;}break;
case RDI_RegisterCode_X64_ymm5:{result = REGS_RegCodeX64_ymm5;}break;
case RDI_RegisterCode_X64_ymm6:{result = REGS_RegCodeX64_ymm6;}break;
case RDI_RegisterCode_X64_ymm7:{result = REGS_RegCodeX64_ymm7;}break;
case RDI_RegisterCode_X64_ymm8:{result = REGS_RegCodeX64_ymm8;}break;
case RDI_RegisterCode_X64_ymm9:{result = REGS_RegCodeX64_ymm9;}break;
case RDI_RegisterCode_X64_ymm10:{result = REGS_RegCodeX64_ymm10;}break;
case RDI_RegisterCode_X64_ymm11:{result = REGS_RegCodeX64_ymm11;}break;
case RDI_RegisterCode_X64_ymm12:{result = REGS_RegCodeX64_ymm12;}break;
case RDI_RegisterCode_X64_ymm13:{result = REGS_RegCodeX64_ymm13;}break;
case RDI_RegisterCode_X64_ymm14:{result = REGS_RegCodeX64_ymm14;}break;
case RDI_RegisterCode_X64_ymm15:{result = REGS_RegCodeX64_ymm15;}break;
}
}break;
case Architecture_x86:
@@ -256,66 +256,66 @@ case Architecture_x86:
switch(code)
{
default:{}break;
case RADDBGI_RegisterCode_X86_eax:{result = REGS_RegCodeX86_eax;}break;
case RADDBGI_RegisterCode_X86_ecx:{result = REGS_RegCodeX86_ecx;}break;
case RADDBGI_RegisterCode_X86_edx:{result = REGS_RegCodeX86_edx;}break;
case RADDBGI_RegisterCode_X86_ebx:{result = REGS_RegCodeX86_ebx;}break;
case RADDBGI_RegisterCode_X86_esp:{result = REGS_RegCodeX86_esp;}break;
case RADDBGI_RegisterCode_X86_ebp:{result = REGS_RegCodeX86_ebp;}break;
case RADDBGI_RegisterCode_X86_esi:{result = REGS_RegCodeX86_esi;}break;
case RADDBGI_RegisterCode_X86_edi:{result = REGS_RegCodeX86_edi;}break;
case RADDBGI_RegisterCode_X86_fsbase:{result = REGS_RegCodeX86_fsbase;}break;
case RADDBGI_RegisterCode_X86_gsbase:{result = REGS_RegCodeX86_gsbase;}break;
case RADDBGI_RegisterCode_X86_eflags:{result = REGS_RegCodeX86_eflags;}break;
case RADDBGI_RegisterCode_X86_eip:{result = REGS_RegCodeX86_eip;}break;
case RADDBGI_RegisterCode_X86_dr0:{result = REGS_RegCodeX86_dr0;}break;
case RADDBGI_RegisterCode_X86_dr1:{result = REGS_RegCodeX86_dr1;}break;
case RADDBGI_RegisterCode_X86_dr2:{result = REGS_RegCodeX86_dr2;}break;
case RADDBGI_RegisterCode_X86_dr3:{result = REGS_RegCodeX86_dr3;}break;
case RADDBGI_RegisterCode_X86_dr4:{result = REGS_RegCodeX86_dr4;}break;
case RADDBGI_RegisterCode_X86_dr5:{result = REGS_RegCodeX86_dr5;}break;
case RADDBGI_RegisterCode_X86_dr6:{result = REGS_RegCodeX86_dr6;}break;
case RADDBGI_RegisterCode_X86_dr7:{result = REGS_RegCodeX86_dr7;}break;
case RADDBGI_RegisterCode_X86_fpr0:{result = REGS_RegCodeX86_fpr0;}break;
case RADDBGI_RegisterCode_X86_fpr1:{result = REGS_RegCodeX86_fpr1;}break;
case RADDBGI_RegisterCode_X86_fpr2:{result = REGS_RegCodeX86_fpr2;}break;
case RADDBGI_RegisterCode_X86_fpr3:{result = REGS_RegCodeX86_fpr3;}break;
case RADDBGI_RegisterCode_X86_fpr4:{result = REGS_RegCodeX86_fpr4;}break;
case RADDBGI_RegisterCode_X86_fpr5:{result = REGS_RegCodeX86_fpr5;}break;
case RADDBGI_RegisterCode_X86_fpr6:{result = REGS_RegCodeX86_fpr6;}break;
case RADDBGI_RegisterCode_X86_fpr7:{result = REGS_RegCodeX86_fpr7;}break;
case RADDBGI_RegisterCode_X86_st0:{result = REGS_RegCodeX86_st0;}break;
case RADDBGI_RegisterCode_X86_st1:{result = REGS_RegCodeX86_st1;}break;
case RADDBGI_RegisterCode_X86_st2:{result = REGS_RegCodeX86_st2;}break;
case RADDBGI_RegisterCode_X86_st3:{result = REGS_RegCodeX86_st3;}break;
case RADDBGI_RegisterCode_X86_st4:{result = REGS_RegCodeX86_st4;}break;
case RADDBGI_RegisterCode_X86_st5:{result = REGS_RegCodeX86_st5;}break;
case RADDBGI_RegisterCode_X86_st6:{result = REGS_RegCodeX86_st6;}break;
case RADDBGI_RegisterCode_X86_st7:{result = REGS_RegCodeX86_st7;}break;
case RADDBGI_RegisterCode_X86_fcw:{result = REGS_RegCodeX86_fcw;}break;
case RADDBGI_RegisterCode_X86_fsw:{result = REGS_RegCodeX86_fsw;}break;
case RADDBGI_RegisterCode_X86_ftw:{result = REGS_RegCodeX86_ftw;}break;
case RADDBGI_RegisterCode_X86_fop:{result = REGS_RegCodeX86_fop;}break;
case RADDBGI_RegisterCode_X86_fcs:{result = REGS_RegCodeX86_fcs;}break;
case RADDBGI_RegisterCode_X86_fds:{result = REGS_RegCodeX86_fds;}break;
case RADDBGI_RegisterCode_X86_fip:{result = REGS_RegCodeX86_fip;}break;
case RADDBGI_RegisterCode_X86_fdp:{result = REGS_RegCodeX86_fdp;}break;
case RADDBGI_RegisterCode_X86_mxcsr:{result = REGS_RegCodeX86_mxcsr;}break;
case RADDBGI_RegisterCode_X86_mxcsr_mask:{result = REGS_RegCodeX86_mxcsr_mask;}break;
case RADDBGI_RegisterCode_X86_ss:{result = REGS_RegCodeX86_ss;}break;
case RADDBGI_RegisterCode_X86_cs:{result = REGS_RegCodeX86_cs;}break;
case RADDBGI_RegisterCode_X86_ds:{result = REGS_RegCodeX86_ds;}break;
case RADDBGI_RegisterCode_X86_es:{result = REGS_RegCodeX86_es;}break;
case RADDBGI_RegisterCode_X86_fs:{result = REGS_RegCodeX86_fs;}break;
case RADDBGI_RegisterCode_X86_gs:{result = REGS_RegCodeX86_gs;}break;
case RADDBGI_RegisterCode_X86_ymm0:{result = REGS_RegCodeX86_ymm0;}break;
case RADDBGI_RegisterCode_X86_ymm1:{result = REGS_RegCodeX86_ymm1;}break;
case RADDBGI_RegisterCode_X86_ymm2:{result = REGS_RegCodeX86_ymm2;}break;
case RADDBGI_RegisterCode_X86_ymm3:{result = REGS_RegCodeX86_ymm3;}break;
case RADDBGI_RegisterCode_X86_ymm4:{result = REGS_RegCodeX86_ymm4;}break;
case RADDBGI_RegisterCode_X86_ymm5:{result = REGS_RegCodeX86_ymm5;}break;
case RADDBGI_RegisterCode_X86_ymm6:{result = REGS_RegCodeX86_ymm6;}break;
case RADDBGI_RegisterCode_X86_ymm7:{result = REGS_RegCodeX86_ymm7;}break;
case RDI_RegisterCode_X86_eax:{result = REGS_RegCodeX86_eax;}break;
case RDI_RegisterCode_X86_ecx:{result = REGS_RegCodeX86_ecx;}break;
case RDI_RegisterCode_X86_edx:{result = REGS_RegCodeX86_edx;}break;
case RDI_RegisterCode_X86_ebx:{result = REGS_RegCodeX86_ebx;}break;
case RDI_RegisterCode_X86_esp:{result = REGS_RegCodeX86_esp;}break;
case RDI_RegisterCode_X86_ebp:{result = REGS_RegCodeX86_ebp;}break;
case RDI_RegisterCode_X86_esi:{result = REGS_RegCodeX86_esi;}break;
case RDI_RegisterCode_X86_edi:{result = REGS_RegCodeX86_edi;}break;
case RDI_RegisterCode_X86_fsbase:{result = REGS_RegCodeX86_fsbase;}break;
case RDI_RegisterCode_X86_gsbase:{result = REGS_RegCodeX86_gsbase;}break;
case RDI_RegisterCode_X86_eflags:{result = REGS_RegCodeX86_eflags;}break;
case RDI_RegisterCode_X86_eip:{result = REGS_RegCodeX86_eip;}break;
case RDI_RegisterCode_X86_dr0:{result = REGS_RegCodeX86_dr0;}break;
case RDI_RegisterCode_X86_dr1:{result = REGS_RegCodeX86_dr1;}break;
case RDI_RegisterCode_X86_dr2:{result = REGS_RegCodeX86_dr2;}break;
case RDI_RegisterCode_X86_dr3:{result = REGS_RegCodeX86_dr3;}break;
case RDI_RegisterCode_X86_dr4:{result = REGS_RegCodeX86_dr4;}break;
case RDI_RegisterCode_X86_dr5:{result = REGS_RegCodeX86_dr5;}break;
case RDI_RegisterCode_X86_dr6:{result = REGS_RegCodeX86_dr6;}break;
case RDI_RegisterCode_X86_dr7:{result = REGS_RegCodeX86_dr7;}break;
case RDI_RegisterCode_X86_fpr0:{result = REGS_RegCodeX86_fpr0;}break;
case RDI_RegisterCode_X86_fpr1:{result = REGS_RegCodeX86_fpr1;}break;
case RDI_RegisterCode_X86_fpr2:{result = REGS_RegCodeX86_fpr2;}break;
case RDI_RegisterCode_X86_fpr3:{result = REGS_RegCodeX86_fpr3;}break;
case RDI_RegisterCode_X86_fpr4:{result = REGS_RegCodeX86_fpr4;}break;
case RDI_RegisterCode_X86_fpr5:{result = REGS_RegCodeX86_fpr5;}break;
case RDI_RegisterCode_X86_fpr6:{result = REGS_RegCodeX86_fpr6;}break;
case RDI_RegisterCode_X86_fpr7:{result = REGS_RegCodeX86_fpr7;}break;
case RDI_RegisterCode_X86_st0:{result = REGS_RegCodeX86_st0;}break;
case RDI_RegisterCode_X86_st1:{result = REGS_RegCodeX86_st1;}break;
case RDI_RegisterCode_X86_st2:{result = REGS_RegCodeX86_st2;}break;
case RDI_RegisterCode_X86_st3:{result = REGS_RegCodeX86_st3;}break;
case RDI_RegisterCode_X86_st4:{result = REGS_RegCodeX86_st4;}break;
case RDI_RegisterCode_X86_st5:{result = REGS_RegCodeX86_st5;}break;
case RDI_RegisterCode_X86_st6:{result = REGS_RegCodeX86_st6;}break;
case RDI_RegisterCode_X86_st7:{result = REGS_RegCodeX86_st7;}break;
case RDI_RegisterCode_X86_fcw:{result = REGS_RegCodeX86_fcw;}break;
case RDI_RegisterCode_X86_fsw:{result = REGS_RegCodeX86_fsw;}break;
case RDI_RegisterCode_X86_ftw:{result = REGS_RegCodeX86_ftw;}break;
case RDI_RegisterCode_X86_fop:{result = REGS_RegCodeX86_fop;}break;
case RDI_RegisterCode_X86_fcs:{result = REGS_RegCodeX86_fcs;}break;
case RDI_RegisterCode_X86_fds:{result = REGS_RegCodeX86_fds;}break;
case RDI_RegisterCode_X86_fip:{result = REGS_RegCodeX86_fip;}break;
case RDI_RegisterCode_X86_fdp:{result = REGS_RegCodeX86_fdp;}break;
case RDI_RegisterCode_X86_mxcsr:{result = REGS_RegCodeX86_mxcsr;}break;
case RDI_RegisterCode_X86_mxcsr_mask:{result = REGS_RegCodeX86_mxcsr_mask;}break;
case RDI_RegisterCode_X86_ss:{result = REGS_RegCodeX86_ss;}break;
case RDI_RegisterCode_X86_cs:{result = REGS_RegCodeX86_cs;}break;
case RDI_RegisterCode_X86_ds:{result = REGS_RegCodeX86_ds;}break;
case RDI_RegisterCode_X86_es:{result = REGS_RegCodeX86_es;}break;
case RDI_RegisterCode_X86_fs:{result = REGS_RegCodeX86_fs;}break;
case RDI_RegisterCode_X86_gs:{result = REGS_RegCodeX86_gs;}break;
case RDI_RegisterCode_X86_ymm0:{result = REGS_RegCodeX86_ymm0;}break;
case RDI_RegisterCode_X86_ymm1:{result = REGS_RegCodeX86_ymm1;}break;
case RDI_RegisterCode_X86_ymm2:{result = REGS_RegCodeX86_ymm2;}break;
case RDI_RegisterCode_X86_ymm3:{result = REGS_RegCodeX86_ymm3;}break;
case RDI_RegisterCode_X86_ymm4:{result = REGS_RegCodeX86_ymm4;}break;
case RDI_RegisterCode_X86_ymm5:{result = REGS_RegCodeX86_ymm5;}break;
case RDI_RegisterCode_X86_ymm6:{result = REGS_RegCodeX86_ymm6;}break;
case RDI_RegisterCode_X86_ymm7:{result = REGS_RegCodeX86_ymm7;}break;
}
}break;
}
+2 -2
View File
@@ -4,7 +4,7 @@
#ifndef REGS_RADDBGI_H
#define REGS_RADDBGI_H
internal RADDBGI_RegisterCode regs_raddbgi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code);
internal REGS_RegCode regs_reg_code_from_arch_raddbgi_code(Architecture arch, RADDBGI_RegisterCode reg);
internal RDI_RegisterCode regs_rdi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code);
internal REGS_RegCode regs_reg_code_from_arch_rdi_code(Architecture arch, RDI_RegisterCode reg);
#endif //REGS_RADDBGI_H
+7 -7
View File
@@ -6,9 +6,9 @@
@gen @c_file
{
`internal RADDBGI_RegisterCode regs_raddbgi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code)`;
`internal RDI_RegisterCode regs_rdi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code)`;
`{`;
`RADDBGI_RegisterCode result = 0;`;
`RDI_RegisterCode result = 0;`;
`switch(arch)`;
`{`;
`default:{}break;`;
@@ -17,7 +17,7 @@
`switch(code)`
`{`;
`default:{}break;`;
@expand(REGS_RegTableX64 a) `case REGS_RegCodeX64_$(a.name):{result = RADDBGI_RegisterCode_X64_$(a.name);}break;`;
@expand(REGS_RegTableX64 a) `case REGS_RegCodeX64_$(a.name):{result = RDI_RegisterCode_X64_$(a.name);}break;`;
`}`;
`}break;`;
`case Architecture_x86:`;
@@ -25,7 +25,7 @@
`switch(code)`
`{`;
`default:{}break;`;
@expand(REGS_RegTableX86 a) `case REGS_RegCodeX86_$(a.name):{result = RADDBGI_RegisterCode_X86_$(a.name);}break;`;
@expand(REGS_RegTableX86 a) `case REGS_RegCodeX86_$(a.name):{result = RDI_RegisterCode_X86_$(a.name);}break;`;
`}`;
`}break;`;
`}`;
@@ -35,7 +35,7 @@
@gen @c_file
{
`internal REGS_RegCode regs_reg_code_from_arch_raddbgi_code(Architecture arch, RADDBGI_RegisterCode code)`;
`internal REGS_RegCode regs_reg_code_from_arch_rdi_code(Architecture arch, RDI_RegisterCode code)`;
`{`;
`REGS_RegCode result = 0;`;
`switch(arch)`;
@@ -46,7 +46,7 @@
`switch(code)`
`{`;
`default:{}break;`;
@expand(REGS_RegTableX64 a) `case RADDBGI_RegisterCode_X64_$(a.name):{result = REGS_RegCodeX64_$(a.name);}break;`;
@expand(REGS_RegTableX64 a) `case RDI_RegisterCode_X64_$(a.name):{result = REGS_RegCodeX64_$(a.name);}break;`;
`}`;
`}break;`;
`case Architecture_x86:`;
@@ -54,7 +54,7 @@
`switch(code)`
`{`;
`default:{}break;`;
@expand(REGS_RegTableX86 a) `case RADDBGI_RegisterCode_X86_$(a.name):{result = REGS_RegCodeX86_$(a.name);}break;`;
@expand(REGS_RegTableX86 a) `case RDI_RegisterCode_X86_$(a.name):{result = REGS_RegCodeX86_$(a.name);}break;`;
`}`;
`}break;`;
`}`;
+12 -12
View File
@@ -6,10 +6,10 @@
#include <windows.h>
#include <stdint.h>
#include "raddbgi_format/raddbgi_format.h"
#include "raddbgi_format/raddbgi_format_parse.h"
#include "raddbgi_format/raddbgi_format.c"
#include "raddbgi_format/raddbgi_format_parse.c"
#include "rdi_format/rdi_format.h"
#include "rdi_format/rdi_format_parse.h"
#include "rdi_format/rdi_format.c"
#include "rdi_format/rdi_format_parse.c"
int main(int argument_count, char **arguments)
{
@@ -22,16 +22,16 @@ int main(int argument_count, char **arguments)
uint8_t *data = (uint8_t *)MapViewOfFile(map, FILE_MAP_READ, 0, 0, data_size);
// parse raw data as raddbg
RADDBGI_Parsed rdbg = {0};
RADDBGI_ParseStatus parse_status = raddbgi_parse(data, data_size, &rdbg);
RDI_Parsed rdbg = {0};
RDI_ParseStatus parse_status = rdi_parse(data, data_size, &rdbg);
// usage example: print out all procedure symbol names
#if 1
for(uint64_t procedure_idx = 0; procedure_idx < rdbg.procedure_count; procedure_idx += 1)
{
RADDBGI_Procedure *procedure = &rdbg.procedures[procedure_idx];
RDI_Procedure *procedure = &rdbg.procedures[procedure_idx];
uint64_t name_size = 0;
uint8_t *name = raddbgi_string_from_idx(&rdbg, procedure->name_string_idx, &name_size);
uint8_t *name = rdi_string_from_idx(&rdbg, procedure->name_string_idx, &name_size);
printf("[%I64u] %.*s\n", procedure_idx, (int)name_size, name);
}
#endif
@@ -40,15 +40,15 @@ int main(int argument_count, char **arguments)
#if 0
for(uint64_t udt_idx = 0; udt_idx < rdbg.udt_count; udt_idx += 1)
{
RADDBGI_UDT *udt = &rdbg.udts[udt_idx];
RADDBGI_TypeNode *type = &rdbg.type_nodes[udt->self_type_idx];
RDI_UDT *udt = &rdbg.udts[udt_idx];
RDI_TypeNode *type = &rdbg.type_nodes[udt->self_type_idx];
uint64_t name_size = 0;
uint8_t *name = raddbgi_string_from_idx(&rdbg, type->user_defined.name_string_idx, &name_size);
uint8_t *name = rdi_string_from_idx(&rdbg, type->user_defined.name_string_idx, &name_size);
printf("[%I64u] %.*s\n", udt_idx, (int)name_size, name);
}
#endif
// for getting more info, look at the `RADDBGI_Parsed` structure. all data is
// for getting more info, look at the `RDI_Parsed` structure. all data is
// represented as a bunch of flat plain-old-data tables. data which must
// reference other data uses indices into that other data's table. for
// example, given a `type_idx`, I will index into `rdbg.type_nodes`. given a
+151 -151
View File
@@ -59,85 +59,85 @@ tg_key_list_copy(Arena *arena, TG_KeyList *src)
//~ rjf: RADDBG <-> TG Enum Conversions
internal TG_Kind
tg_kind_from_raddbgi_type_kind(RADDBGI_TypeKind kind)
tg_kind_from_rdi_type_kind(RDI_TypeKind kind)
{
TG_Kind result = TG_Kind_Null;
switch(kind)
{
default:{}break;
case RADDBGI_TypeKind_Void: {result = TG_Kind_Void;}break;
case RADDBGI_TypeKind_Handle: {result = TG_Kind_Handle;}break;
case RADDBGI_TypeKind_Char8: {result = TG_Kind_Char8;}break;
case RADDBGI_TypeKind_Char16: {result = TG_Kind_Char16;}break;
case RADDBGI_TypeKind_Char32: {result = TG_Kind_Char32;}break;
case RADDBGI_TypeKind_UChar8: {result = TG_Kind_UChar8;}break;
case RADDBGI_TypeKind_UChar16: {result = TG_Kind_UChar16;}break;
case RADDBGI_TypeKind_UChar32: {result = TG_Kind_UChar32;}break;
case RADDBGI_TypeKind_U8: {result = TG_Kind_U8;}break;
case RADDBGI_TypeKind_U16: {result = TG_Kind_U16;}break;
case RADDBGI_TypeKind_U32: {result = TG_Kind_U32;}break;
case RADDBGI_TypeKind_U64: {result = TG_Kind_U64;}break;
case RADDBGI_TypeKind_U128: {result = TG_Kind_U128;}break;
case RADDBGI_TypeKind_U256: {result = TG_Kind_U256;}break;
case RADDBGI_TypeKind_U512: {result = TG_Kind_U512;}break;
case RADDBGI_TypeKind_S8: {result = TG_Kind_S8;}break;
case RADDBGI_TypeKind_S16: {result = TG_Kind_S16;}break;
case RADDBGI_TypeKind_S32: {result = TG_Kind_S32;}break;
case RADDBGI_TypeKind_S64: {result = TG_Kind_S64;}break;
case RADDBGI_TypeKind_S128: {result = TG_Kind_S128;}break;
case RADDBGI_TypeKind_S256: {result = TG_Kind_S256;}break;
case RADDBGI_TypeKind_S512: {result = TG_Kind_S512;}break;
case RADDBGI_TypeKind_Bool: {result = TG_Kind_Bool;}break;
case RADDBGI_TypeKind_F16: {result = TG_Kind_F16;}break;
case RADDBGI_TypeKind_F32: {result = TG_Kind_F32;}break;
case RADDBGI_TypeKind_F32PP: {result = TG_Kind_F32PP;}break;
case RADDBGI_TypeKind_F48: {result = TG_Kind_F48;}break;
case RADDBGI_TypeKind_F64: {result = TG_Kind_F64;}break;
case RADDBGI_TypeKind_F80: {result = TG_Kind_F80;}break;
case RADDBGI_TypeKind_F128: {result = TG_Kind_F128;}break;
case RADDBGI_TypeKind_ComplexF32: {result = TG_Kind_ComplexF32;}break;
case RADDBGI_TypeKind_ComplexF64: {result = TG_Kind_ComplexF64;}break;
case RADDBGI_TypeKind_ComplexF80: {result = TG_Kind_ComplexF80;}break;
case RADDBGI_TypeKind_ComplexF128: {result = TG_Kind_ComplexF128;}break;
case RADDBGI_TypeKind_Modifier: {result = TG_Kind_Modifier;}break;
case RADDBGI_TypeKind_Ptr: {result = TG_Kind_Ptr;}break;
case RADDBGI_TypeKind_LRef: {result = TG_Kind_LRef;}break;
case RADDBGI_TypeKind_RRef: {result = TG_Kind_RRef;}break;
case RADDBGI_TypeKind_Array: {result = TG_Kind_Array;}break;
case RADDBGI_TypeKind_Function: {result = TG_Kind_Function;}break;
case RADDBGI_TypeKind_Method: {result = TG_Kind_Method;}break;
case RADDBGI_TypeKind_MemberPtr: {result = TG_Kind_MemberPtr;}break;
case RADDBGI_TypeKind_Struct: {result = TG_Kind_Struct;}break;
case RADDBGI_TypeKind_Class: {result = TG_Kind_Class;}break;
case RADDBGI_TypeKind_Union: {result = TG_Kind_Union;}break;
case RADDBGI_TypeKind_Enum: {result = TG_Kind_Enum;}break;
case RADDBGI_TypeKind_Alias: {result = TG_Kind_Alias;}break;
case RADDBGI_TypeKind_IncompleteStruct: {result = TG_Kind_IncompleteStruct;}break;
case RADDBGI_TypeKind_IncompleteUnion: {result = TG_Kind_IncompleteUnion;}break;
case RADDBGI_TypeKind_IncompleteClass: {result = TG_Kind_IncompleteClass;}break;
case RADDBGI_TypeKind_IncompleteEnum: {result = TG_Kind_IncompleteEnum;}break;
case RADDBGI_TypeKind_Bitfield: {result = TG_Kind_Bitfield;}break;
case RADDBGI_TypeKind_Variadic: {result = TG_Kind_Variadic;}break;
case RDI_TypeKind_Void: {result = TG_Kind_Void;}break;
case RDI_TypeKind_Handle: {result = TG_Kind_Handle;}break;
case RDI_TypeKind_Char8: {result = TG_Kind_Char8;}break;
case RDI_TypeKind_Char16: {result = TG_Kind_Char16;}break;
case RDI_TypeKind_Char32: {result = TG_Kind_Char32;}break;
case RDI_TypeKind_UChar8: {result = TG_Kind_UChar8;}break;
case RDI_TypeKind_UChar16: {result = TG_Kind_UChar16;}break;
case RDI_TypeKind_UChar32: {result = TG_Kind_UChar32;}break;
case RDI_TypeKind_U8: {result = TG_Kind_U8;}break;
case RDI_TypeKind_U16: {result = TG_Kind_U16;}break;
case RDI_TypeKind_U32: {result = TG_Kind_U32;}break;
case RDI_TypeKind_U64: {result = TG_Kind_U64;}break;
case RDI_TypeKind_U128: {result = TG_Kind_U128;}break;
case RDI_TypeKind_U256: {result = TG_Kind_U256;}break;
case RDI_TypeKind_U512: {result = TG_Kind_U512;}break;
case RDI_TypeKind_S8: {result = TG_Kind_S8;}break;
case RDI_TypeKind_S16: {result = TG_Kind_S16;}break;
case RDI_TypeKind_S32: {result = TG_Kind_S32;}break;
case RDI_TypeKind_S64: {result = TG_Kind_S64;}break;
case RDI_TypeKind_S128: {result = TG_Kind_S128;}break;
case RDI_TypeKind_S256: {result = TG_Kind_S256;}break;
case RDI_TypeKind_S512: {result = TG_Kind_S512;}break;
case RDI_TypeKind_Bool: {result = TG_Kind_Bool;}break;
case RDI_TypeKind_F16: {result = TG_Kind_F16;}break;
case RDI_TypeKind_F32: {result = TG_Kind_F32;}break;
case RDI_TypeKind_F32PP: {result = TG_Kind_F32PP;}break;
case RDI_TypeKind_F48: {result = TG_Kind_F48;}break;
case RDI_TypeKind_F64: {result = TG_Kind_F64;}break;
case RDI_TypeKind_F80: {result = TG_Kind_F80;}break;
case RDI_TypeKind_F128: {result = TG_Kind_F128;}break;
case RDI_TypeKind_ComplexF32: {result = TG_Kind_ComplexF32;}break;
case RDI_TypeKind_ComplexF64: {result = TG_Kind_ComplexF64;}break;
case RDI_TypeKind_ComplexF80: {result = TG_Kind_ComplexF80;}break;
case RDI_TypeKind_ComplexF128: {result = TG_Kind_ComplexF128;}break;
case RDI_TypeKind_Modifier: {result = TG_Kind_Modifier;}break;
case RDI_TypeKind_Ptr: {result = TG_Kind_Ptr;}break;
case RDI_TypeKind_LRef: {result = TG_Kind_LRef;}break;
case RDI_TypeKind_RRef: {result = TG_Kind_RRef;}break;
case RDI_TypeKind_Array: {result = TG_Kind_Array;}break;
case RDI_TypeKind_Function: {result = TG_Kind_Function;}break;
case RDI_TypeKind_Method: {result = TG_Kind_Method;}break;
case RDI_TypeKind_MemberPtr: {result = TG_Kind_MemberPtr;}break;
case RDI_TypeKind_Struct: {result = TG_Kind_Struct;}break;
case RDI_TypeKind_Class: {result = TG_Kind_Class;}break;
case RDI_TypeKind_Union: {result = TG_Kind_Union;}break;
case RDI_TypeKind_Enum: {result = TG_Kind_Enum;}break;
case RDI_TypeKind_Alias: {result = TG_Kind_Alias;}break;
case RDI_TypeKind_IncompleteStruct: {result = TG_Kind_IncompleteStruct;}break;
case RDI_TypeKind_IncompleteUnion: {result = TG_Kind_IncompleteUnion;}break;
case RDI_TypeKind_IncompleteClass: {result = TG_Kind_IncompleteClass;}break;
case RDI_TypeKind_IncompleteEnum: {result = TG_Kind_IncompleteEnum;}break;
case RDI_TypeKind_Bitfield: {result = TG_Kind_Bitfield;}break;
case RDI_TypeKind_Variadic: {result = TG_Kind_Variadic;}break;
}
return result;
}
internal TG_MemberKind
tg_member_kind_from_raddbgi_member_kind(RADDBGI_MemberKind kind)
tg_member_kind_from_rdi_member_kind(RDI_MemberKind kind)
{
TG_MemberKind result = TG_MemberKind_Null;
switch(kind)
{
default:{}break;
case RADDBGI_MemberKind_DataField: {result = TG_MemberKind_DataField;}break;
case RADDBGI_MemberKind_StaticData: {result = TG_MemberKind_StaticData;}break;
case RADDBGI_MemberKind_Method: {result = TG_MemberKind_Method;}break;
case RADDBGI_MemberKind_StaticMethod: {result = TG_MemberKind_StaticMethod;}break;
case RADDBGI_MemberKind_VirtualMethod: {result = TG_MemberKind_VirtualMethod;}break;
case RADDBGI_MemberKind_VTablePtr: {result = TG_MemberKind_VTablePtr;}break;
case RADDBGI_MemberKind_Base: {result = TG_MemberKind_Base;}break;
case RADDBGI_MemberKind_VirtualBase: {result = TG_MemberKind_VirtualBase;}break;
case RADDBGI_MemberKind_NestedType: {result = TG_MemberKind_NestedType;}break;
case RDI_MemberKind_DataField: {result = TG_MemberKind_DataField;}break;
case RDI_MemberKind_StaticData: {result = TG_MemberKind_StaticData;}break;
case RDI_MemberKind_Method: {result = TG_MemberKind_Method;}break;
case RDI_MemberKind_StaticMethod: {result = TG_MemberKind_StaticMethod;}break;
case RDI_MemberKind_VirtualMethod: {result = TG_MemberKind_VirtualMethod;}break;
case RDI_MemberKind_VTablePtr: {result = TG_MemberKind_VTablePtr;}break;
case RDI_MemberKind_Base: {result = TG_MemberKind_Base;}break;
case RDI_MemberKind_VirtualBase: {result = TG_MemberKind_VirtualBase;}break;
case RDI_MemberKind_NestedType: {result = TG_MemberKind_NestedType;}break;
}
return result;
}
@@ -279,7 +279,7 @@ tg_cons_type_make(TG_Graph *graph, TG_Kind kind, TG_Key direct_type_key, U64 u64
//~ rjf: Graph Introspection API
internal TG_Type *
tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key)
{
TG_Type *type = &tg_type_nil;
U64 reg_byte_count = 0;
@@ -324,7 +324,7 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
}break;
case TG_Kind_Array:
{
U64 ptee_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, cons_type->direct_type_key);
U64 ptee_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, cons_type->direct_type_key);
type->byte_size = ptee_size * type->count;
}break;
}
@@ -338,18 +338,18 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
U64 type_node_idx = key.u64[0];
if(0 <= type_node_idx && type_node_idx < rdbg->type_nodes_count)
{
RADDBGI_TypeNode *rdbg_type = &rdbg->type_nodes[type_node_idx];
TG_Kind kind = tg_kind_from_raddbgi_type_kind(rdbg_type->kind);
RDI_TypeNode *rdbg_type = &rdbg->type_nodes[type_node_idx];
TG_Kind kind = tg_kind_from_rdi_type_kind(rdbg_type->kind);
//- rjf: record types => unpack name * members & produce
if(RADDBGI_TypeKind_FirstRecord <= rdbg_type->kind && rdbg_type->kind <= RADDBGI_TypeKind_LastRecord)
if(RDI_TypeKind_FirstRecord <= rdbg_type->kind && rdbg_type->kind <= RDI_TypeKind_LastRecord)
{
// rjf: unpack name
String8 name = {0};
name.str = raddbgi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
name.str = rdi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
// rjf: unpack UDT info
RADDBGI_UDT *udt = raddbgi_element_from_idx(rdbg, udts, rdbg_type->user_defined.udt_idx);
RDI_UDT *udt = rdi_element_from_idx(rdbg, udts, rdbg_type->user_defined.udt_idx);
// rjf: unpack members
TG_Member *members = 0;
@@ -363,17 +363,17 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
member_idx < udt->member_first+udt->member_count;
member_idx += 1)
{
RADDBGI_Member *src = &rdbg->members[member_idx];
RDI_Member *src = &rdbg->members[member_idx];
TG_Kind member_type_kind = TG_Kind_Null;
if(src->type_idx < rdbg->type_nodes_count)
{
RADDBGI_TypeNode *member_type = &rdbg->type_nodes[src->type_idx];
member_type_kind = tg_kind_from_raddbgi_type_kind(member_type->kind);
RDI_TypeNode *member_type = &rdbg->type_nodes[src->type_idx];
member_type_kind = tg_kind_from_rdi_type_kind(member_type->kind);
}
TG_Member *dst = &members[member_idx-udt->member_first];
dst->kind = tg_member_kind_from_raddbgi_member_kind(src->kind);
dst->kind = tg_member_kind_from_rdi_member_kind(src->kind);
dst->type_key = tg_key_ext(member_type_kind, (U64)src->type_idx);
dst->name.str = raddbgi_string_from_idx(rdbg, src->name_string_idx, &dst->name.size);
dst->name.str = rdi_string_from_idx(rdbg, src->name_string_idx, &dst->name.size);
dst->off = (U64)src->off;
}
}
@@ -389,18 +389,18 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
}
//- rjf: enum types => unpack name * values & produce
else if(rdbg_type->kind == RADDBGI_TypeKind_Enum)
else if(rdbg_type->kind == RDI_TypeKind_Enum)
{
// rjf: unpack name
String8 name = {0};
name.str = raddbgi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
name.str = rdi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
// rjf: unpack direct type
TG_Key direct_type_key = zero_struct;
if(rdbg_type->user_defined.direct_type_idx < type_node_idx)
{
RADDBGI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbgi_type_kind(direct_type_node->kind);
RDI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_rdi_type_kind(direct_type_node->kind);
direct_type_key = tg_key_ext(direct_type_kind, (U64)rdbg_type->user_defined.direct_type_idx);
}
@@ -411,7 +411,7 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
U32 udt_idx = rdbg_type->user_defined.udt_idx;
if(0 <= udt_idx && udt_idx < rdbg->udts_count)
{
RADDBGI_UDT *udt = &rdbg->udts[udt_idx];
RDI_UDT *udt = &rdbg->udts[udt_idx];
enum_vals_count = udt->member_count;
enum_vals = push_array(arena, TG_EnumVal, enum_vals_count);
if(0 <= udt->member_first && udt->member_first+udt->member_count < rdbg->enum_members_count)
@@ -420,9 +420,9 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
member_idx < udt->member_first+udt->member_count;
member_idx += 1)
{
RADDBGI_EnumMember *src = &rdbg->enum_members[member_idx];
RDI_EnumMember *src = &rdbg->enum_members[member_idx];
TG_EnumVal *dst = &enum_vals[member_idx-udt->member_first];
dst->name.str = raddbgi_string_from_idx(rdbg, src->name_string_idx, &dst->name.size);
dst->name.str = rdi_string_from_idx(rdbg, src->name_string_idx, &dst->name.size);
dst->val = src->val;
}
}
@@ -440,7 +440,7 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
}
//- rjf: constructed types
if(RADDBGI_TypeKind_FirstConstructed <= rdbg_type->kind && rdbg_type->kind <= RADDBGI_TypeKind_LastConstructed)
if(RDI_TypeKind_FirstConstructed <= rdbg_type->kind && rdbg_type->kind <= RDI_TypeKind_LastConstructed)
{
// rjf: unpack direct type
B32 direct_type_is_good = 0;
@@ -448,8 +448,8 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
U64 direct_type_byte_size = 0;
if(rdbg_type->constructed.direct_type_idx < type_node_idx)
{
RADDBGI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->constructed.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbgi_type_kind(direct_type_node->kind);
RDI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->constructed.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_rdi_type_kind(direct_type_node->kind);
direct_type_key = tg_key_ext(direct_type_kind, (U64)rdbg_type->constructed.direct_type_idx);
direct_type_is_good = 1;
direct_type_byte_size = (U64)direct_type_node->byte_size;
@@ -458,14 +458,14 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
// rjf: construct based on kind
switch(rdbg_type->kind)
{
case RADDBGI_TypeKind_Modifier:
case RDI_TypeKind_Modifier:
{
TG_Flags flags = 0;
if(rdbg_type->flags & RADDBGI_TypeModifierFlag_Const)
if(rdbg_type->flags & RDI_TypeModifierFlag_Const)
{
flags |= TG_Flag_Const;
}
if(rdbg_type->flags & RADDBGI_TypeModifierFlag_Volatile)
if(rdbg_type->flags & RDI_TypeModifierFlag_Volatile)
{
flags |= TG_Flag_Volatile;
}
@@ -475,9 +475,9 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
type->byte_size = direct_type_byte_size;
type->flags = flags;
}break;
case RADDBGI_TypeKind_Ptr:
case RADDBGI_TypeKind_LRef:
case RADDBGI_TypeKind_RRef:
case RDI_TypeKind_Ptr:
case RDI_TypeKind_LRef:
case RDI_TypeKind_RRef:
{
type = push_array(arena, TG_Type, 1);
type->kind = kind;
@@ -485,7 +485,7 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
type->byte_size = graph->address_size;
}break;
case RADDBGI_TypeKind_Array:
case RDI_TypeKind_Array:
{
type = push_array(arena, TG_Type, 1);
type->kind = kind;
@@ -493,12 +493,12 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
type->count = rdbg_type->constructed.count;
type->byte_size = direct_type_byte_size * type->count;
}break;
case RADDBGI_TypeKind_Function:
case RDI_TypeKind_Function:
{
U32 count = rdbg_type->constructed.count;
U32 idx_run_first = rdbg_type->constructed.param_idx_run_first;
U32 check_count = 0;
U32 *idx_run = raddbgi_idx_run_from_first_count(rdbg, idx_run_first, count, &check_count);
U32 *idx_run = rdi_idx_run_from_first_count(rdbg, idx_run_first, count, &check_count);
if(check_count == count)
{
type = push_array(arena, TG_Type, 1);
@@ -512,8 +512,8 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
U32 param_type_idx = idx_run[idx];
if(param_type_idx < type_node_idx)
{
RADDBGI_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx];
TG_Kind param_kind = tg_kind_from_raddbgi_type_kind(param_type_node->kind);
RDI_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx];
TG_Kind param_kind = tg_kind_from_rdi_type_kind(param_type_node->kind);
type->param_type_keys[idx] = tg_key_ext(param_kind, (U64)param_type_idx);
}
else
@@ -523,7 +523,7 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
}
}
}break;
case RADDBGI_TypeKind_Method:
case RDI_TypeKind_Method:
{
// NOTE(rjf): for methods, the `direct` type points at the owner type.
// the return type, instead of being encoded via the `direct` type, is
@@ -531,7 +531,7 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
U32 count = rdbg_type->constructed.count;
U32 idx_run_first = rdbg_type->constructed.param_idx_run_first;
U32 check_count = 0;
U32 *idx_run = raddbgi_idx_run_from_first_count(rdbg, idx_run_first, count, &check_count);
U32 *idx_run = rdi_idx_run_from_first_count(rdbg, idx_run_first, count, &check_count);
if(check_count == count)
{
type = push_array(arena, TG_Type, 1);
@@ -545,8 +545,8 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
U32 param_type_idx = idx_run[idx];
if(param_type_idx < type_node_idx)
{
RADDBGI_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx];
TG_Kind param_kind = tg_kind_from_raddbgi_type_kind(param_type_node->kind);
RDI_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx];
TG_Kind param_kind = tg_kind_from_rdi_type_kind(param_type_node->kind);
type->param_type_keys[idx] = tg_key_ext(param_kind, (U64)param_type_idx);
}
else
@@ -562,14 +562,14 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
}
}
}break;
case RADDBGI_TypeKind_MemberPtr:
case RDI_TypeKind_MemberPtr:
{
// rjf: unpack owner type
TG_Key owner_type_key = zero_struct;
if(rdbg_type->constructed.owner_type_idx < type_node_idx)
{
RADDBGI_TypeNode *owner_type_node = &rdbg->type_nodes[rdbg_type->constructed.owner_type_idx];
TG_Kind owner_type_kind = tg_kind_from_raddbgi_type_kind(owner_type_node->kind);
RDI_TypeNode *owner_type_node = &rdbg->type_nodes[rdbg_type->constructed.owner_type_idx];
TG_Kind owner_type_kind = tg_kind_from_rdi_type_kind(owner_type_node->kind);
owner_type_key = tg_key_ext(owner_type_kind, (U64)rdbg_type->constructed.owner_type_idx);
}
type = push_array(arena, TG_Type, 1);
@@ -582,19 +582,19 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
}
//- rjf: alias types
else if(rdbg_type->kind == RADDBGI_TypeKind_Alias)
else if(rdbg_type->kind == RDI_TypeKind_Alias)
{
// rjf: unpack name
String8 name = {0};
name.str = raddbgi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
name.str = rdi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
// rjf: unpack direct type
TG_Key direct_type_key = zero_struct;
U64 direct_type_byte_size = 0;
if(rdbg_type->user_defined.direct_type_idx < type_node_idx)
{
RADDBGI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbgi_type_kind(direct_type_node->kind);
RDI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_rdi_type_kind(direct_type_node->kind);
direct_type_key = tg_key_ext(direct_type_kind, (U64)rdbg_type->user_defined.direct_type_idx);
direct_type_byte_size = direct_type_node->byte_size;
}
@@ -608,11 +608,11 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
}
//- rjf: incomplete types
else if(RADDBGI_TypeKind_FirstIncomplete <= rdbg_type->kind && rdbg_type->kind <= RADDBGI_TypeKind_LastIncomplete)
else if(RDI_TypeKind_FirstIncomplete <= rdbg_type->kind && rdbg_type->kind <= RDI_TypeKind_LastIncomplete)
{
// rjf: unpack name
String8 name = {0};
name.str = raddbgi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
name.str = rdi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
// rjf: produce
type = push_array(arena, TG_Type, 1);
@@ -795,7 +795,7 @@ tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rd
}
internal TG_Key
tg_direct_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
tg_direct_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key)
{
TG_Key result = zero_struct;
switch(key.kind)
@@ -805,7 +805,7 @@ tg_direct_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key k
case TG_KeyKind_Cons:
{
Temp scratch = scratch_begin(0, 0);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key);
result = type->direct_type_key;
scratch_end(scratch);
}break;
@@ -814,16 +814,16 @@ tg_direct_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key k
}
internal TG_Key
tg_unwrapped_direct_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
tg_unwrapped_direct_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key)
{
key = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, key);
key = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
key = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, key);
key = tg_unwrapped_from_graph_rdi_key(graph, rdbg, key);
key = tg_direct_from_graph_rdi_key(graph, rdbg, key);
key = tg_unwrapped_from_graph_rdi_key(graph, rdbg, key);
return key;
}
internal TG_Key
tg_owner_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
tg_owner_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key)
{
TG_Key result = zero_struct;
switch(key.kind)
@@ -833,7 +833,7 @@ tg_owner_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key ke
case TG_KeyKind_Cons:
{
Temp scratch = scratch_begin(0, 0);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key);
result = type->owner_type_key;
scratch_end(scratch);
}break;
@@ -842,14 +842,14 @@ tg_owner_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key ke
}
internal TG_Key
tg_ptee_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
tg_ptee_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key)
{
TG_Key result = key;
B32 passed_ptr = 0;
for(;;)
{
TG_Kind kind = tg_kind_from_key(result);
result = tg_direct_from_graph_raddbgi_key(graph, rdbg, result);
result = tg_direct_from_graph_rdi_key(graph, rdbg, result);
if(kind == TG_Kind_Ptr || kind == TG_Kind_LRef || kind == TG_Kind_RRef)
{
passed_ptr = 1;
@@ -874,7 +874,7 @@ tg_ptee_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key
}
internal TG_Key
tg_unwrapped_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
tg_unwrapped_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key)
{
TG_Key result = key;
for(B32 good = 1; good;)
@@ -884,7 +884,7 @@ tg_unwrapped_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Ke
kind == TG_Kind_Modifier ||
kind == TG_Kind_Alias)
{
result = tg_direct_from_graph_raddbgi_key(graph, rdbg, result);
result = tg_direct_from_graph_rdi_key(graph, rdbg, result);
}
else
{
@@ -895,7 +895,7 @@ tg_unwrapped_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Ke
}
internal U64
tg_byte_size_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
tg_byte_size_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key)
{
U64 result = 0;
switch(key.kind)
@@ -910,7 +910,7 @@ tg_byte_size_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Ke
case TG_KeyKind_Cons:
{
Temp scratch = scratch_begin(0, 0);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key);
result = type->byte_size;
scratch_end(scratch);
}break;
@@ -945,12 +945,12 @@ tg_member_copy(Arena *arena, TG_Member *src)
}
internal TG_MemberArray
tg_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
tg_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key)
{
TG_MemberArray result = {0};
Temp scratch = scratch_begin(&arena, 1);
{
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key);
if(type->members != 0)
{
result.count = type->count;
@@ -967,7 +967,7 @@ tg_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed
}
internal TG_MemberArray
tg_data_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
tg_data_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key)
{
Temp scratch = scratch_begin(&arena, 1);
TG_Kind root_type_kind = tg_kind_from_key(key);
@@ -976,7 +976,7 @@ tg_data_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Pa
TG_MemberList members_list = {0};
B32 members_need_offset_sort = 0;
{
TG_Type *root_type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Type *root_type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key);
typedef struct Task Task;
struct Task
{
@@ -1015,7 +1015,7 @@ tg_data_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Pa
t->inheritance_chain = tg_key_list_copy(scratch.arena, &task->inheritance_chain);
tg_key_list_push(scratch.arena, &t->inheritance_chain, type->members[member_idx].type_key);
t->type_key = type->members[member_idx].type_key;
t->type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, type->members[member_idx].type_key);
t->type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, type->members[member_idx].type_key);
SLLQueuePush(first_task, last_task, t);
members_need_offset_sort = 1;
}
@@ -1064,7 +1064,7 @@ tg_data_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Pa
TG_Member *member = &members.v[idx];
if(idx+1 < members.count)
{
U64 member_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, member->type_key);
U64 member_byte_size = tg_byte_size_from_graph_rdi_key(graph, rdbg, member->type_key);
Rng1U64 member_byte_range = r1u64(member->off, member->off + member_byte_size);
if(member[1].off > member_byte_range.max)
{
@@ -1111,7 +1111,7 @@ tg_data_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Pa
}
internal void
tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return)
tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return)
{
String8 keyword = {0};
TG_Kind kind = tg_kind_from_key(key);
@@ -1120,7 +1120,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
default:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key);
str8_list_push(arena, out, push_str8_copy(arena, type->name));
str8_list_push(arena, out, str8_lit(" "));
scratch_end(scratch);
@@ -1128,14 +1128,14 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
case TG_Kind_Bitfield:
{
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, prec, skip_return);
}break;
case TG_Kind_Modifier:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key);
TG_Key direct = type->direct_type_key;
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
if(type->flags & TG_Flag_Const)
@@ -1161,7 +1161,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
case TG_Kind_Alias:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key);
str8_list_push(arena, out, push_str8_copy(arena, type->name));
str8_list_push(arena, out, str8_lit(" "));
scratch_end(scratch);
@@ -1174,7 +1174,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
fwd_udt:;
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key);
str8_list_push(arena, out, keyword);
str8_list_push(arena, out, str8_lit(" "));
str8_list_push(arena, out, push_str8_copy(arena, type->name));
@@ -1184,7 +1184,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
case TG_Kind_Array:
{
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 2, skip_return);
if(prec == 1)
{
@@ -1196,7 +1196,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
{
if(!skip_return)
{
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 2, 0);
}
if(prec == 1)
@@ -1207,21 +1207,21 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
case TG_Kind_Ptr:
{
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
str8_list_push(arena, out, str8_lit("*"));
}break;
case TG_Kind_LRef:
{
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
str8_list_push(arena, out, str8_lit("&"));
}break;
case TG_Kind_RRef:
{
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
str8_list_push(arena, out, str8_lit("&&"));
}break;
@@ -1229,10 +1229,10 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
case TG_Kind_MemberPtr:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key);
TG_Key direct = type->direct_type_key;
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
TG_Type *container = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, type->owner_type_key);
TG_Type *container = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, type->owner_type_key);
if(container->kind != TG_Kind_Null)
{
str8_list_push(arena, out, push_str8_copy(arena, container->name));
@@ -1248,7 +1248,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
}
internal void
tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec)
tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec)
{
TG_Kind kind = tg_kind_from_key(key);
switch(kind)
@@ -1257,7 +1257,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
case TG_Kind_Bitfield:
{
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key);
tg_rhs_string_from_key(arena, graph, rdbg, direct, out, prec);
}break;
@@ -1267,14 +1267,14 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
case TG_Kind_RRef:
case TG_Kind_MemberPtr:
{
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key);
tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 1);
}break;
case TG_Kind_Array:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key);
if(prec == 1)
{
str8_list_push(arena, out, str8_lit(")"));
@@ -1283,7 +1283,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
str8_list_push(arena, out, str8_lit("["));
str8_list_push(arena, out, count_str);
str8_list_push(arena, out, str8_lit("]"));
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key);
tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 2);
scratch_end(scratch);
}break;
@@ -1291,7 +1291,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
case TG_Kind_Function:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Type *type = tg_type_from_graph_rdi_key(scratch.arena, graph, rdbg, key);
if(prec == 1)
{
str8_list_push(arena, out, str8_lit(")"));
@@ -1320,7 +1320,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
}
str8_list_push(arena, out, str8_lit(")"));
}
TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
TG_Key direct = tg_direct_from_graph_rdi_key(graph, rdbg, key);
tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 2);
scratch_end(scratch);
}break;
@@ -1328,7 +1328,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_K
}
internal String8
tg_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
tg_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key)
{
Temp scratch = scratch_begin(&arena, 1);
String8List list = {0};
+17 -17
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef TYPE_GRAPH_NEW_H
#define TYPE_GRAPH_NEW_H
#ifndef TYPE_GRAPH_H
#define TYPE_GRAPH_H
////////////////////////////////
//~ rjf: Generated Code
@@ -203,8 +203,8 @@ internal TG_KeyList tg_key_list_copy(Arena *arena, TG_KeyList *src);
////////////////////////////////
//~ rjf: RADDBG <-> TG Enum Conversions
internal TG_Kind tg_kind_from_raddbgi_type_kind(RADDBGI_TypeKind kind);
internal TG_MemberKind tg_member_kind_from_raddbgi_member_kind(RADDBGI_MemberKind kind);
internal TG_Kind tg_kind_from_rdi_type_kind(RDI_TypeKind kind);
internal TG_MemberKind tg_member_kind_from_rdi_member_kind(RDI_MemberKind kind);
////////////////////////////////
//~ rjf: Key Type Functions
@@ -225,19 +225,19 @@ internal TG_Key tg_cons_type_make(TG_Graph *graph, TG_Kind kind, TG_Key direct_t
////////////////////////////////
//~ rjf: Graph Introspection API
internal TG_Type *tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_direct_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_unwrapped_direct_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_owner_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_ptee_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_unwrapped_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal U64 tg_byte_size_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Type *tg_type_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_direct_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_unwrapped_direct_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_owner_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_ptee_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_unwrapped_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key);
internal U64 tg_byte_size_from_graph_rdi_key(TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key);
internal TG_Kind tg_kind_from_key(TG_Key key);
internal TG_Member *tg_member_copy(Arena *arena, TG_Member *src);
internal TG_MemberArray tg_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_MemberArray tg_data_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal void tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return);
internal void tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec);
internal String8 tg_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_MemberArray tg_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key);
internal TG_MemberArray tg_data_members_from_graph_rdi_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key);
internal void tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return);
internal void tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec);
internal String8 tg_string_from_key(Arena *arena, TG_Graph *graph, RDI_Parsed *rdbg, TG_Key key);
#endif // TYPE_GRAPH_NEW_H
#endif // TYPE_GRAPH_H