raddbg -> raddbgi

This commit is contained in:
Ryan Fleury
2024-02-12 15:03:13 -08:00
parent 4b68967fbe
commit aa2a0948ba
55 changed files with 2620 additions and 2945 deletions
+2 -2
View File
@@ -15,7 +15,7 @@ cd /D "%~dp0"
:: `build raddbg clang` :: `build raddbg clang`
:: `build raddbg release` :: `build raddbg release`
:: `build raddbg asan telemetry` :: `build raddbg asan telemetry`
:: `build raddbg_from_pdb` :: `build raddbgi_from_pdb`
:: ::
:: For a full list of possible build targets and their build command lines, :: For a full list of possible build targets and their build command lines,
:: search for @build_targets in this file. :: search for @build_targets in this file.
@@ -85,7 +85,7 @@ pushd build
popd popd
:: --- Get Current Git Commit Id ---------------------------------------------- :: --- Get Current Git Commit Id ----------------------------------------------
for /f %%i in ('call git describe --always --dirty') do set compile=%compile% -DRADDBG_GIT=\"%%i\" for /f %%i in ('call git describe --always --dirty') do set compile=%compile% -DRADDBGI_GIT=\"%%i\"
:: --- Build & Run Metaprogram ------------------------------------------------ :: --- Build & Run Metaprogram ------------------------------------------------
if "%no_meta%"=="1" echo [skipping metagen] if "%no_meta%"=="1" echo [skipping metagen]
+1 -1
View File
@@ -74,7 +74,7 @@ commands =
}, },
.rjf_f4 = .rjf_f4 =
{ {
.win = "build raddbgi_from_pdb && pushd build && raddbg_from_pdb.exe --exe:raddbg.exe --pdb:raddbg.pdb --out:raddbg.raddbg --dump:table_diagnostics && popd", .win = "build raddbgi_from_pdb && pushd build && raddbgi_from_pdb.exe --exe:raddbg.exe --pdb:raddbg.pdb --out:raddbg.raddbg --dump:table_diagnostics && popd",
.linux = "", .linux = "",
.out = "*compilation*", .out = "*compilation*",
.footer_panel = true, .footer_panel = true,
+42 -42
View File
@@ -199,7 +199,7 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE
DBGI_Scope *scope = dbgi_scope_open(); DBGI_Scope *scope = dbgi_scope_open();
String8 exe_path = demon_full_path_from_module(scratch.arena, 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); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
U64 base_vaddr = demon_base_vaddr_from_module(module); U64 base_vaddr = demon_base_vaddr_from_module(module);
for(CTRL_UserBreakpointNode *n = user_bps->first; n != 0; n = n->next) for(CTRL_UserBreakpointNode *n = user_bps->first; n != 0; n = n->next)
{ {
@@ -224,16 +224,16 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE
// rjf: filename -> src_id // rjf: filename -> src_id
U32 src_id = 0; U32 src_id = 0;
{ {
RADDBG_NameMap *mapptr = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_NormalSourcePaths); RADDBGI_NameMap *mapptr = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_NormalSourcePaths);
if(mapptr != 0) if(mapptr != 0)
{ {
RADDBG_ParsedNameMap map = {0}; RADDBGI_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, mapptr, &map); raddbgi_name_map_parse(rdbg, mapptr, &map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, filename_normalized.str, filename_normalized.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, filename_normalized.str, filename_normalized.size);
if(node != 0) if(node != 0)
{ {
U32 id_count = 0; U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count); U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0) if(id_count > 0)
{ {
src_id = ids[0]; src_id = ids[0];
@@ -244,11 +244,11 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE
// rjf: src_id * pt -> push // rjf: src_id * pt -> push
{ {
RADDBG_SourceFile *src = raddbg_element_from_idx(rdbg, source_files, src_id); RADDBGI_SourceFile *src = raddbgi_element_from_idx(rdbg, source_files, src_id);
RADDBG_ParsedLineMap line_map = {0}; RADDBGI_ParsedLineMap line_map = {0};
raddbg_line_map_from_source_file(rdbg, src, &line_map); raddbgi_line_map_from_source_file(rdbg, src, &line_map);
U32 voff_count = 0; U32 voff_count = 0;
U64 *voffs = raddbg_line_voffs_from_num(&line_map, pt.line, &voff_count); U64 *voffs = raddbgi_line_voffs_from_num(&line_map, pt.line, &voff_count);
for(U32 i = 0; i < voff_count; i += 1) for(U32 i = 0; i < voff_count; i += 1)
{ {
U64 vaddr = voffs[i] + base_vaddr; U64 vaddr = voffs[i] + base_vaddr;
@@ -265,19 +265,19 @@ ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DE
U64 voff = bp->u64; U64 voff = bp->u64;
if(rdbg != 0 && rdbg->procedures != 0) if(rdbg != 0 && rdbg->procedures != 0)
{ {
RADDBG_NameMap *mapptr = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_Procedures); RADDBGI_NameMap *mapptr = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_Procedures);
if(mapptr != 0) if(mapptr != 0)
{ {
RADDBG_ParsedNameMap map = {0}; RADDBGI_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, mapptr, &map); raddbgi_name_map_parse(rdbg, mapptr, &map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, symbol_name.str, symbol_name.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, symbol_name.str, symbol_name.size);
if(node != 0) if(node != 0)
{ {
U32 id_count = 0; U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count); U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
for(U32 match_i = 0; match_i < id_count; match_i += 1) for(U32 match_i = 0; match_i < id_count; match_i += 1)
{ {
U64 proc_voff = raddbg_first_voff_from_proc(rdbg, ids[match_i]); U64 proc_voff = raddbgi_first_voff_from_proc(rdbg, ids[match_i]);
U64 proc_vaddr = proc_voff + base_vaddr; U64 proc_vaddr = proc_voff + base_vaddr;
DEMON_Trap trap = {process, proc_vaddr + voff, (U64)bp}; DEMON_Trap trap = {process, proc_vaddr + voff, (U64)bp};
demon_trap_chunk_list_push(arena, traps_out, 256, &trap); demon_trap_chunk_list_push(arena, traps_out, 256, &trap);
@@ -1638,21 +1638,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]); 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)); 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); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, module_path, max_U64);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RADDBG_NameMap *unparsed_map = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_GlobalVariables); RADDBGI_NameMap *unparsed_map = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_GlobalVariables);
if(rdbg->global_variables != 0 && unparsed_map != 0) if(rdbg->global_variables != 0 && unparsed_map != 0)
{ {
RADDBG_ParsedNameMap map = {0}; RADDBGI_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, unparsed_map, &map); raddbgi_name_map_parse(rdbg, unparsed_map, &map);
String8 name = str8_lit("__asan_shadow_memory_dynamic_address"); String8 name = str8_lit("__asan_shadow_memory_dynamic_address");
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, name.str, name.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
if(node != 0) if(node != 0)
{ {
U32 id_count = 0; U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count); U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0) if(id_count > 0)
{ {
RADDBG_GlobalVariable *global_var = raddbg_element_from_idx(rdbg, global_variables, ids[0]); RADDBGI_GlobalVariable *global_var = raddbgi_element_from_idx(rdbg, global_variables, ids[0]);
U64 global_var_voff = global_var->voff; 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)); 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); Architecture arch = demon_arch_from_object(ev->thread);
@@ -2143,10 +2143,10 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U64 module_base_vaddr = demon_base_vaddr_from_module(module); U64 module_base_vaddr = demon_base_vaddr_from_module(module);
String8 exe_path = demon_full_path_from_module(scratch.arena, 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); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RADDBG_NameMap *unparsed_map = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_Procedures); RADDBGI_NameMap *unparsed_map = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_Procedures);
RADDBG_ParsedNameMap map = {0}; RADDBGI_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, unparsed_map, &map); raddbgi_name_map_parse(rdbg, unparsed_map, &map);
//- rjf: add trap for user-specified entry point, if specified //- rjf: add trap for user-specified entry point, if specified
B32 entries_found = 0; B32 entries_found = 0;
@@ -2157,15 +2157,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0; U32 procedure_id = 0;
{ {
String8 name = n->string; String8 name = n->string;
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, name.str, name.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
U32 id_count = 0; U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count); U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0) if(id_count > 0)
{ {
procedure_id = ids[0]; procedure_id = ids[0];
} }
} }
U64 voff = raddbg_first_voff_from_proc(rdbg, procedure_id); U64 voff = raddbgi_first_voff_from_proc(rdbg, procedure_id);
if(voff != 0) if(voff != 0)
{ {
entries_found = 1; entries_found = 1;
@@ -2183,15 +2183,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0; U32 procedure_id = 0;
{ {
String8 name = n->string; String8 name = n->string;
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, name.str, name.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
U32 id_count = 0; U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count); U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0) if(id_count > 0)
{ {
procedure_id = ids[0]; procedure_id = ids[0];
} }
} }
U64 voff = raddbg_first_voff_from_proc(rdbg, procedure_id); U64 voff = raddbgi_first_voff_from_proc(rdbg, procedure_id);
if(voff != 0) if(voff != 0)
{ {
DEMON_Trap trap = {run_ctrls.run_entities[process_idx], module_base_vaddr + voff}; DEMON_Trap trap = {run_ctrls.run_entities[process_idx], module_base_vaddr + voff};
@@ -2216,15 +2216,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0; U32 procedure_id = 0;
{ {
String8 name = hi_entry_points[idx]; String8 name = hi_entry_points[idx];
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, name.str, name.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
U32 id_count = 0; U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count); U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0) if(id_count > 0)
{ {
procedure_id = ids[0]; procedure_id = ids[0];
} }
} }
U64 voff = raddbg_first_voff_from_proc(rdbg, procedure_id); U64 voff = raddbgi_first_voff_from_proc(rdbg, procedure_id);
if(voff != 0) if(voff != 0)
{ {
entries_found = 1; entries_found = 1;
@@ -2260,15 +2260,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0; U32 procedure_id = 0;
{ {
String8 name = lo_entry_points[idx]; String8 name = lo_entry_points[idx];
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, name.str, name.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, name.str, name.size);
U32 id_count = 0; U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count); U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0) if(id_count > 0)
{ {
procedure_id = ids[0]; procedure_id = ids[0];
} }
} }
U64 voff = raddbg_first_voff_from_proc(rdbg, procedure_id); U64 voff = raddbgi_first_voff_from_proc(rdbg, procedure_id);
if(voff != 0) if(voff != 0)
{ {
entries_found = 1; entries_found = 1;
@@ -2866,7 +2866,7 @@ ctrl_thread__run(CTRL_Msg *msg)
{ {
String8 exe_path = demon_full_path_from_module(temp.arena, module); String8 exe_path = demon_full_path_from_module(temp.arena, module);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
for(String8Node *condition_n = conditions.first; condition_n != 0; condition_n = condition_n->next) for(String8Node *condition_n = conditions.first; condition_n != 0; condition_n = condition_n->next)
{ {
String8 string = condition_n->string; String8 string = condition_n->string;
@@ -2878,8 +2878,8 @@ ctrl_thread__run(CTRL_Msg *msg)
parse_ctx.type_graph = tg_graph_begin(bit_size_from_arch(arch)/8, 256); 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.regs_map = ctrl_string2reg_from_arch(arch);
parse_ctx.reg_alias_map = ctrl_string2alias_from_arch(arch); parse_ctx.reg_alias_map = ctrl_string2alias_from_arch(arch);
parse_ctx.locals_map = eval_push_locals_map_from_raddbg_voff(temp.arena, rdbg, thread_rip_voff); 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_raddbg_voff(temp.arena, rdbg, thread_rip_voff); parse_ctx.member_map = eval_push_member_map_from_raddbgi_voff(temp.arena, rdbg, thread_rip_voff);
} }
EVAL_TokenArray tokens = eval_token_array_from_text(temp.arena, string); 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); EVAL_ParseResult parse = eval_parse_expr_from_text_tokens(temp.arena, &parse_ctx, string, &tokens);
+71 -71
View File
@@ -111,7 +111,7 @@ dbgi_fuzzy_item_num_from_array_element_idx__linear_search(DBGI_FuzzySearchItemAr
} }
internal String8 internal String8
dbgi_fuzzy_item_string_from_rdbg_target_element_idx(RADDBG_Parsed *rdbg, DBGI_FuzzySearchTarget target, U64 element_idx) dbgi_fuzzy_item_string_from_rdbg_target_element_idx(RADDBGI_Parsed *rdbg, DBGI_FuzzySearchTarget target, U64 element_idx)
{ {
String8 result = {0}; String8 result = {0};
switch(target) switch(target)
@@ -119,31 +119,31 @@ dbgi_fuzzy_item_string_from_rdbg_target_element_idx(RADDBG_Parsed *rdbg, DBGI_Fu
// NOTE(rjf): no default - warn if we miss a case // NOTE(rjf): no default - warn if we miss a case
case DBGI_FuzzySearchTarget_Procedures: case DBGI_FuzzySearchTarget_Procedures:
{ {
RADDBG_Procedure *proc = raddbg_element_from_idx(rdbg, procedures, element_idx); RADDBGI_Procedure *proc = raddbgi_element_from_idx(rdbg, procedures, element_idx);
U64 name_size = 0; U64 name_size = 0;
U8 *name_base = raddbg_string_from_idx(rdbg, proc->name_string_idx, &name_size); U8 *name_base = raddbgi_string_from_idx(rdbg, proc->name_string_idx, &name_size);
result = str8(name_base, name_size); result = str8(name_base, name_size);
}break; }break;
case DBGI_FuzzySearchTarget_GlobalVariables: case DBGI_FuzzySearchTarget_GlobalVariables:
{ {
RADDBG_GlobalVariable *gvar = raddbg_element_from_idx(rdbg, global_variables, element_idx); RADDBGI_GlobalVariable *gvar = raddbgi_element_from_idx(rdbg, global_variables, element_idx);
U64 name_size = 0; U64 name_size = 0;
U8 *name_base = raddbg_string_from_idx(rdbg, gvar->name_string_idx, &name_size); U8 *name_base = raddbgi_string_from_idx(rdbg, gvar->name_string_idx, &name_size);
result = str8(name_base, name_size); result = str8(name_base, name_size);
}break; }break;
case DBGI_FuzzySearchTarget_ThreadVariables: case DBGI_FuzzySearchTarget_ThreadVariables:
{ {
RADDBG_ThreadVariable *tvar = raddbg_element_from_idx(rdbg, thread_variables, element_idx); RADDBGI_ThreadVariable *tvar = raddbgi_element_from_idx(rdbg, thread_variables, element_idx);
U64 name_size = 0; U64 name_size = 0;
U8 *name_base = raddbg_string_from_idx(rdbg, tvar->name_string_idx, &name_size); U8 *name_base = raddbgi_string_from_idx(rdbg, tvar->name_string_idx, &name_size);
result = str8(name_base, name_size); result = str8(name_base, name_size);
}break; }break;
case DBGI_FuzzySearchTarget_UDTs: case DBGI_FuzzySearchTarget_UDTs:
{ {
RADDBG_UDT *udt = raddbg_element_from_idx(rdbg, udts, element_idx); RADDBGI_UDT *udt = raddbgi_element_from_idx(rdbg, udts, element_idx);
RADDBG_TypeNode *type_node = raddbg_element_from_idx(rdbg, type_nodes, udt->self_type_idx); RADDBGI_TypeNode *type_node = raddbgi_element_from_idx(rdbg, type_nodes, udt->self_type_idx);
U64 name_size = 0; U64 name_size = 0;
U8 *name_base = raddbg_string_from_idx(rdbg, type_node->user_defined.name_string_idx, &name_size); U8 *name_base = raddbgi_string_from_idx(rdbg, type_node->user_defined.name_string_idx, &name_size);
result = str8(name_base, name_size); result = str8(name_base, name_size);
}break; }break;
case DBGI_FuzzySearchTarget_COUNT:{}break; case DBGI_FuzzySearchTarget_COUNT:{}break;
@@ -769,7 +769,7 @@ dbgi_parse_thread_entry_point(void *p)
} }
if(!og_dbg_format_is_known) if(!og_dbg_format_is_known)
{ {
if(data.size >= 8 && *(U64 *)data.str == RADDBG_MAGIC_CONSTANT) if(data.size >= 8 && *(U64 *)data.str == RADDBGI_MAGIC_CONSTANT)
{ {
og_dbg_format_is_known = 1; og_dbg_format_is_known = 1;
og_dbg_is_raddbg = 1; og_dbg_is_raddbg = 1;
@@ -801,54 +801,54 @@ dbgi_parse_thread_entry_point(void *p)
} }
//- rjf: given O.G. path & analysis, determine RADDBG file path //- rjf: given O.G. path & analysis, determine RADDBG file path
String8 raddbg_path = {0}; String8 raddbgi_path = {0};
if(do_task) if(do_task)
{ {
if(og_dbg_is_raddbg) if(og_dbg_is_raddbg)
{ {
raddbg_path = og_dbg_path; raddbgi_path = og_dbg_path;
} }
else if(og_dbg_format_is_known && og_dbg_is_pdb) else if(og_dbg_format_is_known && og_dbg_is_pdb)
{ {
raddbg_path = push_str8f(scratch.arena, "%S.raddbg", str8_chop_last_dot(og_dbg_path)); raddbgi_path = push_str8f(scratch.arena, "%S.raddbgi", str8_chop_last_dot(og_dbg_path));
} }
} }
//- rjf: check if raddbg file is up-to-date //- rjf: check if raddbg file is up-to-date
B32 raddbg_file_is_up_to_date = 0; B32 raddbgi_file_is_up_to_date = 0;
if(do_task) if(do_task)
{ {
if(raddbg_path.size != 0) if(raddbgi_path.size != 0)
{ {
FileProperties props = os_properties_from_file_path(raddbg_path); FileProperties props = os_properties_from_file_path(raddbgi_path);
raddbg_file_is_up_to_date = (props.modified > og_dbg_props.modified); raddbgi_file_is_up_to_date = (props.modified > og_dbg_props.modified);
} }
} }
//- rjf: if raddbg file is up to date based on timestamp, check the //- rjf: if raddbg file is up to date based on timestamp, check the
// encoding generation number, to see if we need to regenerate it // encoding generation number, to see if we need to regenerate it
// regardless // regardless
if(do_task && raddbg_file_is_up_to_date) if(do_task && raddbgi_file_is_up_to_date)
{ {
OS_Handle file = {0}; OS_Handle file = {0};
OS_Handle file_map = {0}; OS_Handle file_map = {0};
FileProperties file_props = {0}; FileProperties file_props = {0};
void *file_base = 0; void *file_base = 0;
file = os_file_open(OS_AccessFlag_Read|OS_AccessFlag_ShareRead, raddbg_path); file = os_file_open(OS_AccessFlag_Read|OS_AccessFlag_ShareRead, raddbgi_path);
file_map = os_file_map_open(OS_AccessFlag_Read, file); file_map = os_file_map_open(OS_AccessFlag_Read, file);
file_props = os_properties_from_file(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)); file_base = os_file_map_view_open(file_map, OS_AccessFlag_Read, r1u64(0, file_props.size));
if(sizeof(RADDBG_Header) <= file_props.size) if(sizeof(RADDBGI_Header) <= file_props.size)
{ {
RADDBG_Header *header = (RADDBG_Header*)file_base; RADDBGI_Header *header = (RADDBGI_Header*)file_base;
if(header->encoding_version != RADDBG_ENCODING_VERSION) if(header->encoding_version != RADDBGI_ENCODING_VERSION)
{ {
raddbg_file_is_up_to_date = 0; raddbgi_file_is_up_to_date = 0;
} }
} }
else else
{ {
raddbg_file_is_up_to_date = 0; raddbgi_file_is_up_to_date = 0;
} }
os_file_map_view_close(file_map, file_base); os_file_map_view_close(file_map, file_base);
os_file_map_close(file_map); os_file_map_close(file_map);
@@ -858,14 +858,14 @@ dbgi_parse_thread_entry_point(void *p)
//- rjf: raddbg file not up-to-date? we need to generate it //- rjf: raddbg file not up-to-date? we need to generate it
if(do_task) if(do_task)
{ {
if(!raddbg_file_is_up_to_date) ProfScope("generate raddbg file") if(!raddbgi_file_is_up_to_date) ProfScope("generate raddbg file")
{ {
if(og_dbg_is_pdb) if(og_dbg_is_pdb)
{ {
// rjf: push conversion task begin event // rjf: push conversion task begin event
{ {
DBGI_Event event = {DBGI_EventKind_ConversionStarted}; DBGI_Event event = {DBGI_EventKind_ConversionStarted};
event.string = raddbg_path; event.string = raddbgi_path;
dbgi_p2u_push_event(&event); dbgi_p2u_push_event(&event);
} }
@@ -882,7 +882,7 @@ dbgi_parse_thread_entry_point(void *p)
//str8_list_pushf(scratch.arena, &opts.cmd_line, "--capture"); //str8_list_pushf(scratch.arena, &opts.cmd_line, "--capture");
str8_list_pushf(scratch.arena, &opts.cmd_line, "--exe:%S", exe_path); str8_list_pushf(scratch.arena, &opts.cmd_line, "--exe:%S", exe_path);
str8_list_pushf(scratch.arena, &opts.cmd_line, "--pdb:%S", og_dbg_path); str8_list_pushf(scratch.arena, &opts.cmd_line, "--pdb:%S", og_dbg_path);
str8_list_pushf(scratch.arena, &opts.cmd_line, "--out:%S", raddbg_path); str8_list_pushf(scratch.arena, &opts.cmd_line, "--out:%S", raddbgi_path);
os_launch_process(&opts, &process); os_launch_process(&opts, &process);
} }
@@ -894,7 +894,7 @@ dbgi_parse_thread_entry_point(void *p)
B32 wait_done = os_process_wait(process, os_now_microseconds()+1000); B32 wait_done = os_process_wait(process, os_now_microseconds()+1000);
if(wait_done) if(wait_done)
{ {
raddbg_file_is_up_to_date = 1; raddbgi_file_is_up_to_date = 1;
break; break;
} }
if(os_now_microseconds()-start_wait_t > 10000000 && og_dbg_props.size < MB(64)) if(os_now_microseconds()-start_wait_t > 10000000 && og_dbg_props.size < MB(64))
@@ -907,7 +907,7 @@ dbgi_parse_thread_entry_point(void *p)
// rjf: push conversion task end event // rjf: push conversion task end event
{ {
DBGI_Event event = {DBGI_EventKind_ConversionEnded}; DBGI_Event event = {DBGI_EventKind_ConversionEnded};
event.string = raddbg_path; event.string = raddbgi_path;
dbgi_p2u_push_event(&event); dbgi_p2u_push_event(&event);
} }
} }
@@ -917,7 +917,7 @@ dbgi_parse_thread_entry_point(void *p)
// rjf: push conversion task failure event // rjf: push conversion task failure event
{ {
DBGI_Event event = {DBGI_EventKind_ConversionFailureUnsupportedFormat}; DBGI_Event event = {DBGI_EventKind_ConversionFailureUnsupportedFormat};
event.string = raddbg_path; event.string = raddbgi_path;
dbgi_p2u_push_event(&event); dbgi_p2u_push_event(&event);
} }
} }
@@ -925,16 +925,16 @@ dbgi_parse_thread_entry_point(void *p)
} }
//- rjf: open raddbg file & gather info //- rjf: open raddbg file & gather info
OS_Handle raddbg_file = {0}; OS_Handle raddbgi_file = {0};
OS_Handle raddbg_file_map = {0}; OS_Handle raddbgi_file_map = {0};
FileProperties raddbg_file_props = {0}; FileProperties raddbgi_file_props = {0};
void *raddbg_file_base = 0; void *raddbgi_file_base = 0;
if(do_task && raddbg_file_is_up_to_date) if(do_task && raddbgi_file_is_up_to_date)
{ {
raddbg_file = os_file_open(OS_AccessFlag_Read|OS_AccessFlag_ShareRead, raddbg_path); raddbgi_file = os_file_open(OS_AccessFlag_Read|OS_AccessFlag_ShareRead, raddbgi_path);
raddbg_file_map = os_file_map_open(OS_AccessFlag_Read, raddbg_file); raddbgi_file_map = os_file_map_open(OS_AccessFlag_Read, raddbgi_file);
raddbg_file_props = os_properties_from_file(raddbg_file); raddbgi_file_props = os_properties_from_file(raddbgi_file);
raddbg_file_base = os_file_map_view_open(raddbg_file_map, OS_AccessFlag_Read, r1u64(0, raddbg_file_props.size)); raddbgi_file_base = os_file_map_view_open(raddbgi_file_map, OS_AccessFlag_Read, r1u64(0, raddbgi_file_props.size));
} }
//- rjf: cache write, step 0: busy-loop-wait for all scope touches to be done //- rjf: cache write, step 0: busy-loop-wait for all scope touches to be done
@@ -958,7 +958,7 @@ dbgi_parse_thread_entry_point(void *p)
// either EXE or raddbg file is new. if so, clear all old results & // either EXE or raddbg file is new. if so, clear all old results &
// store new top-level info // store new top-level info
B32 binary_refcount_is_zero = 0; B32 binary_refcount_is_zero = 0;
B32 raddbg_or_exe_file_is_updated = 0; B32 raddbgi_or_exe_file_is_updated = 0;
if(do_task) ProfScope("cache write, step 1: check if raddbg is new & clear") if(do_task) ProfScope("cache write, step 1: check if raddbg is new & clear")
{ {
OS_MutexScopeW(stripe->rw_mutex) for(DBGI_Binary *bin = slot->first; bin != 0; bin = bin->next) OS_MutexScopeW(stripe->rw_mutex) for(DBGI_Binary *bin = slot->first; bin != 0; bin = bin->next)
@@ -970,10 +970,10 @@ dbgi_parse_thread_entry_point(void *p)
binary_refcount_is_zero = 1; binary_refcount_is_zero = 1;
break; break;
} }
if(bin->parse.dbg_props.modified != raddbg_file_props.modified || if(bin->parse.dbg_props.modified != raddbgi_file_props.modified ||
bin->parse.exe_props.modified != exe_file_props.modified) bin->parse.exe_props.modified != exe_file_props.modified)
{ {
raddbg_or_exe_file_is_updated = 1; raddbgi_or_exe_file_is_updated = 1;
// rjf: clean up old stuff // rjf: clean up old stuff
if(bin->parse.arena != 0) { arena_release(bin->parse.arena); } if(bin->parse.arena != 0) { arena_release(bin->parse.arena); }
@@ -991,10 +991,10 @@ dbgi_parse_thread_entry_point(void *p)
bin->exe_file_map = exe_file_map; bin->exe_file_map = exe_file_map;
bin->parse.exe_base = exe_file_base; bin->parse.exe_base = exe_file_base;
bin->parse.exe_props = exe_file_props; bin->parse.exe_props = exe_file_props;
bin->dbg_file = raddbg_file; bin->dbg_file = raddbgi_file;
bin->dbg_file_map = raddbg_file_map; bin->dbg_file_map = raddbgi_file_map;
bin->parse.dbg_base = raddbg_file_base; bin->parse.dbg_base = raddbgi_file_base;
bin->parse.dbg_props = raddbg_file_props; bin->parse.dbg_props = raddbgi_file_props;
bin->gen += 1; bin->gen += 1;
} }
break; break;
@@ -1004,11 +1004,11 @@ dbgi_parse_thread_entry_point(void *p)
//- rjf: raddbg file or exe is not new? cache can stay unmodified, close //- rjf: raddbg file or exe is not new? cache can stay unmodified, close
// handles & skip to end. // handles & skip to end.
if(do_task) if((!raddbg_or_exe_file_is_updated && raddbg_file_is_up_to_date) || binary_refcount_is_zero) if(do_task) if((!raddbgi_or_exe_file_is_updated && raddbgi_file_is_up_to_date) || binary_refcount_is_zero)
{ {
os_file_map_view_close(raddbg_file_map, raddbg_file_base); os_file_map_view_close(raddbgi_file_map, raddbgi_file_base);
os_file_map_close(raddbg_file_map); os_file_map_close(raddbgi_file_map);
os_file_close(raddbg_file); os_file_close(raddbgi_file);
os_file_map_view_close(exe_file_map, exe_file_base); os_file_map_view_close(exe_file_map, exe_file_base);
os_file_map_close(exe_file_map); os_file_map_close(exe_file_map);
os_file_close(exe_file); os_file_close(exe_file);
@@ -1017,14 +1017,14 @@ dbgi_parse_thread_entry_point(void *p)
} }
//- rjf: parse raddbg info //- rjf: parse raddbg info
RADDBG_Parsed raddbg_parsed = dbgi_parse_nil.rdbg; RADDBGI_Parsed raddbgi_parsed = dbgi_parse_nil.rdbg;
U64 arch_addr_size = 8; U64 arch_addr_size = 8;
if(do_task) if(do_task)
{ {
RADDBG_ParseStatus parse_status = raddbg_parse((U8 *)raddbg_file_base, raddbg_file_props.size, &raddbg_parsed); RADDBGI_ParseStatus parse_status = raddbgi_parse((U8 *)raddbgi_file_base, raddbgi_file_props.size, &raddbgi_parsed);
if(raddbg_parsed.top_level_info != 0) if(raddbgi_parsed.top_level_info != 0)
{ {
arch_addr_size = raddbg_addr_size_from_arch(raddbg_parsed.top_level_info->architecture); arch_addr_size = raddbgi_addr_size_from_arch(raddbgi_parsed.top_level_info->architecture);
} }
} }
@@ -1053,7 +1053,7 @@ dbgi_parse_thread_entry_point(void *p)
bin->parse.arena = parse_arena; bin->parse.arena = parse_arena;
bin->parse.dbg_path = push_str8_copy(parse_arena, dbg_path); bin->parse.dbg_path = push_str8_copy(parse_arena, dbg_path);
MemoryCopyStruct(&bin->parse.pe, &exe_pe_info); MemoryCopyStruct(&bin->parse.pe, &exe_pe_info);
MemoryCopyStruct(&bin->parse.rdbg, &raddbg_parsed); MemoryCopyStruct(&bin->parse.rdbg, &raddbgi_parsed);
bin->parse.gen = bin->gen; bin->parse.gen = bin->gen;
break; break;
} }
@@ -1197,7 +1197,7 @@ dbgi_fuzzy_thread__entry_point(void *p)
//- rjf: exe_path -> dbgi_parse, raddbg //- rjf: exe_path -> dbgi_parse, raddbg
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
//- rjf: rdbg * query -> item list //- rjf: rdbg * query -> item list
U64 table_ptr_off = 0; U64 table_ptr_off = 0;
@@ -1210,30 +1210,30 @@ dbgi_fuzzy_thread__entry_point(void *p)
case DBGI_FuzzySearchTarget_COUNT:{}break; case DBGI_FuzzySearchTarget_COUNT:{}break;
case DBGI_FuzzySearchTarget_Procedures: case DBGI_FuzzySearchTarget_Procedures:
{ {
table_ptr_off = OffsetOf(RADDBG_Parsed, procedures); table_ptr_off = OffsetOf(RADDBGI_Parsed, procedures);
element_name_idx_off = OffsetOf(RADDBG_Procedure, name_string_idx); element_name_idx_off = OffsetOf(RADDBGI_Procedure, name_string_idx);
element_count = rdbg->procedures_count; element_count = rdbg->procedures_count;
element_size = sizeof(RADDBG_Procedure); element_size = sizeof(RADDBGI_Procedure);
}break; }break;
case DBGI_FuzzySearchTarget_GlobalVariables: case DBGI_FuzzySearchTarget_GlobalVariables:
{ {
table_ptr_off = OffsetOf(RADDBG_Parsed, global_variables); table_ptr_off = OffsetOf(RADDBGI_Parsed, global_variables);
element_name_idx_off = OffsetOf(RADDBG_GlobalVariable, name_string_idx); element_name_idx_off = OffsetOf(RADDBGI_GlobalVariable, name_string_idx);
element_count = rdbg->global_variables_count; element_count = rdbg->global_variables_count;
element_size = sizeof(RADDBG_GlobalVariable); element_size = sizeof(RADDBGI_GlobalVariable);
}break; }break;
case DBGI_FuzzySearchTarget_ThreadVariables: case DBGI_FuzzySearchTarget_ThreadVariables:
{ {
table_ptr_off = OffsetOf(RADDBG_Parsed, thread_variables); table_ptr_off = OffsetOf(RADDBGI_Parsed, thread_variables);
element_name_idx_off = OffsetOf(RADDBG_ThreadVariable, name_string_idx); element_name_idx_off = OffsetOf(RADDBGI_ThreadVariable, name_string_idx);
element_count = rdbg->thread_variables_count; element_count = rdbg->thread_variables_count;
element_size = sizeof(RADDBG_ThreadVariable); element_size = sizeof(RADDBGI_ThreadVariable);
}break; }break;
case DBGI_FuzzySearchTarget_UDTs: case DBGI_FuzzySearchTarget_UDTs:
{ {
table_ptr_off = OffsetOf(RADDBG_Parsed, udts); table_ptr_off = OffsetOf(RADDBGI_Parsed, udts);
element_count = rdbg->udts_count; element_count = rdbg->udts_count;
element_size = sizeof(RADDBG_UDT); element_size = sizeof(RADDBGI_UDT);
}break; }break;
} }
DBGI_FuzzySearchItemChunkList items_list = {0}; 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); U32 *name_idx_ptr = (U32 *)((U8 *)element + element_name_idx_off);
if(target == DBGI_FuzzySearchTarget_UDTs) if(target == DBGI_FuzzySearchTarget_UDTs)
{ {
RADDBG_UDT *udt = (RADDBG_UDT *)element; RADDBGI_UDT *udt = (RADDBGI_UDT *)element;
RADDBG_TypeNode *type_node = raddbg_element_from_idx(rdbg, type_nodes, udt->self_type_idx); RADDBGI_TypeNode *type_node = raddbgi_element_from_idx(rdbg, type_nodes, udt->self_type_idx);
name_idx_ptr = &type_node->user_defined.name_string_idx; name_idx_ptr = &type_node->user_defined.name_string_idx;
} }
U32 name_idx = *name_idx_ptr; U32 name_idx = *name_idx_ptr;
U64 name_size = 0; U64 name_size = 0;
U8 *name_base = raddbg_string_from_idx(rdbg, name_idx, &name_size); U8 *name_base = raddbgi_string_from_idx(rdbg, name_idx, &name_size);
String8 name = str8(name_base, name_size); String8 name = str8(name_base, name_size);
if(name.size == 0) { continue; } if(name.size == 0) { continue; }
FuzzyMatchRangeList matches = fuzzy_match_find(task_arena, query, name); FuzzyMatchRangeList matches = fuzzy_match_find(task_arena, query, name);
+20 -20
View File
@@ -18,7 +18,7 @@ struct DBGI_Parse
void *dbg_base; void *dbg_base;
FileProperties dbg_props; FileProperties dbg_props;
PE_BinInfo pe; PE_BinInfo pe;
RADDBG_Parsed rdbg; RADDBGI_Parsed rdbg;
}; };
//////////////////////////////// ////////////////////////////////
@@ -341,24 +341,24 @@ global DBGI_Parse dbgi_parse_nil =
0, 0,
0, 0,
0, 0,
&raddbg_binary_section_nil, 1, &raddbgi_binary_section_nil, 1,
&raddbg_file_path_node_nil, 1, &raddbgi_file_path_node_nil, 1,
&raddbg_source_file_nil, 1, &raddbgi_source_file_nil, 1,
&raddbg_unit_nil, 1, &raddbgi_unit_nil, 1,
&raddbg_vmap_entry_nil, 1, &raddbgi_vmap_entry_nil, 1,
&raddbg_type_node_nil, 1, &raddbgi_type_node_nil, 1,
&raddbg_udt_nil, 1, &raddbgi_udt_nil, 1,
&raddbg_member_nil, 1, &raddbgi_member_nil, 1,
&raddbg_enum_member_nil, 1, &raddbgi_enum_member_nil, 1,
&raddbg_global_variable_nil, 1, &raddbgi_global_variable_nil, 1,
&raddbg_vmap_entry_nil, 1, &raddbgi_vmap_entry_nil, 1,
&raddbg_thread_variable_nil, 1, &raddbgi_thread_variable_nil, 1,
&raddbg_procedure_nil, 1, &raddbgi_procedure_nil, 1,
&raddbg_scope_nil, 1, &raddbgi_scope_nil, 1,
&raddbg_voff_nil, 1, &raddbgi_voff_nil, 1,
&raddbg_vmap_entry_nil, 1, &raddbgi_vmap_entry_nil, 1,
&raddbg_local_nil, 1, &raddbgi_local_nil, 1,
&raddbg_location_block_nil, 1, &raddbgi_location_block_nil, 1,
0, 0, 0, 0,
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_hash_from_string(String8 string);
internal U64 dbgi_fuzzy_item_num_from_array_element_idx__linear_search(DBGI_FuzzySearchItemArray *array, U64 element_idx); 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(RADDBG_Parsed *rdbg, DBGI_FuzzySearchTarget target, U64 element_idx); internal String8 dbgi_fuzzy_item_string_from_rdbg_target_element_idx(RADDBGI_Parsed *rdbg, DBGI_FuzzySearchTarget target, U64 element_idx);
//////////////////////////////// ////////////////////////////////
//~ rjf: Forced Override Cache Functions //~ 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); DF_Eval eval = df_eval_from_string(scratch.arena, scope, ctrl_ctx, &parse_ctx, &eval_string2expr_map_nil, query);
if(eval.errors.count == 0) if(eval.errors.count == 0)
{ {
TG_Kind eval_type_kind = tg_kind_from_key(tg_unwrapped_from_graph_raddbg_key(parse_ctx.type_graph, parse_ctx.rdbg, eval.type_key)); 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));
if(eval_type_kind == TG_Kind_Ptr || eval_type_kind == TG_Kind_LRef || eval_type_kind == TG_Kind_RRef) 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); 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(); DBGI_Scope *scope = dbgi_scope_open();
String8 path = df_full_path_from_entity(scratch.arena, binary); String8 path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, path, 0); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
if(result.size == 0 && rdbg->scope_vmap != 0) if(result.size == 0 && rdbg->scope_vmap != 0)
{ {
U64 scope_idx = raddbg_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff); U64 scope_idx = raddbgi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff);
RADDBG_Scope *scope = &rdbg->scopes[scope_idx]; RADDBGI_Scope *scope = &rdbg->scopes[scope_idx];
U64 proc_idx = scope->proc_idx; U64 proc_idx = scope->proc_idx;
RADDBG_Procedure *procedure = &rdbg->procedures[proc_idx]; RADDBGI_Procedure *procedure = &rdbg->procedures[proc_idx];
U64 name_size = 0; U64 name_size = 0;
U8 *name_ptr = raddbg_string_from_idx(rdbg, procedure->name_string_idx, &name_size); U8 *name_ptr = raddbgi_string_from_idx(rdbg, procedure->name_string_idx, &name_size);
result = push_str8_copy(arena, str8(name_ptr, name_size)); result = push_str8_copy(arena, str8(name_ptr, name_size));
} }
if(result.size == 0 && rdbg->global_vmap != 0) if(result.size == 0 && rdbg->global_vmap != 0)
{ {
U64 global_idx = raddbg_vmap_idx_from_voff(rdbg->global_vmap, rdbg->global_vmap_count, voff); U64 global_idx = raddbgi_vmap_idx_from_voff(rdbg->global_vmap, rdbg->global_vmap_count, voff);
RADDBG_GlobalVariable *global_var = &rdbg->global_variables[global_idx]; RADDBGI_GlobalVariable *global_var = &rdbg->global_variables[global_idx];
U64 name_size = 0; U64 name_size = 0;
U8 *name_ptr = raddbg_string_from_idx(rdbg, global_var->name_string_idx, &name_size); U8 *name_ptr = raddbgi_string_from_idx(rdbg, global_var->name_string_idx, &name_size);
result = push_str8_copy(arena, str8(name_ptr, name_size)); result = push_str8_copy(arena, str8(name_ptr, name_size));
} }
dbgi_scope_close(scope); 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; DF_Entity *binary = binary_n->entity;
String8 binary_path = df_full_path_from_entity(scratch.arena, binary); String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
// rjf: file_path_normalized * rdbg -> src_id // rjf: file_path_normalized * rdbg -> src_id
B32 good_src_id = 0; B32 good_src_id = 0;
U32 src_id = 0; U32 src_id = 0;
if(dbgi != &dbgi_parse_nil) if(dbgi != &dbgi_parse_nil)
{ {
RADDBG_NameMap *mapptr = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_NormalSourcePaths); RADDBGI_NameMap *mapptr = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_NormalSourcePaths);
if(mapptr != 0) if(mapptr != 0)
{ {
RADDBG_ParsedNameMap map = {0}; RADDBGI_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, mapptr, &map); raddbgi_name_map_parse(rdbg, mapptr, &map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, file_path_normalized.str, file_path_normalized.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, file_path_normalized.str, file_path_normalized.size);
if(node != 0) if(node != 0)
{ {
U32 id_count = 0; U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count); U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0) if(id_count > 0)
{ {
good_src_id = 1; 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 // rjf: good src-id -> look up line info for visible range
if(good_src_id) if(good_src_id)
{ {
RADDBG_SourceFile *src = rdbg->source_files+src_id; RADDBGI_SourceFile *src = rdbg->source_files+src_id;
RADDBG_ParsedLineMap line_map = {0}; RADDBGI_ParsedLineMap line_map = {0};
raddbg_line_map_from_source_file(rdbg, src, &line_map); raddbgi_line_map_from_source_file(rdbg, src, &line_map);
U64 line_idx = 0; U64 line_idx = 0;
for(S64 line_num = line_num_range.min; for(S64 line_num = line_num_range.min;
line_num <= line_num_range.max; 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]; DF_TextLineSrc2DasmInfoList *src2dasm_list = &src2dasm_array.v[line_idx];
U32 voff_count = 0; U32 voff_count = 0;
U64 *voffs = raddbg_line_voffs_from_num(&line_map, u32_from_u64_saturate((U64)line_num), &voff_count); U64 *voffs = raddbgi_line_voffs_from_num(&line_map, u32_from_u64_saturate((U64)line_num), &voff_count);
for(U64 idx = 0; idx < voff_count; idx += 1) for(U64 idx = 0; idx < voff_count; idx += 1)
{ {
U64 base_voff = voffs[idx]; U64 base_voff = voffs[idx];
U64 unit_idx = raddbg_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, base_voff); U64 unit_idx = raddbgi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, base_voff);
RADDBG_Unit *unit = &rdbg->units[unit_idx]; RADDBGI_Unit *unit = &rdbg->units[unit_idx];
RADDBG_ParsedLineInfo unit_line_info = {0}; RADDBGI_ParsedLineInfo unit_line_info = {0};
raddbg_line_info_from_unit(rdbg, unit, &unit_line_info); raddbgi_line_info_from_unit(rdbg, unit, &unit_line_info);
U64 line_info_idx = raddbg_line_info_idx_from_voff(&unit_line_info, base_voff); U64 line_info_idx = raddbgi_line_info_idx_from_voff(&unit_line_info, base_voff);
if(unit_line_info.voffs != 0) if(unit_line_info.voffs != 0)
{ {
Rng1U64 range = r1u64(base_voff, unit_line_info.voffs[line_info_idx+1]); 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(); DBGI_Scope *scope = dbgi_scope_open();
String8 path = df_full_path_from_entity(scratch.arena, binary); String8 path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, path, 0); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
DF_TextLineDasm2SrcInfo result = {0}; DF_TextLineDasm2SrcInfo result = {0};
result.file = result.binary = &df_g_nil_entity; result.file = result.binary = &df_g_nil_entity;
if(rdbg->unit_vmap != 0 && rdbg->units != 0 && rdbg->source_files != 0) if(rdbg->unit_vmap != 0 && rdbg->units != 0 && rdbg->source_files != 0)
{ {
U64 unit_idx = raddbg_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, voff); U64 unit_idx = raddbgi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, voff);
RADDBG_Unit *unit = &rdbg->units[unit_idx]; RADDBGI_Unit *unit = &rdbg->units[unit_idx];
RADDBG_ParsedLineInfo unit_line_info = {0}; RADDBGI_ParsedLineInfo unit_line_info = {0};
raddbg_line_info_from_unit(rdbg, unit, &unit_line_info); raddbgi_line_info_from_unit(rdbg, unit, &unit_line_info);
U64 line_info_idx = raddbg_line_info_idx_from_voff(&unit_line_info, voff); U64 line_info_idx = raddbgi_line_info_idx_from_voff(&unit_line_info, voff);
if(line_info_idx < unit_line_info.count) if(line_info_idx < unit_line_info.count)
{ {
RADDBG_Line *line = &unit_line_info.lines[line_info_idx]; RADDBGI_Line *line = &unit_line_info.lines[line_info_idx];
RADDBG_Column *column = (line_info_idx < unit_line_info.col_count) ? &unit_line_info.cols[line_info_idx] : 0; RADDBGI_Column *column = (line_info_idx < unit_line_info.col_count) ? &unit_line_info.cols[line_info_idx] : 0;
RADDBG_SourceFile *file = &rdbg->source_files[line->file_idx]; RADDBGI_SourceFile *file = &rdbg->source_files[line->file_idx];
String8 file_normalized_full_path = {0}; String8 file_normalized_full_path = {0};
file_normalized_full_path.str = raddbg_string_from_idx(rdbg, file->normal_full_path_string_idx, &file_normalized_full_path.size); file_normalized_full_path.str = raddbgi_string_from_idx(rdbg, file->normal_full_path_string_idx, &file_normalized_full_path.size);
result.binary = binary; result.binary = binary;
if(line->file_idx != 0 && file_normalized_full_path.size != 0) 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); String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RADDBG_NameMapKind name_map_kinds[] = RADDBGI_NameMapKind name_map_kinds[] =
{ {
RADDBG_NameMapKind_GlobalVariables, RADDBGI_NameMapKind_GlobalVariables,
RADDBG_NameMapKind_Procedures, RADDBGI_NameMapKind_Procedures,
}; };
if(dbgi != &dbgi_parse_nil) 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 < ArrayCount(name_map_kinds);
name_map_kind_idx += 1) name_map_kind_idx += 1)
{ {
RADDBG_NameMapKind name_map_kind = name_map_kinds[name_map_kind_idx]; RADDBGI_NameMapKind name_map_kind = name_map_kinds[name_map_kind_idx];
RADDBG_NameMap *name_map = raddbg_name_map_from_kind(rdbg, name_map_kind); RADDBGI_NameMap *name_map = raddbgi_name_map_from_kind(rdbg, name_map_kind);
RADDBG_ParsedNameMap parsed_name_map = {0}; RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbg_name_map_parse(rdbg, name_map, &parsed_name_map); raddbgi_name_map_parse(rdbg, name_map, &parsed_name_map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &parsed_name_map, symbol_name.str, symbol_name.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &parsed_name_map, symbol_name.str, symbol_name.size);
// rjf: node -> num // rjf: node -> num
U64 entity_num = 0; U64 entity_num = 0;
@@ -3443,7 +3443,7 @@ df_voff_from_binary_symbol_name(DF_Entity *binary, String8 symbol_name)
default: default:
{ {
U32 num = 0; U32 num = 0;
U32 *run = raddbg_matches_from_map_node(rdbg, node, &num); U32 *run = raddbgi_matches_from_map_node(rdbg, node, &num);
if(num != 0) if(num != 0)
{ {
entity_num = run[0]+1; 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) if(entity_num != 0) switch(name_map_kind)
{ {
default:{}break; default:{}break;
case RADDBG_NameMapKind_GlobalVariables: case RADDBGI_NameMapKind_GlobalVariables:
{ {
RADDBG_GlobalVariable *global_var = raddbg_element_from_idx(rdbg, global_variables, entity_num-1); RADDBGI_GlobalVariable *global_var = raddbgi_element_from_idx(rdbg, global_variables, entity_num-1);
voff = global_var->voff; voff = global_var->voff;
}break; }break;
case RADDBG_NameMapKind_Procedures: case RADDBGI_NameMapKind_Procedures:
{ {
RADDBG_Procedure *procedure = raddbg_element_from_idx(rdbg, procedures, entity_num-1); RADDBGI_Procedure *procedure = raddbgi_element_from_idx(rdbg, procedures, entity_num-1);
RADDBG_Scope *scope = raddbg_element_from_idx(rdbg, scopes, procedure->root_scope_idx); RADDBGI_Scope *scope = raddbgi_element_from_idx(rdbg, scopes, procedure->root_scope_idx);
voff = rdbg->scope_voffs[scope->voff_range_first]; voff = rdbg->scope_voffs[scope->voff_range_first];
}break; }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); String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RADDBG_NameMap *name_map = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_Types); RADDBGI_NameMap *name_map = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_Types);
RADDBG_ParsedNameMap parsed_name_map = {0}; RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbg_name_map_parse(rdbg, name_map, &parsed_name_map); raddbgi_name_map_parse(rdbg, name_map, &parsed_name_map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &parsed_name_map, name.str, name.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &parsed_name_map, name.str, name.size);
U64 entity_num = 0; U64 entity_num = 0;
if(node != 0) if(node != 0)
{ {
@@ -3512,7 +3512,7 @@ df_type_num_from_binary_name(DF_Entity *binary, String8 name)
default: default:
{ {
U32 num = 0; U32 num = 0;
U32 *run = raddbg_matches_from_map_node(rdbg, node, &num); U32 *run = raddbgi_matches_from_map_node(rdbg, node, &num);
if(num != 0) if(num != 0)
{ {
entity_num = run[0]+1; 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); Temp scratch = scratch_begin(&arena, 1);
String8 binary_path = df_full_path_from_entity(scratch.arena, binary); String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
EVAL_String2NumMap *result = eval_push_locals_map_from_raddbg_voff(arena, rdbg, voff); EVAL_String2NumMap *result = eval_push_locals_map_from_raddbgi_voff(arena, rdbg, voff);
scratch_end(scratch); scratch_end(scratch);
return result; 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); Temp scratch = scratch_begin(&arena, 1);
String8 binary_path = df_full_path_from_entity(scratch.arena, binary); String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
EVAL_String2NumMap *result = eval_push_member_map_from_raddbg_voff(arena, rdbg, voff); EVAL_String2NumMap *result = eval_push_member_map_from_raddbgi_voff(arena, rdbg, voff);
scratch_end(scratch); scratch_end(scratch);
return result; 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); DF_Entity *binary = df_binary_file_from_module(module);
String8 binary_path = df_full_path_from_entity(scratch.arena, binary); String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
Architecture arch = df_architecture_from_entity(process); Architecture arch = df_architecture_from_entity(process);
EVAL_String2NumMap *reg_map = ctrl_string2reg_from_arch(arch); EVAL_String2NumMap *reg_map = ctrl_string2reg_from_arch(arch);
EVAL_String2NumMap *reg_alias_map = ctrl_string2alias_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; DF_Entity *binary = binary_n->entity;
String8 binary_path = df_full_path_from_entity(scratch.arena, binary); String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
// rjf: file_path_normalized * rdbg -> src_id // rjf: file_path_normalized * rdbg -> src_id
B32 good_src_id = 0; B32 good_src_id = 0;
U32 src_id = 0; U32 src_id = 0;
{ {
RADDBG_NameMap *mapptr = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_NormalSourcePaths); RADDBGI_NameMap *mapptr = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_NormalSourcePaths);
if(mapptr != 0) if(mapptr != 0)
{ {
RADDBG_ParsedNameMap map = {0}; RADDBGI_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, mapptr, &map); raddbgi_name_map_parse(rdbg, mapptr, &map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, file_path_normalized.str, file_path_normalized.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, file_path_normalized.str, file_path_normalized.size);
if(node != 0) if(node != 0)
{ {
U32 id_count = 0; U32 id_count = 0;
U32 *ids = raddbg_matches_from_map_node(rdbg, node, &id_count); U32 *ids = raddbgi_matches_from_map_node(rdbg, node, &id_count);
if(id_count > 0) if(id_count > 0)
{ {
good_src_id = 1; 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 // rjf: good src-id -> look up line info for visible range
if(good_src_id) if(good_src_id)
{ {
RADDBG_SourceFile *src = rdbg->source_files+src_id; RADDBGI_SourceFile *src = rdbg->source_files+src_id;
RADDBG_ParsedLineMap line_map = {0}; RADDBGI_ParsedLineMap line_map = {0};
raddbg_line_map_from_source_file(rdbg, src, &line_map); raddbgi_line_map_from_source_file(rdbg, src, &line_map);
U32 voff_count = 0; U32 voff_count = 0;
U64 *voffs = raddbg_line_voffs_from_num(&line_map, (U32)pt.line, &voff_count); U64 *voffs = raddbgi_line_voffs_from_num(&line_map, (U32)pt.line, &voff_count);
for(U64 idx = 0; idx < voff_count; idx += 1) for(U64 idx = 0; idx < voff_count; idx += 1)
{ {
U64 base_voff = voffs[idx]; U64 base_voff = voffs[idx];
U64 unit_idx = raddbg_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, base_voff); U64 unit_idx = raddbgi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, base_voff);
RADDBG_Unit *unit = &rdbg->units[unit_idx]; RADDBGI_Unit *unit = &rdbg->units[unit_idx];
RADDBG_ParsedLineInfo unit_line_info = {0}; RADDBGI_ParsedLineInfo unit_line_info = {0};
raddbg_line_info_from_unit(rdbg, unit, &unit_line_info); raddbgi_line_info_from_unit(rdbg, unit, &unit_line_info);
U64 line_info_idx = raddbg_line_info_idx_from_voff(&unit_line_info, base_voff); U64 line_info_idx = raddbgi_line_info_idx_from_voff(&unit_line_info, base_voff);
Rng1U64 range = r1u64(base_voff, unit_line_info.voffs[line_info_idx+1]); 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; S64 actual_line = (S64)unit_line_info.lines[line_info_idx].line_num;
DF_TextLineSrc2DasmInfoNode *src2dasm_n = push_array(scratch.arena, DF_TextLineSrc2DasmInfoNode, 1); 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 internal DF_Eval
df_value_mode_eval_from_eval(TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval) df_value_mode_eval_from_eval(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval)
{ {
ProfBeginFunction(); ProfBeginFunction();
DF_Entity *thread = df_entity_from_handle(ctrl_ctx->thread); DF_Entity *thread = df_entity_from_handle(ctrl_ctx->thread);
@@ -4262,7 +4262,7 @@ df_value_mode_eval_from_eval(TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *c
{ {
TG_Key type_key = eval.type_key; TG_Key type_key = eval.type_key;
TG_Kind type_kind = tg_kind_from_key(type_key); TG_Kind type_kind = tg_kind_from_key(type_key);
U64 type_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, type_key); U64 type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, type_key);
if(!tg_key_match(type_key, tg_key_zero()) && type_byte_size <= 8) if(!tg_key_match(type_key, tg_key_zero()) && type_byte_size <= 8)
{ {
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
@@ -4292,7 +4292,7 @@ df_value_mode_eval_from_eval(TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *c
case EVAL_EvalMode_Reg: case EVAL_EvalMode_Reg:
{ {
TG_Key type_key = eval.type_key; TG_Key type_key = eval.type_key;
U64 type_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, type_key); U64 type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, type_key);
U64 reg_off = eval.offset; U64 reg_off = eval.offset;
CTRL_Unwind unwind = df_query_cached_unwind_from_thread(thread); CTRL_Unwind unwind = df_query_cached_unwind_from_thread(thread);
if(unwind.first != 0) if(unwind.first != 0)
@@ -4316,7 +4316,7 @@ df_value_mode_eval_from_eval(TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *c
} }
internal DF_Eval internal DF_Eval
df_dynamically_typed_eval_from_eval(TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval) df_dynamically_typed_eval_from_eval(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval)
{ {
ProfBeginFunction(); ProfBeginFunction();
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
@@ -4330,11 +4330,11 @@ df_dynamically_typed_eval_from_eval(TG_Graph *graph, RADDBG_Parsed *rdbg, DF_Ctr
TG_Kind type_kind = tg_kind_from_key(type_key); TG_Kind type_kind = tg_kind_from_key(type_key);
if(type_kind == TG_Kind_Ptr) if(type_kind == TG_Kind_Ptr)
{ {
TG_Key ptee_type_key = tg_unwrapped_direct_from_graph_raddbg_key(graph, rdbg, type_key); TG_Key ptee_type_key = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, type_key);
TG_Kind ptee_type_kind = tg_kind_from_key(ptee_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) if(ptee_type_kind == TG_Kind_Struct || ptee_type_kind == TG_Kind_Class)
{ {
TG_Type *ptee_type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, ptee_type_key); TG_Type *ptee_type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, ptee_type_key);
B32 has_vtable = 0; B32 has_vtable = 0;
for(U64 idx = 0; idx < ptee_type->count; idx += 1) for(U64 idx = 0; idx < ptee_type->count; idx += 1)
{ {
@@ -4363,13 +4363,13 @@ df_dynamically_typed_eval_from_eval(TG_Graph *graph, RADDBG_Parsed *rdbg, DF_Ctr
U64 vtable_vaddr = 0; U64 vtable_vaddr = 0;
MemoryCopy(&vtable_vaddr, vtable_base_ptr_memory.str, addr_size); MemoryCopy(&vtable_vaddr, vtable_base_ptr_memory.str, addr_size);
U64 vtable_voff = df_voff_from_vaddr(module, vtable_vaddr); U64 vtable_voff = df_voff_from_vaddr(module, vtable_vaddr);
U64 global_idx = raddbg_vmap_idx_from_voff(rdbg->global_vmap, rdbg->global_vmap_count, vtable_voff); U64 global_idx = raddbgi_vmap_idx_from_voff(rdbg->global_vmap, rdbg->global_vmap_count, vtable_voff);
RADDBG_GlobalVariable *global_var = raddbg_element_from_idx(rdbg, global_variables, global_idx); RADDBGI_GlobalVariable *global_var = raddbgi_element_from_idx(rdbg, global_variables, global_idx);
if(global_var->link_flags & RADDBG_LinkFlag_TypeScoped) if(global_var->link_flags & RADDBGI_LinkFlag_TypeScoped)
{ {
RADDBG_UDT *udt = raddbg_element_from_idx(rdbg, udts, global_var->container_idx); RADDBGI_UDT *udt = raddbgi_element_from_idx(rdbg, udts, global_var->container_idx);
RADDBG_TypeNode *type = raddbg_element_from_idx(rdbg, type_nodes, udt->self_type_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_raddbg_type_kind(type->kind), (U64)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);
TG_Key ptr_to_derived_type_key = tg_cons_type_make(graph, TG_Kind_Ptr, derived_type_key, 0); 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; eval.type_key = ptr_to_derived_type_key;
} }
@@ -4579,13 +4579,13 @@ df_string_from_ascii_value(Arena *arena, U8 val)
} }
internal String8 internal String8
df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, DF_EvalVizStringFlags flags, U32 radix, DF_Eval eval) df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_EvalVizStringFlags flags, U32 radix, DF_Eval eval)
{ {
ProfBeginFunction(); ProfBeginFunction();
String8 result = {0}; String8 result = {0};
TG_Key type_key = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, eval.type_key); TG_Key type_key = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, eval.type_key);
TG_Kind type_kind = tg_kind_from_key(type_key); TG_Kind type_kind = tg_kind_from_key(type_key);
U64 type_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, type_key); U64 type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, type_key);
U8 digit_group_separator = 0; U8 digit_group_separator = 0;
if(!(flags & DF_EvalVizStringFlag_ReadOnlyDisplayRules)) if(!(flags & DF_EvalVizStringFlag_ReadOnlyDisplayRules))
{ {
@@ -4653,7 +4653,7 @@ df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RADDBG_Parsed *r
case TG_Kind_Enum: case TG_Kind_Enum:
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, type_key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, type_key);
String8 constant_name = {0}; String8 constant_name = {0};
for(U64 val_idx = 0; val_idx < type->count; val_idx += 1) 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, RADDBG_Parsed *r
//- rjf: writing values back to child processes //- rjf: writing values back to child processes
internal B32 internal B32
df_commit_eval_value(TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval dst_eval, DF_Eval src_eval) df_commit_eval_value(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval dst_eval, DF_Eval src_eval)
{ {
B32 result = 0; B32 result = 0;
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
@@ -4705,8 +4705,8 @@ df_commit_eval_value(TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx,
TG_Key src_type_key = src_eval.type_key; TG_Key src_type_key = src_eval.type_key;
TG_Kind dst_type_kind = tg_kind_from_key(dst_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); TG_Kind src_type_kind = tg_kind_from_key(src_type_key);
U64 dst_type_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, dst_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_raddbg_key(graph, rdbg, src_type_key); U64 src_type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, src_type_key);
//- rjf: get commit data based on destination type //- rjf: get commit data based on destination type
String8 commit_data = {0}; String8 commit_data = {0};
@@ -4914,7 +4914,7 @@ df_filtered_data_members_from_members_cfg_table(Arena *arena, TG_MemberArray mem
} }
internal DF_EvalLinkBaseChunkList internal DF_EvalLinkBaseChunkList
df_eval_link_base_chunk_list_from_eval(Arena *arena, TG_Graph *graph, RADDBG_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, RADDBGI_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}; DF_EvalLinkBaseChunkList list = {0};
for(DF_Eval base_eval = eval, last_eval = zero_struct; list.count < cap;) 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 //- rjf: unpack eval
// //
TG_Key eval_type_key = tg_unwrapped_from_graph_raddbg_key(parse_ctx->type_graph, parse_ctx->rdbg, eval.type_key); TG_Key eval_type_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(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; 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) 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_raddbg_key(parse_ctx->type_graph, parse_ctx->rdbg, eval_type_key); TG_Key direct_type_key = tg_ptee_from_graph_raddbgi_key(parse_ctx->type_graph, parse_ctx->rdbg, eval_type_key);
TG_Kind direct_type_kind = tg_kind_from_key(direct_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); 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") ProfScope("build viz blocks for UDT members")
{ {
//- rjf: type -> filtered data members //- rjf: type -> filtered data members
TG_MemberArray data_members = tg_data_members_from_graph_raddbg_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, udt_eval.type_key); 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 filtered_data_members = df_filtered_data_members_from_members_cfg_table(scratch.arena, data_members, cfg_table); 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 //- 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") ProfScope("build viz blocks for UDT type-eval enums")
{ {
//- rjf: type -> full type info //- rjf: type -> full type info
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, udt_eval.type_key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, udt_eval.type_key);
//- rjf: build block for all members (cannot be expanded) //- 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); 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") ProfScope("(structs, unions, classes) descend to members & make block(s), with linked list view")
{ {
//- rjf: type -> data members //- rjf: type -> data members
TG_MemberArray data_members = tg_data_members_from_graph_raddbg_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, udt_eval.type_key); TG_MemberArray data_members = tg_data_members_from_graph_raddbgi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, udt_eval.type_key);
//- rjf: find link member //- rjf: find link member
TG_Member *link_member = 0; 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 = mem;
link_member_type_kind = tg_kind_from_key(link_member->type_key); link_member_type_kind = tg_kind_from_key(link_member->type_key);
link_member_ptee_type_key = tg_ptee_from_graph_raddbg_key(parse_ctx->type_graph, parse_ctx->rdbg, 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);
break; 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)") ProfScope("(arrays) descend to elements & make block(s)")
{ {
//- rjf: unpack array type info //- rjf: unpack array type info
TG_Type *array_type = tg_type_from_graph_raddbg_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, arr_eval.type_key); TG_Type *array_type = tg_type_from_graph_raddbgi_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, arr_eval.type_key);
U64 array_count = array_type->count; U64 array_count = array_type->count;
TG_Key element_type_key = array_type->direct_type_key; TG_Key element_type_key = array_type->direct_type_key;
U64 element_type_byte_size = tg_byte_size_from_graph_raddbg_key(parse_ctx->type_graph, parse_ctx->rdbg, element_type_key); U64 element_type_byte_size = tg_byte_size_from_graph_raddbgi_key(parse_ctx->type_graph, parse_ctx->rdbg, element_type_key);
//- rjf: build blocks for all elements, split by sub-expansions //- 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); 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 // rjf: determine exandability, editability
if(tg_kind_from_key(eval.type_key) != TG_Kind_Null) if(tg_kind_from_key(eval.type_key) != TG_Kind_Null)
{ {
for(TG_Key t = eval.type_key;; t = tg_unwrapped_direct_from_graph_raddbg_key(parse_ctx->type_graph, parse_ctx->rdbg, t)) for(TG_Key t = eval.type_key;; t = tg_unwrapped_direct_from_graph_raddbgi_key(parse_ctx->type_graph, parse_ctx->rdbg, t))
{ {
TG_Kind kind = tg_kind_from_key(t); TG_Kind kind = tg_kind_from_key(t);
if(kind == TG_Kind_Null) 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_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 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_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, RADDBG_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval); 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, RADDBG_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_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); 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 //- rjf: evaluation value string builder helpers
internal String8 df_string_from_ascii_value(Arena *arena, U8 val); internal String8 df_string_from_ascii_value(Arena *arena, U8 val);
internal String8 df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, DF_EvalVizStringFlags flags, U32 radix, DF_Eval eval); internal String8 df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_EvalVizStringFlags flags, U32 radix, DF_Eval eval);
//- rjf: writing values back to child processes //- rjf: writing values back to child processes
internal B32 df_commit_eval_value(TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval dst_eval, DF_Eval src_eval); internal B32 df_commit_eval_value(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval dst_eval, DF_Eval src_eval);
//- rjf: type helpers //- rjf: type helpers
internal TG_MemberArray df_filtered_data_members_from_members_cfg_table(Arena *arena, TG_MemberArray members, DF_CfgTable *cfg); 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, RADDBG_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, RADDBGI_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_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); 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; DF_Entity *task = n->entity;
if(task->alloc_time_us + 500000 < os_now_microseconds()) if(task->alloc_time_us + 500000 < os_now_microseconds())
{ {
String8 raddbg_path = task->name; String8 raddbgi_path = task->name;
String8 raddbg_name = str8_skip_last_slash(raddbg_path); String8 raddbgi_name = str8_skip_last_slash(raddbgi_path);
String8 task_text = push_str8f(scratch.arena, "Creating %S...", raddbg_name); String8 task_text = push_str8f(scratch.arena, "Creating %S...", raddbgi_name);
UI_Key key = ui_key_from_stringf(ui_key_zero(), "task_%p", task); 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_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); UI_Signal sig = ui_signal_from_box(box);
if(ui_hovering(sig)) UI_Tooltip if(ui_hovering(sig)) UI_Tooltip
{ {
ui_label(raddbg_path); ui_label(raddbgi_path);
} }
ui_box_equip_display_string(box, task_text); 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; default:{}break;
case EVAL_EvalMode_Addr: case EVAL_EvalMode_Addr:
{ {
U64 size = tg_byte_size_from_graph_raddbg_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key); U64 size = tg_byte_size_from_graph_raddbgi_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key);
size = Min(size, 64); size = Min(size, 64);
Rng1U64 vaddr_rng = r1u64(row->eval.offset, row->eval.offset+size); 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); 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 internal String8List
df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, TG_Graph *graph, RADDBG_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, 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)
{ {
ProfBeginFunction(); ProfBeginFunction();
String8List list = {0}; String8List list = {0};
@@ -6869,13 +6869,13 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
{ {
if(opt_member != 0) if(opt_member != 0)
{ {
U64 member_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, opt_member->type_key); U64 member_byte_size = tg_byte_size_from_graph_raddbgi_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" : ""); str8_list_pushf(arena, &list, "member (%I64u offset, %I64u byte%s)", opt_member->off, member_byte_size, member_byte_size > 1 ? "s" : "");
} }
else else
{ {
String8 basic_type_kind_string = tg_kind_basic_string_table[tg_kind_from_key(eval.type_key)]; 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_raddbg_key(graph, rdbg, eval.type_key); U64 byte_size = tg_byte_size_from_graph_raddbgi_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" : ""); 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 //- rjf: non-type path: descend recursively & produce single-line value strings
else if(max_size > 0) else if(max_size > 0)
{ {
TG_Kind eval_type_kind = tg_kind_from_key(tg_unwrapped_from_graph_raddbg_key(graph, rdbg, eval.type_key)); TG_Kind eval_type_kind = tg_kind_from_key(tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, eval.type_key));
U32 radix = default_radix; U32 radix = default_radix;
DF_CfgVal *dec_cfg = df_cfg_val_from_string(cfg_table, str8_lit("dec")); 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")); 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 // rjf: get pointed-at info
TG_Kind type_kind = tg_kind_from_key(eval.type_key); TG_Kind type_kind = tg_kind_from_key(eval.type_key);
TG_Key direct_type_key = tg_ptee_from_graph_raddbg_key(graph, rdbg, eval.type_key); TG_Key direct_type_key = tg_ptee_from_graph_raddbgi_key(graph, rdbg, eval.type_key);
TG_Kind direct_type_kind = tg_kind_from_key(direct_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_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 && 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: case TG_Kind_Array:
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
TG_Type *eval_type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, eval.type_key); TG_Type *eval_type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, eval.type_key);
TG_Key direct_type_key = eval_type->direct_type_key; TG_Key direct_type_key = eval_type->direct_type_key;
TG_Kind direct_type_kind = tg_kind_from_key(direct_type_key); TG_Kind direct_type_kind = tg_kind_from_key(direct_type_key);
U64 array_count = eval_type->count; 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) if(depth < 3)
{ {
U64 direct_type_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, direct_type_key); U64 direct_type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, direct_type_key);
for(U64 idx = 0; idx < array_count && max_size > space_taken; idx += 1) for(U64 idx = 0; idx < array_count && max_size > space_taken; idx += 1)
{ {
DF_Eval element_eval = zero_struct; 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) if(depth < 4)
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
TG_MemberArray data_members = tg_data_members_from_graph_raddbg_key(scratch.arena, graph, rdbg, eval.type_key); TG_MemberArray data_members = tg_data_members_from_graph_raddbgi_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); 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) 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: case DF_EvalVizBlockKind_Members:
if(block_type_kind != TG_Kind_Null) if(block_type_kind != TG_Kind_Null)
{ {
TG_MemberArray data_members = tg_data_members_from_graph_raddbg_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, block->eval.type_key); 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 filtered_data_members = df_filtered_data_members_from_members_cfg_table(scratch.arena, data_members, &block->cfg_table); 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) 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: case DF_EvalVizBlockKind_EnumMembers:
if(block_type_kind == TG_Kind_Enum) if(block_type_kind == TG_Kind_Enum)
{ {
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, parse_ctx->type_graph, parse_ctx->rdbg, block->eval.type_key); TG_Type *type = tg_type_from_graph_raddbgi_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) 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]; 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: case DF_EvalVizBlockKind_Elements:
{ {
TG_Key direct_type_key = tg_unwrapped_direct_from_graph_raddbg_key(parse_ctx->type_graph, parse_ctx->rdbg, block->eval.type_key); TG_Key direct_type_key = tg_unwrapped_direct_from_graph_raddbgi_key(parse_ctx->type_graph, parse_ctx->rdbg, block->eval.type_key);
TG_Kind direct_type_kind = tg_kind_from_key(direct_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_raddbg_key(parse_ctx->type_graph, parse_ctx->rdbg, 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);
for(U64 idx = visible_idx_range.min; idx < visible_idx_range.max; idx += 1) for(U64 idx = visible_idx_range.min; idx < visible_idx_range.max; idx += 1)
{ {
// rjf: get keys for this row // 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 //~ rjf: Eval Viz
internal String8 df_eval_escaped_from_raw_string(Arena *arena, String8 raw); 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, RADDBG_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, 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 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); 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 //~ rjf: Helpers
internal Vec4F32 internal Vec4F32
df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RADDBG_Parsed *raddbg, DF_Entity *process) df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RADDBGI_Parsed *raddbg, DF_Entity *process)
{ {
Vec4F32 rgba = {0}; Vec4F32 rgba = {0};
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
@@ -27,14 +27,14 @@ df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RADDBG_Parsed
case TG_Kind_Array: case TG_Kind_Array:
if(eval.mode == EVAL_EvalMode_Addr) if(eval.mode == EVAL_EvalMode_Addr)
{ {
U64 array_total_size = tg_byte_size_from_graph_raddbg_key(graph, raddbg, type_key); U64 array_total_size = tg_byte_size_from_graph_raddbgi_key(graph, raddbg, type_key);
U64 array_total_size_capped = ClampTop(array_total_size, 64); U64 array_total_size_capped = ClampTop(array_total_size, 64);
Rng1U64 array_memory_vaddr_rng = r1u64(eval.offset, eval.offset + array_total_size_capped); 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); 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; String8 array_memory = array_slice.data;
TG_Key element_type_key = tg_unwrapped_direct_from_graph_raddbg_key(graph, raddbg, type_key); TG_Key element_type_key = tg_unwrapped_direct_from_graph_raddbgi_key(graph, raddbg, type_key);
TG_Kind element_type_kind = tg_kind_from_key(element_type_key); TG_Kind element_type_kind = tg_kind_from_key(element_type_key);
U64 element_type_size = tg_byte_size_from_graph_raddbg_key(graph, raddbg, element_type_key); U64 element_type_size = tg_byte_size_from_graph_raddbgi_key(graph, raddbg, element_type_key);
for(U64 element_idx = 0; element_idx < 4; element_idx += 1) for(U64 element_idx = 0; element_idx < 4; element_idx += 1)
{ {
U64 offset = element_idx*element_type_size; U64 offset = element_idx*element_type_size;
@@ -64,12 +64,12 @@ df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RADDBG_Parsed
case TG_Kind_Union: case TG_Kind_Union:
if(eval.mode == EVAL_EvalMode_Addr) if(eval.mode == EVAL_EvalMode_Addr)
{ {
U64 struct_total_size = tg_byte_size_from_graph_raddbg_key(graph, raddbg, type_key); U64 struct_total_size = tg_byte_size_from_graph_raddbgi_key(graph, raddbg, type_key);
U64 struct_total_size_capped = ClampTop(struct_total_size, 64); U64 struct_total_size_capped = ClampTop(struct_total_size, 64);
Rng1U64 struct_memory_vaddr_rng = r1u64(eval.offset, eval.offset + struct_total_size_capped); 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); 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; String8 struct_memory = struct_slice.data;
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, raddbg, type_key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, raddbg, type_key);
for(U64 element_idx = 0, member_idx = 0; for(U64 element_idx = 0, member_idx = 0;
element_idx < 4 && member_idx < type->count; element_idx < 4 && member_idx < type->count;
member_idx += 1) member_idx += 1)
@@ -102,7 +102,7 @@ df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RADDBG_Parsed
} }
internal void internal void
df_view_rule_hooks__eval_commit_rgba(DF_Eval eval, TG_Graph *graph, RADDBG_Parsed *raddbg, DF_CtrlCtx *ctrl_ctx, Vec4F32 rgba) df_view_rule_hooks__eval_commit_rgba(DF_Eval eval, TG_Graph *graph, RADDBGI_Parsed *raddbg, DF_CtrlCtx *ctrl_ctx, Vec4F32 rgba)
{ {
TG_Key type_key = eval.type_key; TG_Key type_key = eval.type_key;
TG_Kind type_kind = tg_kind_from_key(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, RADDBG_Parse
case TG_Kind_Array: case TG_Kind_Array:
if(eval.mode == EVAL_EvalMode_Addr) if(eval.mode == EVAL_EvalMode_Addr)
{ {
U64 array_total_size = tg_byte_size_from_graph_raddbg_key(graph, raddbg, type_key); U64 array_total_size = tg_byte_size_from_graph_raddbgi_key(graph, raddbg, type_key);
U64 array_total_size_capped = ClampTop(array_total_size, 64); U64 array_total_size_capped = ClampTop(array_total_size, 64);
Rng1U64 array_memory_vaddr_rng = r1u64(eval.offset, eval.offset + array_total_size_capped); 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); 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_raddbg_key(graph, raddbg, type_key); TG_Key element_type_key = tg_unwrapped_direct_from_graph_raddbgi_key(graph, raddbg, type_key);
TG_Kind element_type_kind = tg_kind_from_key(element_type_key); TG_Kind element_type_kind = tg_kind_from_key(element_type_key);
U64 element_type_size = tg_byte_size_from_graph_raddbg_key(graph, raddbg, element_type_key); U64 element_type_size = tg_byte_size_from_graph_raddbgi_key(graph, raddbg, element_type_key);
for(U64 element_idx = 0; element_idx < 4; element_idx += 1) for(U64 element_idx = 0; element_idx < 4; element_idx += 1)
{ {
U64 offset = element_idx*element_type_size; U64 offset = element_idx*element_type_size;
@@ -162,11 +162,11 @@ df_view_rule_hooks__eval_commit_rgba(DF_Eval eval, TG_Graph *graph, RADDBG_Parse
case TG_Kind_Union: case TG_Kind_Union:
if(eval.mode == EVAL_EvalMode_Addr) if(eval.mode == EVAL_EvalMode_Addr)
{ {
U64 struct_total_size = tg_byte_size_from_graph_raddbg_key(graph, raddbg, type_key); U64 struct_total_size = tg_byte_size_from_graph_raddbgi_key(graph, raddbg, type_key);
U64 struct_total_size_capped = ClampTop(struct_total_size, 64); U64 struct_total_size_capped = ClampTop(struct_total_size, 64);
Rng1U64 struct_memory_vaddr_rng = r1u64(eval.offset, eval.offset + struct_total_size_capped); 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); 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_raddbg_key(scratch.arena, graph, raddbg, type_key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, raddbg, type_key);
for(U64 element_idx = 0, member_idx = 0; for(U64 element_idx = 0, member_idx = 0;
element_idx < 4 && member_idx < type->count; element_idx < 4 && member_idx < type->count;
member_idx += 1) member_idx += 1)
@@ -343,7 +343,7 @@ DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_DEF(array)
} }
// rjf: apply array size to type // rjf: apply array size to type
TG_Key pointee = tg_ptee_from_graph_raddbg_key(parse_ctx->type_graph, parse_ctx->rdbg, type_key); TG_Key pointee = tg_ptee_from_graph_raddbgi_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); 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); 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); Temp scratch = scratch_begin(&arena, 1);
TG_Key type_key = eval.type_key; TG_Key type_key = eval.type_key;
TG_Kind type_kind = tg_kind_from_key(type_key); TG_Kind type_kind = tg_kind_from_key(type_key);
U64 type_size_bytes = tg_byte_size_from_graph_raddbg_key(parse_ctx->type_graph, parse_ctx->rdbg, type_key); U64 type_size_bytes = tg_byte_size_from_graph_raddbgi_key(parse_ctx->type_graph, parse_ctx->rdbg, type_key);
if(TG_Kind_Char8 <= type_kind && type_kind <= TG_Kind_S256 && if(TG_Kind_Char8 <= type_kind && type_kind <= TG_Kind_S256 &&
(type_size_bytes == 2 || (type_size_bytes == 2 ||
type_size_bytes == 4 || type_size_bytes == 4 ||
+2 -2
View File
@@ -32,8 +32,8 @@ struct DF_TxtTopologyInfo
//////////////////////////////// ////////////////////////////////
//~ rjf: Helpers //~ rjf: Helpers
internal Vec4F32 df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RADDBG_Parsed *raddbg, DF_Entity *process); 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, RADDBG_Parsed *raddbg, DF_CtrlCtx *ctrl_ctx, Vec4F32 rgba); 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 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_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_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); 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); DF_Entity *binary = df_binary_file_from_module(module);
String8 exe_path = df_full_path_from_entity(scratch.arena, binary); 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); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, os_now_microseconds()+100);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
//- rjf: calculate top-level keys, expand root-level, grab root expansion node //- rjf: calculate top-level keys, expand root-level, grab root expansion node
DF_ExpandKey parent_key = df_expand_key_make(5381, 0); 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; default:{}break;
case EVAL_EvalMode_Addr: case EVAL_EvalMode_Addr:
{ {
U64 size = tg_byte_size_from_graph_raddbg_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key); U64 size = tg_byte_size_from_graph_raddbgi_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key);
size = Min(size, 64); size = Min(size, 64);
Rng1U64 vaddr_rng = r1u64(row->eval.offset, row->eval.offset+size); 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); 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->depth > 0 &&
!row_expanded) !row_expanded)
{ {
U64 next_off = (row->eval.offset + tg_byte_size_from_graph_raddbg_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key)); U64 next_off = (row->eval.offset + tg_byte_size_from_graph_raddbgi_key(parse_ctx.type_graph, parse_ctx.rdbg, row->eval.type_key));
if(next_off%64 != 0 && row->eval.offset/64 < next_off/64) if(next_off%64 != 0 && row->eval.offset/64 < next_off/64)
{ {
ui_set_next_fixed_x(0); ui_set_next_fixed_x(0);
@@ -2918,7 +2918,7 @@ DF_VIEW_UI_FUNCTION_DEF(SymbolLister)
//- rjf: query -> raddbg, filtered items //- rjf: query -> raddbg, filtered items
U128 fuzzy_search_key = {(U64)view, df_hash_from_string(str8_struct(&view))}; 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); DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, os_now_microseconds()+100);
RADDBG_Parsed *rdbg = &dbgi->rdbg; RADDBGI_Parsed *rdbg = &dbgi->rdbg;
B32 items_stale = 0; 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); 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) if(items_stale)
@@ -2929,9 +2929,9 @@ DF_VIEW_UI_FUNCTION_DEF(SymbolLister)
//- rjf: submit best match when hitting enter w/ no selection //- 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)) if(slv->cursor.y == 0 && items.count != 0 && os_key_press(ui_events(), ui_window(), 0, OS_Key_Return))
{ {
RADDBG_Procedure *procedure = raddbg_element_from_idx(rdbg, procedures, items.v[0].idx); RADDBGI_Procedure *procedure = raddbgi_element_from_idx(rdbg, procedures, items.v[0].idx);
U64 name_size = 0; U64 name_size = 0;
U8 *name_base = raddbg_string_from_idx(rdbg, procedure->name_string_idx, &name_size); U8 *name_base = raddbgi_string_from_idx(rdbg, procedure->name_string_idx, &name_size);
String8 name = str8(name_base, name_size); String8 name = str8(name_base, name_size);
if(name.size != 0) 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) UI_Focus((slv->cursor.y == idx+1) ? UI_FocusKind_On : UI_FocusKind_Off)
{ {
DBGI_FuzzySearchItem *item = &items.v[idx]; DBGI_FuzzySearchItem *item = &items.v[idx];
RADDBG_Procedure *procedure = raddbg_element_from_idx(rdbg, procedures, item->idx); RADDBGI_Procedure *procedure = raddbgi_element_from_idx(rdbg, procedures, item->idx);
U64 name_size = 0; U64 name_size = 0;
U8 *name_base = raddbg_string_from_idx(rdbg, procedure->name_string_idx, &name_size); U8 *name_base = raddbgi_string_from_idx(rdbg, procedure->name_string_idx, &name_size);
String8 name = str8(name_base, name_size); String8 name = str8(name_base, name_size);
RADDBG_TypeNode *type_node = raddbg_element_from_idx(rdbg, type_nodes, procedure->type_idx); RADDBGI_TypeNode *type_node = raddbgi_element_from_idx(rdbg, type_nodes, procedure->type_idx);
TG_Key type_key = tg_key_ext(tg_kind_from_raddbg_type_kind(type_node->kind), procedure->type_idx); TG_Key type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), procedure->type_idx);
ui_set_next_hover_cursor(OS_Cursor_HandPoint); ui_set_next_hover_cursor(OS_Cursor_HandPoint);
UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable| UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable|
UI_BoxFlag_DrawBackground| UI_BoxFlag_DrawBackground|
@@ -7902,7 +7902,7 @@ DF_VIEW_UI_FUNCTION_DEF(Memory)
DBGI_Scope *scope = dbgi_scope_open(); DBGI_Scope *scope = dbgi_scope_open();
U64 thread_rip_vaddr = df_query_cached_rip_from_thread_unwind(thread, ctrl_ctx.unwind_count); 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); EVAL_ParseCtx parse_ctx = df_eval_parse_ctx_from_process_vaddr(scope, process, thread_rip_vaddr);
RADDBG_Parsed *rdbg = parse_ctx.rdbg; RADDBGI_Parsed *rdbg = parse_ctx.rdbg;
for(EVAL_String2NumMapNode *n = parse_ctx.locals_map->first; n != 0; n = n->order_next) for(EVAL_String2NumMapNode *n = parse_ctx.locals_map->first; n != 0; n = n->order_next)
{ {
String8 local_name = n->string; String8 local_name = n->string;
@@ -7910,7 +7910,7 @@ DF_VIEW_UI_FUNCTION_DEF(Memory)
if(local_eval.mode == EVAL_EvalMode_Addr) if(local_eval.mode == EVAL_EvalMode_Addr)
{ {
TG_Kind local_eval_type_kind = tg_kind_from_key(local_eval.type_key); TG_Kind local_eval_type_kind = tg_kind_from_key(local_eval.type_key);
U64 local_eval_type_size = tg_byte_size_from_graph_raddbg_key(parse_ctx.type_graph, rdbg, 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);
Rng1U64 vaddr_rng = r1u64(local_eval.offset, local_eval.offset+local_eval_type_size); 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); Rng1U64 vaddr_rng_in_visible = intersect_1u64(viz_range_bytes, vaddr_rng);
if(vaddr_rng_in_visible.max != vaddr_rng_in_visible.min) 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: default:
{ {
// compute bytecode advance // compute bytecode advance
U8 ctrlbits = raddbg_eval_opcode_ctrlbits[opcode]; U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[opcode];
U64 extra_byte_count = RADDBG_DECODEN_FROM_CTRLBITS(ctrlbits); U64 extra_byte_count = RADDBGI_DECODEN_FROM_CTRLBITS(ctrlbits);
U8 *next_ptr = ptr + 1 + extra_byte_count; U8 *next_ptr = ptr + 1 + extra_byte_count;
Assert(next_ptr <= opl); Assert(next_ptr <= opl);
@@ -62,9 +62,9 @@ eval_bytecode_from_oplist(Arena *arena, EVAL_OpList *list){
} }
internal void internal void
eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RADDBG_EvalOp opcode, U64 p){ eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RADDBGI_EvalOp opcode, U64 p){
U8 ctrlbits = raddbg_eval_opcode_ctrlbits[opcode]; U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[opcode];
U32 p_size = RADDBG_DECODEN_FROM_CTRLBITS(ctrlbits); U32 p_size = RADDBGI_DECODEN_FROM_CTRLBITS(ctrlbits);
EVAL_Op *node = push_array_no_zero(arena, EVAL_Op, 1); EVAL_Op *node = push_array_no_zero(arena, EVAL_Op, 1);
node->opcode = opcode; node->opcode = opcode;
@@ -78,35 +78,35 @@ eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RADDBG_EvalOp opcode, U64 p
internal void internal void
eval_oplist_push_uconst(Arena *arena, EVAL_OpList *list, U64 x){ eval_oplist_push_uconst(Arena *arena, EVAL_OpList *list, U64 x){
if (x <= 0xFF){ if (x <= 0xFF){
eval_oplist_push_op(arena, list, RADDBG_EvalOp_ConstU8, x); eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU8, x);
} }
else if (x <= 0xFFFF){ else if (x <= 0xFFFF){
eval_oplist_push_op(arena, list, RADDBG_EvalOp_ConstU16, x); eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU16, x);
} }
else if (x <= 0xFFFFFFFF){ else if (x <= 0xFFFFFFFF){
eval_oplist_push_op(arena, list, RADDBG_EvalOp_ConstU32, x); eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU32, x);
} }
else{ else{
eval_oplist_push_op(arena, list, RADDBG_EvalOp_ConstU64, x); eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU64, x);
} }
} }
internal void internal void
eval_oplist_push_sconst(Arena *arena, EVAL_OpList *list, S64 x){ eval_oplist_push_sconst(Arena *arena, EVAL_OpList *list, S64 x){
if (-0x80 <= x && x <= 0x7F){ if (-0x80 <= x && x <= 0x7F){
eval_oplist_push_op(arena, list, RADDBG_EvalOp_ConstU8, (U64)x); eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU8, (U64)x);
eval_oplist_push_op(arena, list, RADDBG_EvalOp_TruncSigned, 8); eval_oplist_push_op(arena, list, RADDBGI_EvalOp_TruncSigned, 8);
} }
else if (-0x8000 <= x && x <= 0x7FFF){ else if (-0x8000 <= x && x <= 0x7FFF){
eval_oplist_push_op(arena, list, RADDBG_EvalOp_ConstU16, (U64)x); eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU16, (U64)x);
eval_oplist_push_op(arena, list, RADDBG_EvalOp_TruncSigned, 16); eval_oplist_push_op(arena, list, RADDBGI_EvalOp_TruncSigned, 16);
} }
else if (-0x80000000ll <= x && x <= 0x7FFFFFFFll){ else if (-0x80000000ll <= x && x <= 0x7FFFFFFFll){
eval_oplist_push_op(arena, list, RADDBG_EvalOp_ConstU32, (U64)x); eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU32, (U64)x);
eval_oplist_push_op(arena, list, RADDBG_EvalOp_TruncSigned, 32); eval_oplist_push_op(arena, list, RADDBGI_EvalOp_TruncSigned, 32);
} }
else{ else{
eval_oplist_push_op(arena, list, RADDBG_EvalOp_ConstU64, (U64)x); eval_oplist_push_op(arena, list, RADDBGI_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 //~ allen: EVAL Expression Info Functions
internal RADDBG_EvalOp internal RADDBGI_EvalOp
eval_opcode_from_expr_kind(EVAL_ExprKind kind){ eval_opcode_from_expr_kind(EVAL_ExprKind kind){
RADDBG_EvalOp result = RADDBG_EvalOp_Stop; RADDBGI_EvalOp result = RADDBGI_EvalOp_Stop;
switch (kind){ switch (kind){
case EVAL_ExprKind_Neg: result = RADDBG_EvalOp_Neg; break; case EVAL_ExprKind_Neg: result = RADDBGI_EvalOp_Neg; break;
case EVAL_ExprKind_LogNot: result = RADDBG_EvalOp_LogNot; break; case EVAL_ExprKind_LogNot: result = RADDBGI_EvalOp_LogNot; break;
case EVAL_ExprKind_BitNot: result = RADDBG_EvalOp_BitNot; break; case EVAL_ExprKind_BitNot: result = RADDBGI_EvalOp_BitNot; break;
case EVAL_ExprKind_Mul: result = RADDBG_EvalOp_Mul; break; case EVAL_ExprKind_Mul: result = RADDBGI_EvalOp_Mul; break;
case EVAL_ExprKind_Div: result = RADDBG_EvalOp_Div; break; case EVAL_ExprKind_Div: result = RADDBGI_EvalOp_Div; break;
case EVAL_ExprKind_Mod: result = RADDBG_EvalOp_Mod; break; case EVAL_ExprKind_Mod: result = RADDBGI_EvalOp_Mod; break;
case EVAL_ExprKind_Add: result = RADDBG_EvalOp_Add; break; case EVAL_ExprKind_Add: result = RADDBGI_EvalOp_Add; break;
case EVAL_ExprKind_Sub: result = RADDBG_EvalOp_Sub; break; case EVAL_ExprKind_Sub: result = RADDBGI_EvalOp_Sub; break;
case EVAL_ExprKind_LShift: result = RADDBG_EvalOp_LShift; break; case EVAL_ExprKind_LShift: result = RADDBGI_EvalOp_LShift; break;
case EVAL_ExprKind_RShift: result = RADDBG_EvalOp_RShift; break; case EVAL_ExprKind_RShift: result = RADDBGI_EvalOp_RShift; break;
case EVAL_ExprKind_Less: result = RADDBG_EvalOp_Less; break; case EVAL_ExprKind_Less: result = RADDBGI_EvalOp_Less; break;
case EVAL_ExprKind_LsEq: result = RADDBG_EvalOp_LsEq; break; case EVAL_ExprKind_LsEq: result = RADDBGI_EvalOp_LsEq; break;
case EVAL_ExprKind_Grtr: result = RADDBG_EvalOp_Grtr; break; case EVAL_ExprKind_Grtr: result = RADDBGI_EvalOp_Grtr; break;
case EVAL_ExprKind_GrEq: result = RADDBG_EvalOp_GrEq; break; case EVAL_ExprKind_GrEq: result = RADDBGI_EvalOp_GrEq; break;
case EVAL_ExprKind_EqEq: result = RADDBG_EvalOp_EqEq; break; case EVAL_ExprKind_EqEq: result = RADDBGI_EvalOp_EqEq; break;
case EVAL_ExprKind_NtEq: result = RADDBG_EvalOp_NtEq; break; case EVAL_ExprKind_NtEq: result = RADDBGI_EvalOp_NtEq; break;
case EVAL_ExprKind_BitAnd: result = RADDBG_EvalOp_BitAnd; break; case EVAL_ExprKind_BitAnd: result = RADDBGI_EvalOp_BitAnd; break;
case EVAL_ExprKind_BitXor: result = RADDBG_EvalOp_BitXor; break; case EVAL_ExprKind_BitXor: result = RADDBGI_EvalOp_BitXor; break;
case EVAL_ExprKind_BitOr: result = RADDBG_EvalOp_BitOr; break; case EVAL_ExprKind_BitOr: result = RADDBGI_EvalOp_BitOr; break;
case EVAL_ExprKind_LogAnd: result = RADDBG_EvalOp_LogAnd; break; case EVAL_ExprKind_LogAnd: result = RADDBGI_EvalOp_LogAnd; break;
case EVAL_ExprKind_LogOr: result = RADDBG_EvalOp_LogOr; break; case EVAL_ExprKind_LogOr: result = RADDBGI_EvalOp_LogOr; break;
} }
return(result); return(result);
} }
@@ -286,9 +286,9 @@ eval_expr_leaf_type(Arena *arena, void *location, TG_Key type_key){
//////////////////////////////// ////////////////////////////////
//~ allen: EVAL Type Information Transformers //~ allen: EVAL Type Information Transformers
internal RADDBG_EvalTypeGroup internal RADDBGI_EvalTypeGroup
eval_type_group_from_kind(TG_Kind kind){ eval_type_group_from_kind(TG_Kind kind){
RADDBG_EvalTypeGroup result = 0; RADDBGI_EvalTypeGroup result = 0;
switch (kind){ switch (kind){
default:{}break; 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_IncompleteStruct: case TG_Kind_IncompleteClass:
case TG_Kind_IncompleteUnion: case TG_Kind_IncompleteEnum: case TG_Kind_IncompleteUnion: case TG_Kind_IncompleteEnum:
case TG_Kind_Bitfield: case TG_Kind_Variadic: case TG_Kind_Bitfield: case TG_Kind_Variadic:
result = RADDBG_EvalTypeGroup_Other; break; result = RADDBGI_EvalTypeGroup_Other; break;
case TG_Kind_Handle: case TG_Kind_Handle:
case TG_Kind_UChar8: case TG_Kind_UChar16: case TG_Kind_UChar32: 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_U512:
case TG_Kind_Ptr: case TG_Kind_LRef: case TG_Kind_RRef: case TG_Kind_Ptr: case TG_Kind_LRef: case TG_Kind_RRef:
case TG_Kind_Function: case TG_Kind_Method: case TG_Kind_MemberPtr: case TG_Kind_Function: case TG_Kind_Method: case TG_Kind_MemberPtr:
result = RADDBG_EvalTypeGroup_U; break; result = RADDBGI_EvalTypeGroup_U; break;
case TG_Kind_Char8: case TG_Kind_Char16: case TG_Kind_Char32: 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_S8: case TG_Kind_S16: case TG_Kind_S32:
case TG_Kind_S64: case TG_Kind_S128: case TG_Kind_S256: case TG_Kind_S64: case TG_Kind_S128: case TG_Kind_S256:
case TG_Kind_S512: case TG_Kind_S512:
case TG_Kind_Bool: case TG_Kind_Bool:
result = RADDBG_EvalTypeGroup_S; break; result = RADDBGI_EvalTypeGroup_S; break;
case TG_Kind_F32: case TG_Kind_F32:
result = RADDBG_EvalTypeGroup_F32; break; result = RADDBGI_EvalTypeGroup_F32; break;
case TG_Kind_F64: case TG_Kind_F64:
result = RADDBG_EvalTypeGroup_F64; break; result = RADDBGI_EvalTypeGroup_F64; break;
} }
return(result); return(result);
} }
internal TG_Key internal TG_Key
eval_type_unwrap_enum(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key) eval_type_unwrap_enum(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{ {
TG_Key result = key; TG_Key result = key;
for(B32 good = 1; good;) for(B32 good = 1; good;)
@@ -339,7 +339,7 @@ eval_type_unwrap_enum(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
TG_Kind kind = tg_kind_from_key(key); TG_Kind kind = tg_kind_from_key(key);
if(kind == TG_Kind_Enum) if(kind == TG_Kind_Enum)
{ {
result = tg_direct_from_graph_raddbg_key(graph, rdbg, result); result = tg_direct_from_graph_raddbgi_key(graph, rdbg, result);
} }
else else
{ {
@@ -350,7 +350,7 @@ eval_type_unwrap_enum(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
} }
internal TG_Key internal TG_Key
eval_type_promote(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key){ eval_type_promote(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key){
TG_Key result = key; TG_Key result = key;
TG_Kind kind = tg_kind_from_key(key); TG_Kind kind = tg_kind_from_key(key);
if(kind == TG_Kind_Bool || if(kind == TG_Kind_Bool ||
@@ -365,7 +365,7 @@ eval_type_promote(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key){
} }
internal TG_Key internal TG_Key
eval_type_coerce(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key l, TG_Key r){ eval_type_coerce(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key l, TG_Key r){
Assert(eval_kind_is_basic_or_enum(tg_kind_from_key(l)) && Assert(eval_kind_is_basic_or_enum(tg_kind_from_key(l)) &&
eval_kind_is_basic_or_enum(tg_kind_from_key(r))); eval_kind_is_basic_or_enum(tg_kind_from_key(r)));
@@ -384,12 +384,12 @@ eval_type_coerce(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key l, TG_Key r){
} }
internal B32 internal B32
eval_type_match(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key l, TG_Key r){ eval_type_match(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key l, TG_Key r){
B32 result = 0; B32 result = 0;
// unwrap // unwrap
TG_Key lu = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, l); TG_Key lu = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, l);
TG_Key ru = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, r); TG_Key ru = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, r);
if (tg_key_match(lu, ru)){ if (tg_key_match(lu, ru)){
result = 1; result = 1;
@@ -408,8 +408,8 @@ eval_type_match(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key l, TG_Key r){
case TG_Kind_LRef: case TG_Kind_LRef:
case TG_Kind_RRef: case TG_Kind_RRef:
{ {
TG_Key lud = tg_direct_from_graph_raddbg_key(graph, rdbg, lu); TG_Key lud = tg_direct_from_graph_raddbgi_key(graph, rdbg, lu);
TG_Key rud = tg_direct_from_graph_raddbg_key(graph, rdbg, ru); TG_Key rud = tg_direct_from_graph_raddbgi_key(graph, rdbg, ru);
if (eval_type_match(graph, rdbg, lud, rud)){ if (eval_type_match(graph, rdbg, lud, rud)){
result = 1; result = 1;
} }
@@ -417,10 +417,10 @@ eval_type_match(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key l, TG_Key r){
case TG_Kind_MemberPtr: case TG_Kind_MemberPtr:
{ {
TG_Key lud = tg_direct_from_graph_raddbg_key(graph, rdbg, lu); TG_Key lud = tg_direct_from_graph_raddbgi_key(graph, rdbg, lu);
TG_Key rud = tg_direct_from_graph_raddbg_key(graph, rdbg, ru); TG_Key rud = tg_direct_from_graph_raddbgi_key(graph, rdbg, ru);
TG_Key luo = tg_owner_from_graph_raddbg_key(graph, rdbg, lu); TG_Key luo = tg_owner_from_graph_raddbgi_key(graph, rdbg, lu);
TG_Key ruo = tg_owner_from_graph_raddbg_key(graph, rdbg, ru); TG_Key ruo = tg_owner_from_graph_raddbgi_key(graph, rdbg, ru);
if (eval_type_match(graph, rdbg, lud, rud) && if (eval_type_match(graph, rdbg, lud, rud) &&
eval_type_match(graph, rdbg, luo, ruo)){ eval_type_match(graph, rdbg, luo, ruo)){
result = 1; result = 1;
@@ -430,8 +430,8 @@ eval_type_match(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key l, TG_Key r){
case TG_Kind_Array: case TG_Kind_Array:
{ {
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
TG_Type *lt = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, l); TG_Type *lt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, r); TG_Type *rt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, r);
if(lt->count == rt->count && eval_type_match(graph, rdbg, lt->direct_type_key, rt->direct_type_key)) if(lt->count == rt->count && eval_type_match(graph, rdbg, lt->direct_type_key, rt->direct_type_key))
{ {
result = 1; result = 1;
@@ -442,8 +442,8 @@ eval_type_match(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key l, TG_Key r){
case TG_Kind_Function: case TG_Kind_Function:
{ {
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
TG_Type *lt = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, l); TG_Type *lt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, r); TG_Type *rt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, r);
if (lt->count == rt->count && eval_type_match(graph, rdbg, lt->direct_type_key, rt->direct_type_key)) if (lt->count == rt->count && eval_type_match(graph, rdbg, lt->direct_type_key, rt->direct_type_key))
{ {
B32 params_match = 1; B32 params_match = 1;
@@ -466,8 +466,8 @@ eval_type_match(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key l, TG_Key r){
case TG_Kind_Method: case TG_Kind_Method:
{ {
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
TG_Type *lt = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, l); TG_Type *lt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, r); TG_Type *rt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, r);
if (lt->count == rt->count && if (lt->count == rt->count &&
eval_type_match(graph, rdbg, lt->direct_type_key, rt->direct_type_key) && 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)) 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* internal EVAL_IRTree*
eval_irtree_const_u(Arena *arena, U64 v){ eval_irtree_const_u(Arena *arena, U64 v){
// choose encoding op // choose encoding op
RADDBG_EvalOp op = RADDBG_EvalOp_ConstU64; RADDBGI_EvalOp op = RADDBGI_EvalOp_ConstU64;
if (v < 0x100){ if (v < 0x100){
op = RADDBG_EvalOp_ConstU8; op = RADDBGI_EvalOp_ConstU8;
} }
else if (v < 0x10000){ else if (v < 0x10000){
op = RADDBG_EvalOp_ConstU16; op = RADDBGI_EvalOp_ConstU16;
} }
else if (v < 0x100000000){ else if (v < 0x100000000){
op = RADDBG_EvalOp_ConstU32; op = RADDBGI_EvalOp_ConstU32;
} }
// make the tree node // make the tree node
@@ -541,8 +541,8 @@ eval_irtree_const_u(Arena *arena, U64 v){
} }
internal EVAL_IRTree* internal EVAL_IRTree*
eval_irtree_unary_op(Arena *arena, RADDBG_EvalOp op, eval_irtree_unary_op(Arena *arena, RADDBGI_EvalOp op,
RADDBG_EvalTypeGroup group, EVAL_IRTree *c){ RADDBGI_EvalTypeGroup group, EVAL_IRTree *c){
EVAL_IRTree *result = push_array(arena, EVAL_IRTree, 1); EVAL_IRTree *result = push_array(arena, EVAL_IRTree, 1);
result->op = op; result->op = op;
result->p = group; result->p = group;
@@ -551,7 +551,7 @@ eval_irtree_unary_op(Arena *arena, RADDBG_EvalOp op,
} }
internal EVAL_IRTree* internal EVAL_IRTree*
eval_irtree_binary_op(Arena *arena, RADDBG_EvalOp op, RADDBG_EvalTypeGroup group, eval_irtree_binary_op(Arena *arena, RADDBGI_EvalOp op, RADDBGI_EvalTypeGroup group,
EVAL_IRTree *l, EVAL_IRTree *r){ EVAL_IRTree *l, EVAL_IRTree *r){
EVAL_IRTree *result = push_array(arena, EVAL_IRTree, 1); EVAL_IRTree *result = push_array(arena, EVAL_IRTree, 1);
result->op = op; result->op = op;
@@ -562,15 +562,15 @@ eval_irtree_binary_op(Arena *arena, RADDBG_EvalOp op, RADDBG_EvalTypeGroup group
} }
internal EVAL_IRTree* internal EVAL_IRTree*
eval_irtree_binary_op_u(Arena *arena, RADDBG_EvalOp op, EVAL_IRTree *l, EVAL_IRTree *r){ 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, RADDBG_EvalTypeGroup_U, l, r); EVAL_IRTree *result = eval_irtree_binary_op(arena, op, RADDBGI_EvalTypeGroup_U, l, r);
return(result); return(result);
} }
internal EVAL_IRTree* internal EVAL_IRTree*
eval_irtree_conditional(Arena *arena, EVAL_IRTree *c, EVAL_IRTree *l, EVAL_IRTree *r){ eval_irtree_conditional(Arena *arena, EVAL_IRTree *c, EVAL_IRTree *l, EVAL_IRTree *r){
EVAL_IRTree *result = push_array(arena, EVAL_IRTree, 1); EVAL_IRTree *result = push_array(arena, EVAL_IRTree, 1);
result->op = RADDBG_EvalOp_Cond; result->op = RADDBGI_EvalOp_Cond;
result->children[0] = c; result->children[0] = c;
result->children[1] = l; result->children[1] = l;
result->children[2] = r; result->children[2] = r;
@@ -589,13 +589,13 @@ eval_irtree_bytecode_no_copy(Arena *arena, String8 bytecode){
//~ allen: EVAL IR-Tree High Level Helpers //~ allen: EVAL IR-Tree High Level Helpers
internal EVAL_IRTree* internal EVAL_IRTree*
eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key){ 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_raddbg_key(graph, rdbg, type_key); U64 byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, type_key);
EVAL_IRTree *result = &eval_irtree_nil; EVAL_IRTree *result = &eval_irtree_nil;
if (0 < byte_size && byte_size <= 8){ if (0 < byte_size && byte_size <= 8){
// build the read node // build the read node
EVAL_IRTree *read_node = push_array(arena, EVAL_IRTree, 1); EVAL_IRTree *read_node = push_array(arena, EVAL_IRTree, 1);
read_node->op = RADDBG_EvalOp_MemRead; read_node->op = RADDBGI_EvalOp_MemRead;
read_node->p = byte_size; read_node->p = byte_size;
read_node->children[0] = c; read_node->children[0] = c;
@@ -605,7 +605,7 @@ eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EV
TG_Kind kind = tg_kind_from_key(type_key); TG_Kind kind = tg_kind_from_key(type_key);
if (bit_size < 64 && eval_kind_is_signed(kind)){ if (bit_size < 64 && eval_kind_is_signed(kind)){
with_trunc = push_array(arena, EVAL_IRTree, 1); with_trunc = push_array(arena, EVAL_IRTree, 1);
with_trunc->op = RADDBG_EvalOp_TruncSigned; with_trunc->op = RADDBGI_EvalOp_TruncSigned;
with_trunc->p = bit_size; with_trunc->p = bit_size;
with_trunc->children[0] = read_node; with_trunc->children[0] = read_node;
} }
@@ -620,23 +620,23 @@ eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EV
} }
internal EVAL_IRTree* internal EVAL_IRTree*
eval_irtree_convert_lo(Arena *arena, EVAL_IRTree *c, RADDBG_EvalTypeGroup out, RADDBG_EvalTypeGroup in){ eval_irtree_convert_lo(Arena *arena, EVAL_IRTree *c, RADDBGI_EvalTypeGroup out, RADDBGI_EvalTypeGroup in){
EVAL_IRTree *result = push_array(arena, EVAL_IRTree, 1); EVAL_IRTree *result = push_array(arena, EVAL_IRTree, 1);
result->op = RADDBG_EvalOp_Convert; result->op = RADDBGI_EvalOp_Convert;
result->p = in | (out << 8); result->p = in | (out << 8);
result->children[0] = c; result->children[0] = c;
return(result); return(result);
} }
internal EVAL_IRTree* internal EVAL_IRTree*
eval_irtree_trunc(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key){ eval_irtree_trunc(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key){
EVAL_IRTree *result = c; EVAL_IRTree *result = c;
U64 byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, type_key); U64 byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, type_key);
if (byte_size < 64){ if (byte_size < 64){
RADDBG_EvalOp op = RADDBG_EvalOp_Trunc; RADDBGI_EvalOp op = RADDBGI_EvalOp_Trunc;
TG_Kind kind = tg_kind_from_key(type_key); TG_Kind kind = tg_kind_from_key(type_key);
if (eval_kind_is_signed(kind)){ if (eval_kind_is_signed(kind)){
op = RADDBG_EvalOp_TruncSigned; op = RADDBGI_EvalOp_TruncSigned;
} }
U64 bit_size = byte_size << 3; U64 bit_size = byte_size << 3;
result = push_array(arena, EVAL_IRTree, 1); result = push_array(arena, EVAL_IRTree, 1);
@@ -648,19 +648,19 @@ eval_irtree_trunc(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_IRTre
} }
internal EVAL_IRTree* internal EVAL_IRTree*
eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_IRTree *c, TG_Key out, TG_Key in){ eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_IRTree *c, TG_Key out, TG_Key in){
EVAL_IRTree *result = c; EVAL_IRTree *result = c;
TG_Kind in_kind = tg_kind_from_key(in); TG_Kind in_kind = tg_kind_from_key(in);
TG_Kind out_kind = tg_kind_from_key(out); TG_Kind out_kind = tg_kind_from_key(out);
U8 in_group = eval_type_group_from_kind(in_kind); U8 in_group = eval_type_group_from_kind(in_kind);
U8 out_group = eval_type_group_from_kind(out_kind); U8 out_group = eval_type_group_from_kind(out_kind);
U32 conversion_rule = raddbg_eval_conversion_rule(in_group, out_group); U32 conversion_rule = raddbgi_eval_conversion_rule(in_group, out_group);
if(conversion_rule == RADDBG_EvalConversionKind_Legal) if(conversion_rule == RADDBGI_EvalConversionKind_Legal)
{ {
result = eval_irtree_convert_lo(arena, result, out_group, in_group); result = eval_irtree_convert_lo(arena, result, out_group, in_group);
} }
U64 in_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, in); U64 in_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, in);
U64 out_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, out); U64 out_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, out);
if(out_byte_size < in_byte_size && eval_kind_is_integer(out_kind)) if(out_byte_size < in_byte_size && eval_kind_is_integer(out_kind))
{ {
result = eval_irtree_trunc(arena, graph, rdbg, result, out); result = eval_irtree_trunc(arena, graph, rdbg, result, out);
@@ -669,7 +669,7 @@ eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_
} }
internal EVAL_IRTree* internal EVAL_IRTree*
eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_EvalMode from_mode, eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_EvalMode from_mode,
EVAL_IRTree *tree, TG_Key type_key){ EVAL_IRTree *tree, TG_Key type_key){
EVAL_IRTree *result = tree; EVAL_IRTree *result = tree;
switch (from_mode){ switch (from_mode){
@@ -680,7 +680,7 @@ eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg,
}break; }break;
case EVAL_EvalMode_Reg: case EVAL_EvalMode_Reg:
{ {
result = eval_irtree_unary_op(arena, RADDBG_EvalOp_RegReadDyn, RADDBG_EvalTypeGroup_U, tree); result = eval_irtree_unary_op(arena, RADDBGI_EvalOp_RegReadDyn, RADDBGI_EvalTypeGroup_U, tree);
}break; }break;
} }
return(result); return(result);
@@ -715,7 +715,7 @@ eval_push_leaf_ident_exprs_from_expr__in_place(Arena *arena, EVAL_String2ExprMap
} }
internal TG_Key internal TG_Key
eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_Expr *expr, EVAL_ErrorList *eout){ eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_Expr *expr, EVAL_ErrorList *eout){
TG_Key result = zero_struct; TG_Key result = zero_struct;
EVAL_ExprKind kind = expr->kind; EVAL_ExprKind kind = expr->kind;
@@ -758,7 +758,7 @@ eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVA
} }
internal EVAL_IRTreeAndType internal EVAL_IRTreeAndType
eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_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, RADDBGI_Parsed *rdbg, EVAL_String2ExprMap *leaf_ident_expr_map, EVAL_Expr *expr, EVAL_ErrorList *eout)
{ {
ProfBeginFunction(); ProfBeginFunction();
EVAL_IRTreeAndType result = {0}; EVAL_IRTreeAndType result = {0};
@@ -781,8 +781,8 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
EVAL_IRTreeAndType r = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprr, eout); 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){ if (l.tree->op != 0 && r.tree->op != 0){
TG_Key l_restype = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, l.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_raddbg_key(graph, rdbg, r.type_key); TG_Key r_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, r.type_key);
TG_Kind l_restype_kind = tg_kind_from_key(l_restype); TG_Kind l_restype_kind = tg_kind_from_key(l_restype);
TG_Kind r_restype_kind = tg_kind_from_key(r_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, RADDBG_Parsed *rdb
eval_errorf(arena, eout, EVAL_ErrorKind_MalformedInput, exprr->location, "Cannot index with this type."); eval_errorf(arena, eout, EVAL_ErrorKind_MalformedInput, exprr->location, "Cannot index with this type.");
} }
else{ else{
direct_type = tg_unwrapped_direct_from_graph_raddbg_key(graph, rdbg, l_restype); direct_type = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, l_restype);
direct_type_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, direct_type); direct_type_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, direct_type);
if (l_restype_kind == TG_Kind_Ptr){ if (l_restype_kind == TG_Kind_Ptr){
if (direct_type_size == 0){ if (direct_type_size == 0){
eval_errorf(arena, eout, EVAL_ErrorKind_MalformedInput, exprr->location, "Cannot index into pointers of zero-sized types."); 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, RADDBG_Parsed *rdb
EVAL_IRTree *index_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, r.mode, r.tree, r_restype); EVAL_IRTree *index_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, r.mode, r.tree, r_restype);
if (direct_type_size > 1){ if (direct_type_size > 1){
EVAL_IRTree *const_tree = eval_irtree_const_u(arena, direct_type_size); EVAL_IRTree *const_tree = eval_irtree_const_u(arena, direct_type_size);
index_tree = eval_irtree_binary_op_u(arena, RADDBG_EvalOp_Mul, index_tree, const_tree); index_tree = eval_irtree_binary_op_u(arena, RADDBGI_EvalOp_Mul, index_tree, const_tree);
} }
// how to compute the base address // how to compute the base address
@@ -842,7 +842,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
} }
// how to compute the final address // how to compute the final address
EVAL_IRTree *new_tree = eval_irtree_binary_op_u(arena, RADDBG_EvalOp_Add, index_tree, base_tree); EVAL_IRTree *new_tree = eval_irtree_binary_op_u(arena, RADDBGI_EvalOp_Add, index_tree, base_tree);
// fill result // fill result
result.tree = new_tree; result.tree = new_tree;
@@ -860,14 +860,14 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
EVAL_IRTreeAndType l = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprl, eout); 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)){ if (l.tree->op != 0 && !tg_key_match(tg_key_zero(), l.type_key)){
TG_Key l_restype = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, l.type_key); TG_Key l_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, l.type_key);
TG_Kind l_restype_kind = tg_kind_from_key(l_restype); TG_Kind l_restype_kind = tg_kind_from_key(l_restype);
// determine which type to use // determine which type to use
TG_Key check_type_key = l_restype; TG_Key check_type_key = l_restype;
TG_Kind check_type_kind = l_restype_kind; 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){ 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_raddbg_key(graph, rdbg, l_restype); check_type_key = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, l_restype);
check_type_kind = tg_kind_from_key(check_type_key); 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, RADDBG_Parsed *rdb
if (l_good && r_good){ if (l_good && r_good){
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
TG_MemberArray check_type_members = tg_data_members_from_graph_raddbg_key(scratch.arena, graph, rdbg, check_type_key); TG_MemberArray check_type_members = tg_data_members_from_graph_raddbgi_key(scratch.arena, graph, rdbg, check_type_key);
// lookup member // lookup member
String8 member_name = exprr->name; String8 member_name = exprr->name;
@@ -957,7 +957,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
} }
if (r_off != 0){ if (r_off != 0){
EVAL_IRTree *const_tree = eval_irtree_const_u(arena, r_off); EVAL_IRTree *const_tree = eval_irtree_const_u(arena, r_off);
new_tree = eval_irtree_binary_op_u(arena, RADDBG_EvalOp_Add, new_tree, const_tree); new_tree = eval_irtree_binary_op_u(arena, RADDBGI_EvalOp_Add, new_tree, const_tree);
} }
// fill result // fill result
@@ -978,10 +978,10 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprc, eout); EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprc, eout);
if (c.tree->op != 0){ if (c.tree->op != 0){
TG_Key c_restype = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, c.type_key); TG_Key c_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, c.type_key);
TG_Kind c_restype_kind = tg_kind_from_key(c_restype); TG_Kind c_restype_kind = tg_kind_from_key(c_restype);
TG_Key c_restype_direct = tg_unwrapped_direct_from_graph_raddbg_key(graph, rdbg, 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_raddbg_key(graph, rdbg, c_restype_direct); U64 c_restype_direct_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, c_restype_direct);
// analyze situation // analyze situation
B32 can_generate = 0; B32 can_generate = 0;
@@ -1035,7 +1035,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprc, eout); 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())) if(c.tree->op != 0 && !tg_key_match(c.type_key, tg_key_zero()))
{ {
TG_Key c_restype = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, c.type_key); TG_Key c_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, c.type_key);
TG_Kind c_restype_kind = tg_kind_from_key(c_restype); TG_Kind c_restype_kind = tg_kind_from_key(c_restype);
// analyze situation // analyze situation
@@ -1070,26 +1070,26 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
if(cast_type_kind != TG_Kind_Null && c.tree->op != 0) if(cast_type_kind != TG_Kind_Null && c.tree->op != 0)
{ {
TG_Key c_restype = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, c.type_key); TG_Key c_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, c.type_key);
TG_Kind c_restype_kind = tg_kind_from_key(c_restype); TG_Kind c_restype_kind = tg_kind_from_key(c_restype);
U64 c_restype_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, 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_raddbg_key(graph, rdbg, cast_type_key); U64 cast_type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, cast_type_key);
// analyze situation // analyze situation
U8 in_group = eval_type_group_from_kind(c_restype_kind); U8 in_group = eval_type_group_from_kind(c_restype_kind);
U8 out_group = eval_type_group_from_kind(cast_type_kind); U8 out_group = eval_type_group_from_kind(cast_type_kind);
RADDBG_EvalConversionKind conversion_rule = raddbg_eval_conversion_rule(in_group, out_group); RADDBGI_EvalConversionKind conversion_rule = raddbgi_eval_conversion_rule(in_group, out_group);
// generate tree // generate tree
switch(conversion_rule) switch(conversion_rule)
{ {
case RADDBG_EvalConversionKind_Noop: case RADDBGI_EvalConversionKind_Noop:
case RADDBG_EvalConversionKind_Legal: case RADDBGI_EvalConversionKind_Legal:
{ {
EVAL_IRTree *in_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, c.mode, c.tree, c_restype); EVAL_IRTree *in_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, c.mode, c.tree, c_restype);
EVAL_IRTree *new_tree = in_tree; EVAL_IRTree *new_tree = in_tree;
if (conversion_rule == RADDBG_EvalConversionKind_Legal){ if (conversion_rule == RADDBGI_EvalConversionKind_Legal){
new_tree = eval_irtree_convert_lo(arena, in_tree, out_group, in_group); 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)){ 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, RADDBG_Parsed *rdb
default: default:
{ {
String8 text = str8_lit("(internal) unknown conversion rule"); String8 text = str8_lit("(internal) unknown conversion rule");
if (conversion_rule < RADDBG_EvalConversionKind_COUNT){ if (conversion_rule < RADDBGI_EvalConversionKind_COUNT){
text.str = raddbg_eval_conversion_message(conversion_rule, &text.size); text.str = raddbgi_eval_conversion_message(conversion_rule, &text.size);
} }
eval_error(arena, eout, EVAL_ErrorKind_MalformedInput, expr->location, text); eval_error(arena, eout, EVAL_ErrorKind_MalformedInput, expr->location, text);
}break; }break;
@@ -1141,7 +1141,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
TG_Kind type_kind = tg_kind_from_key(type_key); TG_Kind type_kind = tg_kind_from_key(type_key);
if (type_kind != TG_Kind_Null){ if (type_kind != TG_Kind_Null){
can_generate = 1; can_generate = 1;
size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, type_key); size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, type_key);
} }
// generate ir tree // generate ir tree
@@ -1162,15 +1162,15 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprc, eout); EVAL_IRTreeAndType c = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprc, eout);
if (c.tree->op != 0){ if (c.tree->op != 0){
TG_Key c_restype = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, c.type_key); TG_Key c_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, c.type_key);
TG_Key p_type = eval_type_promote(graph, rdbg, c_restype); TG_Key p_type = eval_type_promote(graph, rdbg, c_restype);
TG_Kind c_restype_kind = tg_kind_from_key(c_restype); TG_Kind c_restype_kind = tg_kind_from_key(c_restype);
// analyze situation // analyze situation
B32 can_generate = 0; B32 can_generate = 0;
RADDBG_EvalOp op = eval_opcode_from_expr_kind(kind); RADDBGI_EvalOp op = eval_opcode_from_expr_kind(kind);
U8 c_group = eval_type_group_from_kind(c_restype_kind); U8 c_group = eval_type_group_from_kind(c_restype_kind);
if (!raddbg_eval_opcode_type_compatible(op, c_group)){ if (!raddbgi_eval_opcode_type_compatible(op, c_group)){
eval_errorf(arena, eout, EVAL_ErrorKind_MalformedInput, expr->location, "Cannot use this operator on this type."); eval_errorf(arena, eout, EVAL_ErrorKind_MalformedInput, expr->location, "Cannot use this operator on this type.");
} }
else{ else{
@@ -1218,8 +1218,8 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
EVAL_IRTreeAndType r = eval_irtree_and_type_from_expr(arena, graph, rdbg, leaf_ident_expr_map, exprr, eout); 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){ if (l.tree->op != 0 && r.tree->op != 0){
TG_Key l_restype = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, l.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_raddbg_key(graph, rdbg, r.type_key); TG_Key r_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, r.type_key);
TG_Kind l_restype_kind = tg_kind_from_key(l_restype); TG_Kind l_restype_kind = tg_kind_from_key(l_restype);
TG_Kind r_restype_kind = tg_kind_from_key(r_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, RADDBG_Parsed *rdb
r_restype_kind = tg_kind_from_key(r_restype); r_restype_kind = tg_kind_from_key(r_restype);
} }
RADDBG_EvalOp op = eval_opcode_from_expr_kind(kind); RADDBGI_EvalOp op = eval_opcode_from_expr_kind(kind);
//- pointer decay //- pointer decay
B32 l_is_pointer = (l_restype_kind == TG_Kind_Ptr); 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, RADDBG_Parsed *rdb
arith_path = EVAL_ArithPath_PtrAdd; arith_path = EVAL_ArithPath_PtrAdd;
} }
if (l_is_pointer_like && r_is_pointer_like){ if (l_is_pointer_like && r_is_pointer_like){
TG_Key l_restype_direct = tg_unwrapped_direct_from_graph_raddbg_key(graph, rdbg, l_restype); 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_raddbg_key(graph, rdbg, r_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_raddbg_key(graph, rdbg, l_restype_direct); 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_raddbg_key(graph, rdbg, r_restype_direct); U64 r_restype_direct_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, r_restype_direct);
if (l_restype_direct_byte_size == r_restype_direct_byte_size){ if (l_restype_direct_byte_size == r_restype_direct_byte_size){
arith_path = EVAL_ArithPath_PtrSub; arith_path = EVAL_ArithPath_PtrSub;
} }
@@ -1299,7 +1299,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
U8 cv_group = eval_type_group_from_kind(cv_type_kind); U8 cv_group = eval_type_group_from_kind(cv_type_kind);
B32 can_generate = 0; B32 can_generate = 0;
if (raddbg_eval_opcode_type_compatible(op, cv_group)){ if (raddbgi_eval_opcode_type_compatible(op, cv_group)){
can_generate = 1; can_generate = 1;
} }
else{ else{
@@ -1339,8 +1339,8 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
ptr_is_decay = r_is_decay; ptr_is_decay = r_is_decay;
} }
TG_Key direct = tg_unwrapped_direct_from_graph_raddbg_key(graph, rdbg, ptr->type_key); TG_Key direct = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, ptr->type_key);
U64 direct_type_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, direct); U64 direct_type_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, direct);
// generate ir tree // generate ir tree
EVAL_IRTree *ptr_tree = ptr->tree; EVAL_IRTree *ptr_tree = ptr->tree;
@@ -1351,7 +1351,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
EVAL_IRTree *integer_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, integer->mode, integer->tree, integer->type_key); EVAL_IRTree *integer_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, integer->mode, integer->tree, integer->type_key);
if (direct_type_size > 1){ if (direct_type_size > 1){
EVAL_IRTree *const_tree = eval_irtree_const_u(arena, direct_type_size); EVAL_IRTree *const_tree = eval_irtree_const_u(arena, direct_type_size);
integer_tree = eval_irtree_binary_op_u(arena, RADDBG_EvalOp_Mul, integer_tree, const_tree); integer_tree = eval_irtree_binary_op_u(arena, RADDBGI_EvalOp_Mul, integer_tree, const_tree);
} }
TG_Key ptr_type = ptr->type_key; TG_Key ptr_type = ptr->type_key;
@@ -1359,7 +1359,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
ptr_type = tg_cons_type_make(graph, TG_Kind_Ptr, direct, 0); ptr_type = tg_cons_type_make(graph, TG_Kind_Ptr, direct, 0);
} }
EVAL_IRTree *new_tree = eval_irtree_binary_op(arena, op, RADDBG_EvalTypeGroup_U, ptr_tree, integer_tree); EVAL_IRTree *new_tree = eval_irtree_binary_op(arena, op, RADDBGI_EvalTypeGroup_U, ptr_tree, integer_tree);
result.tree = new_tree; result.tree = new_tree;
result.type_key = ptr_type; result.type_key = ptr_type;
@@ -1368,8 +1368,8 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
case EVAL_ArithPath_PtrSub: case EVAL_ArithPath_PtrSub:
{ {
TG_Key direct = tg_unwrapped_direct_from_graph_raddbg_key(graph, rdbg, l_restype); TG_Key direct = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, l_restype);
U64 direct_type_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, direct); U64 direct_type_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, direct);
// generate ir tree // generate ir tree
EVAL_IRTree *l_tree = l.tree; EVAL_IRTree *l_tree = l.tree;
@@ -1382,12 +1382,12 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
r_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, r.mode, r.tree, r_restype); 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, RADDBG_EvalTypeGroup_U, l_tree, r_tree); EVAL_IRTree *op_tree = eval_irtree_binary_op(arena, op, RADDBGI_EvalTypeGroup_U, l_tree, r_tree);
EVAL_IRTree *new_tree = op_tree; EVAL_IRTree *new_tree = op_tree;
if (direct_type_size > 1){ if (direct_type_size > 1){
EVAL_IRTree *const_tree = eval_irtree_const_u(arena, direct_type_size); EVAL_IRTree *const_tree = eval_irtree_const_u(arena, direct_type_size);
new_tree = eval_irtree_binary_op(arena, RADDBG_EvalOp_Div, RADDBG_EvalTypeGroup_U, new_tree, const_tree); new_tree = eval_irtree_binary_op(arena, RADDBGI_EvalOp_Div, RADDBGI_EvalTypeGroup_U, new_tree, const_tree);
} }
result.tree = new_tree; result.tree = new_tree;
@@ -1410,9 +1410,9 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
if (l.tree->op != 0 && r.tree->op != 0 && c.tree->op != 0){ if (l.tree->op != 0 && r.tree->op != 0 && c.tree->op != 0){
TG_Key c_restype = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, c.type_key); TG_Key c_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, c.type_key);
TG_Key l_restype = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, l.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_raddbg_key(graph, rdbg, r.type_key); TG_Key r_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, r.type_key);
TG_Kind c_restype_kind = tg_kind_from_key(c_restype); TG_Kind c_restype_kind = tg_kind_from_key(c_restype);
TG_Kind l_restype_kind = tg_kind_from_key(l_restype); TG_Kind l_restype_kind = tg_kind_from_key(l_restype);
TG_Kind r_restype_kind = tg_kind_from_key(r_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(); ProfBeginFunction();
U32 op = tree->op; U32 op = tree->op;
switch (op){ switch (op){
case RADDBG_EvalOp_Stop: case RADDBGI_EvalOp_Stop:
case RADDBG_EvalOp_Skip: case RADDBGI_EvalOp_Skip:
{ {
// TODO: error - invalid ir-tree op // TODO: error - invalid ir-tree op
}break; }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); eval_oplist_push_bytecode(arena, out, tree->bytecode);
}break; }break;
case RADDBG_EvalOp_Cond: case RADDBGI_EvalOp_Cond:
{ {
// split out each of the children // split out each of the children
EVAL_OpList prt_cond = {0}; EVAL_OpList prt_cond = {0};
@@ -1598,11 +1598,11 @@ eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out){
// 4. // 4.
// modify prt_right in place to create step 2 // modify prt_right in place to create step 2
eval_oplist_push_op(arena, &prt_right, RADDBG_EvalOp_Skip, prt_left.encoded_size); eval_oplist_push_op(arena, &prt_right, RADDBGI_EvalOp_Skip, prt_left.encoded_size);
// merge 1 into out // merge 1 into out
eval_oplist_concat_in_place(out, &prt_cond); eval_oplist_concat_in_place(out, &prt_cond);
eval_oplist_push_op(arena, out, RADDBG_EvalOp_Cond, prt_right.encoded_size); eval_oplist_push_op(arena, out, RADDBGI_EvalOp_Cond, prt_right.encoded_size);
// merge 2 into out // merge 2 into out
eval_oplist_concat_in_place(out, &prt_right); 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: default:
{ {
if (op >= RADDBG_EvalOp_COUNT){ if (op >= RADDBGI_EvalOp_COUNT){
// TODO: error - invalid ir-tree op // TODO: error - invalid ir-tree op
} }
else{ else{
// handle all children // handle all children
U8 ctrlbits = raddbg_eval_opcode_ctrlbits[op]; U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[op];
U64 child_count = RADDBG_POPN_FROM_CTRLBITS(ctrlbits); U64 child_count = RADDBGI_POPN_FROM_CTRLBITS(ctrlbits);
EVAL_IRTree**child = tree->children; EVAL_IRTree**child = tree->children;
for (U64 i = 0; i < child_count; i += 1, child += 1){ for (U64 i = 0; i < child_count; i += 1, child += 1){
eval_oplist_from_irtree(arena, *child, out); eval_oplist_from_irtree(arena, *child, out);
} }
// emit op to compute this node // emit op to compute this node
eval_oplist_push_op(arena, out, (RADDBG_EvalOp)tree->op, tree->p); eval_oplist_push_op(arena, out, (RADDBGI_EvalOp)tree->op, tree->p);
} }
}break; }break;
} }
+18 -18
View File
@@ -9,7 +9,7 @@
internal String8 eval_bytecode_from_oplist(Arena *arena, EVAL_OpList *list); internal String8 eval_bytecode_from_oplist(Arena *arena, EVAL_OpList *list);
internal void eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RADDBG_EvalOp op, U64 p); internal void eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RADDBGI_EvalOp op, U64 p);
internal void eval_oplist_push_uconst(Arena *arena, EVAL_OpList *list, U64 x); 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); internal void eval_oplist_push_sconst(Arena *arena, EVAL_OpList *list, S64 x);
@@ -20,8 +20,8 @@ internal void eval_oplist_concat_in_place(EVAL_OpList *left_dst, EVAL_OpList *ri
//////////////////////////////// ////////////////////////////////
//~ allen: EVAL Expression Info Functions //~ allen: EVAL Expression Info Functions
internal RADDBG_EvalOp eval_opcode_from_expr_kind(EVAL_ExprKind kind); internal RADDBGI_EvalOp eval_opcode_from_expr_kind(EVAL_ExprKind kind);
internal B32 eval_expr_kind_is_comparison(EVAL_ExprKind kind); internal B32 eval_expr_kind_is_comparison(EVAL_ExprKind kind);
//////////////////////////////// ////////////////////////////////
//~ allen: EVAL Expression Constructors //~ allen: EVAL Expression Constructors
@@ -40,13 +40,13 @@ internal EVAL_Expr* eval_expr_leaf_type(Arena *arena, void *location, TG_Key typ
//////////////////////////////// ////////////////////////////////
//~ allen: EVAL Type Information Transformers //~ allen: EVAL Type Information Transformers
internal RADDBG_EvalTypeGroup eval_type_group_from_kind(TG_Kind kind); internal RADDBGI_EvalTypeGroup eval_type_group_from_kind(TG_Kind kind);
internal TG_Key eval_type_unwrap_enum(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key); 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, RADDBG_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, RADDBG_Parsed *rdbg, TG_Key l, TG_Key r); internal TG_Key eval_type_coerce(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key l, TG_Key r);
internal B32 eval_type_match(TG_Graph *graph, RADDBG_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_kind_is_integer(TG_Kind kind); internal B32 eval_kind_is_integer(TG_Kind kind);
internal B32 eval_kind_is_signed(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 //~ allen: EVAL IR-Tree Constructors
internal EVAL_IRTree* eval_irtree_const_u(Arena *arena, U64 v); internal EVAL_IRTree* eval_irtree_const_u(Arena *arena, U64 v);
internal EVAL_IRTree* eval_irtree_unary_op(Arena *arena, RADDBG_EvalOp op, RADDBG_EvalTypeGroup group, EVAL_IRTree *c); 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, RADDBG_EvalOp op, RADDBG_EvalTypeGroup group, EVAL_IRTree *l, EVAL_IRTree *r); 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, RADDBG_EvalOp op, 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_conditional(Arena *arena, EVAL_IRTree *c, 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); internal EVAL_IRTree* eval_irtree_bytecode_no_copy(Arena *arena, String8 bytecode);
//////////////////////////////// ////////////////////////////////
//~ allen: EVAL IR-Tree High Level Helpers //~ allen: EVAL IR-Tree High Level Helpers
internal EVAL_IRTree* eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key); 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, RADDBG_EvalTypeGroup out, RADDBG_EvalTypeGroup in); 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, RADDBG_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key); 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, RADDBG_Parsed *rdbg, EVAL_IRTree *c, TG_Key out, TG_Key in); 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, RADDBG_Parsed *rdbg, EVAL_EvalMode from_mode, EVAL_IRTree *tree, TG_Key type_key); 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);
//////////////////////////////// ////////////////////////////////
//~ allen: EVAL Compiler Phases //~ 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 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, RADDBG_Parsed *rdbg, 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, RADDBG_Parsed *rdbg, EVAL_String2ExprMap *leaf_ident_expr_map, 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 void eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out); internal void eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out);
#endif //EVAL_COMPILER_H #endif //EVAL_COMPILER_H
+3 -3
View File
@@ -41,7 +41,7 @@ struct EVAL_ErrorList
enum enum
{ {
EVAL_IRExtKind_Bytecode = RADDBG_EvalOp_COUNT, EVAL_IRExtKind_Bytecode = RADDBGI_EvalOp_COUNT,
EVAL_IRExtKind_COUNT EVAL_IRExtKind_COUNT
}; };
@@ -49,7 +49,7 @@ typedef struct EVAL_Op EVAL_Op;
struct EVAL_Op struct EVAL_Op
{ {
EVAL_Op *next; EVAL_Op *next;
RADDBG_EvalOp opcode; RADDBGI_EvalOp opcode;
union union
{ {
U64 p; U64 p;
@@ -115,7 +115,7 @@ struct EVAL_Expr
typedef struct EVAL_IRTree EVAL_IRTree; typedef struct EVAL_IRTree EVAL_IRTree;
struct EVAL_IRTree{ struct EVAL_IRTree{
RADDBG_EvalOp op; RADDBGI_EvalOp op;
EVAL_IRTree *children[3]; EVAL_IRTree *children[3];
union{ union{
U64 p; U64 p;
+113 -113
View File
@@ -22,18 +22,18 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
for (;ptr < opl;){ for (;ptr < opl;){
// consume opcode // consume opcode
RADDBG_EvalOp op = (RADDBG_EvalOp)*ptr; RADDBGI_EvalOp op = (RADDBGI_EvalOp)*ptr;
if (op >= RADDBG_EvalOp_COUNT){ if (op >= RADDBGI_EvalOp_COUNT){
result.code = EVAL_ResultCode_BadOp; result.code = EVAL_ResultCode_BadOp;
goto done; goto done;
} }
U8 ctrlbits = raddbg_eval_opcode_ctrlbits[op]; U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[op];
ptr += 1; ptr += 1;
// decode // decode
U64 imm = 0; U64 imm = 0;
{ {
U32 decode_size = RADDBG_DECODEN_FROM_CTRLBITS(ctrlbits); U32 decode_size = RADDBGI_DECODEN_FROM_CTRLBITS(ctrlbits);
U8 *next_ptr = ptr + decode_size; U8 *next_ptr = ptr + decode_size;
if (next_ptr > opl){ if (next_ptr > opl){
result.code = EVAL_ResultCode_BadOp; result.code = EVAL_ResultCode_BadOp;
@@ -54,7 +54,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
// pop // pop
EVAL_Slot *svals = 0; EVAL_Slot *svals = 0;
{ {
U32 pop_count = RADDBG_POPN_FROM_CTRLBITS(ctrlbits); U32 pop_count = RADDBGI_POPN_FROM_CTRLBITS(ctrlbits);
if (pop_count > stack_count){ if (pop_count > stack_count){
result.code = EVAL_ResultCode_BadOp; result.code = EVAL_ResultCode_BadOp;
goto done; goto done;
@@ -68,29 +68,29 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
// interpret // interpret
EVAL_Slot nval = {0}; EVAL_Slot nval = {0};
switch (op){ switch (op){
case RADDBG_EvalOp_Stop: case RADDBGI_EvalOp_Stop:
{ {
goto done; goto done;
}break; }break;
case RADDBG_EvalOp_Noop: case RADDBGI_EvalOp_Noop:
{ {
// do nothing // do nothing
}break; }break;
case RADDBG_EvalOp_Cond: case RADDBGI_EvalOp_Cond:
{ {
if (svals[0].u64){ if (svals[0].u64){
ptr += imm; ptr += imm;
} }
}break; }break;
case RADDBG_EvalOp_Skip: case RADDBGI_EvalOp_Skip:
{ {
ptr += imm; ptr += imm;
}break; }break;
case RADDBG_EvalOp_MemRead: case RADDBGI_EvalOp_MemRead:
{ {
U64 addr = svals[0].u64; U64 addr = svals[0].u64;
U64 size = imm; U64 size = imm;
@@ -105,12 +105,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_RegRead: case RADDBGI_EvalOp_RegRead:
{ {
U8 raddbg_reg_code = (imm&0x0000FF)>>0; U8 raddbgi_reg_code = (imm&0x0000FF)>>0;
U8 byte_size = (imm&0x00FF00)>>8; U8 byte_size = (imm&0x00FF00)>>8;
U8 byte_off = (imm&0xFF0000)>>16; U8 byte_off = (imm&0xFF0000)>>16;
REGS_RegCode base_reg_code = regs_reg_code_from_arch_raddbg_code(machine->arch, raddbg_reg_code); REGS_RegCode base_reg_code = regs_reg_code_from_arch_raddbgi_code(machine->arch, raddbgi_reg_code);
REGS_Rng rng = regs_reg_code_rng_table_from_architecture(machine->arch)[base_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 off = (U64)rng.byte_off + byte_off;
U64 size = (U64)byte_size; U64 size = (U64)byte_size;
@@ -123,7 +123,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_RegReadDyn: case RADDBGI_EvalOp_RegReadDyn:
{ {
U64 off = svals[0].u64; U64 off = svals[0].u64;
U64 size = bit_size_from_arch(machine->arch)/8; U64 size = bit_size_from_arch(machine->arch)/8;
@@ -136,7 +136,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_FrameOff: case RADDBGI_EvalOp_FrameOff:
{ {
if (machine->frame_base != 0){ if (machine->frame_base != 0){
nval.u64 = *machine->frame_base + imm; nval.u64 = *machine->frame_base + imm;
@@ -147,7 +147,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_ModuleOff: case RADDBGI_EvalOp_ModuleOff:
{ {
if (machine->module_base != 0){ if (machine->module_base != 0){
nval.u64 = *machine->module_base + imm; nval.u64 = *machine->module_base + imm;
@@ -158,7 +158,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_TLSOff: case RADDBGI_EvalOp_TLSOff:
{ {
if (machine->tls_base != 0){ if (machine->tls_base != 0){
nval.u64 = *machine->tls_base + imm; nval.u64 = *machine->tls_base + imm;
@@ -169,23 +169,23 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_ConstU8: case RADDBGI_EvalOp_ConstU8:
case RADDBG_EvalOp_ConstU16: case RADDBGI_EvalOp_ConstU16:
case RADDBG_EvalOp_ConstU32: case RADDBGI_EvalOp_ConstU32:
case RADDBG_EvalOp_ConstU64: case RADDBGI_EvalOp_ConstU64:
{ {
nval.u64 = imm; nval.u64 = imm;
}break; }break;
case RADDBG_EvalOp_Abs: case RADDBGI_EvalOp_Abs:
{ {
if (imm == RADDBG_EvalTypeGroup_F32){ if (imm == RADDBGI_EvalTypeGroup_F32){
nval.f32 = svals[0].f32; nval.f32 = svals[0].f32;
if (svals[0].f32 < 0){ if (svals[0].f32 < 0){
nval.f32 = -svals[0].f32; nval.f32 = -svals[0].f32;
} }
} }
else if (imm == RADDBG_EvalTypeGroup_F64){ else if (imm == RADDBGI_EvalTypeGroup_F64){
nval.f64 = svals[0].f64; nval.f64 = svals[0].f64;
if (svals[0].f64 < 0){ if (svals[0].f64 < 0){
nval.f64 = -svals[0].f64; nval.f64 = -svals[0].f64;
@@ -199,12 +199,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_Neg: case RADDBGI_EvalOp_Neg:
{ {
if (imm == RADDBG_EvalTypeGroup_F32){ if (imm == RADDBGI_EvalTypeGroup_F32){
nval.f32 = -svals[0].f32; nval.f32 = -svals[0].f32;
} }
else if (imm == RADDBG_EvalTypeGroup_F64){ else if (imm == RADDBGI_EvalTypeGroup_F64){
nval.f64 = -svals[0].f64; nval.f64 = -svals[0].f64;
} }
else{ else{
@@ -212,12 +212,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_Add: case RADDBGI_EvalOp_Add:
{ {
if (imm == RADDBG_EvalTypeGroup_F32){ if (imm == RADDBGI_EvalTypeGroup_F32){
nval.f32 = svals[0].f32 + svals[1].f32; nval.f32 = svals[0].f32 + svals[1].f32;
} }
else if (imm == RADDBG_EvalTypeGroup_F64){ else if (imm == RADDBGI_EvalTypeGroup_F64){
nval.f64 = svals[0].f64 + svals[1].f64; nval.f64 = svals[0].f64 + svals[1].f64;
} }
else{ else{
@@ -225,12 +225,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_Sub: case RADDBGI_EvalOp_Sub:
{ {
if (imm == RADDBG_EvalTypeGroup_F32){ if (imm == RADDBGI_EvalTypeGroup_F32){
nval.f32 = svals[0].f32 - svals[1].f32; nval.f32 = svals[0].f32 - svals[1].f32;
} }
else if (imm == RADDBG_EvalTypeGroup_F64){ else if (imm == RADDBGI_EvalTypeGroup_F64){
nval.f64 = svals[0].f64 - svals[1].f64; nval.f64 = svals[0].f64 - svals[1].f64;
} }
else{ else{
@@ -238,12 +238,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_Mul: case RADDBGI_EvalOp_Mul:
{ {
if (imm == RADDBG_EvalTypeGroup_F32){ if (imm == RADDBGI_EvalTypeGroup_F32){
nval.f32 = svals[0].f32*svals[1].f32; nval.f32 = svals[0].f32*svals[1].f32;
} }
else if (imm == RADDBG_EvalTypeGroup_F64){ else if (imm == RADDBGI_EvalTypeGroup_F64){
nval.f64 = svals[0].f64*svals[1].f64; nval.f64 = svals[0].f64*svals[1].f64;
} }
else{ else{
@@ -251,9 +251,9 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_Div: case RADDBGI_EvalOp_Div:
{ {
if (imm == RADDBG_EvalTypeGroup_F32){ if (imm == RADDBGI_EvalTypeGroup_F32){
if (svals[1].f32 != 0.f){ if (svals[1].f32 != 0.f){
nval.f32 = svals[0].f32/svals[1].f32; nval.f32 = svals[0].f32/svals[1].f32;
} }
@@ -263,7 +263,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
goto done; goto done;
} }
} }
else if (imm == RADDBG_EvalTypeGroup_F64){ else if (imm == RADDBGI_EvalTypeGroup_F64){
if (svals[1].f64 != 0.){ if (svals[1].f64 != 0.){
nval.f64 = svals[0].f64/svals[1].f64; nval.f64 = svals[0].f64/svals[1].f64;
} }
@@ -273,8 +273,8 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
goto done; goto done;
} }
} }
else if (imm == RADDBG_EvalTypeGroup_U || else if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){ imm == RADDBGI_EvalTypeGroup_S){
if (svals[1].u64 != 0){ if (svals[1].u64 != 0){
nval.u64 = svals[0].u64/svals[1].u64; nval.u64 = svals[0].u64/svals[1].u64;
} }
@@ -290,10 +290,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_Mod: case RADDBGI_EvalOp_Mod:
{ {
if (imm == RADDBG_EvalTypeGroup_U || if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){ imm == RADDBGI_EvalTypeGroup_S){
if (svals[1].u64 != 0){ if (svals[1].u64 != 0){
nval.u64 = svals[0].u64%svals[1].u64; nval.u64 = svals[0].u64%svals[1].u64;
} }
@@ -304,10 +304,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_LShift: case RADDBGI_EvalOp_LShift:
{ {
if (imm == RADDBG_EvalTypeGroup_U || if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){ imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = svals[0].u64 << svals[1].u64; nval.u64 = svals[0].u64 << svals[1].u64;
} }
else{ else{
@@ -316,12 +316,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_RShift: case RADDBGI_EvalOp_RShift:
{ {
if (imm == RADDBG_EvalTypeGroup_U){ if (imm == RADDBGI_EvalTypeGroup_U){
nval.u64 = svals[0].u64 >> svals[1].u64; nval.u64 = svals[0].u64 >> svals[1].u64;
} }
else if (imm == RADDBG_EvalTypeGroup_S){ else if (imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = svals[0].s64 >> svals[1].u64; nval.u64 = svals[0].s64 >> svals[1].u64;
} }
else{ else{
@@ -330,10 +330,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_BitAnd: case RADDBGI_EvalOp_BitAnd:
{ {
if (imm == RADDBG_EvalTypeGroup_U || if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){ imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = svals[0].u64&svals[1].u64; nval.u64 = svals[0].u64&svals[1].u64;
} }
else{ else{
@@ -342,10 +342,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_BitOr: case RADDBGI_EvalOp_BitOr:
{ {
if (imm == RADDBG_EvalTypeGroup_U || if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){ imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = svals[0].u64|svals[1].u64; nval.u64 = svals[0].u64|svals[1].u64;
} }
else{ else{
@@ -354,10 +354,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_BitXor: case RADDBGI_EvalOp_BitXor:
{ {
if (imm == RADDBG_EvalTypeGroup_U || if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){ imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = svals[0].u64^svals[1].u64; nval.u64 = svals[0].u64^svals[1].u64;
} }
else{ else{
@@ -366,10 +366,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_BitNot: case RADDBGI_EvalOp_BitNot:
{ {
if (imm == RADDBG_EvalTypeGroup_U || if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){ imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = ~svals[0].u64; nval.u64 = ~svals[0].u64;
} }
else{ else{
@@ -378,10 +378,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_LogAnd: case RADDBGI_EvalOp_LogAnd:
{ {
if (imm == RADDBG_EvalTypeGroup_U || if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){ imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = (svals[0].u64 && svals[1].u64); nval.u64 = (svals[0].u64 && svals[1].u64);
} }
else{ else{
@@ -390,10 +390,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_LogOr: case RADDBGI_EvalOp_LogOr:
{ {
if (imm == RADDBG_EvalTypeGroup_U || if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){ imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = (svals[0].u64 || svals[1].u64); nval.u64 = (svals[0].u64 || svals[1].u64);
} }
else{ else{
@@ -402,10 +402,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_LogNot: case RADDBGI_EvalOp_LogNot:
{ {
if (imm == RADDBG_EvalTypeGroup_U || if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){ imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = (!svals[0].u64); nval.u64 = (!svals[0].u64);
} }
else{ else{
@@ -414,28 +414,28 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_EqEq: case RADDBGI_EvalOp_EqEq:
{ {
nval.u64 = (svals[0].u64 == svals[1].u64); nval.u64 = (svals[0].u64 == svals[1].u64);
}break; }break;
case RADDBG_EvalOp_NtEq: case RADDBGI_EvalOp_NtEq:
{ {
nval.u64 = (svals[0].u64 != svals[1].u64); nval.u64 = (svals[0].u64 != svals[1].u64);
}break; }break;
case RADDBG_EvalOp_LsEq: case RADDBGI_EvalOp_LsEq:
{ {
if (imm == RADDBG_EvalTypeGroup_F32){ if (imm == RADDBGI_EvalTypeGroup_F32){
nval.u64 = (svals[0].f32 <= svals[1].f32); nval.u64 = (svals[0].f32 <= svals[1].f32);
} }
else if (imm == RADDBG_EvalTypeGroup_F64){ else if (imm == RADDBGI_EvalTypeGroup_F64){
nval.u64 = (svals[0].f64 <= svals[1].f64); nval.u64 = (svals[0].f64 <= svals[1].f64);
} }
else if (imm == RADDBG_EvalTypeGroup_U){ else if (imm == RADDBGI_EvalTypeGroup_U){
nval.u64 = (svals[0].u64 <= svals[1].u64); nval.u64 = (svals[0].u64 <= svals[1].u64);
} }
else if (imm == RADDBG_EvalTypeGroup_S){ else if (imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = (svals[0].s64 <= svals[1].s64); nval.u64 = (svals[0].s64 <= svals[1].s64);
} }
else{ else{
@@ -444,18 +444,18 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_GrEq: case RADDBGI_EvalOp_GrEq:
{ {
if (imm == RADDBG_EvalTypeGroup_F32){ if (imm == RADDBGI_EvalTypeGroup_F32){
nval.u64 = (svals[0].f32 >= svals[1].f32); nval.u64 = (svals[0].f32 >= svals[1].f32);
} }
else if (imm == RADDBG_EvalTypeGroup_F64){ else if (imm == RADDBGI_EvalTypeGroup_F64){
nval.u64 = (svals[0].f64 >= svals[1].f64); nval.u64 = (svals[0].f64 >= svals[1].f64);
} }
else if (imm == RADDBG_EvalTypeGroup_U){ else if (imm == RADDBGI_EvalTypeGroup_U){
nval.u64 = (svals[0].u64 >= svals[1].u64); nval.u64 = (svals[0].u64 >= svals[1].u64);
} }
else if (imm == RADDBG_EvalTypeGroup_S){ else if (imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = (svals[0].s64 >= svals[1].s64); nval.u64 = (svals[0].s64 >= svals[1].s64);
} }
else{ else{
@@ -464,18 +464,18 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_Less: case RADDBGI_EvalOp_Less:
{ {
if (imm == RADDBG_EvalTypeGroup_F32){ if (imm == RADDBGI_EvalTypeGroup_F32){
nval.u64 = (svals[0].f32 < svals[1].f32); nval.u64 = (svals[0].f32 < svals[1].f32);
} }
else if (imm == RADDBG_EvalTypeGroup_F64){ else if (imm == RADDBGI_EvalTypeGroup_F64){
nval.u64 = (svals[0].f64 < svals[1].f64); nval.u64 = (svals[0].f64 < svals[1].f64);
} }
else if (imm == RADDBG_EvalTypeGroup_U){ else if (imm == RADDBGI_EvalTypeGroup_U){
nval.u64 = (svals[0].u64 < svals[1].u64); nval.u64 = (svals[0].u64 < svals[1].u64);
} }
else if (imm == RADDBG_EvalTypeGroup_S){ else if (imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = (svals[0].s64 < svals[1].s64); nval.u64 = (svals[0].s64 < svals[1].s64);
} }
else{ else{
@@ -484,18 +484,18 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_Grtr: case RADDBGI_EvalOp_Grtr:
{ {
if (imm == RADDBG_EvalTypeGroup_F32){ if (imm == RADDBGI_EvalTypeGroup_F32){
nval.u64 = (svals[0].f32 > svals[1].f32); nval.u64 = (svals[0].f32 > svals[1].f32);
} }
else if (imm == RADDBG_EvalTypeGroup_F64){ else if (imm == RADDBGI_EvalTypeGroup_F64){
nval.u64 = (svals[0].f64 > svals[1].f64); nval.u64 = (svals[0].f64 > svals[1].f64);
} }
else if (imm == RADDBG_EvalTypeGroup_U){ else if (imm == RADDBGI_EvalTypeGroup_U){
nval.u64 = (svals[0].u64 > svals[1].u64); nval.u64 = (svals[0].u64 > svals[1].u64);
} }
else if (imm == RADDBG_EvalTypeGroup_S){ else if (imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = (svals[0].s64 > svals[1].s64); nval.u64 = (svals[0].s64 > svals[1].s64);
} }
else{ else{
@@ -504,7 +504,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_Trunc: case RADDBGI_EvalOp_Trunc:
{ {
if (0 < imm){ if (0 < imm){
U64 mask = 0; U64 mask = 0;
@@ -515,7 +515,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_TruncSigned: case RADDBGI_EvalOp_TruncSigned:
{ {
if (0 < imm){ if (0 < imm){
U64 mask = 0; U64 mask = 0;
@@ -530,52 +530,52 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_Convert: case RADDBGI_EvalOp_Convert:
{ {
U32 in = imm&0xFF; U32 in = imm&0xFF;
U32 out = (imm >> 8)&0xFF; U32 out = (imm >> 8)&0xFF;
if (in != out){ if (in != out){
switch (in + out*RADDBG_EvalTypeGroup_COUNT){ switch (in + out*RADDBGI_EvalTypeGroup_COUNT){
case RADDBG_EvalTypeGroup_F32 + RADDBG_EvalTypeGroup_U*RADDBG_EvalTypeGroup_COUNT: case RADDBGI_EvalTypeGroup_F32 + RADDBGI_EvalTypeGroup_U*RADDBGI_EvalTypeGroup_COUNT:
{ {
nval.u64 = (U64)svals[0].f32; nval.u64 = (U64)svals[0].f32;
}break; }break;
case RADDBG_EvalTypeGroup_F64 + RADDBG_EvalTypeGroup_U*RADDBG_EvalTypeGroup_COUNT: case RADDBGI_EvalTypeGroup_F64 + RADDBGI_EvalTypeGroup_U*RADDBGI_EvalTypeGroup_COUNT:
{ {
nval.u64 = (U64)svals[0].f64; nval.u64 = (U64)svals[0].f64;
}break; }break;
case RADDBG_EvalTypeGroup_F32 + RADDBG_EvalTypeGroup_S*RADDBG_EvalTypeGroup_COUNT: case RADDBGI_EvalTypeGroup_F32 + RADDBGI_EvalTypeGroup_S*RADDBGI_EvalTypeGroup_COUNT:
{ {
nval.s64 = (S64)svals[0].f32; nval.s64 = (S64)svals[0].f32;
}break; }break;
case RADDBG_EvalTypeGroup_F64 + RADDBG_EvalTypeGroup_S*RADDBG_EvalTypeGroup_COUNT: case RADDBGI_EvalTypeGroup_F64 + RADDBGI_EvalTypeGroup_S*RADDBGI_EvalTypeGroup_COUNT:
{ {
nval.s64 = (S64)svals[0].f64; nval.s64 = (S64)svals[0].f64;
}break; }break;
case RADDBG_EvalTypeGroup_U + RADDBG_EvalTypeGroup_F32*RADDBG_EvalTypeGroup_COUNT: case RADDBGI_EvalTypeGroup_U + RADDBGI_EvalTypeGroup_F32*RADDBGI_EvalTypeGroup_COUNT:
{ {
nval.f32 = (F32)svals[0].u64; nval.f32 = (F32)svals[0].u64;
}break; }break;
case RADDBG_EvalTypeGroup_S + RADDBG_EvalTypeGroup_F32*RADDBG_EvalTypeGroup_COUNT: case RADDBGI_EvalTypeGroup_S + RADDBGI_EvalTypeGroup_F32*RADDBGI_EvalTypeGroup_COUNT:
{ {
nval.f32 = (F32)svals[0].s64; nval.f32 = (F32)svals[0].s64;
}break; }break;
case RADDBG_EvalTypeGroup_F64 + RADDBG_EvalTypeGroup_F32*RADDBG_EvalTypeGroup_COUNT: case RADDBGI_EvalTypeGroup_F64 + RADDBGI_EvalTypeGroup_F32*RADDBGI_EvalTypeGroup_COUNT:
{ {
nval.f32 = (F32)svals[0].f64; nval.f32 = (F32)svals[0].f64;
}break; }break;
case RADDBG_EvalTypeGroup_U + RADDBG_EvalTypeGroup_F64*RADDBG_EvalTypeGroup_COUNT: case RADDBGI_EvalTypeGroup_U + RADDBGI_EvalTypeGroup_F64*RADDBGI_EvalTypeGroup_COUNT:
{ {
nval.f64 = (F64)svals[0].u64; nval.f64 = (F64)svals[0].u64;
}break; }break;
case RADDBG_EvalTypeGroup_S + RADDBG_EvalTypeGroup_F64*RADDBG_EvalTypeGroup_COUNT: case RADDBGI_EvalTypeGroup_S + RADDBGI_EvalTypeGroup_F64*RADDBGI_EvalTypeGroup_COUNT:
{ {
nval.f64 = (F64)svals[0].s64; nval.f64 = (F64)svals[0].s64;
}break; }break;
case RADDBG_EvalTypeGroup_F32 + RADDBG_EvalTypeGroup_F64*RADDBG_EvalTypeGroup_COUNT: case RADDBGI_EvalTypeGroup_F32 + RADDBGI_EvalTypeGroup_F64*RADDBGI_EvalTypeGroup_COUNT:
{ {
nval.f64 = (F64)svals[0].f32; nval.f64 = (F64)svals[0].f32;
}break; }break;
@@ -583,7 +583,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_Pick: case RADDBGI_EvalOp_Pick:
{ {
if (stack_count > imm){ if (stack_count > imm){
nval = stack[stack_count - imm - 1]; nval = stack[stack_count - imm - 1];
@@ -594,12 +594,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
} }
}break; }break;
case RADDBG_EvalOp_Pop: case RADDBGI_EvalOp_Pop:
{ {
// do nothing - the pop is handled by the control bits // do nothing - the pop is handled by the control bits
}break; }break;
case RADDBG_EvalOp_Insert: case RADDBGI_EvalOp_Insert:
{ {
if (stack_count > imm){ if (stack_count > imm){
if (imm > 0){ if (imm > 0){
@@ -619,7 +619,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
// push // push
{ {
U64 push_count = RADDBG_PUSHN_FROM_CTRLBITS(ctrlbits); U64 push_count = RADDBGI_PUSHN_FROM_CTRLBITS(ctrlbits);
if (push_count == 1){ if (push_count == 1){
if (stack_count < stack_cap){ if (stack_count < stack_cap){
stack[stack_count] = nval; 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 //~ rjf: Map Building Fast Paths
internal EVAL_String2NumMap * internal EVAL_String2NumMap *
eval_push_locals_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 voff) eval_push_locals_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 voff)
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
@@ -66,17 +66,17 @@ eval_push_locals_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 vof
struct Task struct Task
{ {
Task *next; Task *next;
RADDBG_Scope *scope; RADDBGI_Scope *scope;
}; };
Task *first_task = 0; Task *first_task = 0;
Task *last_task = 0; Task *last_task = 0;
//- rjf: voff -> tightest scope //- rjf: voff -> tightest scope
RADDBG_Scope *tightest_scope = 0; RADDBGI_Scope *tightest_scope = 0;
if(rdbg->scope_vmap != 0 && rdbg->scopes != 0) if(rdbg->scope_vmap != 0 && rdbg->scopes != 0)
{ {
U64 scope_idx = raddbg_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff); U64 scope_idx = raddbgi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff);
RADDBG_Scope *scope = &rdbg->scopes[scope_idx]; RADDBGI_Scope *scope = &rdbg->scopes[scope_idx];
Task *task = push_array(scratch.arena, Task, 1); Task *task = push_array(scratch.arena, Task, 1);
task->scope = scope; task->scope = scope;
SLLQueuePush(first_task, last_task, task); SLLQueuePush(first_task, last_task, task);
@@ -86,8 +86,8 @@ eval_push_locals_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 vof
//- rjf: voff-1 -> scope //- rjf: voff-1 -> scope
if(voff > 0 && rdbg->scope_vmap != 0 && rdbg->scopes != 0) if(voff > 0 && rdbg->scope_vmap != 0 && rdbg->scopes != 0)
{ {
U64 scope_idx = raddbg_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff-1); U64 scope_idx = raddbgi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff-1);
RADDBG_Scope *scope = &rdbg->scopes[scope_idx]; RADDBGI_Scope *scope = &rdbg->scopes[scope_idx];
if(scope != tightest_scope) if(scope != tightest_scope)
{ {
Task *task = push_array(scratch.arena, Task, 1); Task *task = push_array(scratch.arena, Task, 1);
@@ -99,7 +99,7 @@ eval_push_locals_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 vof
//- rjf: tightest scope -> walk up the tree & build tasks for each parent scope //- rjf: tightest scope -> walk up the tree & build tasks for each parent scope
if(tightest_scope != 0) if(tightest_scope != 0)
{ {
for(RADDBG_Scope *scope = &rdbg->scopes[tightest_scope->parent_scope_idx]; for(RADDBGI_Scope *scope = &rdbg->scopes[tightest_scope->parent_scope_idx];
scope != 0 && scope != &rdbg->scopes[0]; scope != 0 && scope != &rdbg->scopes[0];
scope = &rdbg->scopes[scope->parent_scope_idx]) scope = &rdbg->scopes[scope->parent_scope_idx])
{ {
@@ -116,15 +116,15 @@ eval_push_locals_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 vof
//- rjf: accumulate locals for all tasks //- rjf: accumulate locals for all tasks
for(Task *task = first_task; task != 0; task = task->next) for(Task *task = first_task; task != 0; task = task->next)
{ {
RADDBG_Scope *scope = task->scope; RADDBGI_Scope *scope = task->scope;
if(scope != 0) if(scope != 0)
{ {
U32 local_opl_idx = scope->local_first + scope->local_count; 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) for(U32 local_idx = scope->local_first; local_idx < local_opl_idx; local_idx += 1)
{ {
RADDBG_Local *local_var = &rdbg->locals[local_idx]; RADDBGI_Local *local_var = &rdbg->locals[local_idx];
U64 local_name_size = 0; U64 local_name_size = 0;
U8 *local_name_str = raddbg_string_from_idx(rdbg, local_var->name_string_idx, &local_name_size); U8 *local_name_str = raddbgi_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)); String8 name = push_str8_copy(arena, str8(local_name_str, local_name_size));
eval_string2num_map_insert(arena, map, name, (U64)local_idx+1); eval_string2num_map_insert(arena, map, name, (U64)local_idx+1);
} }
@@ -136,18 +136,18 @@ eval_push_locals_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 vof
} }
internal EVAL_String2NumMap * internal EVAL_String2NumMap *
eval_push_member_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 voff) eval_push_member_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 voff)
{ {
//- rjf: voff -> tightest scope //- rjf: voff -> tightest scope
RADDBG_Scope *tightest_scope = 0; RADDBGI_Scope *tightest_scope = 0;
if(rdbg->scope_vmap != 0 && rdbg->scopes != 0) if(rdbg->scope_vmap != 0 && rdbg->scopes != 0)
{ {
U64 scope_idx = raddbg_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff); U64 scope_idx = raddbgi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff);
tightest_scope = &rdbg->scopes[scope_idx]; tightest_scope = &rdbg->scopes[scope_idx];
} }
//- rjf: tightest scope -> procedure //- rjf: tightest scope -> procedure
RADDBG_Procedure *procedure = 0; RADDBGI_Procedure *procedure = 0;
if(tightest_scope != 0 && rdbg->procedures != 0) if(tightest_scope != 0 && rdbg->procedures != 0)
{ {
U32 proc_idx = tightest_scope->proc_idx; U32 proc_idx = tightest_scope->proc_idx;
@@ -158,8 +158,8 @@ eval_push_member_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 vof
} }
//- rjf: procedure -> udt //- rjf: procedure -> udt
RADDBG_UDT *udt = 0; RADDBGI_UDT *udt = 0;
if(procedure != 0 && rdbg->udts != 0 && procedure->link_flags & RADDBG_LinkFlag_TypeScoped) if(procedure != 0 && rdbg->udts != 0 && procedure->link_flags & RADDBGI_LinkFlag_TypeScoped)
{ {
U32 udt_idx = procedure->container_idx; U32 udt_idx = procedure->container_idx;
if(0 < udt_idx && udt_idx < rdbg->udts_count) if(0 < udt_idx && udt_idx < rdbg->udts_count)
@@ -173,7 +173,7 @@ eval_push_member_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 vof
*map = eval_string2num_map_make(arena, 64); *map = eval_string2num_map_make(arena, 64);
//- rjf: udt -> fill member map //- rjf: udt -> fill member map
if(udt != 0 && !(udt->flags & RADDBG_UserDefinedTypeFlag_EnumMembers) && rdbg->members != 0) if(udt != 0 && !(udt->flags & RADDBGI_UserDefinedTypeFlag_EnumMembers) && rdbg->members != 0)
{ {
U64 data_member_num = 1; U64 data_member_num = 1;
for(U32 member_idx = udt->member_first; for(U32 member_idx = udt->member_first;
@@ -184,11 +184,11 @@ eval_push_member_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 vof
{ {
break; break;
} }
RADDBG_Member *m = &rdbg->members[member_idx]; RADDBGI_Member *m = &rdbg->members[member_idx];
if(m->kind == RADDBG_MemberKind_DataField) if(m->kind == RADDBGI_MemberKind_DataField)
{ {
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(rdbg, m->name_string_idx, &name.size); name.str = raddbgi_string_from_idx(rdbg, m->name_string_idx, &name.size);
eval_string2num_map_insert(arena, map, name, data_member_num); eval_string2num_map_insert(arena, map, name, data_member_num);
data_member_num += 1; data_member_num += 1;
} }
@@ -464,25 +464,25 @@ eval_token_array_make_first_opl(EVAL_Token *first, EVAL_Token *opl)
//~ rjf: Parser Functions //~ rjf: Parser Functions
internal TG_Key internal TG_Key
eval_leaf_type_from_name(RADDBG_Parsed *rdbg, String8 name) eval_leaf_type_from_name(RADDBGI_Parsed *rdbg, String8 name)
{ {
TG_Key key = zero_struct; TG_Key key = zero_struct;
B32 found = 0; B32 found = 0;
if(rdbg->type_nodes != 0) if(rdbg->type_nodes != 0)
{ {
RADDBG_NameMap *name_map = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_Types); RADDBGI_NameMap *name_map = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_Types);
RADDBG_ParsedNameMap parsed_name_map = {0}; RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbg_name_map_parse(rdbg, name_map, &parsed_name_map); raddbgi_name_map_parse(rdbg, name_map, &parsed_name_map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &parsed_name_map, name.str, name.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &parsed_name_map, name.str, name.size);
if(node != 0) if(node != 0)
{ {
U32 match_count = 0; U32 match_count = 0;
U32 *matches = raddbg_matches_from_map_node(rdbg, node, &match_count); U32 *matches = raddbgi_matches_from_map_node(rdbg, node, &match_count);
if(match_count != 0) if(match_count != 0)
{ {
RADDBG_TypeNode *type_node = raddbg_element_from_idx(rdbg, type_nodes, matches[0]); RADDBGI_TypeNode *type_node = raddbgi_element_from_idx(rdbg, type_nodes, matches[0]);
found = type_node->kind != RADDBG_TypeKind_NULL; found = type_node->kind != RADDBGI_TypeKind_NULL;
key = tg_key_ext(tg_kind_from_raddbg_type_kind(type_node->kind), (U64)matches[0]); key = tg_key_ext(tg_kind_from_raddbgi_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 mapped_identifier = 0;
B32 identifier_type_is_possibly_dynamically_overridden = 0; B32 identifier_type_is_possibly_dynamically_overridden = 0;
B32 identifier_looks_like_type_expr = 0; B32 identifier_looks_like_type_expr = 0;
RADDBG_LocationKind loc_kind = RADDBG_LocationKind_NULL; RADDBGI_LocationKind loc_kind = RADDBGI_LocationKind_NULL;
RADDBG_LocationRegister loc_reg = {0}; RADDBGI_LocationRegister loc_reg = {0};
RADDBG_LocationRegisterPlusU16 loc_reg_u16 = {0}; RADDBGI_LocationRegisterPlusU16 loc_reg_u16 = {0};
String8 loc_bytecode = {0}; String8 loc_bytecode = {0};
REGS_RegCode reg_code = 0; REGS_RegCode reg_code = 0;
REGS_AliasCode alias_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}; String8List namespaceified_token_strings = {0};
if(ctx->rdbg->procedures != 0 && ctx->rdbg->scopes != 0 && ctx->rdbg->scope_vmap != 0) if(ctx->rdbg->procedures != 0 && ctx->rdbg->scopes != 0 && ctx->rdbg->scope_vmap != 0)
{ {
U64 scope_idx = raddbg_vmap_idx_from_voff(ctx->rdbg->scope_vmap, ctx->rdbg->scope_vmap_count, ctx->ip_voff); U64 scope_idx = raddbgi_vmap_idx_from_voff(ctx->rdbg->scope_vmap, ctx->rdbg->scope_vmap_count, ctx->ip_voff);
RADDBG_Scope *scope = &ctx->rdbg->scopes[scope_idx]; RADDBGI_Scope *scope = &ctx->rdbg->scopes[scope_idx];
U64 proc_idx = scope->proc_idx; U64 proc_idx = scope->proc_idx;
RADDBG_Procedure *procedure = &ctx->rdbg->procedures[proc_idx]; RADDBGI_Procedure *procedure = &ctx->rdbg->procedures[proc_idx];
U64 name_size = 0; U64 name_size = 0;
U8 *name_ptr = raddbg_string_from_idx(ctx->rdbg, procedure->name_string_idx, &name_size); U8 *name_ptr = raddbgi_string_from_idx(ctx->rdbg, procedure->name_string_idx, &name_size);
String8 containing_procedure_name = str8(name_ptr, name_size); String8 containing_procedure_name = str8(name_ptr, name_size);
U64 last_past_scope_resolution_pos = 0; U64 last_past_scope_resolution_pos = 0;
for(;;) for(;;)
@@ -843,26 +843,26 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
{ {
mapped_identifier = 1; mapped_identifier = 1;
identifier_type_is_possibly_dynamically_overridden = 1; identifier_type_is_possibly_dynamically_overridden = 1;
RADDBG_Local *local_var = raddbg_element_from_idx(ctx->rdbg, locals, local_num-1); RADDBGI_Local *local_var = raddbgi_element_from_idx(ctx->rdbg, locals, local_num-1);
RADDBG_TypeNode *type_node = raddbg_element_from_idx(ctx->rdbg, type_nodes, local_var->type_idx); RADDBGI_TypeNode *type_node = raddbgi_element_from_idx(ctx->rdbg, type_nodes, local_var->type_idx);
type_key = tg_key_ext(tg_kind_from_raddbg_type_kind(type_node->kind), (U64)local_var->type_idx); type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), (U64)local_var->type_idx);
// rjf: grab location info // rjf: grab location info
for(U32 loc_block_idx = local_var->location_first; for(U32 loc_block_idx = local_var->location_first;
loc_block_idx < local_var->location_opl; loc_block_idx < local_var->location_opl;
loc_block_idx += 1) loc_block_idx += 1)
{ {
RADDBG_LocationBlock *block = &ctx->rdbg->location_blocks[loc_block_idx]; RADDBGI_LocationBlock *block = &ctx->rdbg->location_blocks[loc_block_idx];
if(block->scope_off_first <= ctx->ip_voff && ctx->ip_voff < block->scope_off_opl) if(block->scope_off_first <= ctx->ip_voff && ctx->ip_voff < block->scope_off_opl)
{ {
loc_kind = *((RADDBG_LocationKind *)(ctx->rdbg->location_data + block->location_data_off)); loc_kind = *((RADDBGI_LocationKind *)(ctx->rdbg->location_data + block->location_data_off));
switch(loc_kind) switch(loc_kind)
{ {
default:{mapped_identifier = 0;}break; default:{mapped_identifier = 0;}break;
case RADDBG_LocationKind_AddrBytecodeStream: case RADDBGI_LocationKind_AddrBytecodeStream:
case RADDBG_LocationKind_ValBytecodeStream: case RADDBGI_LocationKind_ValBytecodeStream:
{ {
U8 *bytecode_base = ctx->rdbg->location_data + block->location_data_off + sizeof(RADDBG_LocationKind); U8 *bytecode_base = ctx->rdbg->location_data + block->location_data_off + sizeof(RADDBGI_LocationKind);
U64 bytecode_size = 0; U64 bytecode_size = 0;
for(U64 idx = 0; idx < ctx->rdbg->location_data_size; idx += 1) 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; break;
} }
U8 ctrlbits = raddbg_eval_opcode_ctrlbits[op]; U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[op];
U32 p_size = RADDBG_DECODEN_FROM_CTRLBITS(ctrlbits); U32 p_size = RADDBGI_DECODEN_FROM_CTRLBITS(ctrlbits);
bytecode_size += 1+p_size; bytecode_size += 1+p_size;
} }
loc_bytecode = str8(bytecode_base, bytecode_size); loc_bytecode = str8(bytecode_base, bytecode_size);
}break; }break;
case RADDBG_LocationKind_AddrRegisterPlusU16: case RADDBGI_LocationKind_AddrRegisterPlusU16:
case RADDBG_LocationKind_AddrAddrRegisterPlusU16: case RADDBGI_LocationKind_AddrAddrRegisterPlusU16:
{ {
MemoryCopy(&loc_reg_u16, (ctx->rdbg->location_data + block->location_data_off), sizeof(loc_reg_u16)); MemoryCopy(&loc_reg_u16, (ctx->rdbg->location_data + block->location_data_off), sizeof(loc_reg_u16));
}break; }break;
case RADDBG_LocationKind_ValRegister: case RADDBGI_LocationKind_ValRegister:
{ {
MemoryCopy(&loc_reg, (ctx->rdbg->location_data + block->location_data_off), sizeof(loc_reg)); MemoryCopy(&loc_reg, (ctx->rdbg->location_data + block->location_data_off), sizeof(loc_reg));
}break; }break;
@@ -919,21 +919,21 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
//- rjf: try global variables //- rjf: try global variables
if(mapped_identifier == 0) if(mapped_identifier == 0)
{ {
RADDBG_NameMap *name_map = raddbg_name_map_from_kind(ctx->rdbg, RADDBG_NameMapKind_GlobalVariables); RADDBGI_NameMap *name_map = raddbgi_name_map_from_kind(ctx->rdbg, RADDBGI_NameMapKind_GlobalVariables);
if(name_map != 0 && ctx->rdbg->global_variables != 0) if(name_map != 0 && ctx->rdbg->global_variables != 0)
{ {
RADDBG_ParsedNameMap parsed_name_map = {0}; RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbg_name_map_parse(ctx->rdbg, name_map, &parsed_name_map); raddbgi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size);
U32 matches_count = 0; U32 matches_count = 0;
U32 *matches = raddbg_matches_from_map_node(ctx->rdbg, node, &matches_count); U32 *matches = raddbgi_matches_from_map_node(ctx->rdbg, node, &matches_count);
for(String8Node *n = namespaceified_token_strings.first; for(String8Node *n = namespaceified_token_strings.first;
n != 0 && matches_count == 0; n != 0 && matches_count == 0;
n = n->next) n = n->next)
{ {
node = raddbg_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size); node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size);
matches_count = 0; matches_count = 0;
matches = raddbg_matches_from_map_node(ctx->rdbg, node, &matches_count); matches = raddbgi_matches_from_map_node(ctx->rdbg, node, &matches_count);
} }
if(matches_count != 0) 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 // 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. // in this case, I'm going to prefer the latest-added global.
U32 match_idx = matches[matches_count-1]; U32 match_idx = matches[matches_count-1];
RADDBG_GlobalVariable *global_var = &ctx->rdbg->global_variables[match_idx]; RADDBGI_GlobalVariable *global_var = &ctx->rdbg->global_variables[match_idx];
EVAL_OpList oplist = {0}; EVAL_OpList oplist = {0};
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_ModuleOff, global_var->voff); eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_ModuleOff, global_var->voff);
loc_kind = RADDBG_LocationKind_AddrBytecodeStream; loc_kind = RADDBGI_LocationKind_AddrBytecodeStream;
loc_bytecode = eval_bytecode_from_oplist(arena, &oplist); loc_bytecode = eval_bytecode_from_oplist(arena, &oplist);
U32 type_idx = global_var->type_idx; U32 type_idx = global_var->type_idx;
if(type_idx < ctx->rdbg->type_nodes_count) if(type_idx < ctx->rdbg->type_nodes_count)
{ {
RADDBG_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx]; RADDBGI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx];
type_key = tg_key_ext(tg_kind_from_raddbg_type_kind(type_node->kind), (U64)type_idx); type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), (U64)type_idx);
} }
mapped_identifier = 1; mapped_identifier = 1;
} }
@@ -961,35 +961,35 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
//- rjf: try thread variables //- rjf: try thread variables
if(mapped_identifier == 0) if(mapped_identifier == 0)
{ {
RADDBG_NameMap *name_map = raddbg_name_map_from_kind(ctx->rdbg, RADDBG_NameMapKind_ThreadVariables); RADDBGI_NameMap *name_map = raddbgi_name_map_from_kind(ctx->rdbg, RADDBGI_NameMapKind_ThreadVariables);
if(name_map != 0 && ctx->rdbg->global_variables != 0) if(name_map != 0 && ctx->rdbg->global_variables != 0)
{ {
RADDBG_ParsedNameMap parsed_name_map = {0}; RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbg_name_map_parse(ctx->rdbg, name_map, &parsed_name_map); raddbgi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size);
U32 matches_count = 0; U32 matches_count = 0;
U32 *matches = raddbg_matches_from_map_node(ctx->rdbg, node, &matches_count); U32 *matches = raddbgi_matches_from_map_node(ctx->rdbg, node, &matches_count);
for(String8Node *n = namespaceified_token_strings.first; for(String8Node *n = namespaceified_token_strings.first;
n != 0 && matches_count == 0; n != 0 && matches_count == 0;
n = n->next) n = n->next)
{ {
node = raddbg_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size); node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size);
matches_count = 0; matches_count = 0;
matches = raddbg_matches_from_map_node(ctx->rdbg, node, &matches_count); matches = raddbgi_matches_from_map_node(ctx->rdbg, node, &matches_count);
} }
if(matches_count != 0) if(matches_count != 0)
{ {
U32 match_idx = matches[0]; U32 match_idx = matches[0];
RADDBG_ThreadVariable *thread_var = &ctx->rdbg->thread_variables[match_idx]; RADDBGI_ThreadVariable *thread_var = &ctx->rdbg->thread_variables[match_idx];
EVAL_OpList oplist = {0}; EVAL_OpList oplist = {0};
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_TLSOff, thread_var->tls_off); eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_TLSOff, thread_var->tls_off);
loc_kind = RADDBG_LocationKind_AddrBytecodeStream; loc_kind = RADDBGI_LocationKind_AddrBytecodeStream;
loc_bytecode = eval_bytecode_from_oplist(arena, &oplist); loc_bytecode = eval_bytecode_from_oplist(arena, &oplist);
U32 type_idx = thread_var->type_idx; U32 type_idx = thread_var->type_idx;
if(type_idx < ctx->rdbg->type_nodes_count) if(type_idx < ctx->rdbg->type_nodes_count)
{ {
RADDBG_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx]; RADDBGI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx];
type_key = tg_key_ext(tg_kind_from_raddbg_type_kind(type_node->kind), (U64)type_idx); type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), (U64)type_idx);
} }
mapped_identifier = 1; mapped_identifier = 1;
} }
@@ -999,37 +999,37 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
//- rjf: try procedures //- rjf: try procedures
if(mapped_identifier == 0) if(mapped_identifier == 0)
{ {
RADDBG_NameMap *name_map = raddbg_name_map_from_kind(ctx->rdbg, RADDBG_NameMapKind_Procedures); RADDBGI_NameMap *name_map = raddbgi_name_map_from_kind(ctx->rdbg, RADDBGI_NameMapKind_Procedures);
if(name_map != 0 && ctx->rdbg->procedures != 0 && ctx->rdbg->scopes != 0 && ctx->rdbg->scope_voffs) if(name_map != 0 && ctx->rdbg->procedures != 0 && ctx->rdbg->scopes != 0 && ctx->rdbg->scope_voffs)
{ {
RADDBG_ParsedNameMap parsed_name_map = {0}; RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbg_name_map_parse(ctx->rdbg, name_map, &parsed_name_map); raddbgi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size); RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size);
U32 matches_count = 0; U32 matches_count = 0;
U32 *matches = raddbg_matches_from_map_node(ctx->rdbg, node, &matches_count); U32 *matches = raddbgi_matches_from_map_node(ctx->rdbg, node, &matches_count);
for(String8Node *n = namespaceified_token_strings.first; for(String8Node *n = namespaceified_token_strings.first;
n != 0 && matches_count == 0; n != 0 && matches_count == 0;
n = n->next) n = n->next)
{ {
node = raddbg_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size); node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, n->string.str, n->string.size);
matches_count = 0; matches_count = 0;
matches = raddbg_matches_from_map_node(ctx->rdbg, node, &matches_count); matches = raddbgi_matches_from_map_node(ctx->rdbg, node, &matches_count);
} }
if(matches_count != 0) if(matches_count != 0)
{ {
U32 match_idx = matches[0]; U32 match_idx = matches[0];
RADDBG_Procedure *procedure = &ctx->rdbg->procedures[match_idx]; RADDBGI_Procedure *procedure = &ctx->rdbg->procedures[match_idx];
RADDBG_Scope *scope = &ctx->rdbg->scopes[procedure->root_scope_idx]; RADDBGI_Scope *scope = &ctx->rdbg->scopes[procedure->root_scope_idx];
U64 voff = ctx->rdbg->scope_voffs[scope->voff_range_first]; U64 voff = ctx->rdbg->scope_voffs[scope->voff_range_first];
EVAL_OpList oplist = {0}; EVAL_OpList oplist = {0};
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_ModuleOff, voff); eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_ModuleOff, voff);
loc_kind = RADDBG_LocationKind_ValBytecodeStream; loc_kind = RADDBGI_LocationKind_ValBytecodeStream;
loc_bytecode = eval_bytecode_from_oplist(arena, &oplist); loc_bytecode = eval_bytecode_from_oplist(arena, &oplist);
U32 type_idx = procedure->type_idx; U32 type_idx = procedure->type_idx;
if(type_idx < ctx->rdbg->type_nodes_count) if(type_idx < ctx->rdbg->type_nodes_count)
{ {
RADDBG_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx]; RADDBGI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx];
type_key = tg_key_ext(tg_kind_from_raddbg_type_kind(type_node->kind), (U64)type_idx); type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), (U64)type_idx);
} }
mapped_identifier = 1; 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); eval_errorf(arena, &result.errors, EVAL_ErrorKind_MissingInfo, token_string.str, "Missing location information for \"%S\".", token_string);
} }
}break; }break;
case RADDBG_LocationKind_AddrBytecodeStream: case RADDBGI_LocationKind_AddrBytecodeStream:
{ {
atom = eval_expr_leaf_bytecode(arena, token_string.str, type_key, loc_bytecode, EVAL_EvalMode_Addr); atom = eval_expr_leaf_bytecode(arena, token_string.str, type_key, loc_bytecode, EVAL_EvalMode_Addr);
}break; }break;
case RADDBG_LocationKind_ValBytecodeStream: case RADDBGI_LocationKind_ValBytecodeStream:
{ {
atom = eval_expr_leaf_bytecode(arena, token_string.str, type_key, loc_bytecode, EVAL_EvalMode_Value); atom = eval_expr_leaf_bytecode(arena, token_string.str, type_key, loc_bytecode, EVAL_EvalMode_Value);
}break; }break;
case RADDBG_LocationKind_AddrRegisterPlusU16: case RADDBGI_LocationKind_AddrRegisterPlusU16:
{ {
EVAL_OpList oplist = {0}; EVAL_OpList oplist = {0};
U64 byte_size = bit_size_from_arch(ctx->arch)/8; U64 byte_size = bit_size_from_arch(ctx->arch)/8;
U64 regread_param = RADDBG_EncodeRegReadParam(loc_reg_u16.register_code, byte_size, 0); U64 regread_param = RADDBGI_EncodeRegReadParam(loc_reg_u16.register_code, byte_size, 0);
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_RegRead, regread_param); eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_RegRead, regread_param);
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_ConstU16, loc_reg_u16.offset); eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_ConstU16, loc_reg_u16.offset);
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_Add, 0); eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_Add, 0);
atom = eval_expr_leaf_op_list(arena, token_string.str, type_key, &oplist, EVAL_EvalMode_Addr); atom = eval_expr_leaf_op_list(arena, token_string.str, type_key, &oplist, EVAL_EvalMode_Addr);
}break; }break;
case RADDBG_LocationKind_AddrAddrRegisterPlusU16: case RADDBGI_LocationKind_AddrAddrRegisterPlusU16:
{ {
EVAL_OpList oplist = {0}; EVAL_OpList oplist = {0};
U64 byte_size = bit_size_from_arch(ctx->arch)/8; U64 byte_size = bit_size_from_arch(ctx->arch)/8;
U64 regread_param = RADDBG_EncodeRegReadParam(loc_reg_u16.register_code, byte_size, 0); U64 regread_param = RADDBGI_EncodeRegReadParam(loc_reg_u16.register_code, byte_size, 0);
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_RegRead, regread_param); eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_RegRead, regread_param);
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_ConstU16, loc_reg_u16.offset); eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_ConstU16, loc_reg_u16.offset);
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_Add, 0); eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_Add, 0);
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_MemRead, bit_size_from_arch(ctx->arch)/8); eval_oplist_push_op(arena, &oplist, RADDBGI_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); atom = eval_expr_leaf_op_list(arena, token_string.str, type_key, &oplist, EVAL_EvalMode_Addr);
}break; }break;
case RADDBG_LocationKind_ValRegister: case RADDBGI_LocationKind_ValRegister:
{ {
REGS_RegCode regs_reg_code = regs_reg_code_from_arch_raddbg_code(ctx->arch, loc_reg.register_code); REGS_RegCode regs_reg_code = regs_reg_code_from_arch_raddbgi_code(ctx->arch, loc_reg.register_code);
REGS_Rng reg_rng = regs_reg_code_rng_table_from_architecture(ctx->arch)[regs_reg_code]; REGS_Rng reg_rng = regs_reg_code_rng_table_from_architecture(ctx->arch)[regs_reg_code];
EVAL_OpList oplist = {0}; EVAL_OpList oplist = {0};
U64 byte_size = (U64)reg_rng.byte_size; U64 byte_size = (U64)reg_rng.byte_size;
U64 byte_pos = 0; U64 byte_pos = 0;
U64 regread_param = RADDBG_EncodeRegReadParam(loc_reg.register_code, byte_size, byte_pos); U64 regread_param = RADDBGI_EncodeRegReadParam(loc_reg.register_code, byte_size, byte_pos);
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_RegRead, regread_param); eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_RegRead, regread_param);
atom = eval_expr_leaf_op_list(arena, token_string.str, type_key, &oplist, EVAL_EvalMode_Value); atom = eval_expr_leaf_op_list(arena, token_string.str, type_key, &oplist, EVAL_EvalMode_Value);
}break; }break;
} }
+4 -4
View File
@@ -67,7 +67,7 @@ struct EVAL_ParseCtx
{ {
Architecture arch; Architecture arch;
U64 ip_voff; U64 ip_voff;
RADDBG_Parsed *rdbg; RADDBGI_Parsed *rdbg;
TG_Graph *type_graph; TG_Graph *type_graph;
EVAL_String2NumMap *regs_map; EVAL_String2NumMap *regs_map;
EVAL_String2NumMap *reg_alias_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 //~ rjf: Debug-Info-Driven Map Building Fast Paths
internal EVAL_String2NumMap *eval_push_locals_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 voff); 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_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 voff); internal EVAL_String2NumMap *eval_push_member_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 voff);
//////////////////////////////// ////////////////////////////////
//~ rjf: Tokenization Functions //~ rjf: Tokenization Functions
@@ -101,7 +101,7 @@ internal EVAL_TokenArray eval_token_array_make_first_opl(EVAL_Token *first, EVAL
//////////////////////////////// ////////////////////////////////
//~ rjf: Parser Functions //~ rjf: Parser Functions
internal TG_Key eval_leaf_type_from_name(RADDBG_Parsed *rdbg, String8 name); internal TG_Key eval_leaf_type_from_name(RADDBGI_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_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__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); 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 // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_MARKUP_H #ifndef RADDBGI_MARKUP_H
#define RADDBG_MARKUP_H #define RADDBGI_MARKUP_H
//////////////////////////////// ////////////////////////////////
//~ Usage Macros //~ Usage Macros
@@ -75,4 +75,4 @@ raddbg_log__impl(char *fmt, ...)
#endif // defined(_WIN32) #endif // defined(_WIN32)
#endif // RADDBG_MARKUP_H #endif // RADDBGI_MARKUP_H
File diff suppressed because it is too large Load Diff
+35 -35
View File
@@ -98,7 +98,7 @@ struct CONS_BinarySection
{ {
CONS_BinarySection *next; CONS_BinarySection *next;
String8 name; String8 name;
RADDBG_BinarySectionFlags flags; RADDBGI_BinarySectionFlags flags;
U64 voff_first; U64 voff_first;
U64 voff_opl; U64 voff_opl;
U64 foff_first; U64 foff_first;
@@ -134,7 +134,7 @@ struct CONS_UnitInfo
String8 object_file; String8 object_file;
String8 archive_file; String8 archive_file;
String8 build_path; String8 build_path;
RADDBG_Language language; RADDBGI_Language language;
}; };
typedef struct CONS_Unit CONS_Unit; typedef struct CONS_Unit CONS_Unit;
@@ -149,7 +149,7 @@ struct CONS_Unit
String8 object_file; String8 object_file;
String8 archive_file; String8 archive_file;
String8 build_path; String8 build_path;
RADDBG_Language language; RADDBGI_Language language;
CONS_LineSequenceNode *line_seq_first; CONS_LineSequenceNode *line_seq_first;
CONS_LineSequenceNode *line_seq_last; CONS_LineSequenceNode *line_seq_last;
U64 line_seq_count; U64 line_seq_count;
@@ -185,7 +185,7 @@ typedef struct CONS_TypeMember CONS_TypeMember;
struct CONS_TypeMember struct CONS_TypeMember
{ {
CONS_TypeMember *next; CONS_TypeMember *next;
RADDBG_MemberKind kind; RADDBGI_MemberKind kind;
String8 name; String8 name;
struct CONS_Type *type; struct CONS_Type *type;
U32 off; U32 off;
@@ -203,7 +203,7 @@ typedef struct CONS_Type CONS_Type;
struct CONS_Type struct CONS_Type
{ {
CONS_Type *next_order; CONS_Type *next_order;
RADDBG_TypeKind kind; RADDBGI_TypeKind kind;
U32 idx; U32 idx;
U32 byte_size; U32 byte_size;
U32 flags; U32 flags;
@@ -298,7 +298,7 @@ struct CONS_Symbol
typedef struct CONS_LocalInfo CONS_LocalInfo; typedef struct CONS_LocalInfo CONS_LocalInfo;
struct CONS_LocalInfo struct CONS_LocalInfo
{ {
RADDBG_LocalKind kind; RADDBGI_LocalKind kind;
struct CONS_Scope *scope; struct CONS_Scope *scope;
String8 name; String8 name;
CONS_Type *type; CONS_Type *type;
@@ -308,7 +308,7 @@ typedef struct CONS_Local CONS_Local;
struct CONS_Local struct CONS_Local
{ {
CONS_Local *next; CONS_Local *next;
RADDBG_LocalKind kind; RADDBGI_LocalKind kind;
String8 name; String8 name;
CONS_Type *type; CONS_Type *type;
struct CONS_LocationSet *locset; struct CONS_LocationSet *locset;
@@ -348,7 +348,7 @@ typedef struct CONS_EvalBytecodeOp CONS_EvalBytecodeOp;
struct CONS_EvalBytecodeOp struct CONS_EvalBytecodeOp
{ {
CONS_EvalBytecodeOp *next; CONS_EvalBytecodeOp *next;
RADDBG_EvalOp op; RADDBGI_EvalOp op;
U32 p_size; U32 p_size;
U64 p; U64 p;
}; };
@@ -365,7 +365,7 @@ struct CONS_EvalBytecode
typedef struct CONS_Location CONS_Location; typedef struct CONS_Location CONS_Location;
struct CONS_Location struct CONS_Location
{ {
RADDBG_LocationKind kind; RADDBGI_LocationKind kind;
U8 register_code; U8 register_code;
U16 offset; U16 offset;
CONS_EvalBytecode bytecode; CONS_EvalBytecode bytecode;
@@ -426,7 +426,7 @@ struct CONS__NameMap
typedef struct CONS_TopLevelInfo CONS_TopLevelInfo; typedef struct CONS_TopLevelInfo CONS_TopLevelInfo;
struct CONS_TopLevelInfo struct CONS_TopLevelInfo
{ {
RADDBG_Arch architecture; RADDBGI_Arch architecture;
String8 exe_name; String8 exe_name;
U64 exe_hash; U64 exe_hash;
U64 voff_max; U64 voff_max;
@@ -513,7 +513,7 @@ struct CONS_Root
U64 location_count; U64 location_count;
// name maps // name maps
CONS__NameMap *name_maps[RADDBG_NameMapKind_COUNT]; CONS__NameMap *name_maps[RADDBGI_NameMapKind_COUNT];
//////// Handle Relationship Maps //////// Handle Relationship Maps
@@ -536,7 +536,7 @@ struct CONS__DSectionNode
CONS__DSectionNode *next; CONS__DSectionNode *next;
void *data; void *data;
U64 size; U64 size;
RADDBG_DataSectionTag tag; RADDBGI_DataSectionTag tag;
}; };
typedef struct CONS__DSections CONS__DSections; typedef struct CONS__DSections CONS__DSections;
@@ -664,7 +664,7 @@ typedef struct CONS__UnitLinesCombined CONS__UnitLinesCombined;
struct CONS__UnitLinesCombined struct CONS__UnitLinesCombined
{ {
U64 *voffs; U64 *voffs;
RADDBG_Line *lines; RADDBGI_Line *lines;
U16 *cols; U16 *cols;
U32 line_count; U32 line_count;
}; };
@@ -702,7 +702,7 @@ struct CONS__SrcLineMapBucket
typedef struct CONS__VMap CONS__VMap; typedef struct CONS__VMap CONS__VMap;
struct CONS__VMap struct CONS__VMap
{ {
RADDBG_VMapEntry *vmap; // [count + 1] RADDBGI_VMapEntry *vmap; // [count + 1]
U32 count; U32 count;
}; };
@@ -725,16 +725,16 @@ struct CONS__VMapRangeTracker
typedef struct CONS__TypeData CONS__TypeData; typedef struct CONS__TypeData CONS__TypeData;
struct CONS__TypeData struct CONS__TypeData
{ {
RADDBG_TypeNode *type_nodes; RADDBGI_TypeNode *type_nodes;
U32 type_node_count; U32 type_node_count;
RADDBG_UDT *udts; RADDBGI_UDT *udts;
U32 udt_count; U32 udt_count;
RADDBG_Member *members; RADDBGI_Member *members;
U32 member_count; U32 member_count;
RADDBG_EnumMember *enum_members; RADDBGI_EnumMember *enum_members;
U32 enum_member_count; U32 enum_member_count;
}; };
@@ -743,18 +743,18 @@ struct CONS__TypeData
typedef struct CONS__SymbolData CONS__SymbolData; typedef struct CONS__SymbolData CONS__SymbolData;
struct CONS__SymbolData struct CONS__SymbolData
{ {
RADDBG_GlobalVariable *global_variables; RADDBGI_GlobalVariable *global_variables;
U32 global_variable_count; U32 global_variable_count;
CONS__VMap *global_vmap; CONS__VMap *global_vmap;
RADDBG_ThreadVariable *thread_variables; RADDBGI_ThreadVariable *thread_variables;
U32 thread_variable_count; U32 thread_variable_count;
RADDBG_Procedure *procedures; RADDBGI_Procedure *procedures;
U32 procedure_count; U32 procedure_count;
RADDBG_Scope *scopes; RADDBGI_Scope *scopes;
U32 scope_count; U32 scope_count;
U64 *scope_voffs; U64 *scope_voffs;
@@ -762,10 +762,10 @@ struct CONS__SymbolData
CONS__VMap *scope_vmap; CONS__VMap *scope_vmap;
RADDBG_Local *locals; RADDBGI_Local *locals;
U32 local_count; U32 local_count;
RADDBG_LocationBlock *location_blocks; RADDBGI_LocationBlock *location_blocks;
U32 location_block_count; U32 location_block_count;
void *location_data; void *location_data;
@@ -792,8 +792,8 @@ struct CONS__NameMapSemiBucket
typedef struct CONS__NameMapBaked CONS__NameMapBaked; typedef struct CONS__NameMapBaked CONS__NameMapBaked;
struct CONS__NameMapBaked struct CONS__NameMapBaked
{ {
RADDBG_NameMapBucket *buckets; RADDBGI_NameMapBucket *buckets;
RADDBG_NameMapNode *nodes; RADDBGI_NameMapNode *nodes;
U32 bucket_count; U32 bucket_count;
U32 node_count; U32 node_count;
}; };
@@ -823,7 +823,7 @@ struct CONS__BakeCtx
static void cons_type_list_push(Arena *arena, CONS_TypeList *list, CONS_Type *type); static void cons_type_list_push(Arena *arena, CONS_TypeList *list, CONS_Type *type);
//- rjf: bytecode lists //- rjf: bytecode lists
static void cons_bytecode_push_op(Arena *arena, CONS_EvalBytecode *bytecode, RADDBG_EvalOp op, U64 p); static void cons_bytecode_push_op(Arena *arena, CONS_EvalBytecode *bytecode, RADDBGI_EvalOp op, U64 p);
static void cons_bytecode_push_uconst(Arena *arena, CONS_EvalBytecode *bytecode, U64 x); static void cons_bytecode_push_uconst(Arena *arena, CONS_EvalBytecode *bytecode, U64 x);
static void cons_bytecode_push_sconst(Arena *arena, CONS_EvalBytecode *bytecode, S64 x); static void cons_bytecode_push_sconst(Arena *arena, CONS_EvalBytecode *bytecode, S64 x);
static void cons_bytecode_concat_in_place(CONS_EvalBytecode *left_dst, CONS_EvalBytecode *right_destroyed); static void cons_bytecode_concat_in_place(CONS_EvalBytecode *left_dst, CONS_EvalBytecode *right_destroyed);
@@ -861,7 +861,7 @@ static void cons_set_top_level_info(CONS_Root *root, CONS_TopLevelInfo *tli);
//- rjf: binary section building //- rjf: binary section building
static void cons_add_binary_section(CONS_Root *root, static void cons_add_binary_section(CONS_Root *root,
String8 name, RADDBG_BinarySectionFlags flags, String8 name, RADDBGI_BinarySectionFlags flags,
U64 voff_first, U64 voff_opl, U64 foff_first, U64 voff_first, U64 voff_opl, U64 foff_first,
U64 foff_opl); U64 foff_opl);
@@ -889,19 +889,19 @@ static CONS_TypeUDT* cons__type_udt_from_any_type(CONS_Root *root, CONS_Type *ty
static CONS_TypeUDT* cons__type_udt_from_record_type(CONS_Root *root, CONS_Type *type); static CONS_TypeUDT* cons__type_udt_from_record_type(CONS_Root *root, CONS_Type *type);
//- rjf: basic/operator type construction helpers //- rjf: basic/operator type construction helpers
static CONS_Type* cons_type_basic(CONS_Root *root, RADDBG_TypeKind type_kind, String8 name); static CONS_Type* cons_type_basic(CONS_Root *root, RADDBGI_TypeKind type_kind, String8 name);
static CONS_Type* cons_type_modifier(CONS_Root *root, CONS_Type *direct_type, RADDBG_TypeModifierFlags flags); static CONS_Type* cons_type_modifier(CONS_Root *root, CONS_Type *direct_type, RADDBGI_TypeModifierFlags flags);
static CONS_Type* cons_type_bitfield(CONS_Root *root, CONS_Type *direct_type, U32 bit_off, U32 bit_count); static CONS_Type* cons_type_bitfield(CONS_Root *root, CONS_Type *direct_type, U32 bit_off, U32 bit_count);
static CONS_Type* cons_type_pointer(CONS_Root *root, CONS_Type *direct_type, RADDBG_TypeKind ptr_type_kind); static CONS_Type* cons_type_pointer(CONS_Root *root, CONS_Type *direct_type, RADDBGI_TypeKind ptr_type_kind);
static CONS_Type* cons_type_array(CONS_Root *root, CONS_Type *direct_type, U64 count); static CONS_Type* cons_type_array(CONS_Root *root, CONS_Type *direct_type, U64 count);
static CONS_Type* cons_type_proc(CONS_Root *root, CONS_Type *return_type, struct CONS_TypeList *params); static CONS_Type* cons_type_proc(CONS_Root *root, CONS_Type *return_type, struct CONS_TypeList *params);
static CONS_Type* cons_type_method(CONS_Root *root, CONS_Type *this_type, CONS_Type *return_type, struct CONS_TypeList *params); static CONS_Type* cons_type_method(CONS_Root *root, CONS_Type *this_type, CONS_Type *return_type, struct CONS_TypeList *params);
//- rjf: udt type constructors //- rjf: udt type constructors
static CONS_Type* cons_type_udt(CONS_Root *root, RADDBG_TypeKind record_type_kind, String8 name, U64 size); static CONS_Type* cons_type_udt(CONS_Root *root, RADDBGI_TypeKind record_type_kind, String8 name, U64 size);
static CONS_Type* cons_type_enum(CONS_Root *root, CONS_Type *direct_type, String8 name); static CONS_Type* cons_type_enum(CONS_Root *root, CONS_Type *direct_type, String8 name);
static CONS_Type* cons_type_alias(CONS_Root *root, CONS_Type *direct_type, String8 name); static CONS_Type* cons_type_alias(CONS_Root *root, CONS_Type *direct_type, String8 name);
static CONS_Type* cons_type_incomplete(CONS_Root *root, RADDBG_TypeKind type_kind, String8 name); static CONS_Type* cons_type_incomplete(CONS_Root *root, RADDBGI_TypeKind type_kind, String8 name);
//- rjf: type member building //- rjf: type member building
static void cons_type_add_member_data_field(CONS_Root *root, CONS_Type *record_type, String8 name, CONS_Type *mem_type, U32 off); static void cons_type_add_member_data_field(CONS_Root *root, CONS_Type *record_type, String8 name, CONS_Type *mem_type, U32 off);
@@ -941,7 +941,7 @@ static CONS_Location* cons_location_addr_addr_reg_plus_u16(CONS_Root *root, U8 r
static CONS_Location* cons_location_val_reg(CONS_Root *root, U8 reg_code); static CONS_Location* cons_location_val_reg(CONS_Root *root, U8 reg_code);
//- rjf: name map building //- rjf: name map building
static CONS__NameMap* cons__name_map_for_kind(CONS_Root *root, RADDBG_NameMapKind kind); static CONS__NameMap* cons__name_map_for_kind(CONS_Root *root, RADDBGI_NameMapKind kind);
static void cons__name_map_add_pair(CONS_Root *root, CONS__NameMap *map, String8 name, U32 idx); static void cons__name_map_add_pair(CONS_Root *root, CONS__NameMap *map, String8 name, U32 idx);
//////////////////////////////// ////////////////////////////////
@@ -959,7 +959,7 @@ static U64 cons__idx_run_hash(U32 *idx_run, U32 count);
static U32 cons__idx_run(CONS__BakeCtx *bctx, U32 *idx_run, U32 count); static U32 cons__idx_run(CONS__BakeCtx *bctx, U32 *idx_run, U32 count);
//- rjf: data section baking //- rjf: data section baking
static U32 cons__dsection(Arena *arena, CONS__DSections *dss, void *data, U64 size, RADDBG_DataSectionTag tag); static U32 cons__dsection(Arena *arena, CONS__DSections *dss, void *data, U64 size, RADDBGI_DataSectionTag tag);
//- rjf: paths baking //- rjf: paths baking
static String8 cons__normal_string_from_path_node(Arena *arena, CONS__PathNode *node); static String8 cons__normal_string_from_path_node(Arena *arena, CONS__PathNode *node);
+3 -3
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_DWARF_H #ifndef RADDBGI_DWARF_H
#define RADDBG_DWARF_H #define RADDBGI_DWARF_H
// https://dwarfstd.org/doc/DWARF4.pdf // https://dwarfstd.org/doc/DWARF4.pdf
// https://dwarfstd.org/doc/DWARF5.pdf // https://dwarfstd.org/doc/DWARF5.pdf
@@ -1328,5 +1328,5 @@ static String8 dwarf_string_from_line_ext_op(DWARF_LineExtOp op);
static String8 dwarf_string_from_line_entry_format(DWARF_LineEntryFormat format); static String8 dwarf_string_from_line_entry_format(DWARF_LineEntryFormat format);
static String8 dwarf_string_from_section_code(DWARF_SectionCode sec_code); static String8 dwarf_string_from_section_code(DWARF_SectionCode sec_code);
#endif //RADDBG_DWARF_H #endif //RADDBGI_DWARF_H
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_DWARF_STRINGIZE_H #ifndef RADDBGI_DWARF_STRINGIZE_H
#define RADDBG_DWARF_STRINGIZE_H #define RADDBGI_DWARF_STRINGIZE_H
//////////////////////////////// ////////////////////////////////
//~ DWARF Stringize Functions //~ DWARF Stringize Functions
@@ -25,4 +25,4 @@ dwarf_stringize_addr(Arena *arena, String8List *out, DWARF_AddrUnit *unit, U32 i
#endif //RADDBG_DWARF_STRINGIZE_H #endif //RADDBGI_DWARF_STRINGIZE_H
+3 -3
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_ELF_H #ifndef RADDBGI_ELF_H
#define RADDBG_ELF_H #define RADDBGI_ELF_H
// https://refspecs.linuxfoundation.org/elf/elf.pdf // https://refspecs.linuxfoundation.org/elf/elf.pdf
@@ -514,4 +514,4 @@ static String8 elf_string_from_symbol_binding(ELF_SymbolBinding binding);
static String8 elf_string_from_symbol_type(ELF_SymbolType type); static String8 elf_string_from_symbol_type(ELF_SymbolType type);
static String8 elf_string_from_symbol_visibility(ELF_SymbolVisibility visibility); static String8 elf_string_from_symbol_visibility(ELF_SymbolVisibility visibility);
#endif //RADDBG_ELF_H #endif //RADDBGI_ELF_H
@@ -416,7 +416,7 @@ main(int argc, char **argv){
String8List args = os_string_list_from_argcv(arena, argc, argv); String8List args = os_string_list_from_argcv(arena, argc, argv);
CmdLine cmdline = cmd_line_from_string_list(arena, args); CmdLine cmdline = cmd_line_from_string_list(arena, args);
ProfBeginCapture("raddbg_from_dwarf"); ProfBeginCapture("raddbgi_from_dwarf");
// parse arguments // parse arguments
DWARFCONV_Params *params = dwarf_convert_params_from_cmd_line(arena, &cmdline); DWARFCONV_Params *params = dwarf_convert_params_from_cmd_line(arena, &cmdline);
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_FROM_DWARF_H #ifndef RADDBGI_FROM_DWARF_H
#define RADDBG_FROM_DWARF_H #define RADDBGI_FROM_DWARF_H
//////////////////////////////// ////////////////////////////////
//~ Program Parameters Type //~ Program Parameters Type
@@ -47,4 +47,4 @@ static DWARFCONV_Params *dwarf_convert_params_from_cmd_line(Arena *arena, CmdLin
#endif //RADDBG_FROM_DWARF_H #endif //RADDBGI_FROM_DWARF_H
+5 -5
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_CODEVIEW_H #ifndef RADDBGI_CODEVIEW_H
#define RADDBG_CODEVIEW_H #define RADDBGI_CODEVIEW_H
#pragma pack(push, 1) #pragma pack(push, 1)
@@ -155,7 +155,7 @@ typedef enum{
} CV_AllRegEnum; } CV_AllRegEnum;
// X(NAME, CODE, (RADDBG_RegsiterCode_X86) NAME, BYTE_POS, BYTE_SIZE) // X(NAME, CODE, (RADDBGI_RegsiterCode_X86) NAME, BYTE_POS, BYTE_SIZE)
#define CV_Reg_X86_XList(X) \ #define CV_Reg_X86_XList(X) \
X(NONE, 0, nil, 0, 0)\ X(NONE, 0, nil, 0, 0)\
X(AL, 1, eax, 0, 1)\ X(AL, 1, eax, 0, 1)\
@@ -408,7 +408,7 @@ typedef enum{
#undef X #undef X
} CV_Regx86Enum; } CV_Regx86Enum;
// X(NAME, CODE, (RADDBG_RegsiterCode_X64) NAME, BYTE_POS, BYTE_SIZE) // X(NAME, CODE, (RADDBGI_RegsiterCode_X64) NAME, BYTE_POS, BYTE_SIZE)
#define CV_Reg_X64_XList(X) \ #define CV_Reg_X64_XList(X) \
X(NONE, 0, nil, 0, 0)\ X(NONE, 0, nil, 0, 0)\
X(AL, 1, rax, 0, 1)\ X(AL, 1, rax, 0, 1)\
@@ -3057,4 +3057,4 @@ typedef struct PDB_CoffSectionArray PDB_CoffSectionArray;
static CV_C13Parsed* cv_c13_from_data(Arena *arena, String8 c13_data, static CV_C13Parsed* cv_c13_from_data(Arena *arena, String8 c13_data,
struct PDB_Strtbl *strtbl, struct PDB_CoffSectionArray *sections); struct PDB_Strtbl *strtbl, struct PDB_CoffSectionArray *sections);
#endif //RADDBG_CODEVIEW_H #endif //RADDBGI_CODEVIEW_H
@@ -4,12 +4,12 @@
//////////////////////////////// ////////////////////////////////
//~ CodeView Conversion Functions //~ CodeView Conversion Functions
static RADDBG_Arch static RADDBGI_Arch
raddbg_arch_from_cv_arch(CV_Arch cv_arch){ raddbgi_arch_from_cv_arch(CV_Arch cv_arch){
RADDBG_Arch result = 0; RADDBGI_Arch result = 0;
switch (cv_arch){ switch (cv_arch){
case CV_Arch_8086: result = RADDBG_Arch_X86; break; case CV_Arch_8086: result = RADDBGI_Arch_X86; break;
case CV_Arch_X64: result = RADDBG_Arch_X64; break; case CV_Arch_X64: result = RADDBGI_Arch_X64; break;
//case CV_Arch_8080: break; //case CV_Arch_8080: break;
//case CV_Arch_80286: break; //case CV_Arch_80286: break;
@@ -73,23 +73,23 @@ raddbg_arch_from_cv_arch(CV_Arch cv_arch){
return(result); return(result);
} }
static RADDBG_RegisterCode static RADDBGI_RegisterCode
raddbg_reg_code_from_cv_reg_code(RADDBG_Arch arch, CV_Reg reg_code){ raddbgi_reg_code_from_cv_reg_code(RADDBGI_Arch arch, CV_Reg reg_code){
RADDBG_RegisterCode result = 0; RADDBGI_RegisterCode result = 0;
switch (arch){ switch (arch){
case RADDBG_Arch_X86: case RADDBGI_Arch_X86:
{ {
switch (reg_code){ switch (reg_code){
#define X(CVN,C,RDN,BP,BZ) case C: result = RADDBG_RegisterCode_X86_##RDN; break; #define X(CVN,C,RDN,BP,BZ) case C: result = RADDBGI_RegisterCode_X86_##RDN; break;
CV_Reg_X86_XList(X) CV_Reg_X86_XList(X)
#undef X #undef X
} }
}break; }break;
case RADDBG_Arch_X64: case RADDBGI_Arch_X64:
{ {
switch (reg_code){ switch (reg_code){
#define X(CVN,C,RDN,BP,BZ) case C: result = RADDBG_RegisterCode_X64_##RDN; break; #define X(CVN,C,RDN,BP,BZ) case C: result = RADDBGI_RegisterCode_X64_##RDN; break;
CV_Reg_X64_XList(X) CV_Reg_X64_XList(X)
#undef X #undef X
} }
@@ -98,12 +98,12 @@ raddbg_reg_code_from_cv_reg_code(RADDBG_Arch arch, CV_Reg reg_code){
return(result); return(result);
} }
static RADDBG_Language static RADDBGI_Language
raddbg_language_from_cv_language(CV_Language cv_language){ raddbgi_language_from_cv_language(CV_Language cv_language){
RADDBG_Language result = 0; RADDBGI_Language result = 0;
switch (cv_language){ switch (cv_language){
case CV_Language_C: result = RADDBG_Language_C; break; case CV_Language_C: result = RADDBGI_Language_C; break;
case CV_Language_CXX: result = RADDBG_Language_CPlusPlus; break; case CV_Language_CXX: result = RADDBGI_Language_CPlusPlus; break;
//case CV_Language_FORTRAN: result = ; break; //case CV_Language_FORTRAN: result = ; break;
//case CV_Language_MASM: result = ; break; //case CV_Language_MASM: result = ; break;
//case CV_Language_PASCAL: result = ; break; //case CV_Language_PASCAL: result = ; break;
@@ -1,14 +1,14 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_CODEVIEW_CONVERSION_H #ifndef RADDBGI_CODEVIEW_CONVERSION_H
#define RADDBG_CODEVIEW_CONVERSION_H #define RADDBGI_CODEVIEW_CONVERSION_H
//////////////////////////////// ////////////////////////////////
//~ CodeView Conversion Functions //~ CodeView Conversion Functions
static RADDBG_Arch raddbg_arch_from_cv_arch(CV_Arch arch); static RADDBGI_Arch raddbgi_arch_from_cv_arch(CV_Arch arch);
static RADDBG_RegisterCode raddbg_reg_code_from_cv_reg_code(RADDBG_Arch arch, CV_Reg reg_code); static RADDBGI_RegisterCode raddbgi_reg_code_from_cv_reg_code(RADDBGI_Arch arch, CV_Reg reg_code);
static RADDBG_Language raddbg_language_from_cv_language(CV_Language language); static RADDBGI_Language raddbgi_language_from_cv_language(CV_Language language);
#endif //RADDBG_CODEVIEW_CONVERSION_H #endif //RADDBGI_CODEVIEW_CONVERSION_H
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_CODEVIEW_STRINGIZE_H #ifndef RADDBGI_CODEVIEW_STRINGIZE_H
#define RADDBG_CODEVIEW_STRINGIZE_H #define RADDBGI_CODEVIEW_STRINGIZE_H
//////////////////////////////// ////////////////////////////////
//~ CodeView Stringize Helper Types //~ CodeView Stringize Helper Types
@@ -83,4 +83,4 @@ static void cv_stringize_leaf_array(Arena *arena, String8List *out,
static void cv_stringize_c13_parsed(Arena *arena, String8List *out, CV_C13Parsed *c13); static void cv_stringize_c13_parsed(Arena *arena, String8List *out, CV_C13Parsed *c13);
#endif //RADDBG_CODEVIEW_STRINGIZE_H #endif //RADDBGI_CODEVIEW_STRINGIZE_H
+2 -2
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_COFF_H #ifndef RADDBGI_COFF_H
#define RADDBG_COFF_H #define RADDBGI_COFF_H
//////////////////////////////// ////////////////////////////////
//~ COFF Format Types //~ COFF Format Types
@@ -4,18 +4,18 @@
//////////////////////////////// ////////////////////////////////
//~ COFF Conversion Functions //~ COFF Conversion Functions
static RADDBG_BinarySectionFlags static RADDBGI_BinarySectionFlags
raddbg_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags){ raddbgi_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags){
RADDBG_BinarySectionFlags result = 0; RADDBGI_BinarySectionFlags result = 0;
if (flags & COFF_SectionFlag_MEM_READ){ if (flags & COFF_SectionFlag_MEM_READ){
result |= RADDBG_BinarySectionFlag_Read; result |= RADDBGI_BinarySectionFlag_Read;
} }
if (flags & COFF_SectionFlag_MEM_WRITE){ if (flags & COFF_SectionFlag_MEM_WRITE){
result |= RADDBG_BinarySectionFlag_Write; result |= RADDBGI_BinarySectionFlag_Write;
} }
if (flags & COFF_SectionFlag_MEM_EXECUTE){ if (flags & COFF_SectionFlag_MEM_EXECUTE){
result |= RADDBG_BinarySectionFlag_Execute; result |= RADDBGI_BinarySectionFlag_Execute;
} }
return(result); return(result);
@@ -1,13 +1,13 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_COFF_CONVERSION_H #ifndef RADDBGI_COFF_CONVERSION_H
#define RADDBG_COFF_CONVERSION_H #define RADDBGI_COFF_CONVERSION_H
//////////////////////////////// ////////////////////////////////
//~ COFF Conversion Functions //~ COFF Conversion Functions
static RADDBG_BinarySectionFlags static RADDBGI_BinarySectionFlags
raddbg_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags); raddbgi_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags);
#endif //RADDBG_COFF_CONVERSION_H #endif //RADDBGI_COFF_CONVERSION_H
+99 -98
View File
@@ -145,7 +145,7 @@ pdbconv_ctx_alloc(PDBCONV_CtxParams *params, CONS_Root *out_root)
PDBCONV_Ctx *pdb_ctx = push_array(arena, PDBCONV_Ctx, 1); PDBCONV_Ctx *pdb_ctx = push_array(arena, PDBCONV_Ctx, 1);
pdb_ctx->arena = arena; pdb_ctx->arena = arena;
pdb_ctx->arch = params->arch; pdb_ctx->arch = params->arch;
pdb_ctx->addr_size = raddbg_addr_size_from_arch(pdb_ctx->arch); pdb_ctx->addr_size = raddbgi_addr_size_from_arch(pdb_ctx->arch);
pdb_ctx->hash = params->tpi_hash; pdb_ctx->hash = params->tpi_hash;
pdb_ctx->leaf = params->tpi_leaf; pdb_ctx->leaf = params->tpi_leaf;
pdb_ctx->sections = params->sections->sections; pdb_ctx->sections = params->sections->sections;
@@ -980,165 +980,165 @@ pdbconv_type_cons_basic(PDBCONV_Ctx *ctx, CV_TypeId itype){
switch (basic_type_code){ switch (basic_type_code){
case CV_BasicType_VOID: case CV_BasicType_VOID:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_Void, str8_lit("void")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_Void, str8_lit("void"));
}break; }break;
case CV_BasicType_HRESULT: case CV_BasicType_HRESULT:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_Handle, str8_lit("HRESULT")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_Handle, str8_lit("HRESULT"));
}break; }break;
case CV_BasicType_RCHAR: case CV_BasicType_RCHAR:
case CV_BasicType_CHAR: case CV_BasicType_CHAR:
case CV_BasicType_CHAR8: case CV_BasicType_CHAR8:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_Char8, str8_lit("char")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_Char8, str8_lit("char"));
}break; }break;
case CV_BasicType_UCHAR: case CV_BasicType_UCHAR:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_UChar8, str8_lit("UCHAR")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_UChar8, str8_lit("UCHAR"));
}break; }break;
case CV_BasicType_WCHAR: case CV_BasicType_WCHAR:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_UChar16, str8_lit("WCHAR")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_UChar16, str8_lit("WCHAR"));
}break; }break;
case CV_BasicType_CHAR16: case CV_BasicType_CHAR16:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_Char16, str8_lit("CHAR16")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_Char16, str8_lit("CHAR16"));
}break; }break;
case CV_BasicType_CHAR32: case CV_BasicType_CHAR32:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_Char32, str8_lit("CHAR32")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_Char32, str8_lit("CHAR32"));
}break; }break;
case CV_BasicType_BOOL8: case CV_BasicType_BOOL8:
case CV_BasicType_INT8: case CV_BasicType_INT8:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_S8, str8_lit("S8")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_S8, str8_lit("S8"));
}break; }break;
case CV_BasicType_BOOL16: case CV_BasicType_BOOL16:
case CV_BasicType_INT16: case CV_BasicType_INT16:
case CV_BasicType_SHORT: case CV_BasicType_SHORT:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_S16, str8_lit("S16")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_S16, str8_lit("S16"));
}break; }break;
case CV_BasicType_BOOL32: case CV_BasicType_BOOL32:
case CV_BasicType_INT32: case CV_BasicType_INT32:
case CV_BasicType_LONG: case CV_BasicType_LONG:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_S32, str8_lit("S32")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_S32, str8_lit("S32"));
}break; }break;
case CV_BasicType_BOOL64: case CV_BasicType_BOOL64:
case CV_BasicType_INT64: case CV_BasicType_INT64:
case CV_BasicType_QUAD: case CV_BasicType_QUAD:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_S64, str8_lit("S64")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_S64, str8_lit("S64"));
}break; }break;
case CV_BasicType_INT128: case CV_BasicType_INT128:
case CV_BasicType_OCT: case CV_BasicType_OCT:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_S128, str8_lit("S128")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_S128, str8_lit("S128"));
}break; }break;
case CV_BasicType_UINT8: case CV_BasicType_UINT8:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_U8, str8_lit("U8")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_U8, str8_lit("U8"));
}break; }break;
case CV_BasicType_UINT16: case CV_BasicType_UINT16:
case CV_BasicType_USHORT: case CV_BasicType_USHORT:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_U16, str8_lit("U16")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_U16, str8_lit("U16"));
}break; }break;
case CV_BasicType_UINT32: case CV_BasicType_UINT32:
case CV_BasicType_ULONG: case CV_BasicType_ULONG:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_U32, str8_lit("U32")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_U32, str8_lit("U32"));
}break; }break;
case CV_BasicType_UINT64: case CV_BasicType_UINT64:
case CV_BasicType_UQUAD: case CV_BasicType_UQUAD:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_U64, str8_lit("U64")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_U64, str8_lit("U64"));
}break; }break;
case CV_BasicType_UINT128: case CV_BasicType_UINT128:
case CV_BasicType_UOCT: case CV_BasicType_UOCT:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_U128, str8_lit("U128")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_U128, str8_lit("U128"));
}break; }break;
case CV_BasicType_FLOAT16: case CV_BasicType_FLOAT16:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_F16, str8_lit("F16")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_F16, str8_lit("F16"));
}break; }break;
case CV_BasicType_FLOAT32: case CV_BasicType_FLOAT32:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_F32, str8_lit("F32")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_F32, str8_lit("F32"));
}break; }break;
case CV_BasicType_FLOAT32PP: case CV_BasicType_FLOAT32PP:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_F32PP, str8_lit("F32PP")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_F32PP, str8_lit("F32PP"));
}break; }break;
case CV_BasicType_FLOAT48: case CV_BasicType_FLOAT48:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_F48, str8_lit("F48")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_F48, str8_lit("F48"));
}break; }break;
case CV_BasicType_FLOAT64: case CV_BasicType_FLOAT64:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_F64, str8_lit("F64")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_F64, str8_lit("F64"));
}break; }break;
case CV_BasicType_FLOAT80: case CV_BasicType_FLOAT80:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_F80, str8_lit("F80")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_F80, str8_lit("F80"));
}break; }break;
case CV_BasicType_FLOAT128: case CV_BasicType_FLOAT128:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_F128, str8_lit("F128")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_F128, str8_lit("F128"));
}break; }break;
case CV_BasicType_COMPLEX32: case CV_BasicType_COMPLEX32:
{ {
basic_type = basic_type =
cons_type_basic(ctx->root, RADDBG_TypeKind_ComplexF32, str8_lit("ComplexF32")); cons_type_basic(ctx->root, RADDBGI_TypeKind_ComplexF32, str8_lit("ComplexF32"));
}break; }break;
case CV_BasicType_COMPLEX64: case CV_BasicType_COMPLEX64:
{ {
basic_type = basic_type =
cons_type_basic(ctx->root, RADDBG_TypeKind_ComplexF64, str8_lit("ComplexF64")); cons_type_basic(ctx->root, RADDBGI_TypeKind_ComplexF64, str8_lit("ComplexF64"));
}break; }break;
case CV_BasicType_COMPLEX80: case CV_BasicType_COMPLEX80:
{ {
basic_type = basic_type =
cons_type_basic(ctx->root, RADDBG_TypeKind_ComplexF80, str8_lit("ComplexF80")); cons_type_basic(ctx->root, RADDBGI_TypeKind_ComplexF80, str8_lit("ComplexF80"));
}break; }break;
case CV_BasicType_COMPLEX128: case CV_BasicType_COMPLEX128:
{ {
basic_type = basic_type =
cons_type_basic(ctx->root, RADDBG_TypeKind_ComplexF128, str8_lit("ComplexF128")); cons_type_basic(ctx->root, RADDBGI_TypeKind_ComplexF128, str8_lit("ComplexF128"));
}break; }break;
case CV_BasicType_PTR: case CV_BasicType_PTR:
{ {
basic_type = cons_type_basic(ctx->root, RADDBG_TypeKind_Handle, str8_lit("PTR")); basic_type = cons_type_basic(ctx->root, RADDBGI_TypeKind_Handle, str8_lit("PTR"));
}break; }break;
} }
@@ -1158,7 +1158,7 @@ pdbconv_type_cons_basic(PDBCONV_Ctx *ctx, CV_TypeId itype){
case CV_BasicPointerKind_16_32BIT: case CV_BasicPointerKind_16_32BIT:
case CV_BasicPointerKind_64BIT: case CV_BasicPointerKind_64BIT:
{ {
constructed_type = cons_type_pointer(ctx->root, basic_type, RADDBG_TypeKind_Ptr); constructed_type = cons_type_pointer(ctx->root, basic_type, RADDBGI_TypeKind_Ptr);
}break; }break;
} }
@@ -1196,12 +1196,12 @@ pdbconv_type_cons_leaf_record(PDBCONV_Ctx *ctx, CV_TypeId itype){
if (sizeof(CV_LeafModifier) <= cap){ if (sizeof(CV_LeafModifier) <= cap){
CV_LeafModifier *modifier = (CV_LeafModifier*)first; CV_LeafModifier *modifier = (CV_LeafModifier*)first;
RADDBG_TypeModifierFlags flags = 0; RADDBGI_TypeModifierFlags flags = 0;
if (modifier->flags & CV_ModifierFlag_Const){ if (modifier->flags & CV_ModifierFlag_Const){
flags |= RADDBG_TypeModifierFlag_Const; flags |= RADDBGI_TypeModifierFlag_Const;
} }
if (modifier->flags & CV_ModifierFlag_Volatile){ if (modifier->flags & CV_ModifierFlag_Volatile){
flags |= RADDBG_TypeModifierFlag_Volatile; flags |= RADDBGI_TypeModifierFlag_Volatile;
} }
CONS_Type *direct_type = pdbconv_type_resolve_and_check(ctx, modifier->itype); CONS_Type *direct_type = pdbconv_type_resolve_and_check(ctx, modifier->itype);
@@ -1227,27 +1227,27 @@ pdbconv_type_cons_leaf_record(PDBCONV_Ctx *ctx, CV_TypeId itype){
// TODO(allen): if ptr_mode in {PtrMem, PtrMethod} then output a member pointer instead // TODO(allen): if ptr_mode in {PtrMem, PtrMethod} then output a member pointer instead
// extract modifier flags // extract modifier flags
RADDBG_TypeModifierFlags modifier_flags = 0; RADDBGI_TypeModifierFlags modifier_flags = 0;
if (pointer->attribs & CV_PointerAttrib_Const){ if (pointer->attribs & CV_PointerAttrib_Const){
modifier_flags |= RADDBG_TypeModifierFlag_Const; modifier_flags |= RADDBGI_TypeModifierFlag_Const;
} }
if (pointer->attribs & CV_PointerAttrib_Volatile){ if (pointer->attribs & CV_PointerAttrib_Volatile){
modifier_flags |= RADDBG_TypeModifierFlag_Volatile; modifier_flags |= RADDBGI_TypeModifierFlag_Volatile;
} }
// determine type kind // determine type kind
RADDBG_TypeKind type_kind = RADDBG_TypeKind_Ptr; RADDBGI_TypeKind type_kind = RADDBGI_TypeKind_Ptr;
if (pointer->attribs & CV_PointerAttrib_LRef){ if (pointer->attribs & CV_PointerAttrib_LRef){
type_kind = RADDBG_TypeKind_LRef; type_kind = RADDBGI_TypeKind_LRef;
} }
else if (pointer->attribs & CV_PointerAttrib_RRef){ else if (pointer->attribs & CV_PointerAttrib_RRef){
type_kind = RADDBG_TypeKind_RRef; type_kind = RADDBGI_TypeKind_RRef;
} }
if (ptr_mode == CV_PointerMode_LRef){ if (ptr_mode == CV_PointerMode_LRef){
type_kind = RADDBG_TypeKind_LRef; type_kind = RADDBGI_TypeKind_LRef;
} }
else if (ptr_mode == CV_PointerMode_RRef){ else if (ptr_mode == CV_PointerMode_RRef){
type_kind = RADDBG_TypeKind_RRef; type_kind = RADDBGI_TypeKind_RRef;
} }
CONS_Type *direct_type = pdbconv_type_resolve_and_check(ctx, pointer->itype); CONS_Type *direct_type = pdbconv_type_resolve_and_check(ctx, pointer->itype);
@@ -1363,18 +1363,18 @@ pdbconv_type_cons_leaf_record(PDBCONV_Ctx *ctx, CV_TypeId itype){
// incomplete type // incomplete type
if (lf_struct->props & CV_TypeProp_FwdRef){ if (lf_struct->props & CV_TypeProp_FwdRef){
RADDBG_TypeKind type_kind = RADDBG_TypeKind_IncompleteStruct; RADDBGI_TypeKind type_kind = RADDBGI_TypeKind_IncompleteStruct;
if (range->hdr.kind == CV_LeafKind_CLASS){ if (range->hdr.kind == CV_LeafKind_CLASS){
type_kind = RADDBG_TypeKind_IncompleteClass; type_kind = RADDBGI_TypeKind_IncompleteClass;
} }
result = cons_type_incomplete(ctx->root, type_kind, name); result = cons_type_incomplete(ctx->root, type_kind, name);
} }
// complete type // complete type
else{ else{
RADDBG_TypeKind type_kind = RADDBG_TypeKind_Struct; RADDBGI_TypeKind type_kind = RADDBGI_TypeKind_Struct;
if (range->hdr.kind == CV_LeafKind_CLASS){ if (range->hdr.kind == CV_LeafKind_CLASS){
type_kind = RADDBG_TypeKind_Class; type_kind = RADDBGI_TypeKind_Class;
} }
result = cons_type_udt(ctx->root, type_kind, name, size_u64); result = cons_type_udt(ctx->root, type_kind, name, size_u64);
@@ -1409,18 +1409,18 @@ pdbconv_type_cons_leaf_record(PDBCONV_Ctx *ctx, CV_TypeId itype){
// incomplete type // incomplete type
if (lf_struct->props & CV_TypeProp_FwdRef){ if (lf_struct->props & CV_TypeProp_FwdRef){
RADDBG_TypeKind type_kind = RADDBG_TypeKind_IncompleteStruct; RADDBGI_TypeKind type_kind = RADDBGI_TypeKind_IncompleteStruct;
if (range->hdr.kind == CV_LeafKind_CLASS2){ if (range->hdr.kind == CV_LeafKind_CLASS2){
type_kind = RADDBG_TypeKind_IncompleteClass; type_kind = RADDBGI_TypeKind_IncompleteClass;
} }
result = cons_type_incomplete(ctx->root, type_kind, name); result = cons_type_incomplete(ctx->root, type_kind, name);
} }
// complete type // complete type
else{ else{
RADDBG_TypeKind type_kind = RADDBG_TypeKind_Struct; RADDBGI_TypeKind type_kind = RADDBGI_TypeKind_Struct;
if (range->hdr.kind == CV_LeafKind_CLASS2){ if (range->hdr.kind == CV_LeafKind_CLASS2){
type_kind = RADDBG_TypeKind_Class; type_kind = RADDBGI_TypeKind_Class;
} }
result = cons_type_udt(ctx->root, type_kind, name, size_u64); result = cons_type_udt(ctx->root, type_kind, name, size_u64);
@@ -1455,12 +1455,12 @@ pdbconv_type_cons_leaf_record(PDBCONV_Ctx *ctx, CV_TypeId itype){
// incomplete type // incomplete type
if (lf_union->props & CV_TypeProp_FwdRef){ if (lf_union->props & CV_TypeProp_FwdRef){
result = result =
cons_type_incomplete(ctx->root, RADDBG_TypeKind_IncompleteUnion, name); cons_type_incomplete(ctx->root, RADDBGI_TypeKind_IncompleteUnion, name);
} }
// complete type // complete type
else{ else{
result = cons_type_udt(ctx->root, RADDBG_TypeKind_Union, name, size_u64); result = cons_type_udt(ctx->root, RADDBGI_TypeKind_Union, name, size_u64);
// remember to revisit this for members // remember to revisit this for members
{ {
@@ -1487,7 +1487,7 @@ pdbconv_type_cons_leaf_record(PDBCONV_Ctx *ctx, CV_TypeId itype){
// incomplete type // incomplete type
if (lf_enum->props & CV_TypeProp_FwdRef){ if (lf_enum->props & CV_TypeProp_FwdRef){
result = cons_type_incomplete(ctx->root, RADDBG_TypeKind_IncompleteEnum, name); result = cons_type_incomplete(ctx->root, RADDBGI_TypeKind_IncompleteEnum, name);
} }
// complete type // complete type
@@ -1667,7 +1667,8 @@ pdbconv_type_cons_leaf_record(PDBCONV_Ctx *ctx, CV_TypeId itype){
static CONS_Type* static CONS_Type*
pdbconv_type_resolve_and_check(PDBCONV_Ctx *ctx, CV_TypeId itype){ pdbconv_type_resolve_and_check(PDBCONV_Ctx *ctx, CV_TypeId itype){
CONS_Type *result = pdbconv_type_resolve_itype(ctx, itype); CONS_Type *result = pdbconv_type_resolve_itype(ctx, itype);
if (cons_type_is_unhandled_nil(ctx->root, result)){ if(cons_type_is_unhandled_nil(ctx->root, result))
{
cons_errorf(ctx->root, "pdbconv: could not resolve itype (itype = %u)", itype); cons_errorf(ctx->root, "pdbconv: could not resolve itype (itype = %u)", itype);
} }
return(result); return(result);
@@ -1798,7 +1799,7 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
// extract important values from parameters // extract important values from parameters
String8 data = sym->data; String8 data = sym->data;
U64 user_id_base = (((U64)sym_unique_id) << 32); U64 user_id_base = (((U64)sym_unique_id) << 32);
U64 sym_unique_id_hash = raddbg_hash((U8*)&sym_unique_id, sizeof(sym_unique_id)); U64 sym_unique_id_hash = raddbgi_hash((U8*)&sym_unique_id, sizeof(sym_unique_id));
// PASS 1: map out data associations // PASS 1: map out data associations
ProfScope("map out data associations") ProfScope("map out data associations")
@@ -2109,16 +2110,16 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
U32 var_off = regrel32->reg_off; U32 var_off = regrel32->reg_off;
// need arch for analyzing register stuff // need arch for analyzing register stuff
RADDBG_Arch arch = ctx->arch; RADDBGI_Arch arch = ctx->arch;
U64 addr_size = ctx->addr_size; U64 addr_size = ctx->addr_size;
// determine if this is a parameter // determine if this is a parameter
RADDBG_LocalKind local_kind = RADDBG_LocalKind_Variable; RADDBGI_LocalKind local_kind = RADDBGI_LocalKind_Variable;
{ {
B32 is_stack_reg = 0; B32 is_stack_reg = 0;
switch (arch){ switch (arch){
case RADDBG_Arch_X86: is_stack_reg = (cv_reg == CV_Regx86_ESP); break; case RADDBGI_Arch_X86: is_stack_reg = (cv_reg == CV_Regx86_ESP); break;
case RADDBG_Arch_X64: is_stack_reg = (cv_reg == CV_Regx64_RSP); break; case RADDBGI_Arch_X64: is_stack_reg = (cv_reg == CV_Regx64_RSP); break;
} }
if (is_stack_reg){ if (is_stack_reg){
U32 frame_size = 0xFFFFFFFF; U32 frame_size = 0xFFFFFFFF;
@@ -2128,7 +2129,7 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
frame_size = frameproc->frame_size; frame_size = frameproc->frame_size;
} }
if (var_off > frame_size){ if (var_off > frame_size){
local_kind = RADDBG_LocalKind_Parameter; local_kind = RADDBGI_LocalKind_Parameter;
} }
} }
} }
@@ -2151,17 +2152,17 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
// will there be an extra indirection to the value // will there be an extra indirection to the value
B32 extra_indirection_to_value = 0; B32 extra_indirection_to_value = 0;
switch (arch){ switch (arch){
case RADDBG_Arch_X86: case RADDBGI_Arch_X86:
{ {
if (local_kind == RADDBG_LocalKind_Parameter && if (local_kind == RADDBGI_LocalKind_Parameter &&
(type->byte_size > 4 || !IsPow2OrZero(type->byte_size))){ (type->byte_size > 4 || !IsPow2OrZero(type->byte_size))){
extra_indirection_to_value = 1; extra_indirection_to_value = 1;
} }
}break; }break;
case RADDBG_Arch_X64: case RADDBGI_Arch_X64:
{ {
if (local_kind == RADDBG_LocalKind_Parameter && if (local_kind == RADDBGI_LocalKind_Parameter &&
(type->byte_size > 8 || !IsPow2OrZero(type->byte_size))){ (type->byte_size > 8 || !IsPow2OrZero(type->byte_size))){
extra_indirection_to_value = 1; extra_indirection_to_value = 1;
} }
@@ -2169,7 +2170,7 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
} }
// get raddbg register code // get raddbg register code
RADDBG_RegisterCode register_code = raddbg_reg_code_from_cv_reg_code(arch, cv_reg); RADDBGI_RegisterCode register_code = raddbgi_reg_code_from_cv_reg_code(arch, cv_reg);
// TODO(allen): real byte_size & byte_pos from cv_reg goes here // TODO(allen): real byte_size & byte_pos from cv_reg goes here
U32 byte_size = 8; U32 byte_size = 8;
U32 byte_pos = 0; U32 byte_pos = 0;
@@ -2271,9 +2272,9 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
// emit a local variable // emit a local variable
else{ else{
// local kind // local kind
RADDBG_LocalKind local_kind = RADDBG_LocalKind_Variable; RADDBGI_LocalKind local_kind = RADDBGI_LocalKind_Variable;
if (slocal->flags & CV_LocalFlag_Param){ if (slocal->flags & CV_LocalFlag_Param){
local_kind = RADDBG_LocalKind_Parameter; local_kind = RADDBGI_LocalKind_Parameter;
} }
// emit local // emit local
@@ -2293,7 +2294,7 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
cons_local_set_basic_info(ctx->root, local_var, &info); cons_local_set_basic_info(ctx->root, local_var, &info);
defrange_target = cons_location_set_from_local(ctx->root, local_var); defrange_target = cons_location_set_from_local(ctx->root, local_var);
defrange_target_is_param = (local_kind == RADDBG_LocalKind_Parameter); defrange_target_is_param = (local_kind == RADDBGI_LocalKind_Parameter);
} }
} }
}break; }break;
@@ -2312,9 +2313,9 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
CV_SymDefrangeRegister *defrange_register = (CV_SymDefrangeRegister*)first; CV_SymDefrangeRegister *defrange_register = (CV_SymDefrangeRegister*)first;
// TODO(allen): offset & size from cv_reg code // TODO(allen): offset & size from cv_reg code
RADDBG_Arch arch = ctx->arch; RADDBGI_Arch arch = ctx->arch;
CV_Reg cv_reg = defrange_register->reg; CV_Reg cv_reg = defrange_register->reg;
RADDBG_RegisterCode register_code = raddbg_reg_code_from_cv_reg_code(arch, cv_reg); RADDBGI_RegisterCode register_code = raddbgi_reg_code_from_cv_reg_code(arch, cv_reg);
// setup location // setup location
CONS_Location *location = cons_location_val_reg(ctx->root, register_code); CONS_Location *location = cons_location_val_reg(ctx->root, register_code);
@@ -2347,7 +2348,7 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
// select frame pointer register // select frame pointer register
CV_EncodedFramePtrReg encoded_fp_reg = CV_EncodedFramePtrReg encoded_fp_reg =
pdbconv_cv_encoded_fp_reg_from_proc(ctx, current_procedure, defrange_target_is_param); pdbconv_cv_encoded_fp_reg_from_proc(ctx, current_procedure, defrange_target_is_param);
RADDBG_RegisterCode fp_register_code = RADDBGI_RegisterCode fp_register_code =
pdbconv_reg_code_from_arch_encoded_fp_reg(ctx->arch, encoded_fp_reg); pdbconv_reg_code_from_arch_encoded_fp_reg(ctx->arch, encoded_fp_reg);
// setup location // setup location
@@ -2388,9 +2389,9 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
if (defrange_subfield_register->field_offset == 0){ if (defrange_subfield_register->field_offset == 0){
// TODO(allen): offset & size from cv_reg code // TODO(allen): offset & size from cv_reg code
RADDBG_Arch arch = ctx->arch; RADDBGI_Arch arch = ctx->arch;
CV_Reg cv_reg = defrange_subfield_register->reg; CV_Reg cv_reg = defrange_subfield_register->reg;
RADDBG_RegisterCode register_code = raddbg_reg_code_from_cv_reg_code(arch, cv_reg); RADDBGI_RegisterCode register_code = raddbgi_reg_code_from_cv_reg_code(arch, cv_reg);
// setup location // setup location
CONS_Location *location = cons_location_val_reg(ctx->root, register_code); CONS_Location *location = cons_location_val_reg(ctx->root, register_code);
@@ -2425,7 +2426,7 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
// select frame pointer register // select frame pointer register
CV_EncodedFramePtrReg encoded_fp_reg = CV_EncodedFramePtrReg encoded_fp_reg =
pdbconv_cv_encoded_fp_reg_from_proc(ctx, current_procedure, defrange_target_is_param); pdbconv_cv_encoded_fp_reg_from_proc(ctx, current_procedure, defrange_target_is_param);
RADDBG_RegisterCode fp_register_code = RADDBGI_RegisterCode fp_register_code =
pdbconv_reg_code_from_arch_encoded_fp_reg(ctx->arch, encoded_fp_reg); pdbconv_reg_code_from_arch_encoded_fp_reg(ctx->arch, encoded_fp_reg);
// setup location // setup location
@@ -2459,9 +2460,9 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
else else
{ {
// TODO(allen): offset & size from cv_reg code // TODO(allen): offset & size from cv_reg code
RADDBG_Arch arch = ctx->arch; RADDBGI_Arch arch = ctx->arch;
CV_Reg cv_reg = defrange_register_rel->reg; CV_Reg cv_reg = defrange_register_rel->reg;
RADDBG_RegisterCode register_code = raddbg_reg_code_from_cv_reg_code(arch, cv_reg); RADDBGI_RegisterCode register_code = raddbgi_reg_code_from_cv_reg_code(arch, cv_reg);
U32 byte_size = ctx->addr_size; U32 byte_size = ctx->addr_size;
U32 byte_pos = 0; U32 byte_pos = 0;
@@ -2758,7 +2759,7 @@ pdbconv_known_global_insert(Arena *arena, PDBCONV_KnownGlobalSet *set, String8 n
static CONS_Location* static CONS_Location*
pdbconv_location_from_addr_reg_off(PDBCONV_Ctx *ctx, pdbconv_location_from_addr_reg_off(PDBCONV_Ctx *ctx,
RADDBG_RegisterCode reg_code, RADDBGI_RegisterCode reg_code,
U32 reg_byte_size, U32 reg_byte_size,
U32 reg_byte_pos, U32 reg_byte_pos,
S64 offset, S64 offset,
@@ -2776,12 +2777,12 @@ pdbconv_location_from_addr_reg_off(PDBCONV_Ctx *ctx,
Arena *arena = ctx->arena; Arena *arena = ctx->arena;
CONS_EvalBytecode bytecode = {0}; CONS_EvalBytecode bytecode = {0};
U32 regread_param = RADDBG_EncodeRegReadParam(reg_code, reg_byte_size, reg_byte_pos); U32 regread_param = RADDBGI_EncodeRegReadParam(reg_code, reg_byte_size, reg_byte_pos);
cons_bytecode_push_op(arena, &bytecode, RADDBG_EvalOp_RegRead, regread_param); cons_bytecode_push_op(arena, &bytecode, RADDBGI_EvalOp_RegRead, regread_param);
cons_bytecode_push_sconst(arena, &bytecode, offset); cons_bytecode_push_sconst(arena, &bytecode, offset);
cons_bytecode_push_op(arena, &bytecode, RADDBG_EvalOp_Add, 0); cons_bytecode_push_op(arena, &bytecode, RADDBGI_EvalOp_Add, 0);
if (extra_indirection){ if (extra_indirection){
cons_bytecode_push_op(arena, &bytecode, RADDBG_EvalOp_MemRead, ctx->addr_size); cons_bytecode_push_op(arena, &bytecode, RADDBGI_EvalOp_MemRead, ctx->addr_size);
} }
result = cons_location_addr_bytecode_stream(ctx->root, &bytecode); result = cons_location_addr_bytecode_stream(ctx->root, &bytecode);
@@ -2806,12 +2807,12 @@ pdbconv_cv_encoded_fp_reg_from_proc(PDBCONV_Ctx *ctx, CONS_Symbol *proc, B32 par
return(result); return(result);
} }
static RADDBG_RegisterCode static RADDBGI_RegisterCode
pdbconv_reg_code_from_arch_encoded_fp_reg(RADDBG_Arch arch, CV_EncodedFramePtrReg encoded_reg){ pdbconv_reg_code_from_arch_encoded_fp_reg(RADDBGI_Arch arch, CV_EncodedFramePtrReg encoded_reg){
RADDBG_RegisterCode result = 0; RADDBGI_RegisterCode result = 0;
switch (arch){ switch (arch){
case RADDBG_Arch_X86: case RADDBGI_Arch_X86:
{ {
switch (encoded_reg){ switch (encoded_reg){
case CV_EncodedFramePtrReg_StackPtr: case CV_EncodedFramePtrReg_StackPtr:
@@ -2821,29 +2822,29 @@ pdbconv_reg_code_from_arch_encoded_fp_reg(RADDBG_Arch arch, CV_EncodedFramePtrRe
}break; }break;
case CV_EncodedFramePtrReg_FramePtr: case CV_EncodedFramePtrReg_FramePtr:
{ {
result = RADDBG_RegisterCode_X86_ebp; result = RADDBGI_RegisterCode_X86_ebp;
}break; }break;
case CV_EncodedFramePtrReg_BasePtr: case CV_EncodedFramePtrReg_BasePtr:
{ {
result = RADDBG_RegisterCode_X86_ebx; result = RADDBGI_RegisterCode_X86_ebx;
}break; }break;
} }
}break; }break;
case RADDBG_Arch_X64: case RADDBGI_Arch_X64:
{ {
switch (encoded_reg){ switch (encoded_reg){
case CV_EncodedFramePtrReg_StackPtr: case CV_EncodedFramePtrReg_StackPtr:
{ {
result = RADDBG_RegisterCode_X64_rsp; result = RADDBGI_RegisterCode_X64_rsp;
}break; }break;
case CV_EncodedFramePtrReg_FramePtr: case CV_EncodedFramePtrReg_FramePtr:
{ {
result = RADDBG_RegisterCode_X64_rbp; result = RADDBGI_RegisterCode_X64_rbp;
}break; }break;
case CV_EncodedFramePtrReg_BasePtr: case CV_EncodedFramePtrReg_BasePtr:
{ {
result = RADDBG_RegisterCode_X64_r13; result = RADDBGI_RegisterCode_X64_r13;
}break; }break;
} }
}break; }break;
@@ -3139,7 +3140,7 @@ str8_list_pushf(arena, &out->errors, fmt, __VA_ARGS__);\
// exe hash // exe hash
U64 exe_hash = 0; U64 exe_hash = 0;
if (out->good_parse && params->input_exe_data.size > 0) ProfScope("hash exe"){ if (out->good_parse && params->input_exe_data.size > 0) ProfScope("hash exe"){
exe_hash = raddbg_hash(params->input_exe_data.str, params->input_exe_data.size); exe_hash = raddbgi_hash(params->input_exe_data.str, params->input_exe_data.size);
} }
// output generation // output generation
@@ -3147,7 +3148,7 @@ str8_list_pushf(arena, &out->errors, fmt, __VA_ARGS__);\
if (params->output_name.size > 0){ if (params->output_name.size > 0){
// determine arch // determine arch
RADDBG_Arch architecture = RADDBG_Arch_NULL; RADDBGI_Arch architecture = RADDBGI_Arch_NULL;
// TODO(rjf): in some cases, the first compilation unit has a zero // 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 // architecture, as it's sometimes used as a "nil" unit. this causes bugs
// in later stages of conversion - particularly, this was detected via // in later stages of conversion - particularly, this was detected via
@@ -3165,14 +3166,14 @@ str8_list_pushf(arena, &out->errors, fmt, __VA_ARGS__);\
{ {
if(sym_for_unit[comp_unit_idx] != 0) if(sym_for_unit[comp_unit_idx] != 0)
{ {
architecture = raddbg_arch_from_cv_arch(sym_for_unit[comp_unit_idx]->info.arch); architecture = raddbgi_arch_from_cv_arch(sym_for_unit[comp_unit_idx]->info.arch);
if(architecture != 0) if(architecture != 0)
{ {
break; break;
} }
} }
} }
U64 addr_size = raddbg_addr_size_from_arch(architecture); U64 addr_size = raddbgi_addr_size_from_arch(architecture);
// predict symbol counts // predict symbol counts
@@ -3239,8 +3240,8 @@ str8_list_pushf(arena, &out->errors, fmt, __VA_ARGS__);\
char *name_first = (char*)coff_ptr->name; char *name_first = (char*)coff_ptr->name;
char *name_opl = name_first + sizeof(coff_ptr->name); char *name_opl = name_first + sizeof(coff_ptr->name);
String8 name = str8_cstring_capped(name_first, name_opl); String8 name = str8_cstring_capped(name_first, name_opl);
RADDBG_BinarySectionFlags flags = RADDBGI_BinarySectionFlags flags =
raddbg_binary_section_flags_from_coff_section_flags(coff_ptr->flags); raddbgi_binary_section_flags_from_coff_section_flags(coff_ptr->flags);
cons_add_binary_section(root, name, flags, cons_add_binary_section(root, name, flags,
coff_ptr->voff, coff_ptr->voff + coff_ptr->vsize, coff_ptr->voff, coff_ptr->voff + coff_ptr->vsize,
coff_ptr->foff, coff_ptr->foff + coff_ptr->fsize); coff_ptr->foff, coff_ptr->foff + coff_ptr->fsize);
@@ -3283,7 +3284,7 @@ str8_list_pushf(arena, &out->errors, fmt, __VA_ARGS__);\
String8 archive_file = unit->group_name; String8 archive_file = unit->group_name;
// extract langauge // extract langauge
RADDBG_Language lang = raddbg_language_from_cv_language(sym->info.language); RADDBGI_Language lang = raddbgi_language_from_cv_language(sym->info.language);
// basic per unit info // basic per unit info
CONS_Unit *unit_handle = cons_unit_handle_from_user_id(root, i, i); CONS_Unit *unit_handle = cons_unit_handle_from_user_id(root, i, i);
+8 -8
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_FROM_PDB_H #ifndef RADDBGI_FROM_PDB_H
#define RADDBG_FROM_PDB_H #define RADDBGI_FROM_PDB_H
//////////////////////////////// ////////////////////////////////
//~ Program Parameters Type //~ Program Parameters Type
@@ -107,7 +107,7 @@ typedef struct PDBCONV_KnownGlobalSet{
typedef struct PDBCONV_CtxParams PDBCONV_CtxParams; typedef struct PDBCONV_CtxParams PDBCONV_CtxParams;
struct PDBCONV_CtxParams struct PDBCONV_CtxParams
{ {
RADDBG_Arch arch; RADDBGI_Arch arch;
PDB_TpiHashParsed *tpi_hash; PDB_TpiHashParsed *tpi_hash;
CV_LeafParsed *tpi_leaf; CV_LeafParsed *tpi_leaf;
PDB_CoffSectionArray *sections; PDB_CoffSectionArray *sections;
@@ -140,7 +140,7 @@ typedef struct PDBCONV_Ctx{
Arena *arena; Arena *arena;
// INPUT data // INPUT data
RADDBG_Arch arch; RADDBGI_Arch arch;
U64 addr_size; U64 addr_size;
PDB_TpiHashParsed *hash; PDB_TpiHashParsed *hash;
CV_LeafParsed *leaf; CV_LeafParsed *leaf;
@@ -247,7 +247,7 @@ static void pdbconv_known_global_insert(Arena *arena, PDBCONV_KnownGlobalSet *se
// location info helpers // location info helpers
static CONS_Location* pdbconv_location_from_addr_reg_off(PDBCONV_Ctx *ctx, static CONS_Location* pdbconv_location_from_addr_reg_off(PDBCONV_Ctx *ctx,
RADDBG_RegisterCode reg_code, RADDBGI_RegisterCode reg_code,
U32 reg_byte_size, U32 reg_byte_size,
U32 reg_byte_pos, U32 reg_byte_pos,
S64 offset, S64 offset,
@@ -257,8 +257,8 @@ static CV_EncodedFramePtrReg pdbconv_cv_encoded_fp_reg_from_proc(PDBCONV_Ctx *ct
CONS_Symbol *proc, CONS_Symbol *proc,
B32 param_base); B32 param_base);
static RADDBG_RegisterCode pdbconv_reg_code_from_arch_encoded_fp_reg(RADDBG_Arch arch, static RADDBGI_RegisterCode pdbconv_reg_code_from_arch_encoded_fp_reg(RADDBGI_Arch arch,
CV_EncodedFramePtrReg encoded_reg); CV_EncodedFramePtrReg encoded_reg);
static void pdbconv_location_over_lvar_addr_range(PDBCONV_Ctx *ctx, static void pdbconv_location_over_lvar_addr_range(PDBCONV_Ctx *ctx,
CONS_LocationSet *locset, CONS_LocationSet *locset,
@@ -288,4 +288,4 @@ struct PDBCONV_Out
static PDBCONV_Out *pdbconv_convert(Arena *arena, PDBCONV_Params *params); static PDBCONV_Out *pdbconv_convert(Arena *arena, PDBCONV_Params *params);
#endif //RADDBG_FROM_PDB_H #endif // RADDBGI_FROM_PDB_H
@@ -55,7 +55,7 @@ main(int argc, char **argv){
String8List args = os_string_list_from_argcv(arena, argc, argv); String8List args = os_string_list_from_argcv(arena, argc, argv);
CmdLine cmdline = cmd_line_from_string_list(arena, args); CmdLine cmdline = cmd_line_from_string_list(arena, args);
ProfBeginCapture("raddbg_from_pdb"); ProfBeginCapture("raddbgi_from_pdb");
//- rjf: parse arguments //- rjf: parse arguments
PDBCONV_Params *params = pdb_convert_params_from_cmd_line(arena, &cmdline); PDBCONV_Params *params = pdb_convert_params_from_cmd_line(arena, &cmdline);
+3 -3
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_MSF_H #ifndef RADDBGI_MSF_H
#define RADDBG_MSF_H #define RADDBGI_MSF_H
//////////////////////////////// ////////////////////////////////
//~ MSF Format Types //~ MSF Format Types
@@ -57,4 +57,4 @@ typedef struct MSF_Parsed{
static MSF_Parsed* msf_parsed_from_data(Arena *arena, String8 msf_data); static MSF_Parsed* msf_parsed_from_data(Arena *arena, String8 msf_data);
static String8 msf_data_from_stream(MSF_Parsed *msf, MSF_StreamNumber sn); static String8 msf_data_from_stream(MSF_Parsed *msf, MSF_StreamNumber sn);
#endif //RADDBG_MSF_H #endif //RADDBGI_MSF_H
+3 -3
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_PDB_H #ifndef RADDBGI_PDB_H
#define RADDBG_PDB_H #define RADDBGI_PDB_H
// https://github.com/microsoft/microsoft-pdb/tree/master/PDB // https://github.com/microsoft/microsoft-pdb/tree/master/PDB
@@ -459,4 +459,4 @@ static String8 pdb_strtbl_string_from_off(PDB_Strtbl *strtbl, U32 o
static String8 pdb_strtbl_string_from_index(PDB_Strtbl *strtbl, static String8 pdb_strtbl_string_from_index(PDB_Strtbl *strtbl,
PDB_StringIndex idx); PDB_StringIndex idx);
#endif //RADDBG_PDB_H #endif //RADDBGI_PDB_H
@@ -1,12 +1,12 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_PDB_STRINGIZE_H #ifndef RADDBGI_PDB_STRINGIZE_H
#define RADDBG_PDB_STRINGIZE_H #define RADDBGI_PDB_STRINGIZE_H
//////////////////////////////// ////////////////////////////////
//~ PDB Stringize Functions //~ PDB Stringize Functions
static void pdb_stringize_tpi_hash(Arena *arena, String8List *out, PDB_TpiHashParsed *hash); static void pdb_stringize_tpi_hash(Arena *arena, String8List *out, PDB_TpiHashParsed *hash);
#endif //RADDBG_PDB_STRINGIZE_H #endif //RADDBGI_PDB_STRINGIZE_H
+45 -45
View File
@@ -159,12 +159,12 @@ main(int argc, char **argv){
// will we try to parse an input file // will we try to parse an input file
B32 try_parse_input = (params->errors.node_count == 0); B32 try_parse_input = (params->errors.node_count == 0);
RADDBG_ParseStatus parse_status = RADDBG_ParseStatus_Good; RADDBGI_ParseStatus parse_status = RADDBGI_ParseStatus_Good;
RADDBG_Parsed raddbg__ = {0}; RADDBGI_Parsed raddbg__ = {0};
RADDBG_Parsed *raddbg = 0; RADDBGI_Parsed *raddbg = 0;
if (try_parse_input){ if (try_parse_input){
parse_status = raddbg_parse(params->input_data.str, params->input_data.size, &raddbg__); parse_status = raddbgi_parse(params->input_data.str, params->input_data.size, &raddbg__);
if (parse_status == RADDBG_ParseStatus_Good){ if (parse_status == RADDBGI_ParseStatus_Good){
raddbg = &raddbg__; raddbg = &raddbg__;
} }
} }
@@ -181,24 +181,24 @@ main(int argc, char **argv){
// DATA SECTIONS // DATA SECTIONS
if (raddbg->dsecs != 0 && params->dump_data_sections){ if (raddbg->dsecs != 0 && params->dump_data_sections){
str8_list_pushf(arena, &dump, "# DATA SECTIONS:\n"); str8_list_pushf(arena, &dump, "# DATA SECTIONS:\n");
raddbg_stringize_data_sections(arena, &dump, raddbg, 1); raddbgi_stringize_data_sections(arena, &dump, raddbg, 1);
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
} }
// TOP LEVEL INFO // TOP LEVEL INFO
if (raddbg->top_level_info != 0 && params->dump_top_level_info){ if (raddbg->top_level_info != 0 && params->dump_top_level_info){
str8_list_pushf(arena, &dump, "# TOP LEVEL INFO:\n"); str8_list_pushf(arena, &dump, "# TOP LEVEL INFO:\n");
raddbg_stringize_top_level_info(arena, &dump, raddbg, raddbg->top_level_info, 1); raddbgi_stringize_top_level_info(arena, &dump, raddbg, raddbg->top_level_info, 1);
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
} }
// BINARY SECTIONS // BINARY SECTIONS
if (raddbg->binary_sections != 0 && params->dump_binary_sections){ if (raddbg->binary_sections != 0 && params->dump_binary_sections){
str8_list_pushf(arena, &dump, "# BINARY SECTIONS:\n"); str8_list_pushf(arena, &dump, "# BINARY SECTIONS:\n");
RADDBG_BinarySection *ptr = raddbg->binary_sections; RADDBGI_BinarySection *ptr = raddbg->binary_sections;
for (U32 i = 0; i < raddbg->binary_sections_count; i += 1, ptr += 1){ for (U32 i = 0; i < raddbg->binary_sections_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " section[%u]:\n", i); str8_list_pushf(arena, &dump, " section[%u]:\n", i);
raddbg_stringize_binary_section(arena, &dump, raddbg, ptr, 2); raddbgi_stringize_binary_section(arena, &dump, raddbg, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
} }
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
@@ -206,17 +206,17 @@ main(int argc, char **argv){
// FILE PATHS // FILE PATHS
if (raddbg->file_paths != 0 && params->dump_file_paths){ if (raddbg->file_paths != 0 && params->dump_file_paths){
RADDBG_FilePathBundle file_path_bundle = {0}; RADDBGI_FilePathBundle file_path_bundle = {0};
{ {
file_path_bundle.file_paths = raddbg->file_paths; file_path_bundle.file_paths = raddbg->file_paths;
file_path_bundle.file_path_count = raddbg->file_paths_count; file_path_bundle.file_path_count = raddbg->file_paths_count;
} }
str8_list_pushf(arena, &dump, "# FILE PATHS\n"); str8_list_pushf(arena, &dump, "# FILE PATHS\n");
RADDBG_FilePathNode *ptr = raddbg->file_paths; RADDBGI_FilePathNode *ptr = raddbg->file_paths;
for (U32 i = 0; i < raddbg->file_paths_count; i += 1, ptr += 1){ for (U32 i = 0; i < raddbg->file_paths_count; i += 1, ptr += 1){
if (ptr->parent_path_node == 0){ if (ptr->parent_path_node == 0){
raddbg_stringize_file_path(arena, &dump, raddbg, &file_path_bundle, ptr, 1); raddbgi_stringize_file_path(arena, &dump, raddbg, &file_path_bundle, ptr, 1);
} }
} }
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
@@ -225,10 +225,10 @@ main(int argc, char **argv){
// SOURCE FILES // SOURCE FILES
if (raddbg->source_files != 0 && params->dump_source_files){ if (raddbg->source_files != 0 && params->dump_source_files){
str8_list_pushf(arena, &dump, "# SOURCE FILES\n"); str8_list_pushf(arena, &dump, "# SOURCE FILES\n");
RADDBG_SourceFile *ptr = raddbg->source_files; RADDBGI_SourceFile *ptr = raddbg->source_files;
for (U32 i = 0; i < raddbg->source_files_count; i += 1, ptr += 1){ for (U32 i = 0; i < raddbg->source_files_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " source_file[%u]:\n", i); str8_list_pushf(arena, &dump, " source_file[%u]:\n", i);
raddbg_stringize_source_file(arena, &dump, raddbg, ptr, 2); raddbgi_stringize_source_file(arena, &dump, raddbg, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
} }
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
@@ -237,10 +237,10 @@ main(int argc, char **argv){
// UNITS // UNITS
if (raddbg->units != 0 && params->dump_units){ if (raddbg->units != 0 && params->dump_units){
str8_list_pushf(arena, &dump, "# UNITS\n"); str8_list_pushf(arena, &dump, "# UNITS\n");
RADDBG_Unit *ptr = raddbg->units; RADDBGI_Unit *ptr = raddbg->units;
for (U32 i = 0; i < raddbg->units_count; i += 1, ptr += 1){ for (U32 i = 0; i < raddbg->units_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " unit[%u]:\n", i); str8_list_pushf(arena, &dump, " unit[%u]:\n", i);
raddbg_stringize_unit(arena, &dump, raddbg, ptr, 2); raddbgi_stringize_unit(arena, &dump, raddbg, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
} }
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
@@ -249,7 +249,7 @@ main(int argc, char **argv){
// UNIT VMAP // UNIT VMAP
if (raddbg->unit_vmap != 0 && params->dump_unit_vmap){ if (raddbg->unit_vmap != 0 && params->dump_unit_vmap){
str8_list_pushf(arena, &dump, "# UNIT VMAP\n"); str8_list_pushf(arena, &dump, "# UNIT VMAP\n");
RADDBG_VMapEntry *ptr = raddbg->unit_vmap; RADDBGI_VMapEntry *ptr = raddbg->unit_vmap;
for (U32 i = 0; i < raddbg->unit_vmap_count; i += 1, ptr += 1){ 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); str8_list_pushf(arena, &dump, " 0x%08x: %llu\n", ptr->voff, ptr->idx);
} }
@@ -259,10 +259,10 @@ main(int argc, char **argv){
// TYPE NODES // TYPE NODES
if (raddbg->type_nodes != 0 && params->dump_type_nodes){ if (raddbg->type_nodes != 0 && params->dump_type_nodes){
str8_list_pushf(arena, &dump, "# TYPE NODES:\n"); str8_list_pushf(arena, &dump, "# TYPE NODES:\n");
RADDBG_TypeNode *ptr = raddbg->type_nodes; RADDBGI_TypeNode *ptr = raddbg->type_nodes;
for (U32 i = 0; i < raddbg->type_nodes_count; i += 1, ptr += 1){ for (U32 i = 0; i < raddbg->type_nodes_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " type[%u]:\n", i); str8_list_pushf(arena, &dump, " type[%u]:\n", i);
raddbg_stringize_type_node(arena, &dump, raddbg, ptr, 2); raddbgi_stringize_type_node(arena, &dump, raddbg, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
} }
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
@@ -270,7 +270,7 @@ main(int argc, char **argv){
// UDT DATA // UDT DATA
if (raddbg->udts != 0 && params->dump_udt_data){ if (raddbg->udts != 0 && params->dump_udt_data){
RADDBG_UDTMemberBundle member_bundle = {0}; RADDBGI_UDTMemberBundle member_bundle = {0};
{ {
member_bundle.members = raddbg->members; member_bundle.members = raddbg->members;
member_bundle.enum_members = raddbg->enum_members; member_bundle.enum_members = raddbg->enum_members;
@@ -279,10 +279,10 @@ main(int argc, char **argv){
} }
str8_list_pushf(arena, &dump, "# UDTS:\n"); str8_list_pushf(arena, &dump, "# UDTS:\n");
RADDBG_UDT *ptr = raddbg->udts; RADDBGI_UDT *ptr = raddbg->udts;
for (U32 i = 0; i < raddbg->udts_count; i += 1, ptr += 1){ for (U32 i = 0; i < raddbg->udts_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " udt[%u]:\n", i); str8_list_pushf(arena, &dump, " udt[%u]:\n", i);
raddbg_stringize_udt(arena, &dump, raddbg, &member_bundle, ptr, 2); raddbgi_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"));
} }
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
@@ -291,10 +291,10 @@ main(int argc, char **argv){
// GLOBAL VARIABLES // GLOBAL VARIABLES
if (raddbg->global_variables != 0 && params->dump_global_variables){ if (raddbg->global_variables != 0 && params->dump_global_variables){
str8_list_pushf(arena, &dump, "# GLOBAL VARIABLES:\n"); str8_list_pushf(arena, &dump, "# GLOBAL VARIABLES:\n");
RADDBG_GlobalVariable *ptr = raddbg->global_variables; RADDBGI_GlobalVariable *ptr = raddbg->global_variables;
for (U32 i = 0; i < raddbg->global_variables_count; i += 1, ptr += 1){ for (U32 i = 0; i < raddbg->global_variables_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " global_variable[%u]:\n", i); str8_list_pushf(arena, &dump, " global_variable[%u]:\n", i);
raddbg_stringize_global_variable(arena, &dump, raddbg, ptr, 2); raddbgi_stringize_global_variable(arena, &dump, raddbg, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
} }
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
@@ -303,7 +303,7 @@ main(int argc, char **argv){
// GLOBAL VMAP // GLOBAL VMAP
if (raddbg->global_vmap != 0 && params->dump_global_vmap){ if (raddbg->global_vmap != 0 && params->dump_global_vmap){
str8_list_pushf(arena, &dump, "# GLOBAL VMAP:\n"); str8_list_pushf(arena, &dump, "# GLOBAL VMAP:\n");
RADDBG_VMapEntry *ptr = raddbg->global_vmap; RADDBGI_VMapEntry *ptr = raddbg->global_vmap;
for (U32 i = 0; i < raddbg->global_vmap_count; i += 1, ptr += 1){ 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); str8_list_pushf(arena, &dump, " 0x%08x: %llu\n", ptr->voff, ptr->idx);
} }
@@ -313,10 +313,10 @@ main(int argc, char **argv){
// THREAD LOCAL VARIABLES // THREAD LOCAL VARIABLES
if (raddbg->thread_variables != 0 && params->dump_thread_variables){ if (raddbg->thread_variables != 0 && params->dump_thread_variables){
str8_list_pushf(arena, &dump, "# THREAD VARIABLES:\n"); str8_list_pushf(arena, &dump, "# THREAD VARIABLES:\n");
RADDBG_ThreadVariable *ptr = raddbg->thread_variables; RADDBGI_ThreadVariable *ptr = raddbg->thread_variables;
for (U32 i = 0; i < raddbg->thread_variables_count; i += 1, ptr += 1){ for (U32 i = 0; i < raddbg->thread_variables_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " thread_variable[%u]:\n", i); str8_list_pushf(arena, &dump, " thread_variable[%u]:\n", i);
raddbg_stringize_thread_variable(arena, &dump, raddbg, ptr, 2); raddbgi_stringize_thread_variable(arena, &dump, raddbg, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
} }
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
@@ -325,10 +325,10 @@ main(int argc, char **argv){
// PROCEDURES // PROCEDURES
if (raddbg->procedures != 0 && params->dump_procedures){ if (raddbg->procedures != 0 && params->dump_procedures){
str8_list_pushf(arena, &dump, "# PROCEDURES:\n"); str8_list_pushf(arena, &dump, "# PROCEDURES:\n");
RADDBG_Procedure *ptr = raddbg->procedures; RADDBGI_Procedure *ptr = raddbg->procedures;
for (U32 i = 0; i < raddbg->procedures_count; i += 1, ptr += 1){ for (U32 i = 0; i < raddbg->procedures_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " procedure[%u]:\n", i); str8_list_pushf(arena, &dump, " procedure[%u]:\n", i);
raddbg_stringize_procedure(arena, &dump, raddbg, ptr, 2); raddbgi_stringize_procedure(arena, &dump, raddbg, ptr, 2);
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
} }
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
@@ -336,7 +336,7 @@ main(int argc, char **argv){
// SCOPES // SCOPES
if (raddbg->scopes != 0 && params->dump_scopes){ if (raddbg->scopes != 0 && params->dump_scopes){
RADDBG_ScopeBundle scope_bundle = {0}; RADDBGI_ScopeBundle scope_bundle = {0};
{ {
scope_bundle.scopes = raddbg->scopes; scope_bundle.scopes = raddbg->scopes;
scope_bundle.scope_count = raddbg->scopes_count; scope_bundle.scope_count = raddbg->scopes_count;
@@ -351,10 +351,10 @@ main(int argc, char **argv){
} }
str8_list_pushf(arena, &dump, "# SCOPES:\n"); str8_list_pushf(arena, &dump, "# SCOPES:\n");
RADDBG_Scope *ptr = raddbg->scopes; RADDBGI_Scope *ptr = raddbg->scopes;
for (U32 i = 0; i < raddbg->scopes_count; i += 1, ptr += 1){ for (U32 i = 0; i < raddbg->scopes_count; i += 1, ptr += 1){
if (ptr->parent_scope_idx == 0){ if (ptr->parent_scope_idx == 0){
raddbg_stringize_scope(arena, &dump, raddbg, &scope_bundle, ptr, 1); raddbgi_stringize_scope(arena, &dump, raddbg, &scope_bundle, ptr, 1);
str8_list_push(arena, &dump, str8_lit("\n")); str8_list_push(arena, &dump, str8_lit("\n"));
} }
} }
@@ -364,7 +364,7 @@ main(int argc, char **argv){
// SCOPE VMAP // SCOPE VMAP
if (raddbg->scope_vmap != 0 && params->dump_scope_vmap){ if (raddbg->scope_vmap != 0 && params->dump_scope_vmap){
str8_list_pushf(arena, &dump, "# SCOPE VMAP:\n"); str8_list_pushf(arena, &dump, "# SCOPE VMAP:\n");
RADDBG_VMapEntry *ptr = raddbg->scope_vmap; RADDBGI_VMapEntry *ptr = raddbg->scope_vmap;
for (U32 i = 0; i < raddbg->scope_vmap_count; i += 1, ptr += 1){ 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); str8_list_pushf(arena, &dump, " 0x%08x: %llu\n", ptr->voff, ptr->idx);
} }
@@ -374,33 +374,33 @@ main(int argc, char **argv){
// NAME MAPS // NAME MAPS
if (raddbg->name_maps != 0 && params->dump_name_map){ if (raddbg->name_maps != 0 && params->dump_name_map){
str8_list_pushf(arena, &dump, "# NAME MAP:\n"); str8_list_pushf(arena, &dump, "# NAME MAP:\n");
RADDBG_NameMap *ptr = raddbg->name_maps; RADDBGI_NameMap *ptr = raddbg->name_maps;
for (U32 i = 0; i < raddbg->name_maps_count; i += 1, ptr += 1){ for (U32 i = 0; i < raddbg->name_maps_count; i += 1, ptr += 1){
str8_list_pushf(arena, &dump, " name_map[%u]:\n", i); str8_list_pushf(arena, &dump, " name_map[%u]:\n", i);
RADDBG_ParsedNameMap name_map = {0}; RADDBGI_ParsedNameMap name_map = {0};
raddbg_name_map_parse(raddbg, ptr, &name_map); raddbgi_name_map_parse(raddbg, ptr, &name_map);
RADDBG_NameMapBucket *bucket = name_map.buckets; RADDBGI_NameMapBucket *bucket = name_map.buckets;
for (U32 j = 0; j < name_map.bucket_count; j += 1, bucket += 1){ for (U32 j = 0; j < name_map.bucket_count; j += 1, bucket += 1){
if (bucket->node_count > 0){ if (bucket->node_count > 0){
str8_list_pushf(arena, &dump, " bucket[%u]:\n", j); str8_list_pushf(arena, &dump, " bucket[%u]:\n", j);
RADDBG_NameMapNode *node = name_map.nodes + bucket->first_node; RADDBGI_NameMapNode *node = name_map.nodes + bucket->first_node;
RADDBG_NameMapNode *node_opl = node + bucket->node_count; RADDBGI_NameMapNode *node_opl = node + bucket->node_count;
for (; node < node_opl; node += 1){ for (; node < node_opl; node += 1){
String8 string = {0}; String8 string = {0};
string.str = raddbg_string_from_idx(raddbg, node->string_idx, &string.size); string.str = raddbgi_string_from_idx(raddbg, node->string_idx, &string.size);
str8_list_pushf(arena, &dump, " match \"%.*s\": ", str8_varg(string)); str8_list_pushf(arena, &dump, " match \"%.*s\": ", str8_varg(string));
if (node->match_count == 1){ if (node->match_count == 1){
str8_list_pushf(arena, &dump, "%u", node->match_idx_or_idx_run_first); str8_list_pushf(arena, &dump, "%u", node->match_idx_or_idx_run_first);
} }
else{ else{
RADDBG_U32 idx_count = 0; RADDBGI_U32 idx_count = 0;
RADDBG_U32 *idx_run = RADDBGI_U32 *idx_run =
raddbg_idx_run_from_first_count(raddbg, node->match_idx_or_idx_run_first, raddbgi_idx_run_from_first_count(raddbg, node->match_idx_or_idx_run_first,
node->match_count, &idx_count); node->match_count, &idx_count);
if (idx_count > 0){ if (idx_count > 0){
RADDBG_U32 last = idx_count - 1; RADDBGI_U32 last = idx_count - 1;
for (U32 k = 0; k < last; k += 1){ for (U32 k = 0; k < last; k += 1){
str8_list_pushf(arena, &dump, "%u, ", idx_run[k]); str8_list_pushf(arena, &dump, "%u, ", idx_run[k]);
} }
+3 -3
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_DUMP_H #ifndef RADDBGI_DUMP_H
#define RADDBG_DUMP_H #define RADDBGI_DUMP_H
//////////////////////////////// ////////////////////////////////
//~ Program Parameters Type //~ Program Parameters Type
@@ -42,4 +42,4 @@ typedef struct DUMP_Params{
static DUMP_Params *dump_params_from_cmd_line(Arena *arena, CmdLine *cmdline); static DUMP_Params *dump_params_from_cmd_line(Arena *arena, CmdLine *cmdline);
#endif //RADDBG_DUMP_H #endif //RADDBGI_DUMP_H
+214 -214
View File
@@ -5,12 +5,12 @@
//~ RADDBG Common Stringize Functions //~ RADDBG Common Stringize Functions
static String8 static String8
raddbg_string_from_data_section_tag(RADDBG_DataSectionTag tag){ raddbgi_string_from_data_section_tag(RADDBGI_DataSectionTag tag){
String8 result = {0}; String8 result = {0};
switch (tag){ switch (tag){
#define X(N,C) case C: result = str8_lit(#N); break; #define X(N,C) case C: result = str8_lit(#N); break;
#define Y(N) #define Y(N)
RADDBG_DataSectionTagXList(X,Y) RADDBGI_DataSectionTagXList(X,Y)
#undef X #undef X
#undef Y #undef Y
} }
@@ -18,36 +18,36 @@ raddbg_string_from_data_section_tag(RADDBG_DataSectionTag tag){
} }
static String8 static String8
raddbg_string_from_arch(RADDBG_Arch arch){ raddbgi_string_from_arch(RADDBGI_Arch arch){
String8 result = {0}; String8 result = {0};
switch (arch){ switch (arch){
default: result = str8_lit("<invalid-arch>"); break; default: result = str8_lit("<invalid-arch>"); break;
case RADDBG_Arch_X86: result = str8_lit("x86"); break; case RADDBGI_Arch_X86: result = str8_lit("x86"); break;
case RADDBG_Arch_X64: result = str8_lit("x64"); break; case RADDBGI_Arch_X64: result = str8_lit("x64"); break;
} }
return(result); return(result);
} }
static String8 static String8
raddbg_string_from_language(RADDBG_Language language){ raddbgi_string_from_language(RADDBGI_Language language){
String8 result = {0}; String8 result = {0};
switch (language){ switch (language){
#define X(name,code) case code: result = str8_lit(#name); break; #define X(name,code) case code: result = str8_lit(#name); break;
RADDBG_LanguageXList(X) RADDBGI_LanguageXList(X)
#undef X #undef X
} }
return(result); return(result);
} }
static String8 static String8
raddbg_string_from_type_kind(RADDBG_TypeKind type_kind){ raddbgi_string_from_type_kind(RADDBGI_TypeKind type_kind){
String8 result = {0}; String8 result = {0};
switch (type_kind){ switch (type_kind){
default: result = str8_lit("<invalid-type-kind>"); break; default: result = str8_lit("<invalid-type-kind>"); break;
#define X(name,code) case code: result = str8_lit(#name); break; #define X(name,code) case code: result = str8_lit(#name); break;
#define XZ(name,code,size) X(name,code) #define XZ(name,code,size) X(name,code)
#define Y(a,n) #define Y(a,n)
RADDBG_TypeKindXList(X,XZ,Y) RADDBGI_TypeKindXList(X,XZ,Y)
#undef X #undef X
#undef XZ #undef XZ
#undef Y #undef Y
@@ -56,24 +56,24 @@ raddbg_string_from_type_kind(RADDBG_TypeKind type_kind){
} }
static String8 static String8
raddbg_string_from_member_kind(RADDBG_MemberKind member_kind){ raddbgi_string_from_member_kind(RADDBGI_MemberKind member_kind){
String8 result = {0}; String8 result = {0};
switch (member_kind){ switch (member_kind){
default: result = str8_lit("<invalid-member-kind>"); break; default: result = str8_lit("<invalid-member-kind>"); break;
#define X(N,C) case C: result = str8_lit(#N); break; #define X(N,C) case C: result = str8_lit(#N); break;
RADDBG_MemberKindXList(X) RADDBGI_MemberKindXList(X)
#undef X #undef X
} }
return(result); return(result);
} }
static String8 static String8
raddbg_string_from_local_kind(RADDBG_LocalKind local_kind){ raddbgi_string_from_local_kind(RADDBGI_LocalKind local_kind){
String8 result = {0}; String8 result = {0};
switch (local_kind){ switch (local_kind){
default: result = str8_lit("<invalid-local-kind>"); break; default: result = str8_lit("<invalid-local-kind>"); break;
case RADDBG_LocalKind_Parameter: result = str8_lit("Parameter"); break; case RADDBGI_LocalKind_Parameter: result = str8_lit("Parameter"); break;
case RADDBG_LocalKind_Variable: result = str8_lit("Variable"); break; case RADDBGI_LocalKind_Variable: result = str8_lit("Variable"); break;
} }
return(result); return(result);
} }
@@ -83,59 +83,59 @@ raddbg_string_from_local_kind(RADDBG_LocalKind local_kind){
//~ RADDBG Flags Stringize Functions //~ RADDBG Flags Stringize Functions
static void static void
raddbg_stringize_binary_section_flags(Arena *arena, String8List *out, raddbgi_stringize_binary_section_flags(Arena *arena, String8List *out,
RADDBG_BinarySectionFlags flags){ RADDBGI_BinarySectionFlags flags){
if (flags == 0){ if (flags == 0){
str8_list_push(arena, out, str8_lit("0")); str8_list_push(arena, out, str8_lit("0"));
} }
if (flags & RADDBG_BinarySectionFlag_Read){ if (flags & RADDBGI_BinarySectionFlag_Read){
str8_list_push(arena, out, str8_lit("Read ")); str8_list_push(arena, out, str8_lit("Read "));
} }
if (flags & RADDBG_BinarySectionFlag_Write){ if (flags & RADDBGI_BinarySectionFlag_Write){
str8_list_push(arena, out, str8_lit("Write ")); str8_list_push(arena, out, str8_lit("Write "));
} }
if (flags & RADDBG_BinarySectionFlag_Execute){ if (flags & RADDBGI_BinarySectionFlag_Execute){
str8_list_push(arena, out, str8_lit("Execute ")); str8_list_push(arena, out, str8_lit("Execute "));
} }
} }
static void static void
raddbg_stringize_type_modifier_flags(Arena *arena, String8List *out, raddbgi_stringize_type_modifier_flags(Arena *arena, String8List *out,
RADDBG_TypeModifierFlags flags){ RADDBGI_TypeModifierFlags flags){
if (flags == 0){ if (flags == 0){
str8_list_push(arena, out, str8_lit("0")); str8_list_push(arena, out, str8_lit("0"));
} }
if (flags & RADDBG_TypeModifierFlag_Const){ if (flags & RADDBGI_TypeModifierFlag_Const){
str8_list_push(arena, out, str8_lit("Const ")); str8_list_push(arena, out, str8_lit("Const "));
} }
if (flags & RADDBG_TypeModifierFlag_Volatile){ if (flags & RADDBGI_TypeModifierFlag_Volatile){
str8_list_push(arena, out, str8_lit("Volatile ")); str8_list_push(arena, out, str8_lit("Volatile "));
} }
} }
static void static void
raddbg_stringize_user_defined_type_flags(Arena *arena, String8List *out, raddbgi_stringize_user_defined_type_flags(Arena *arena, String8List *out,
RADDBG_UserDefinedTypeFlags flags){ RADDBGI_UserDefinedTypeFlags flags){
if (flags == 0){ if (flags == 0){
str8_list_push(arena, out, str8_lit("0")); str8_list_push(arena, out, str8_lit("0"));
} }
if (flags & RADDBG_UserDefinedTypeFlag_EnumMembers){ if (flags & RADDBGI_UserDefinedTypeFlag_EnumMembers){
str8_list_push(arena, out, str8_lit("EnumMembers ")); str8_list_push(arena, out, str8_lit("EnumMembers "));
} }
} }
static void static void
raddbg_stringize_link_flags(Arena *arena, String8List *out, RADDBG_LinkFlags flags){ raddbgi_stringize_link_flags(Arena *arena, String8List *out, RADDBGI_LinkFlags flags){
if (flags == 0){ if (flags == 0){
str8_list_push(arena, out, str8_lit("0")); str8_list_push(arena, out, str8_lit("0"));
} }
if (flags & RADDBG_LinkFlag_External){ if (flags & RADDBGI_LinkFlag_External){
str8_list_push(arena, out, str8_lit("External ")); str8_list_push(arena, out, str8_lit("External "));
} }
if (flags & RADDBG_LinkFlag_TypeScoped){ if (flags & RADDBGI_LinkFlag_TypeScoped){
str8_list_push(arena, out, str8_lit("TypeScoped ")); str8_list_push(arena, out, str8_lit("TypeScoped "));
} }
if (flags & RADDBG_LinkFlag_ProcScoped){ if (flags & RADDBGI_LinkFlag_ProcScoped){
str8_list_push(arena, out, str8_lit("ProcScoped ")); str8_list_push(arena, out, str8_lit("ProcScoped "));
} }
} }
@@ -144,82 +144,82 @@ raddbg_stringize_link_flags(Arena *arena, String8List *out, RADDBG_LinkFlags fla
//////////////////////////////// ////////////////////////////////
//~ RADDBG Compound Stringize Functions //~ RADDBG Compound Stringize Functions
static char raddbg_stringize_spaces[] = " "; static char raddbgi_stringize_spaces[] = " ";
static void static void
raddbg_stringize_data_sections(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_data_sections(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
U32 indent_level){ U32 indent_level){
U64 data_section_count = parsed->dsec_count; U64 data_section_count = parsed->dsec_count;
RADDBG_DataSection *ptr = parsed->dsecs; RADDBGI_DataSection *ptr = parsed->dsecs;
for (U64 i = 0; i < data_section_count; i += 1, ptr += 1){ for (U64 i = 0; i < data_section_count; i += 1, ptr += 1){
String8 tag_str = raddbg_string_from_data_section_tag(ptr->tag); String8 tag_str = raddbgi_string_from_data_section_tag(ptr->tag);
str8_list_pushf(arena, out, "%.*sdata_section[%5u] = {0x%08llx, %7u, %7u} %.*s\n", str8_list_pushf(arena, out, "%.*sdata_section[%5u] = {0x%08llx, %7u, %7u} %.*s\n",
indent_level, raddbg_stringize_spaces, indent_level, raddbgi_stringize_spaces,
i, ptr->off, ptr->encoded_size, ptr->unpacked_size, str8_varg(tag_str)); i, ptr->off, ptr->encoded_size, ptr->unpacked_size, str8_varg(tag_str));
} }
} }
static void static void
raddbg_stringize_top_level_info(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_top_level_info(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_TopLevelInfo *tli, U32 indent_level){ RADDBGI_TopLevelInfo *tli, U32 indent_level){
String8 arch_str = raddbg_string_from_arch(tli->architecture); String8 arch_str = raddbgi_string_from_arch(tli->architecture);
String8 exe_name = {0}; String8 exe_name = {0};
exe_name.str = raddbg_string_from_idx(parsed, tli->exe_name_string_idx, &exe_name.size); exe_name.str = raddbgi_string_from_idx(parsed, tli->exe_name_string_idx, &exe_name.size);
str8_list_pushf(arena, out, "%.*sarchitecture=%.*s\n", str8_list_pushf(arena, out, "%.*sarchitecture=%.*s\n",
indent_level, raddbg_stringize_spaces, str8_varg(arch_str)); indent_level, raddbgi_stringize_spaces, str8_varg(arch_str));
str8_list_pushf(arena, out, "%.*sexe_name='%.*s'\n", str8_list_pushf(arena, out, "%.*sexe_name='%.*s'\n",
indent_level, raddbg_stringize_spaces, str8_varg(exe_name)); indent_level, raddbgi_stringize_spaces, str8_varg(exe_name));
str8_list_pushf(arena, out, "%.*svoff_max=0x%08llx\n", str8_list_pushf(arena, out, "%.*svoff_max=0x%08llx\n",
indent_level, raddbg_stringize_spaces, tli->voff_max); indent_level, raddbgi_stringize_spaces, tli->voff_max);
} }
static void static void
raddbg_stringize_binary_section(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_binary_section(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_BinarySection *bin_section, U32 indent_level){ RADDBGI_BinarySection *bin_section, U32 indent_level){
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(parsed, bin_section->name_string_idx, &name.size); name.str = raddbgi_string_from_idx(parsed, bin_section->name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*sname='%.*s'\n", str8_list_pushf(arena, out, "%.*sname='%.*s'\n",
indent_level, raddbg_stringize_spaces, str8_varg(name)); indent_level, raddbgi_stringize_spaces, str8_varg(name));
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbgi_stringize_spaces);
raddbg_stringize_binary_section_flags(arena, out, bin_section->flags); raddbgi_stringize_binary_section_flags(arena, out, bin_section->flags);
str8_list_pushf(arena, out, "\n"); str8_list_pushf(arena, out, "\n");
str8_list_pushf(arena, out, "%.*svoff_first=0x%08x\n", str8_list_pushf(arena, out, "%.*svoff_first=0x%08x\n",
indent_level, raddbg_stringize_spaces, bin_section->voff_first); indent_level, raddbgi_stringize_spaces, bin_section->voff_first);
str8_list_pushf(arena, out, "%.*svoff_opl =0x%08x\n", str8_list_pushf(arena, out, "%.*svoff_opl =0x%08x\n",
indent_level, raddbg_stringize_spaces, bin_section->voff_opl); indent_level, raddbgi_stringize_spaces, bin_section->voff_opl);
str8_list_pushf(arena, out, "%.*sfoff_first=0x%08x\n", str8_list_pushf(arena, out, "%.*sfoff_first=0x%08x\n",
indent_level, raddbg_stringize_spaces, bin_section->foff_first); indent_level, raddbgi_stringize_spaces, bin_section->foff_first);
str8_list_pushf(arena, out, "%.*sfoff_opl =0x%08x\n", str8_list_pushf(arena, out, "%.*sfoff_opl =0x%08x\n",
indent_level, raddbg_stringize_spaces, bin_section->foff_opl); indent_level, raddbgi_stringize_spaces, bin_section->foff_opl);
} }
static void static void
raddbg_stringize_file_path(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_file_path(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_FilePathBundle *bundle, RADDBG_FilePathNode *file_path, RADDBGI_FilePathBundle *bundle, RADDBGI_FilePathNode *file_path,
U32 indent_level){ U32 indent_level){
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(parsed, file_path->name_string_idx, &name.size); name.str = raddbgi_string_from_idx(parsed, file_path->name_string_idx, &name.size);
U32 this_idx = (U32)(file_path - bundle->file_paths); U32 this_idx = (U32)(file_path - bundle->file_paths);
if (file_path->source_file_idx == 0){ if (file_path->source_file_idx == 0){
str8_list_pushf(arena, out, "%.*s[%u] '%.*s'\n", str8_list_pushf(arena, out, "%.*s[%u] '%.*s'\n",
indent_level, raddbg_stringize_spaces, indent_level, raddbgi_stringize_spaces,
this_idx, str8_varg(name)); this_idx, str8_varg(name));
} }
else{ else{
str8_list_pushf(arena, out, "%.*s[%u] '%.*s'; source_file=%u\n", str8_list_pushf(arena, out, "%.*s[%u] '%.*s'; source_file=%u\n",
indent_level, raddbg_stringize_spaces, indent_level, raddbgi_stringize_spaces,
this_idx, str8_varg(name), file_path->source_file_idx); this_idx, str8_varg(name), file_path->source_file_idx);
} }
for (U32 child = file_path->first_child; for (U32 child = file_path->first_child;
child != 0;){ child != 0;){
// get node for child // get node for child
RADDBG_FilePathNode *child_node = 0; RADDBGI_FilePathNode *child_node = 0;
if (child < bundle->file_path_count){ if (child < bundle->file_path_count){
child_node = bundle->file_paths + child; child_node = bundle->file_paths + child;
} }
@@ -228,7 +228,7 @@ raddbg_stringize_file_path(Arena *arena, String8List *out, RADDBG_Parsed *parsed
} }
// stringize child // stringize child
raddbg_stringize_file_path(arena, out, parsed, bundle, child_node, indent_level + 1); raddbgi_stringize_file_path(arena, out, parsed, bundle, child_node, indent_level + 1);
// increment iterator // increment iterator
child = child_node->next_sibling; child = child_node->next_sibling;
@@ -236,14 +236,14 @@ raddbg_stringize_file_path(Arena *arena, String8List *out, RADDBG_Parsed *parsed
} }
static void static void
raddbg_stringize_source_file(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_source_file(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_SourceFile *source_file, U32 indent_level){ RADDBGI_SourceFile *source_file, U32 indent_level){
// extract line map data // extract line map data
RADDBG_ParsedLineMap line_map = {0}; RADDBGI_ParsedLineMap line_map = {0};
raddbg_line_map_from_source_file(parsed, source_file, &line_map); raddbgi_line_map_from_source_file(parsed, source_file, &line_map);
// stringize line map data // stringize line map data
str8_list_pushf(arena, out, "%.*slines:\n", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*slines:\n", indent_level, raddbgi_stringize_spaces);
for (U32 i = 0; i < line_map.count; i += 1){ for (U32 i = 0; i < line_map.count; i += 1){
U32 line_num = line_map.nums[i]; U32 line_num = line_map.nums[i];
@@ -261,7 +261,7 @@ raddbg_stringize_source_file(Arena *arena, String8List *out, RADDBG_Parsed *pars
} }
str8_list_pushf(arena, out, "%.*s %u: ", str8_list_pushf(arena, out, "%.*s %u: ",
indent_level, raddbg_stringize_spaces, line_num); indent_level, raddbgi_stringize_spaces, line_num);
U32 first = line_map.ranges[i]; U32 first = line_map.ranges[i];
U32 opl_raw = line_map.ranges[i + 1]; U32 opl_raw = line_map.ranges[i + 1];
@@ -272,7 +272,7 @@ raddbg_stringize_source_file(Arena *arena, String8List *out, RADDBG_Parsed *pars
} }
else{ else{
str8_list_pushf(arena, out, "%.*s0x%08x\n", str8_list_pushf(arena, out, "%.*s0x%08x\n",
indent_level + digit_count + 3, raddbg_stringize_spaces, indent_level + digit_count + 3, raddbgi_stringize_spaces,
line_map.voffs[j]); line_map.voffs[j]);
} }
} }
@@ -280,57 +280,57 @@ raddbg_stringize_source_file(Arena *arena, String8List *out, RADDBG_Parsed *pars
} }
static void static void
raddbg_stringize_unit(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_unit(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_Unit *unit, U32 indent_level){ RADDBGI_Unit *unit, U32 indent_level){
String8 unit_name = {0}; String8 unit_name = {0};
unit_name.str = raddbg_string_from_idx(parsed, unit->unit_name_string_idx, &unit_name.size); unit_name.str = raddbgi_string_from_idx(parsed, unit->unit_name_string_idx, &unit_name.size);
String8 compiler_name = {0}; String8 compiler_name = {0};
compiler_name.str = raddbg_string_from_idx(parsed, unit->compiler_name_string_idx, compiler_name.str = raddbgi_string_from_idx(parsed, unit->compiler_name_string_idx,
&compiler_name.size); &compiler_name.size);
str8_list_pushf(arena, out, "%.*sunit_name='%.*s'\n", str8_list_pushf(arena, out, "%.*sunit_name='%.*s'\n",
indent_level, raddbg_stringize_spaces, str8_varg(unit_name)); indent_level, raddbgi_stringize_spaces, str8_varg(unit_name));
str8_list_pushf(arena, out, "%.*scompiler_name='%.*s'\n", str8_list_pushf(arena, out, "%.*scompiler_name='%.*s'\n",
indent_level, raddbg_stringize_spaces, str8_varg(compiler_name)); indent_level, raddbgi_stringize_spaces, str8_varg(compiler_name));
str8_list_pushf(arena, out, "%.*ssource_file_path=%u\n", str8_list_pushf(arena, out, "%.*ssource_file_path=%u\n",
indent_level, raddbg_stringize_spaces, unit->source_file_path_node); indent_level, raddbgi_stringize_spaces, unit->source_file_path_node);
str8_list_pushf(arena, out, "%.*sobject_file_path=%u\n", str8_list_pushf(arena, out, "%.*sobject_file_path=%u\n",
indent_level, raddbg_stringize_spaces, unit->object_file_path_node); indent_level, raddbgi_stringize_spaces, unit->object_file_path_node);
str8_list_pushf(arena, out, "%.*sarchive_file_path=%u\n", str8_list_pushf(arena, out, "%.*sarchive_file_path=%u\n",
indent_level, raddbg_stringize_spaces, unit->archive_file_path_node); indent_level, raddbgi_stringize_spaces, unit->archive_file_path_node);
str8_list_pushf(arena, out, "%.*sbuild_path=%u\n", str8_list_pushf(arena, out, "%.*sbuild_path=%u\n",
indent_level, raddbg_stringize_spaces, unit->build_path_node); indent_level, raddbgi_stringize_spaces, unit->build_path_node);
String8 language_str = raddbg_string_from_language(unit->language); String8 language_str = raddbgi_string_from_language(unit->language);
str8_list_pushf(arena, out, "%.*slanguage=%.*s\n", str8_list_pushf(arena, out, "%.*slanguage=%.*s\n",
indent_level, raddbg_stringize_spaces, str8_varg(language_str)); indent_level, raddbgi_stringize_spaces, str8_varg(language_str));
// extract line info data // extract line info data
RADDBG_ParsedLineInfo line_info = {0}; RADDBGI_ParsedLineInfo line_info = {0};
raddbg_line_info_from_unit(parsed, unit, &line_info); raddbgi_line_info_from_unit(parsed, unit, &line_info);
// stringize line info // stringize line info
str8_list_pushf(arena, out, "%.*slines:\n", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*slines:\n", indent_level, raddbgi_stringize_spaces);
for (U32 i = 0; i < line_info.count; i += 1){ for (U32 i = 0; i < line_info.count; i += 1){
U64 first = line_info.voffs[i]; U64 first = line_info.voffs[i];
U64 opl = line_info.voffs[i + 1]; U64 opl = line_info.voffs[i + 1];
RADDBG_Line *line = line_info.lines + i; RADDBGI_Line *line = line_info.lines + i;
RADDBG_Column *col = 0; RADDBGI_Column *col = 0;
if (i < line_info.col_count){ if (i < line_info.col_count){
col = line_info.cols + i; col = line_info.cols + i;
} }
if (col == 0){ if (col == 0){
str8_list_pushf(arena, out, "%.*s [0x%08llx,0x%08llx) file=%u; line=%u\n", str8_list_pushf(arena, out, "%.*s [0x%08llx,0x%08llx) file=%u; line=%u\n",
indent_level, raddbg_stringize_spaces, indent_level, raddbgi_stringize_spaces,
first, opl, line->file_idx, line->line_num); first, opl, line->file_idx, line->line_num);
} }
else{ else{
str8_list_pushf(arena, out, "%.*s [0x%08llx,0x%08llx) file=%u; line=%u; columns=[%u,%u)\n", str8_list_pushf(arena, out, "%.*s [0x%08llx,0x%08llx) file=%u; line=%u; columns=[%u,%u)\n",
indent_level, raddbg_stringize_spaces, indent_level, raddbgi_stringize_spaces,
first, opl, line->file_idx, line->line_num, first, opl, line->file_idx, line->line_num,
col->col_first, col->col_opl); col->col_first, col->col_opl);
} }
@@ -338,19 +338,19 @@ raddbg_stringize_unit(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
} }
static void static void
raddbg_stringize_type_node(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_type_node(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_TypeNode *type, U32 indent_level){ RADDBGI_TypeNode *type, U32 indent_level){
RADDBG_TypeKind kind = type->kind; RADDBGI_TypeKind kind = type->kind;
String8 type_kind_str = raddbg_string_from_type_kind(kind); String8 type_kind_str = raddbgi_string_from_type_kind(kind);
str8_list_pushf(arena, out, "%.*skind=%.*s\n", str8_list_pushf(arena, out, "%.*skind=%.*s\n",
indent_level, raddbg_stringize_spaces, str8_varg(type_kind_str)); indent_level, raddbgi_stringize_spaces, str8_varg(type_kind_str));
switch (type->kind){ switch (type->kind){
case RADDBG_TypeKind_Modifier: case RADDBGI_TypeKind_Modifier:
{ {
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbgi_stringize_spaces);
raddbg_stringize_type_modifier_flags(arena, out, type->flags); raddbgi_stringize_type_modifier_flags(arena, out, type->flags);
str8_list_push(arena, out, str8_lit("\n")); str8_list_push(arena, out, str8_lit("\n"));
}break; }break;
@@ -358,42 +358,42 @@ raddbg_stringize_type_node(Arena *arena, String8List *out, RADDBG_Parsed *parsed
{ {
if (type->flags != 0){ if (type->flags != 0){
str8_list_pushf(arena, out, "%.*sflags=%x (missing stringizer path)", str8_list_pushf(arena, out, "%.*sflags=%x (missing stringizer path)",
indent_level, raddbg_stringize_spaces, type->flags); indent_level, raddbgi_stringize_spaces, type->flags);
} }
}break; }break;
} }
str8_list_pushf(arena, out, "%.*sbyte_size=%u\n", str8_list_pushf(arena, out, "%.*sbyte_size=%u\n",
indent_level, raddbg_stringize_spaces, type->byte_size); indent_level, raddbgi_stringize_spaces, type->byte_size);
if (RADDBG_TypeKind_FirstBuiltIn <= kind && if (RADDBGI_TypeKind_FirstBuiltIn <= kind &&
kind <= RADDBG_TypeKind_LastBuiltIn){ kind <= RADDBGI_TypeKind_LastBuiltIn){
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(parsed, type->built_in.name_string_idx, &name.size); name.str = raddbgi_string_from_idx(parsed, type->built_in.name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*sbuilt_in.name='%.*s'\n", str8_list_pushf(arena, out, "%.*sbuilt_in.name='%.*s'\n",
indent_level, raddbg_stringize_spaces, str8_varg(name)); indent_level, raddbgi_stringize_spaces, str8_varg(name));
} }
else if (RADDBG_TypeKind_FirstConstructed <= kind && else if (RADDBGI_TypeKind_FirstConstructed <= kind &&
kind <= RADDBG_TypeKind_LastConstructed){ kind <= RADDBGI_TypeKind_LastConstructed){
str8_list_pushf(arena, out, "%.*sconstructed.direct_type=%u\n", str8_list_pushf(arena, out, "%.*sconstructed.direct_type=%u\n",
indent_level, raddbg_stringize_spaces, type->constructed.direct_type_idx); indent_level, raddbgi_stringize_spaces, type->constructed.direct_type_idx);
if (type->kind == RADDBG_TypeKind_Array){ if (type->kind == RADDBGI_TypeKind_Array){
str8_list_pushf(arena, out, "%.*sconstructed.array_count=%u\n", str8_list_pushf(arena, out, "%.*sconstructed.array_count=%u\n",
indent_level, raddbg_stringize_spaces, type->constructed.count); indent_level, raddbgi_stringize_spaces, type->constructed.count);
} }
if (type->kind == RADDBG_TypeKind_Function || if (type->kind == RADDBGI_TypeKind_Function ||
type->kind == RADDBG_TypeKind_Method){ type->kind == RADDBGI_TypeKind_Method){
U32 run_first = type->constructed.param_idx_run_first; U32 run_first = type->constructed.param_idx_run_first;
U32 run_count_raw = type->constructed.count; U32 run_count_raw = type->constructed.count;
U32 run_count = 0; U32 run_count = 0;
U32 *run = raddbg_idx_run_from_first_count(parsed, run_first, run_count_raw, &run_count); U32 *run = raddbgi_idx_run_from_first_count(parsed, run_first, run_count_raw, &run_count);
U32 this_type_idx = 0; U32 this_type_idx = 0;
if (run_count > 0 && type->kind == RADDBG_TypeKind_Method){ if (run_count > 0 && type->kind == RADDBGI_TypeKind_Method){
this_type_idx = run[0]; this_type_idx = run[0];
run += 1; run += 1;
run_count -= 1; run_count -= 1;
@@ -401,11 +401,11 @@ raddbg_stringize_type_node(Arena *arena, String8List *out, RADDBG_Parsed *parsed
if (this_type_idx != 0){ if (this_type_idx != 0){
str8_list_pushf(arena, out, "%.*sconstructed.this_type=%u\n", str8_list_pushf(arena, out, "%.*sconstructed.this_type=%u\n",
indent_level, raddbg_stringize_spaces, this_type_idx); indent_level, raddbgi_stringize_spaces, this_type_idx);
} }
str8_list_pushf(arena, out, "%.*sconstructed.params={", str8_list_pushf(arena, out, "%.*sconstructed.params={",
indent_level, raddbg_stringize_spaces); indent_level, raddbgi_stringize_spaces);
if (run_count > 0){ if (run_count > 0){
U32 last = run_count - 1; U32 last = run_count - 1;
@@ -419,63 +419,63 @@ raddbg_stringize_type_node(Arena *arena, String8List *out, RADDBG_Parsed *parsed
} }
} }
else if (RADDBG_TypeKind_FirstUserDefined <= kind && else if (RADDBGI_TypeKind_FirstUserDefined <= kind &&
kind <= RADDBG_TypeKind_LastUserDefined){ kind <= RADDBGI_TypeKind_LastUserDefined){
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(parsed, type->user_defined.name_string_idx, &name.size); name.str = raddbgi_string_from_idx(parsed, type->user_defined.name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*suser_defined.name='%.*s'\n", str8_list_pushf(arena, out, "%.*suser_defined.name='%.*s'\n",
indent_level, raddbg_stringize_spaces, str8_varg(name)); indent_level, raddbgi_stringize_spaces, str8_varg(name));
str8_list_pushf(arena, out, "%.*suser_defined.direct_type=%u\n", str8_list_pushf(arena, out, "%.*suser_defined.direct_type=%u\n",
indent_level, raddbg_stringize_spaces, indent_level, raddbgi_stringize_spaces,
type->user_defined.direct_type_idx); type->user_defined.direct_type_idx);
str8_list_pushf(arena, out, "%.*suser_defined.udt=%u\n", str8_list_pushf(arena, out, "%.*suser_defined.udt=%u\n",
indent_level, raddbg_stringize_spaces, indent_level, raddbgi_stringize_spaces,
type->user_defined.udt_idx); type->user_defined.udt_idx);
} }
else if (kind == RADDBG_TypeKind_Bitfield){ else if (kind == RADDBGI_TypeKind_Bitfield){
str8_list_pushf(arena, out, "%.*sbitfield.off=%u\n", str8_list_pushf(arena, out, "%.*sbitfield.off=%u\n",
indent_level, raddbg_stringize_spaces, type->bitfield.off); indent_level, raddbgi_stringize_spaces, type->bitfield.off);
str8_list_pushf(arena, out, "%.*sbitfield.size=%u\n", str8_list_pushf(arena, out, "%.*sbitfield.size=%u\n",
indent_level, raddbg_stringize_spaces, type->bitfield.size); indent_level, raddbgi_stringize_spaces, type->bitfield.size);
} }
} }
static void static void
raddbg_stringize_udt(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_udt(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_UDTMemberBundle *member_bundle, RADDBG_UDT *udt, RADDBGI_UDTMemberBundle *member_bundle, RADDBGI_UDT *udt,
U32 indent_level){ U32 indent_level){
str8_list_pushf(arena, out, "%.*sself_type=%u\n", str8_list_pushf(arena, out, "%.*sself_type=%u\n",
indent_level, raddbg_stringize_spaces, udt->self_type_idx); indent_level, raddbgi_stringize_spaces, udt->self_type_idx);
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbgi_stringize_spaces);
raddbg_stringize_user_defined_type_flags(arena, out, udt->flags); raddbgi_stringize_user_defined_type_flags(arena, out, udt->flags);
str8_list_push(arena, out, str8_lit("\n")); str8_list_push(arena, out, str8_lit("\n"));
if (udt->file_idx != 0){ if (udt->file_idx != 0){
str8_list_pushf(arena, out, "%.*sloc={file=%u; line=%u; col=%u}\n", str8_list_pushf(arena, out, "%.*sloc={file=%u; line=%u; col=%u}\n",
indent_level, raddbg_stringize_spaces, indent_level, raddbgi_stringize_spaces,
udt->file_idx, udt->line, udt->col); udt->file_idx, udt->line, udt->col);
} }
// enum members // enum members
if (udt->flags & RADDBG_UserDefinedTypeFlag_EnumMembers){ if (udt->flags & RADDBGI_UserDefinedTypeFlag_EnumMembers){
U32 first_raw = udt->member_first; U32 first_raw = udt->member_first;
U32 opl_raw = first_raw + udt->member_count; U32 opl_raw = first_raw + udt->member_count;
U32 opl = ClampTop(opl_raw, member_bundle->enum_member_count); U32 opl = ClampTop(opl_raw, member_bundle->enum_member_count);
U32 first = ClampTop(first_raw, opl); U32 first = ClampTop(first_raw, opl);
if (first < opl){ if (first < opl){
str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, raddbgi_stringize_spaces);
RADDBG_EnumMember *enum_member = member_bundle->enum_members + first; RADDBGI_EnumMember *enum_member = member_bundle->enum_members + first;
for (U32 i = first; i < opl; i += 1, enum_member += 1){ for (U32 i = first; i < opl; i += 1, enum_member += 1){
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(parsed, enum_member->name_string_idx, &name.size); name.str = raddbgi_string_from_idx(parsed, enum_member->name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*s '%.*s' %llu\n", str8_list_pushf(arena, out, "%.*s '%.*s' %llu\n",
indent_level, raddbg_stringize_spaces, indent_level, raddbgi_stringize_spaces,
str8_varg(name), enum_member->val); str8_varg(name), enum_member->val);
} }
str8_list_pushf(arena, out, "%.*s}\n", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*s}\n", indent_level, raddbgi_stringize_spaces);
} }
} }
@@ -487,117 +487,117 @@ raddbg_stringize_udt(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
U32 first = ClampTop(first_raw, opl); U32 first = ClampTop(first_raw, opl);
if (first < opl){ if (first < opl){
str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, raddbgi_stringize_spaces);
RADDBG_Member *member = member_bundle->members + first; RADDBGI_Member *member = member_bundle->members + first;
for (U32 i = first; i < opl; i += 1, member += 1){ for (U32 i = first; i < opl; i += 1, member += 1){
str8_list_pushf(arena, out, "%.*s {\n", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*s {\n", indent_level, raddbgi_stringize_spaces);
String8 kind_str = raddbg_string_from_member_kind(member->kind); String8 kind_str = raddbgi_string_from_member_kind(member->kind);
str8_list_pushf(arena, out, "%.*s kind=%.*s\n", str8_list_pushf(arena, out, "%.*s kind=%.*s\n",
indent_level, raddbg_stringize_spaces, str8_varg(kind_str)); indent_level, raddbgi_stringize_spaces, str8_varg(kind_str));
if (member->name_string_idx != 0){ if (member->name_string_idx != 0){
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(parsed, member->name_string_idx, &name.size); name.str = raddbgi_string_from_idx(parsed, member->name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*s name='%.*s'\n", str8_list_pushf(arena, out, "%.*s name='%.*s'\n",
indent_level, raddbg_stringize_spaces, str8_varg(name)); indent_level, raddbgi_stringize_spaces, str8_varg(name));
} }
str8_list_pushf(arena, out, "%.*s type=%u\n", str8_list_pushf(arena, out, "%.*s type=%u\n",
indent_level, raddbg_stringize_spaces, member->type_idx); indent_level, raddbgi_stringize_spaces, member->type_idx);
str8_list_pushf(arena, out, "%.*s off=%u\n", str8_list_pushf(arena, out, "%.*s off=%u\n",
indent_level, raddbg_stringize_spaces, member->off); indent_level, raddbgi_stringize_spaces, member->off);
str8_list_pushf(arena, out, "%.*s }\n", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*s }\n", indent_level, raddbgi_stringize_spaces);
} }
str8_list_pushf(arena, out, "%.*s}\n", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*s}\n", indent_level, raddbgi_stringize_spaces);
} }
} }
} }
static void static void
raddbg_stringize_global_variable(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_global_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_GlobalVariable *global_variable, U32 indent_level){ RADDBGI_GlobalVariable *global_variable, U32 indent_level){
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(parsed, global_variable->name_string_idx, &name.size); name.str = raddbgi_string_from_idx(parsed, global_variable->name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*sname='%.*s'\n", str8_list_pushf(arena, out, "%.*sname='%.*s'\n",
indent_level, raddbg_stringize_spaces, str8_varg(name)); indent_level, raddbgi_stringize_spaces, str8_varg(name));
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbgi_stringize_spaces);
raddbg_stringize_link_flags(arena, out, global_variable->link_flags); raddbgi_stringize_link_flags(arena, out, global_variable->link_flags);
str8_list_push(arena, out, str8_lit("\n")); str8_list_push(arena, out, str8_lit("\n"));
str8_list_pushf(arena, out, "%.*svoff=0x%08llx\n", str8_list_pushf(arena, out, "%.*svoff=0x%08llx\n",
indent_level, raddbg_stringize_spaces, global_variable->voff); indent_level, raddbgi_stringize_spaces, global_variable->voff);
str8_list_pushf(arena, out, "%.*stype_idx=%u\n", str8_list_pushf(arena, out, "%.*stype_idx=%u\n",
indent_level, raddbg_stringize_spaces, global_variable->type_idx); indent_level, raddbgi_stringize_spaces, global_variable->type_idx);
str8_list_pushf(arena, out, "%.*scontainer_idx=%u\n", str8_list_pushf(arena, out, "%.*scontainer_idx=%u\n",
indent_level, raddbg_stringize_spaces, global_variable->container_idx); indent_level, raddbgi_stringize_spaces, global_variable->container_idx);
} }
static void static void
raddbg_stringize_thread_variable(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_thread_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_ThreadVariable *thread_var, RADDBGI_ThreadVariable *thread_var,
U32 indent_level){ U32 indent_level){
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(parsed, thread_var->name_string_idx, &name.size); name.str = raddbgi_string_from_idx(parsed, thread_var->name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*sname='%.*s'\n", str8_list_pushf(arena, out, "%.*sname='%.*s'\n",
indent_level, raddbg_stringize_spaces, str8_varg(name)); indent_level, raddbgi_stringize_spaces, str8_varg(name));
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbgi_stringize_spaces);
raddbg_stringize_link_flags(arena, out, thread_var->link_flags); raddbgi_stringize_link_flags(arena, out, thread_var->link_flags);
str8_list_push(arena, out, str8_lit("\n")); str8_list_push(arena, out, str8_lit("\n"));
str8_list_pushf(arena, out, "%.*stls_off=0x%08x\n", str8_list_pushf(arena, out, "%.*stls_off=0x%08x\n",
indent_level, raddbg_stringize_spaces, thread_var->tls_off); indent_level, raddbgi_stringize_spaces, thread_var->tls_off);
str8_list_pushf(arena, out, "%.*stype_idx=%u\n", str8_list_pushf(arena, out, "%.*stype_idx=%u\n",
indent_level, raddbg_stringize_spaces, thread_var->type_idx); indent_level, raddbgi_stringize_spaces, thread_var->type_idx);
str8_list_pushf(arena, out, "%.*scontainer_idx=%u\n", str8_list_pushf(arena, out, "%.*scontainer_idx=%u\n",
indent_level, raddbg_stringize_spaces, thread_var->container_idx); indent_level, raddbgi_stringize_spaces, thread_var->container_idx);
} }
static void static void
raddbg_stringize_procedure(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_procedure(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_Procedure *proc, U32 indent_level){ RADDBGI_Procedure *proc, U32 indent_level){
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(parsed, proc->name_string_idx, &name.size); name.str = raddbgi_string_from_idx(parsed, proc->name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*sname='%.*s'\n", str8_list_pushf(arena, out, "%.*sname='%.*s'\n",
indent_level, raddbg_stringize_spaces, str8_varg(name)); indent_level, raddbgi_stringize_spaces, str8_varg(name));
String8 link_name = {0}; String8 link_name = {0};
link_name.str = raddbg_string_from_idx(parsed, proc->link_name_string_idx, &link_name.size); link_name.str = raddbgi_string_from_idx(parsed, proc->link_name_string_idx, &link_name.size);
str8_list_pushf(arena, out, "%.*slink_name='%.*s'\n", str8_list_pushf(arena, out, "%.*slink_name='%.*s'\n",
indent_level, raddbg_stringize_spaces, str8_varg(link_name)); indent_level, raddbgi_stringize_spaces, str8_varg(link_name));
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbgi_stringize_spaces);
raddbg_stringize_link_flags(arena, out, proc->link_flags); raddbgi_stringize_link_flags(arena, out, proc->link_flags);
str8_list_push(arena, out, str8_lit("\n")); str8_list_push(arena, out, str8_lit("\n"));
str8_list_pushf(arena, out, "%.*stype_idx=%u\n", str8_list_pushf(arena, out, "%.*stype_idx=%u\n",
indent_level, raddbg_stringize_spaces, proc->type_idx); indent_level, raddbgi_stringize_spaces, proc->type_idx);
str8_list_pushf(arena, out, "%.*sroot_scope_idx=%u\n", str8_list_pushf(arena, out, "%.*sroot_scope_idx=%u\n",
indent_level, raddbg_stringize_spaces, proc->root_scope_idx); indent_level, raddbgi_stringize_spaces, proc->root_scope_idx);
str8_list_pushf(arena, out, "%.*scontainer_idx=%u\n", str8_list_pushf(arena, out, "%.*scontainer_idx=%u\n",
indent_level, raddbg_stringize_spaces, proc->container_idx); indent_level, raddbgi_stringize_spaces, proc->container_idx);
} }
static void static void
raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_scope(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_ScopeBundle *bundle, RADDBG_Scope *scope, U32 indent_level){ RADDBGI_ScopeBundle *bundle, RADDBGI_Scope *scope, U32 indent_level){
U32 this_idx = (U32)(scope - bundle->scopes); U32 this_idx = (U32)(scope - bundle->scopes);
str8_list_pushf(arena, out, "%.*s[%u]\n", str8_list_pushf(arena, out, "%.*s[%u]\n",
indent_level, raddbg_stringize_spaces, this_idx); indent_level, raddbgi_stringize_spaces, this_idx);
str8_list_pushf(arena, out, "%.*s proc_idx=%u\n", str8_list_pushf(arena, out, "%.*s proc_idx=%u\n",
indent_level, raddbg_stringize_spaces, scope->proc_idx); indent_level, raddbgi_stringize_spaces, scope->proc_idx);
// voff ranges // voff ranges
{ {
@@ -614,18 +614,18 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
if (voff_range_opl - voff_range_first > 2){ if (voff_range_opl - voff_range_first > 2){
str8_list_pushf(arena, out, "%.*s voff_ranges={\n", str8_list_pushf(arena, out, "%.*s voff_ranges={\n",
indent_level, raddbg_stringize_spaces); indent_level, raddbgi_stringize_spaces);
for (U32 i = voff_range_first; i < voff_range_opl; i += 2, voff_ptr += 2){ 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", str8_list_pushf(arena, out, "%.*s [0x%08llx, 0x%08llx)\n",
indent_level, raddbg_stringize_spaces, indent_level, raddbgi_stringize_spaces,
voff_ptr[0], voff_ptr[1]); voff_ptr[0], voff_ptr[1]);
} }
str8_list_pushf(arena, out, "%.*s }\n", str8_list_pushf(arena, out, "%.*s }\n",
indent_level, raddbg_stringize_spaces); indent_level, raddbgi_stringize_spaces);
} }
else if (voff_range_opl - voff_range_first == 2){ else if (voff_range_opl - voff_range_first == 2){
str8_list_pushf(arena, out, "%.*s voff_range=[0x%08llx, 0x%08llx)\n", str8_list_pushf(arena, out, "%.*s voff_range=[0x%08llx, 0x%08llx)\n",
indent_level, raddbg_stringize_spaces, indent_level, raddbgi_stringize_spaces,
voff_ptr[0], voff_ptr[1]); voff_ptr[0], voff_ptr[1]);
} }
} }
@@ -637,60 +637,60 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
U32 local_opl = ClampTop(local_opl_raw, bundle->local_count); U32 local_opl = ClampTop(local_opl_raw, bundle->local_count);
if (local_first < local_opl){ if (local_first < local_opl){
RADDBG_Local *local_ptr = bundle->locals + local_first; RADDBGI_Local *local_ptr = bundle->locals + local_first;
for (U32 i = local_first; i < local_opl; i += 1, local_ptr += 1){ for (U32 i = local_first; i < local_opl; i += 1, local_ptr += 1){
str8_list_pushf(arena, out, "%.*s local[%u]\n", str8_list_pushf(arena, out, "%.*s local[%u]\n",
indent_level, raddbg_stringize_spaces, i); indent_level, raddbgi_stringize_spaces, i);
String8 local_kind_str = raddbg_string_from_local_kind(local_ptr->kind); String8 local_kind_str = raddbgi_string_from_local_kind(local_ptr->kind);
str8_list_pushf(arena, out, "%.*s kind=%.*s\n", str8_list_pushf(arena, out, "%.*s kind=%.*s\n",
indent_level, raddbg_stringize_spaces, str8_varg(local_kind_str)); indent_level, raddbgi_stringize_spaces, str8_varg(local_kind_str));
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(parsed, local_ptr->name_string_idx, &name.size); name.str = raddbgi_string_from_idx(parsed, local_ptr->name_string_idx, &name.size);
str8_list_pushf(arena, out, "%.*s name='%.*s'\n", str8_list_pushf(arena, out, "%.*s name='%.*s'\n",
indent_level, raddbg_stringize_spaces, str8_varg(name)); indent_level, raddbgi_stringize_spaces, str8_varg(name));
str8_list_pushf(arena, out, "%.*s type_idx=%u\n", str8_list_pushf(arena, out, "%.*s type_idx=%u\n",
indent_level, raddbg_stringize_spaces, local_ptr->type_idx); indent_level, raddbgi_stringize_spaces, local_ptr->type_idx);
U32 location_first = local_ptr->location_first; U32 location_first = local_ptr->location_first;
U32 location_opl_raw = local_ptr->location_opl; U32 location_opl_raw = local_ptr->location_opl;
U32 location_opl = ClampTop(location_opl_raw, bundle->location_block_count); U32 location_opl = ClampTop(location_opl_raw, bundle->location_block_count);
if (location_first < location_opl){ if (location_first < location_opl){
str8_list_pushf(arena, out, "%.*s locations:\n", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*s locations:\n", indent_level, raddbgi_stringize_spaces);
RADDBG_LocationBlock *block_ptr = bundle->location_blocks + location_first; RADDBGI_LocationBlock *block_ptr = bundle->location_blocks + location_first;
for (U32 j = location_first; j < location_opl; j += 1, block_ptr += 1){ 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){ 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, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*s case *always*:\n", indent_level, raddbgi_stringize_spaces);
} }
else{ else{
str8_list_pushf(arena, out, "%.*s case [0x%08x, 0x%08x):\n", str8_list_pushf(arena, out, "%.*s case [0x%08x, 0x%08x):\n",
indent_level, raddbg_stringize_spaces, indent_level, raddbgi_stringize_spaces,
block_ptr->scope_off_first, block_ptr->scope_off_opl); block_ptr->scope_off_first, block_ptr->scope_off_opl);
} }
if (block_ptr->location_data_off >= bundle->location_data_size){ if (block_ptr->location_data_off >= bundle->location_data_size){
str8_list_pushf(arena, out, "%.*s <bad-location-data-offset>\n", str8_list_pushf(arena, out, "%.*s <bad-location-data-offset>\n",
indent_level, raddbg_stringize_spaces); indent_level, raddbgi_stringize_spaces);
} }
else{ else{
str8_list_pushf(arena, out, "%.*s ", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*s ", indent_level, raddbgi_stringize_spaces);
U8 *loc_data_opl = bundle->location_data + bundle->location_data_size; U8 *loc_data_opl = bundle->location_data + bundle->location_data_size;
U8 *loc_base_ptr = bundle->location_data + block_ptr->location_data_off; U8 *loc_base_ptr = bundle->location_data + block_ptr->location_data_off;
RADDBG_LocationKind kind = (RADDBG_LocationKind)*loc_base_ptr; RADDBGI_LocationKind kind = (RADDBGI_LocationKind)*loc_base_ptr;
switch (kind){ switch (kind){
default: default:
{ {
str8_list_pushf(arena, out, "<invalid-location-kind>\n"); str8_list_pushf(arena, out, "<invalid-location-kind>\n");
}break; }break;
case RADDBG_LocationKind_AddrBytecodeStream: case RADDBGI_LocationKind_AddrBytecodeStream:
{ {
str8_list_pushf(arena, out, "AddrBytecodeStream\n"); str8_list_pushf(arena, out, "AddrBytecodeStream\n");
str8_list_pushf(arena, out, "%.*s ", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*s ", indent_level, raddbgi_stringize_spaces);
U8 *bytecode_ptr = loc_base_ptr + 1; U8 *bytecode_ptr = loc_base_ptr + 1;
for (;bytecode_ptr < loc_data_opl && *bytecode_ptr != 0; bytecode_ptr += 1){ for (;bytecode_ptr < loc_data_opl && *bytecode_ptr != 0; bytecode_ptr += 1){
str8_list_pushf(arena, out, "%02x ", *bytecode_ptr); str8_list_pushf(arena, out, "%02x ", *bytecode_ptr);
@@ -698,10 +698,10 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
str8_list_pushf(arena, out, "\n"); str8_list_pushf(arena, out, "\n");
}break; }break;
case RADDBG_LocationKind_ValBytecodeStream: case RADDBGI_LocationKind_ValBytecodeStream:
{ {
str8_list_pushf(arena, out, "ValBytecodeStream\n"); str8_list_pushf(arena, out, "ValBytecodeStream\n");
str8_list_pushf(arena, out, "%.*s ", indent_level, raddbg_stringize_spaces); str8_list_pushf(arena, out, "%.*s ", indent_level, raddbgi_stringize_spaces);
U8 *bytecode_ptr = loc_base_ptr + 1; U8 *bytecode_ptr = loc_base_ptr + 1;
for (;bytecode_ptr < loc_data_opl && *bytecode_ptr != 0; bytecode_ptr += 1){ for (;bytecode_ptr < loc_data_opl && *bytecode_ptr != 0; bytecode_ptr += 1){
str8_list_pushf(arena, out, "%02x ", *bytecode_ptr); str8_list_pushf(arena, out, "%02x ", *bytecode_ptr);
@@ -709,37 +709,37 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
str8_list_pushf(arena, out, "\n"); str8_list_pushf(arena, out, "\n");
}break; }break;
case RADDBG_LocationKind_AddrRegisterPlusU16: case RADDBGI_LocationKind_AddrRegisterPlusU16:
{ {
if (loc_base_ptr + sizeof(RADDBG_LocationRegisterPlusU16) > loc_data_opl){ if (loc_base_ptr + sizeof(RADDBGI_LocationRegisterPlusU16) > loc_data_opl){
str8_list_pushf(arena, out, "AddrRegisterPlusU16( <invalid-encoding> )\n"); str8_list_pushf(arena, out, "AddrRegisterPlusU16( <invalid-encoding> )\n");
} }
else{ else{
RADDBG_LocationRegisterPlusU16 *loc = (RADDBG_LocationRegisterPlusU16*)loc_base_ptr; RADDBGI_LocationRegisterPlusU16 *loc = (RADDBGI_LocationRegisterPlusU16*)loc_base_ptr;
str8_list_pushf(arena, out, "AddrRegisterPlusU16(reg: %u, off: %u)\n", str8_list_pushf(arena, out, "AddrRegisterPlusU16(reg: %u, off: %u)\n",
loc->register_code, loc->offset); loc->register_code, loc->offset);
} }
}break; }break;
case RADDBG_LocationKind_AddrAddrRegisterPlusU16: case RADDBGI_LocationKind_AddrAddrRegisterPlusU16:
{ {
if (loc_base_ptr + sizeof(RADDBG_LocationRegisterPlusU16) > loc_data_opl){ if (loc_base_ptr + sizeof(RADDBGI_LocationRegisterPlusU16) > loc_data_opl){
str8_list_pushf(arena, out, "AddrAddrRegisterPlusU16( <invalid-encoding> )\n"); str8_list_pushf(arena, out, "AddrAddrRegisterPlusU16( <invalid-encoding> )\n");
} }
else{ else{
RADDBG_LocationRegisterPlusU16 *loc = (RADDBG_LocationRegisterPlusU16*)loc_base_ptr; RADDBGI_LocationRegisterPlusU16 *loc = (RADDBGI_LocationRegisterPlusU16*)loc_base_ptr;
str8_list_pushf(arena, out, "AddrAddrRegisterPlusU16(reg: %u, off: %u)\n", str8_list_pushf(arena, out, "AddrAddrRegisterPlusU16(reg: %u, off: %u)\n",
loc->register_code, loc->offset); loc->register_code, loc->offset);
} }
}break; }break;
case RADDBG_LocationKind_ValRegister: case RADDBGI_LocationKind_ValRegister:
{ {
if (loc_base_ptr + sizeof(RADDBG_LocationRegister) > loc_data_opl){ if (loc_base_ptr + sizeof(RADDBGI_LocationRegister) > loc_data_opl){
str8_list_pushf(arena, out, "ValRegister( <invalid-encoding> )\n"); str8_list_pushf(arena, out, "ValRegister( <invalid-encoding> )\n");
} }
else{ else{
RADDBG_LocationRegister *loc = (RADDBG_LocationRegister*)loc_base_ptr; RADDBGI_LocationRegister *loc = (RADDBGI_LocationRegister*)loc_base_ptr;
str8_list_pushf(arena, out, "ValRegister(reg: %u)\n", loc->register_code); str8_list_pushf(arena, out, "ValRegister(reg: %u)\n", loc->register_code);
} }
}break; }break;
@@ -756,7 +756,7 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
for (U32 child = scope->first_child_scope_idx; for (U32 child = scope->first_child_scope_idx;
child != 0;){ child != 0;){
// get scope for child // get scope for child
RADDBG_Scope *child_scope = 0; RADDBGI_Scope *child_scope = 0;
if (child < bundle->scope_count){ if (child < bundle->scope_count){
child_scope = bundle->scopes + child; child_scope = bundle->scopes + child;
} }
@@ -765,12 +765,12 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
} }
// stringize child // stringize child
raddbg_stringize_scope(arena, out, parsed, bundle, child_scope, indent_level + 1); raddbgi_stringize_scope(arena, out, parsed, bundle, child_scope, indent_level + 1);
// increment iterator // increment iterator
child = child_scope->next_sibling_scope_idx; child = child_scope->next_sibling_scope_idx;
} }
str8_list_pushf(arena, out, "%.*s[/%u]\n", str8_list_pushf(arena, out, "%.*s[/%u]\n",
indent_level, raddbg_stringize_spaces, this_idx); indent_level, raddbgi_stringize_spaces, this_idx);
} }
+56 -56
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_STRINGIZE_H #ifndef RADDBGI_STRINGIZE_H
#define RADDBG_STRINGIZE_H #define RADDBGI_STRINGIZE_H
// TODO(allen): this depends on types from our base layer. // TODO(allen): this depends on types from our base layer.
// we need to decide if we want this to be included in the "format" layer // we need to decide if we want this to be included in the "format" layer
@@ -13,108 +13,108 @@
//////////////////////////////// ////////////////////////////////
//~ RADDBG Stringize Helper Types //~ RADDBG Stringize Helper Types
typedef struct RADDBG_FilePathBundle{ typedef struct RADDBGI_FilePathBundle{
RADDBG_FilePathNode *file_paths; RADDBGI_FilePathNode *file_paths;
U32 file_path_count; U32 file_path_count;
} RADDBG_FilePathBundle; } RADDBGI_FilePathBundle;
typedef struct RADDBG_UDTMemberBundle{ typedef struct RADDBGI_UDTMemberBundle{
RADDBG_Member *members; RADDBGI_Member *members;
RADDBG_EnumMember *enum_members; RADDBGI_EnumMember *enum_members;
U32 member_count; U32 member_count;
U32 enum_member_count; U32 enum_member_count;
} RADDBG_UDTMemberBundle; } RADDBGI_UDTMemberBundle;
typedef struct RADDBG_ScopeBundle{ typedef struct RADDBGI_ScopeBundle{
RADDBG_Scope *scopes; RADDBGI_Scope *scopes;
U64 *scope_voffs; U64 *scope_voffs;
RADDBG_Local *locals; RADDBGI_Local *locals;
RADDBG_LocationBlock *location_blocks; RADDBGI_LocationBlock *location_blocks;
U8 *location_data; U8 *location_data;
U32 scope_count; U32 scope_count;
U32 scope_voff_count; U32 scope_voff_count;
U32 local_count; U32 local_count;
U32 location_block_count; U32 location_block_count;
U32 location_data_size; U32 location_data_size;
} RADDBG_ScopeBundle; } RADDBGI_ScopeBundle;
//////////////////////////////// ////////////////////////////////
//~ RADDBG Common Stringize Functions //~ RADDBG Common Stringize Functions
static String8 raddbg_string_from_data_section_tag(RADDBG_DataSectionTag tag); static String8 raddbgi_string_from_data_section_tag(RADDBGI_DataSectionTag tag);
static String8 raddbg_string_from_arch(RADDBG_Arch arch); static String8 raddbgi_string_from_arch(RADDBGI_Arch arch);
static String8 raddbg_string_from_language(RADDBG_Language language); static String8 raddbgi_string_from_language(RADDBGI_Language language);
static String8 raddbg_string_from_type_kind(RADDBG_TypeKind type_kind); static String8 raddbgi_string_from_type_kind(RADDBGI_TypeKind type_kind);
static String8 raddbg_string_from_member_kind(RADDBG_MemberKind member_kind); static String8 raddbgi_string_from_member_kind(RADDBGI_MemberKind member_kind);
static String8 raddbg_string_from_local_kind(RADDBG_LocalKind local_kind); static String8 raddbgi_string_from_local_kind(RADDBGI_LocalKind local_kind);
//////////////////////////////// ////////////////////////////////
//~ RADDBG Flags Stringize Functions //~ RADDBG Flags Stringize Functions
static void raddbg_stringize_binary_section_flags(Arena *arena, String8List *out, static void raddbgi_stringize_binary_section_flags(Arena *arena, String8List *out,
RADDBG_BinarySectionFlags flags); RADDBGI_BinarySectionFlags flags);
static void raddbg_stringize_type_modifier_flags(Arena *arena, String8List *out, static void raddbgi_stringize_type_modifier_flags(Arena *arena, String8List *out,
RADDBG_TypeModifierFlags flags); RADDBGI_TypeModifierFlags flags);
static void raddbg_stringize_user_defined_type_flags(Arena *arena, String8List *out, static void raddbgi_stringize_user_defined_type_flags(Arena *arena, String8List *out,
RADDBG_UserDefinedTypeFlags flags); RADDBGI_UserDefinedTypeFlags flags);
static void raddbg_stringize_link_flags(Arena *arena, String8List *out, static void raddbgi_stringize_link_flags(Arena *arena, String8List *out,
RADDBG_LinkFlags flags); RADDBGI_LinkFlags flags);
//////////////////////////////// ////////////////////////////////
//~ RADDBG Compound Stringize Functions //~ RADDBG Compound Stringize Functions
static void static void
raddbg_stringize_data_sections(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_data_sections(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
U32 indent_level); U32 indent_level);
static void static void
raddbg_stringize_top_level_info(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_top_level_info(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_TopLevelInfo *tli, U32 indent_level); RADDBGI_TopLevelInfo *tli, U32 indent_level);
static void static void
raddbg_stringize_binary_section(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_binary_section(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_BinarySection *bin_section, U32 indent_level); RADDBGI_BinarySection *bin_section, U32 indent_level);
static void static void
raddbg_stringize_file_path(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_file_path(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_FilePathBundle *bundle, RADDBG_FilePathNode *file_path, RADDBGI_FilePathBundle *bundle, RADDBGI_FilePathNode *file_path,
U32 indent_level); U32 indent_level);
static void static void
raddbg_stringize_source_file(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_source_file(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_SourceFile *source_file, U32 indent_level); RADDBGI_SourceFile *source_file, U32 indent_level);
static void static void
raddbg_stringize_unit(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_unit(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_Unit *unit, U32 indent_level); RADDBGI_Unit *unit, U32 indent_level);
static void static void
raddbg_stringize_type_node(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_type_node(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_TypeNode *type, U32 indent_level); RADDBGI_TypeNode *type, U32 indent_level);
static void static void
raddbg_stringize_udt(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_udt(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_UDTMemberBundle *bundle, RADDBG_UDT *udt, RADDBGI_UDTMemberBundle *bundle, RADDBGI_UDT *udt,
U32 indent_level); U32 indent_level);
static void static void
raddbg_stringize_global_variable(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_global_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_GlobalVariable *global_variable, U32 indent_level); RADDBGI_GlobalVariable *global_variable, U32 indent_level);
static void static void
raddbg_stringize_thread_variable(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_thread_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_ThreadVariable *thread_var, RADDBGI_ThreadVariable *thread_var,
U32 indent_level); U32 indent_level);
static void static void
raddbg_stringize_procedure(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_procedure(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_Procedure *proc, U32 indent_level); RADDBGI_Procedure *proc, U32 indent_level);
static void static void
raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed, raddbgi_stringize_scope(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBG_ScopeBundle *bundle, RADDBG_Scope *scope, U32 indent_level); RADDBGI_ScopeBundle *bundle, RADDBGI_Scope *scope, U32 indent_level);
#endif //RADDBG_STRINGIZE_H #endif //RADDBGI_STRINGIZE_H
+37 -37
View File
@@ -4,24 +4,24 @@
//////////////////////////////// ////////////////////////////////
// Functions // Functions
RADDBG_PROC RADDBG_U64 RADDBGI_PROC RADDBGI_U64
raddbg_hash(RADDBG_U8 *ptr, RADDBG_U64 size){ raddbgi_hash(RADDBGI_U8 *ptr, RADDBGI_U64 size){
RADDBG_U64 result = 5381; RADDBGI_U64 result = 5381;
RADDBG_U8 *opl = ptr + size; RADDBGI_U8 *opl = ptr + size;
for (; ptr < opl; ptr += 1){ for (; ptr < opl; ptr += 1){
result = ((result << 5) + result) + *ptr; result = ((result << 5) + result) + *ptr;
} }
return(result); return(result);
} }
RADDBG_PROC RADDBG_U32 RADDBGI_PROC RADDBGI_U32
raddbg_size_from_basic_type_kind(RADDBG_TypeKind kind){ raddbgi_size_from_basic_type_kind(RADDBGI_TypeKind kind){
RADDBG_U32 result = 0; RADDBGI_U32 result = 0;
switch (kind){ switch (kind){
#define X(N,C) #define X(N,C)
#define XZ(N,C,Z) case C: result = Z; break; #define XZ(N,C,Z) case C: result = Z; break;
#define Y(A,N) #define Y(A,N)
RADDBG_TypeKindXList(X,XZ,Y) RADDBGI_TypeKindXList(X,XZ,Y)
#undef X #undef X
#undef XZ #undef XZ
#undef Y #undef Y
@@ -29,12 +29,12 @@ raddbg_size_from_basic_type_kind(RADDBG_TypeKind kind){
return(result); return(result);
} }
RADDBG_PROC RADDBG_U32 RADDBGI_PROC RADDBGI_U32
raddbg_addr_size_from_arch(RADDBG_Arch arch){ raddbgi_addr_size_from_arch(RADDBGI_Arch arch){
RADDBG_U32 result = 0; RADDBGI_U32 result = 0;
switch (arch){ switch (arch){
#define X(N,C,Z) case C: result = Z; break; #define X(N,C,Z) case C: result = Z; break;
RADDBG_ArchXList(X) RADDBGI_ArchXList(X)
#undef X #undef X
} }
return(result); return(result);
@@ -42,14 +42,14 @@ raddbg_addr_size_from_arch(RADDBG_Arch arch){
//- eval helpers //- eval helpers
RADDBG_PROC RADDBG_EvalConversionKind RADDBGI_PROC RADDBGI_EvalConversionKind
raddbg_eval_conversion_rule(RADDBG_EvalTypeGroup in, RADDBG_EvalTypeGroup out){ raddbgi_eval_conversion_rule(RADDBGI_EvalTypeGroup in, RADDBGI_EvalTypeGroup out){
RADDBG_EvalConversionKind result = 0; RADDBGI_EvalConversionKind result = 0;
switch (in + (out << 8)){ switch (in + (out << 8)){
#define Y(i,o) case ((RADDBG_EvalTypeGroup_##i) + ((RADDBG_EvalTypeGroup_##o) << 8)): #define Y(i,o) case ((RADDBGI_EvalTypeGroup_##i) + ((RADDBGI_EvalTypeGroup_##o) << 8)):
#define Xb(c) #define Xb(c)
#define Xe(c) result = RADDBG_EvalConversionKind_##c; break; #define Xe(c) result = RADDBGI_EvalConversionKind_##c; break;
RADDBG_EvalConversionKindFromTypeGroupPairMap(Y,Xb,Xe) RADDBGI_EvalConversionKindFromTypeGroupPairMap(Y,Xb,Xe)
#undef Xe #undef Xe
#undef Xb #undef Xb
#undef Y #undef Y
@@ -57,38 +57,38 @@ raddbg_eval_conversion_rule(RADDBG_EvalTypeGroup in, RADDBG_EvalTypeGroup out){
return(result); return(result);
} }
RADDBG_PROC RADDBG_U8* RADDBGI_PROC RADDBGI_U8*
raddbg_eval_conversion_message(RADDBG_EvalConversionKind conversion_kind, RADDBG_U64 *lenout){ raddbgi_eval_conversion_message(RADDBGI_EvalConversionKind conversion_kind, RADDBGI_U64 *lenout){
RADDBG_U8 *result = 0; RADDBGI_U8 *result = 0;
switch (conversion_kind){ switch (conversion_kind){
#define X(N,msg) \ #define X(N,msg) \
case RADDBG_EvalConversionKind_##N: result = (RADDBG_U8*)msg; *lenout = sizeof(msg) - 1; break; case RADDBGI_EvalConversionKind_##N: result = (RADDBGI_U8*)msg; *lenout = sizeof(msg) - 1; break;
RADDBG_EvalConversionKindXList(X) RADDBGI_EvalConversionKindXList(X)
#undef X #undef X
} }
return(result); return(result);
} }
RADDBG_PROC RADDBG_S32 RADDBGI_PROC RADDBGI_S32
raddbg_eval_opcode_type_compatible(RADDBG_EvalOp op, RADDBG_EvalTypeGroup group){ raddbgi_eval_opcode_type_compatible(RADDBGI_EvalOp op, RADDBGI_EvalTypeGroup group){
RADDBG_S32 result = 0; RADDBGI_S32 result = 0;
switch (op){ switch (op){
case RADDBG_EvalOp_Neg: case RADDBG_EvalOp_Add: case RADDBG_EvalOp_Sub: case RADDBGI_EvalOp_Neg: case RADDBGI_EvalOp_Add: case RADDBGI_EvalOp_Sub:
case RADDBG_EvalOp_Mul: case RADDBG_EvalOp_Div: case RADDBGI_EvalOp_Mul: case RADDBGI_EvalOp_Div:
case RADDBG_EvalOp_EqEq:case RADDBG_EvalOp_NtEq: case RADDBGI_EvalOp_EqEq:case RADDBGI_EvalOp_NtEq:
case RADDBG_EvalOp_LsEq:case RADDBG_EvalOp_GrEq: case RADDBGI_EvalOp_LsEq:case RADDBGI_EvalOp_GrEq:
case RADDBG_EvalOp_Less:case RADDBG_EvalOp_Grtr: case RADDBGI_EvalOp_Less:case RADDBGI_EvalOp_Grtr:
{ {
if (group != RADDBG_EvalTypeGroup_Other){ if (group != RADDBGI_EvalTypeGroup_Other){
result = 1; result = 1;
} }
}break; }break;
case RADDBG_EvalOp_Mod:case RADDBG_EvalOp_LShift:case RADDBG_EvalOp_RShift: case RADDBGI_EvalOp_Mod:case RADDBGI_EvalOp_LShift:case RADDBGI_EvalOp_RShift:
case RADDBG_EvalOp_BitNot:case RADDBG_EvalOp_BitAnd:case RADDBG_EvalOp_BitXor: case RADDBGI_EvalOp_BitNot:case RADDBGI_EvalOp_BitAnd:case RADDBGI_EvalOp_BitXor:
case RADDBG_EvalOp_BitOr:case RADDBG_EvalOp_LogNot:case RADDBG_EvalOp_LogAnd: case RADDBGI_EvalOp_BitOr:case RADDBGI_EvalOp_LogNot:case RADDBGI_EvalOp_LogAnd:
case RADDBG_EvalOp_LogOr: case RADDBGI_EvalOp_LogOr:
{ {
if (group == RADDBG_EvalTypeGroup_S || group == RADDBG_EvalTypeGroup_U){ if (group == RADDBGI_EvalTypeGroup_S || group == RADDBGI_EvalTypeGroup_U){
result = 1; result = 1;
} }
}break; }break;
+335 -339
View File
@@ -1,60 +1,60 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_FORMAT_H #ifndef RADDBGI_FORMAT_H
#define RADDBG_FORMAT_H #define RADDBGI_FORMAT_H
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
// Overridable procedure decoration // Overridable procedure decoration
#if !defined(RADDBG_PROC) #if !defined(RADDBGI_PROC)
# define RADDBG_PROC static # define RADDBGI_PROC static
#endif #endif
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
// Overridable integer types // Overridable integer types
#if !defined(RADDBG_U8) #if !defined(RADDBGI_U8)
# define RADDBG_U8 RADDBG_U8 # define RADDBGI_U8 RADDBGI_U8
# define RADDBG_U16 RADDBG_U16 # define RADDBGI_U16 RADDBGI_U16
# define RADDBG_U32 RADDBG_U32 # define RADDBGI_U32 RADDBGI_U32
# define RADDBG_U64 RADDBG_U64 # define RADDBGI_U64 RADDBGI_U64
# define RADDBG_S8 RADDBG_S8 # define RADDBGI_S8 RADDBGI_S8
# define RADDBG_S16 RADDBG_S16 # define RADDBGI_S16 RADDBGI_S16
# define RADDBG_S32 RADDBG_S32 # define RADDBGI_S32 RADDBGI_S32
# define RADDBG_S64 RADDBG_S64 # define RADDBGI_S64 RADDBGI_S64
#include <stdint.h> #include <stdint.h>
typedef uint8_t RADDBG_U8; typedef uint8_t RADDBGI_U8;
typedef uint16_t RADDBG_U16; typedef uint16_t RADDBGI_U16;
typedef uint32_t RADDBG_U32; typedef uint32_t RADDBGI_U32;
typedef uint64_t RADDBG_U64; typedef uint64_t RADDBGI_U64;
typedef int8_t RADDBG_S8; typedef int8_t RADDBGI_S8;
typedef int16_t RADDBG_S16; typedef int16_t RADDBGI_S16;
typedef int32_t RADDBG_S32; typedef int32_t RADDBGI_S32;
typedef int64_t RADDBG_S64; typedef int64_t RADDBGI_S64;
#endif #endif
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
// Architecture Constants // Architecture Constants
#define RADDBG_ArchXList(X)\ #define RADDBGI_ArchXList(X)\
X(NULL, 0, 0)\ X(NULL, 0, 0)\
X(X86, 1, 4)\ X(X86, 1, 4)\
X(X64, 2, 8) X(X64, 2, 8)
typedef RADDBG_U32 RADDBG_Arch; typedef RADDBGI_U32 RADDBGI_Arch;
typedef enum RADDBG_ArchEnum{ typedef enum RADDBGI_ArchEnum{
#define X(N,C,Z) RADDBG_Arch_##N = C, #define X(N,C,Z) RADDBGI_Arch_##N = C,
RADDBG_ArchXList(X) RADDBGI_ArchXList(X)
#undef X #undef X
} RADDBG_ArchEnum; } RADDBGI_ArchEnum;
typedef RADDBG_U8 RADDBG_RegisterCode; typedef RADDBGI_U8 RADDBGI_RegisterCode;
// x86 registers // x86 registers
#define RADDBG_RegisterCode_X86_XList(X) \ #define RADDBGI_RegisterCode_X86_XList(X) \
X(nil, 0) \ X(nil, 0) \
X(eax, 1) \ X(eax, 1) \
X(ecx, 2) \ X(ecx, 2) \
@@ -118,14 +118,14 @@ X(ymm6, 59) \
X(ymm7, 60) \ X(ymm7, 60) \
X(COUNT, 61) X(COUNT, 61)
typedef enum RADDBG_RegisterCode_X86_Enum{ typedef enum RADDBGI_RegisterCode_X86_Enum{
#define X(N,C) RADDBG_RegisterCode_X86_##N = C, #define X(N,C) RADDBGI_RegisterCode_X86_##N = C,
RADDBG_RegisterCode_X86_XList(X) RADDBGI_RegisterCode_X86_XList(X)
#undef X #undef X
} RADDBG_RegisterCode_X86_Enum; } RADDBGI_RegisterCode_X86_Enum;
// x64 registers // x64 registers
#define RADDBG_RegisterCode_X64_XList(X) \ #define RADDBGI_RegisterCode_X64_XList(X) \
X(nil, 0) \ X(nil, 0) \
X(rax, 1) \ X(rax, 1) \
X(rcx, 2) \ X(rcx, 2) \
@@ -205,48 +205,48 @@ X(fdp, 75) \
X(mxcsr_mask, 76) \ X(mxcsr_mask, 76) \
X(COUNT, 77) X(COUNT, 77)
typedef enum RADDBG_RegisterCode_X64_Enum{ typedef enum RADDBGI_RegisterCode_X64_Enum{
#define X(N,C) RADDBG_RegisterCode_X64_##N = C, #define X(N,C) RADDBGI_RegisterCode_X64_##N = C,
RADDBG_RegisterCode_X64_XList(X) RADDBGI_RegisterCode_X64_XList(X)
#undef X #undef X
} RADDBG_RegisterCode_X64_Enum; } RADDBGI_RegisterCode_X64_Enum;
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
// Format types // Format types
// "raddbg\0\0" // "raddbg\0\0"
#define RADDBG_MAGIC_CONSTANT 0x0000676264646172 #define RADDBGI_MAGIC_CONSTANT 0x0000676264646172
#define RADDBG_ENCODING_VERSION 1 #define RADDBGI_ENCODING_VERSION 1
#define RADDBG_LanguageXList(X) \ #define RADDBGI_LanguageXList(X) \
X(NULL, 0) \ X(NULL, 0) \
X(C, 1) \ X(C, 1) \
X(CPlusPlus, 2) X(CPlusPlus, 2)
typedef RADDBG_U32 RADDBG_Language; typedef RADDBGI_U32 RADDBGI_Language;
typedef enum RADDBG_LanguageEnum{ typedef enum RADDBGI_LanguageEnum{
#define X(N,C) RADDBG_Language_##N = C, #define X(N,C) RADDBGI_Language_##N = C,
RADDBG_LanguageXList(X) RADDBGI_LanguageXList(X)
#undef X #undef X
} RADDBG_LanguageEnum; } RADDBGI_LanguageEnum;
typedef struct RADDBG_Header{ typedef struct RADDBGI_Header{
// identification // identification
RADDBG_U64 magic; RADDBGI_U64 magic;
RADDBG_U32 encoding_version; RADDBGI_U32 encoding_version;
// data sections // data sections
RADDBG_U32 data_section_off; RADDBGI_U32 data_section_off;
RADDBG_U32 data_section_count; RADDBGI_U32 data_section_count;
} RADDBG_Header; } RADDBGI_Header;
//- data sections //- data sections
#define RADDBG_DataSectionTag_SECONDARY 0x80000000 #define RADDBGI_DataSectionTag_SECONDARY 0x80000000
#define RADDBG_DataSectionTagXList(X,Y) \ #define RADDBGI_DataSectionTagXList(X,Y) \
X(NULL, 0x0000)\ X(NULL, 0x0000)\
X(TopLevelInfo, 0x0001)\ X(TopLevelInfo, 0x0001)\
X(StringData, 0x0002)\ X(StringData, 0x0002)\
@@ -273,131 +273,131 @@ X(LocationBlocks, 0x0016)\
X(LocationData, 0x0017)\ X(LocationData, 0x0017)\
X(NameMaps, 0x0018)\ X(NameMaps, 0x0018)\
Y(PRIMARY_COUNT)\ Y(PRIMARY_COUNT)\
X(SKIP, RADDBG_DataSectionTag_SECONDARY|0x0000)\ X(SKIP, RADDBGI_DataSectionTag_SECONDARY|0x0000)\
X(LineInfoVoffs, RADDBG_DataSectionTag_SECONDARY|0x0001)\ X(LineInfoVoffs, RADDBGI_DataSectionTag_SECONDARY|0x0001)\
X(LineInfoData, RADDBG_DataSectionTag_SECONDARY|0x0002)\ X(LineInfoData, RADDBGI_DataSectionTag_SECONDARY|0x0002)\
X(LineInfoColumns, RADDBG_DataSectionTag_SECONDARY|0x0003)\ X(LineInfoColumns, RADDBGI_DataSectionTag_SECONDARY|0x0003)\
X(LineMapNumbers, RADDBG_DataSectionTag_SECONDARY|0x0004)\ X(LineMapNumbers, RADDBGI_DataSectionTag_SECONDARY|0x0004)\
X(LineMapRanges, RADDBG_DataSectionTag_SECONDARY|0x0005)\ X(LineMapRanges, RADDBGI_DataSectionTag_SECONDARY|0x0005)\
X(LineMapVoffs, RADDBG_DataSectionTag_SECONDARY|0x0006)\ X(LineMapVoffs, RADDBGI_DataSectionTag_SECONDARY|0x0006)\
X(NameMapBuckets, RADDBG_DataSectionTag_SECONDARY|0x0007)\ X(NameMapBuckets, RADDBGI_DataSectionTag_SECONDARY|0x0007)\
X(NameMapNodes, RADDBG_DataSectionTag_SECONDARY|0x0008) X(NameMapNodes, RADDBGI_DataSectionTag_SECONDARY|0x0008)
typedef RADDBG_U32 RADDBG_DataSectionTag; typedef RADDBGI_U32 RADDBGI_DataSectionTag;
typedef enum RADDBG_DataSectionTagEnum{ typedef enum RADDBGI_DataSectionTagEnum{
#define X(N,C) RADDBG_DataSectionTag_##N = C, #define X(N,C) RADDBGI_DataSectionTag_##N = C,
#define Y(N) RADDBG_DataSectionTag_##N, #define Y(N) RADDBGI_DataSectionTag_##N,
RADDBG_DataSectionTagXList(X,Y) RADDBGI_DataSectionTagXList(X,Y)
#undef X #undef X
#undef Y #undef Y
} RADDBG_DataSectionTagEnum; } RADDBGI_DataSectionTagEnum;
#define RADDBG_DataSectionEncodingXList(X) \ #define RADDBGI_DataSectionEncodingXList(X) \
X(Unpacked, 0) X(Unpacked, 0)
typedef RADDBG_U32 RADDBG_DataSectionEncoding; typedef RADDBGI_U32 RADDBGI_DataSectionEncoding;
typedef enum RADDBG_DataSectionEncodingEnum{ typedef enum RADDBGI_DataSectionEncodingEnum{
#define X(N,C) RADDBG_DataSectionEncoding_##N = C, #define X(N,C) RADDBGI_DataSectionEncoding_##N = C,
RADDBG_DataSectionEncodingXList(X) RADDBGI_DataSectionEncodingXList(X)
#undef X #undef X
} RADDBG_DataSectionEncodingEnum; } RADDBGI_DataSectionEncodingEnum;
typedef struct RADDBG_DataSection{ typedef struct RADDBGI_DataSection{
RADDBG_DataSectionTag tag; RADDBGI_DataSectionTag tag;
RADDBG_DataSectionEncoding encoding; RADDBGI_DataSectionEncoding encoding;
RADDBG_U64 off; RADDBGI_U64 off;
RADDBG_U64 encoded_size; RADDBGI_U64 encoded_size;
RADDBG_U64 unpacked_size; RADDBGI_U64 unpacked_size;
} RADDBG_DataSection; } RADDBGI_DataSection;
//- common types //- common types
typedef struct RADDBG_VMapEntry{ typedef struct RADDBGI_VMapEntry{
RADDBG_U64 voff; RADDBGI_U64 voff;
RADDBG_U64 idx; RADDBGI_U64 idx;
} RADDBG_VMapEntry; } RADDBGI_VMapEntry;
//- top level info //- top level info
typedef struct RADDBG_TopLevelInfo{ typedef struct RADDBGI_TopLevelInfo{
RADDBG_Arch architecture; RADDBGI_Arch architecture;
RADDBG_U32 exe_name_string_idx; RADDBGI_U32 exe_name_string_idx;
RADDBG_U64 exe_hash; RADDBGI_U64 exe_hash;
RADDBG_U64 voff_max; RADDBGI_U64 voff_max;
} RADDBG_TopLevelInfo; } RADDBGI_TopLevelInfo;
//- binary sections //- binary sections
typedef RADDBG_U32 RADDBG_BinarySectionFlags; typedef RADDBGI_U32 RADDBGI_BinarySectionFlags;
typedef enum RADDBG_BinarySectionFlagsEnum{ typedef enum RADDBGI_BinarySectionFlagsEnum{
RADDBG_BinarySectionFlag_Read = (1 << 0), RADDBGI_BinarySectionFlag_Read = (1 << 0),
RADDBG_BinarySectionFlag_Write = (1 << 1), RADDBGI_BinarySectionFlag_Write = (1 << 1),
RADDBG_BinarySectionFlag_Execute = (1 << 2) RADDBGI_BinarySectionFlag_Execute = (1 << 2)
} RADDBG_BinarySectionFlagsEnum; } RADDBGI_BinarySectionFlagsEnum;
typedef struct RADDBG_BinarySection{ typedef struct RADDBGI_BinarySection{
RADDBG_U32 name_string_idx; RADDBGI_U32 name_string_idx;
RADDBG_BinarySectionFlags flags; RADDBGI_BinarySectionFlags flags;
RADDBG_U64 voff_first; RADDBGI_U64 voff_first;
RADDBG_U64 voff_opl; RADDBGI_U64 voff_opl;
RADDBG_U64 foff_first; RADDBGI_U64 foff_first;
RADDBG_U64 foff_opl; RADDBGI_U64 foff_opl;
} RADDBG_BinarySection; } RADDBGI_BinarySection;
//- file & file system info //- file & file system info
typedef struct RADDBG_FilePathNode{ typedef struct RADDBGI_FilePathNode{
RADDBG_U32 name_string_idx; RADDBGI_U32 name_string_idx;
RADDBG_U32 parent_path_node; RADDBGI_U32 parent_path_node;
RADDBG_U32 first_child; RADDBGI_U32 first_child;
RADDBG_U32 next_sibling; RADDBGI_U32 next_sibling;
RADDBG_U32 source_file_idx; RADDBGI_U32 source_file_idx;
} RADDBG_FilePathNode; } RADDBGI_FilePathNode;
typedef struct RADDBG_SourceFile{ typedef struct RADDBGI_SourceFile{
RADDBG_U32 file_path_node_idx; RADDBGI_U32 file_path_node_idx;
RADDBG_U32 normal_full_path_string_idx; RADDBGI_U32 normal_full_path_string_idx;
// usage of line map to go from a line number to an array of voffs // usage of line map to go from a line number to an array of voffs
// (line_map_nums * line_number) -> (nil | index) // (line_map_nums * line_number) -> (nil | index)
// (line_map_data * index) -> (range) // (line_map_data * index) -> (range)
// (line_map_voff_data * range) -> (array(voff)) // (line_map_voff_data * range) -> (array(voff))
RADDBG_U32 line_map_count; RADDBGI_U32 line_map_count;
RADDBG_U32 line_map_nums_data_idx; // U32[line_map_count] (sorted - not closed ranges) RADDBGI_U32 line_map_nums_data_idx; // U32[line_map_count] (sorted - not closed ranges)
RADDBG_U32 line_map_range_data_idx; // U32[line_map_count + 1] (pairs form ranges) RADDBGI_U32 line_map_range_data_idx; // U32[line_map_count + 1] (pairs form ranges)
RADDBG_U32 line_map_voff_data_idx; // U64[...] (idx by line_map_range_data) RADDBGI_U32 line_map_voff_data_idx; // U64[...] (idx by line_map_range_data)
} RADDBG_SourceFile; } RADDBGI_SourceFile;
//- units & line info //- units & line info
typedef struct RADDBG_Unit{ typedef struct RADDBGI_Unit{
RADDBG_U32 unit_name_string_idx; RADDBGI_U32 unit_name_string_idx;
RADDBG_U32 compiler_name_string_idx; RADDBGI_U32 compiler_name_string_idx;
RADDBG_U32 source_file_path_node; RADDBGI_U32 source_file_path_node;
RADDBG_U32 object_file_path_node; RADDBGI_U32 object_file_path_node;
RADDBG_U32 archive_file_path_node; RADDBGI_U32 archive_file_path_node;
RADDBG_U32 build_path_node; RADDBGI_U32 build_path_node;
RADDBG_Language language; RADDBGI_Language language;
// usage of line info to go from voff to file & line number: // usage of line info to go from voff to file & line number:
// (line_info_voffs * voff) -> (nil + index) // (line_info_voffs * voff) -> (nil + index)
// (line_info_data * index) -> (RADDBG_Line = (file_idx * line_number)) // (line_info_data * index) -> (RADDBGI_Line = (file_idx * line_number))
RADDBG_U32 line_info_voffs_data_idx; // U64[line_info_count + 1] (sorted ranges) RADDBGI_U32 line_info_voffs_data_idx; // U64[line_info_count + 1] (sorted ranges)
RADDBG_U32 line_info_data_idx; // RADDBG_Line[line_info_count] RADDBGI_U32 line_info_data_idx; // RADDBGI_Line[line_info_count]
RADDBG_U32 line_info_col_data_idx; // RADDBG_Col[line_info_count] RADDBGI_U32 line_info_col_data_idx; // RADDBGI_Col[line_info_count]
RADDBG_U32 line_info_count; RADDBGI_U32 line_info_count;
} RADDBG_Unit; } RADDBGI_Unit;
typedef struct RADDBG_Line{ typedef struct RADDBGI_Line{
RADDBG_U32 file_idx; RADDBGI_U32 file_idx;
RADDBG_U32 line_num; RADDBGI_U32 line_num;
} RADDBG_Line; } RADDBGI_Line;
typedef struct RADDBG_Column{ typedef struct RADDBGI_Column{
RADDBG_U16 col_first; RADDBGI_U16 col_first;
RADDBG_U16 col_opl; RADDBGI_U16 col_opl;
} RADDBG_Column; } RADDBGI_Column;
//- type info //- type info
@@ -405,7 +405,7 @@ typedef struct RADDBG_Column{
// X(name,code) - defines a primary code // X(name,code) - defines a primary code
// XZ(name,code size) - defines a primary code & associates a size // XZ(name,code size) - defines a primary code & associates a size
// Y(alias_name,name) - defines an alias for bookends // Y(alias_name,name) - defines an alias for bookends
#define RADDBG_TypeKindXList(X,XZ,Y)\ #define RADDBGI_TypeKindXList(X,XZ,Y)\
X(NULL, 0x0000) \ X(NULL, 0x0000) \
\ \
XZ(Void, 0x0001, 0) Y(FirstBuiltIn, Void) \ XZ(Void, 0x0001, 0) Y(FirstBuiltIn, Void) \
@@ -466,23 +466,23 @@ Y(LastUserDefined, IncompleteEnum) \
X(Bitfield, 0xF000) \ X(Bitfield, 0xF000) \
X(Variadic, 0xF001) X(Variadic, 0xF001)
typedef RADDBG_U16 RADDBG_TypeKind; typedef RADDBGI_U16 RADDBGI_TypeKind;
typedef enum RADDBG_TypeKindEnum{ typedef enum RADDBGI_TypeKindEnum{
#define X(name,code) RADDBG_TypeKind_##name = code, #define X(name,code) RADDBGI_TypeKind_##name = code,
#define XZ(name,code,size) X(name,code) #define XZ(name,code,size) X(name,code)
#define Y(alias_name,name) RADDBG_TypeKind_##alias_name = RADDBG_TypeKind_##name, #define Y(alias_name,name) RADDBGI_TypeKind_##alias_name = RADDBGI_TypeKind_##name,
RADDBG_TypeKindXList(X,XZ,Y) RADDBGI_TypeKindXList(X,XZ,Y)
#undef X #undef X
#undef XZ #undef XZ
#undef Y #undef Y
} RADDBG_TypeKindEnum; } RADDBGI_TypeKindEnum;
typedef RADDBG_U16 RADDBG_TypeModifierFlags; typedef RADDBGI_U16 RADDBGI_TypeModifierFlags;
enum{ enum{
RADDBG_TypeModifierFlag_Const = (1 << 0), RADDBGI_TypeModifierFlag_Const = (1 << 0),
RADDBG_TypeModifierFlag_Volatile = (1 << 1), RADDBGI_TypeModifierFlag_Volatile = (1 << 1),
}; };
// IMPORTANT NOTE: All type nodes in a valid raddbg are *topologically sorted*. // IMPORTANT NOTE: All type nodes in a valid raddbg are *topologically sorted*.
@@ -493,65 +493,65 @@ enum{
// This restriction does not apply to the members of a type that are // This restriction does not apply to the members of a type that are
// attached through a "UDT" though. // attached through a "UDT" though.
typedef struct RADDBG_TypeNode{ typedef struct RADDBGI_TypeNode{
RADDBG_TypeKind kind; RADDBGI_TypeKind kind;
// when kind is 'Modifier' -> RADDBG_TypeModifierFlags // when kind is 'Modifier' -> RADDBGI_TypeModifierFlags
RADDBG_U16 flags; RADDBGI_U16 flags;
RADDBG_U32 byte_size; RADDBGI_U32 byte_size;
union{ union{
// kind is 'built-in' // kind is 'built-in'
struct{ struct{
RADDBG_U32 name_string_idx; RADDBGI_U32 name_string_idx;
} built_in; } built_in;
// kind is 'constructed' // kind is 'constructed'
struct{ struct{
RADDBG_U32 direct_type_idx; RADDBGI_U32 direct_type_idx;
RADDBG_U32 count; RADDBGI_U32 count;
union{ union{
// when kind is 'Function' or 'Method' // when kind is 'Function' or 'Method'
RADDBG_U32 param_idx_run_first; RADDBGI_U32 param_idx_run_first;
// when kind is 'MemberPtr' // when kind is 'MemberPtr'
RADDBG_U32 owner_type_idx; RADDBGI_U32 owner_type_idx;
}; };
} constructed; } constructed;
// kind is 'user defined' // kind is 'user defined'
struct{ struct{
RADDBG_U32 name_string_idx; RADDBGI_U32 name_string_idx;
RADDBG_U32 direct_type_idx; RADDBGI_U32 direct_type_idx;
RADDBG_U32 udt_idx; RADDBGI_U32 udt_idx;
} user_defined; } user_defined;
// (kind = Bitfield) // (kind = Bitfield)
struct{ struct{
RADDBG_U32 off; RADDBGI_U32 off;
RADDBG_U32 size; RADDBGI_U32 size;
} bitfield; } bitfield;
}; };
} RADDBG_TypeNode; } RADDBGI_TypeNode;
typedef RADDBG_U32 RADDBG_UserDefinedTypeFlags; typedef RADDBGI_U32 RADDBGI_UserDefinedTypeFlags;
enum{ enum{
RADDBG_UserDefinedTypeFlag_EnumMembers = (1 << 0), RADDBGI_UserDefinedTypeFlag_EnumMembers = (1 << 0),
}; };
typedef struct RADDBG_UDT{ typedef struct RADDBGI_UDT{
RADDBG_U32 self_type_idx; RADDBGI_U32 self_type_idx;
RADDBG_UserDefinedTypeFlags flags; RADDBGI_UserDefinedTypeFlags flags;
// when EnumMembers flag is set, indexes into enum "enum_members" instead of "members" // when EnumMembers flag is set, indexes into enum "enum_members" instead of "members"
RADDBG_U32 member_first; RADDBGI_U32 member_first;
RADDBG_U32 member_count; RADDBGI_U32 member_count;
RADDBG_U32 file_idx; RADDBGI_U32 file_idx;
RADDBG_U32 line; RADDBGI_U32 line;
RADDBG_U32 col; RADDBGI_U32 col;
} RADDBG_UDT; } RADDBGI_UDT;
#define RADDBG_MemberKindXList(X) \ #define RADDBGI_MemberKindXList(X) \
X(NULL, 0x0000) \ X(NULL, 0x0000) \
X(DataField, 0x0001) \ X(DataField, 0x0001) \
X(StaticData, 0x0002) \ X(StaticData, 0x0002) \
@@ -563,12 +563,12 @@ X(Base, 0x0201) \
X(VirtualBase, 0x0202) \ X(VirtualBase, 0x0202) \
X(NestedType, 0x0300) X(NestedType, 0x0300)
typedef RADDBG_U16 RADDBG_MemberKind; typedef RADDBGI_U16 RADDBGI_MemberKind;
typedef enum RADDBG_MemberKindEnum{ typedef enum RADDBGI_MemberKindEnum{
#define X(N,C) RADDBG_MemberKind_##N = C, #define X(N,C) RADDBGI_MemberKind_##N = C,
RADDBG_MemberKindXList(X) RADDBGI_MemberKindXList(X)
#undef X #undef X
} RADDBG_MemberKindEnum; } RADDBGI_MemberKindEnum;
// TODO(allen): need a way to equip methods and some virtual methods // TODO(allen): need a way to equip methods and some virtual methods
// with procedure symbol information. I'm thinking a seperate data // with procedure symbol information. I'm thinking a seperate data
@@ -578,141 +578,141 @@ typedef enum RADDBG_MemberKindEnum{
// like 'associate_method_to_proc' that can be used *after* both the // 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 // method and proc are known, rather than one that forces us to know
// the association when constructing the member data. // the association when constructing the member data.
typedef struct RADDBG_Member{ typedef struct RADDBGI_Member{
RADDBG_MemberKind kind; RADDBGI_MemberKind kind;
RADDBG_U16 __unused__; RADDBGI_U16 __unused__;
RADDBG_U32 name_string_idx; RADDBGI_U32 name_string_idx;
RADDBG_U32 type_idx; RADDBGI_U32 type_idx;
RADDBG_U32 off; RADDBGI_U32 off;
} RADDBG_Member; } RADDBGI_Member;
typedef struct RADDBG_EnumMember{ typedef struct RADDBGI_EnumMember{
RADDBG_U32 name_string_idx; RADDBGI_U32 name_string_idx;
RADDBG_U32 __unused__; RADDBGI_U32 __unused__;
RADDBG_U64 val; RADDBGI_U64 val;
} RADDBG_EnumMember; } RADDBGI_EnumMember;
//- symbol info //- symbol info
typedef RADDBG_U32 RADDBG_LinkFlags; typedef RADDBGI_U32 RADDBGI_LinkFlags;
enum{ enum{
RADDBG_LinkFlag_External = (1 << 0), RADDBGI_LinkFlag_External = (1 << 0),
// NOTE: Scope flags are mutually exclusive. // NOTE: Scope flags are mutually exclusive.
// A symbol is either global scoped, type scoped, or procedure scoped. // A symbol is either global scoped, type scoped, or procedure scoped.
RADDBG_LinkFlag_TypeScoped = (1 << 1), RADDBGI_LinkFlag_TypeScoped = (1 << 1),
RADDBG_LinkFlag_ProcScoped = (1 << 2), RADDBGI_LinkFlag_ProcScoped = (1 << 2),
}; };
typedef struct RADDBG_GlobalVariable{ typedef struct RADDBGI_GlobalVariable{
RADDBG_U32 name_string_idx; RADDBGI_U32 name_string_idx;
// NOTE: "global variables" can be scoped in *any* way. The scope flags here refer to // 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 // *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 // 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, // word. In the namespace sense of the word, they can be scoped globally, by type,
// or by procedure. // or by procedure.
RADDBG_LinkFlags link_flags; RADDBGI_LinkFlags link_flags;
RADDBG_U64 voff; RADDBGI_U64 voff;
RADDBG_U32 type_idx; RADDBGI_U32 type_idx;
// container_idx: UDT for "TypeScoped", Procedure for "ProcScoped" // container_idx: UDT for "TypeScoped", Procedure for "ProcScoped"
RADDBG_U32 container_idx; RADDBGI_U32 container_idx;
} RADDBG_GlobalVariable; } RADDBGI_GlobalVariable;
typedef struct RADDBG_ThreadVariable{ typedef struct RADDBGI_ThreadVariable{
RADDBG_U32 name_string_idx; RADDBGI_U32 name_string_idx;
// NOTE: See the note in GlobalVariable regarding scoping. The same concept applies here. // NOTE: See the note in GlobalVariable regarding scoping. The same concept applies here.
RADDBG_LinkFlags link_flags; RADDBGI_LinkFlags link_flags;
RADDBG_U32 tls_off; RADDBGI_U32 tls_off;
RADDBG_U32 type_idx; RADDBGI_U32 type_idx;
// container_idx: UDT for "TypeScoped", Procedure for "ProcScoped" // container_idx: UDT for "TypeScoped", Procedure for "ProcScoped"
RADDBG_U32 container_idx; RADDBGI_U32 container_idx;
} RADDBG_ThreadVariable; } RADDBGI_ThreadVariable;
typedef struct RADDBG_Procedure{ typedef struct RADDBGI_Procedure{
RADDBG_U32 name_string_idx; RADDBGI_U32 name_string_idx;
RADDBG_U32 link_name_string_idx; RADDBGI_U32 link_name_string_idx;
// NOTE: See the note in GlobalVariable regarding scoping. The same concept applies here. // NOTE: See the note in GlobalVariable regarding scoping. The same concept applies here.
RADDBG_LinkFlags link_flags; RADDBGI_LinkFlags link_flags;
RADDBG_U32 type_idx; RADDBGI_U32 type_idx;
RADDBG_U32 root_scope_idx; RADDBGI_U32 root_scope_idx;
// container_idx: UDT for "TypeScoped", Procedure for "ProcScoped" // container_idx: UDT for "TypeScoped", Procedure for "ProcScoped"
RADDBG_U32 container_idx; RADDBGI_U32 container_idx;
} RADDBG_Procedure; } RADDBGI_Procedure;
typedef struct RADDBG_Scope{ typedef struct RADDBGI_Scope{
RADDBG_U32 proc_idx; RADDBGI_U32 proc_idx;
RADDBG_U32 parent_scope_idx; RADDBGI_U32 parent_scope_idx;
RADDBG_U32 first_child_scope_idx; RADDBGI_U32 first_child_scope_idx;
RADDBG_U32 next_sibling_scope_idx; RADDBGI_U32 next_sibling_scope_idx;
RADDBG_U32 voff_range_first; RADDBGI_U32 voff_range_first;
RADDBG_U32 voff_range_opl; RADDBGI_U32 voff_range_opl;
// indexes into "locals" // indexes into "locals"
RADDBG_U32 local_first; RADDBGI_U32 local_first;
RADDBG_U32 local_count; RADDBGI_U32 local_count;
RADDBG_U32 static_local_idx_run_first; RADDBGI_U32 static_local_idx_run_first;
RADDBG_U32 static_local_count; RADDBGI_U32 static_local_count;
// TODO(allen): attach less common scope-relevant info // TODO(allen): attach less common scope-relevant info
} RADDBG_Scope; } RADDBGI_Scope;
typedef RADDBG_U32 RADDBG_LocalKind; typedef RADDBGI_U32 RADDBGI_LocalKind;
typedef enum{ typedef enum{
RADDBG_LocalKind_NULL, RADDBGI_LocalKind_NULL,
RADDBG_LocalKind_Parameter, RADDBGI_LocalKind_Parameter,
RADDBG_LocalKind_Variable, RADDBGI_LocalKind_Variable,
RADDBG_LocalKind_COUNT RADDBGI_LocalKind_COUNT
} RADDBG_LocalKindEnum; } RADDBGI_LocalKindEnum;
typedef struct RADDBG_Local{ typedef struct RADDBGI_Local{
RADDBG_LocalKind kind; RADDBGI_LocalKind kind;
RADDBG_U32 name_string_idx; RADDBGI_U32 name_string_idx;
RADDBG_U64 type_idx; RADDBGI_U64 type_idx;
// indexes into "location_blocks" // indexes into "location_blocks"
RADDBG_U32 location_first; RADDBGI_U32 location_first;
RADDBG_U32 location_opl; RADDBGI_U32 location_opl;
} RADDBG_Local; } RADDBGI_Local;
typedef struct RADDBG_LocationBlock{ typedef struct RADDBGI_LocationBlock{
RADDBG_U32 scope_off_first; RADDBGI_U32 scope_off_first;
RADDBG_U32 scope_off_opl; RADDBGI_U32 scope_off_opl;
RADDBG_U32 location_data_off; RADDBGI_U32 location_data_off;
} RADDBG_LocationBlock; } RADDBGI_LocationBlock;
typedef RADDBG_U8 RADDBG_LocationKind; typedef RADDBGI_U8 RADDBGI_LocationKind;
typedef enum{ typedef enum{
RADDBG_LocationKind_NULL, RADDBGI_LocationKind_NULL,
RADDBG_LocationKind_AddrBytecodeStream, RADDBGI_LocationKind_AddrBytecodeStream,
RADDBG_LocationKind_ValBytecodeStream, RADDBGI_LocationKind_ValBytecodeStream,
RADDBG_LocationKind_AddrRegisterPlusU16, RADDBGI_LocationKind_AddrRegisterPlusU16,
RADDBG_LocationKind_AddrAddrRegisterPlusU16, RADDBGI_LocationKind_AddrAddrRegisterPlusU16,
RADDBG_LocationKind_ValRegister, RADDBGI_LocationKind_ValRegister,
RADDBG_LocationKind_COUNT RADDBGI_LocationKind_COUNT
} RADDBG_LocationKindEnum; } RADDBGI_LocationKindEnum;
typedef struct RADDBG_LocationBytecodeStream{ typedef struct RADDBGI_LocationBytecodeStream{
RADDBG_LocationKind kind; RADDBGI_LocationKind kind;
// [... 0] null terminated byte sequence RADDBG_EvalBytecodeStream // [... 0] null terminated byte sequence RADDBGI_EvalBytecodeStream
} RADDBG_LocationBytecodeStream; } RADDBGI_LocationBytecodeStream;
typedef struct RADDBG_LocationRegisterPlusU16{ typedef struct RADDBGI_LocationRegisterPlusU16{
RADDBG_LocationKind kind; RADDBGI_LocationKind kind;
RADDBG_RegisterCode register_code; RADDBGI_RegisterCode register_code;
RADDBG_U16 offset; RADDBGI_U16 offset;
} RADDBG_LocationRegisterPlusU16; } RADDBGI_LocationRegisterPlusU16;
typedef struct RADDBG_LocationRegister{ typedef struct RADDBGI_LocationRegister{
RADDBG_LocationKind kind; RADDBGI_LocationKind kind;
RADDBG_RegisterCode register_code; RADDBGI_RegisterCode register_code;
} RADDBG_LocationRegister; } RADDBGI_LocationRegister;
//- name map types //- name map types
#define RADDBG_NameMapXList(X)\ #define RADDBGI_NameMapXList(X)\
X(NULL, 0)\ X(NULL, 0)\
X(GlobalVariables, 1)\ X(GlobalVariables, 1)\
X(ThreadVariables, 2)\ X(ThreadVariables, 2)\
@@ -721,42 +721,42 @@ X(Types, 4)\
X(LinkNameProcedures, 5)\ X(LinkNameProcedures, 5)\
X(NormalSourcePaths, 6) X(NormalSourcePaths, 6)
typedef RADDBG_U32 RADDBG_NameMapKind; typedef RADDBGI_U32 RADDBGI_NameMapKind;
typedef enum RADDBG_NameMapKindEnum{ typedef enum RADDBGI_NameMapKindEnum{
#define X(N,C) RADDBG_NameMapKind_##N = C, #define X(N,C) RADDBGI_NameMapKind_##N = C,
RADDBG_NameMapXList(X) RADDBGI_NameMapXList(X)
#undef X #undef X
RADDBG_NameMapKind_COUNT RADDBGI_NameMapKind_COUNT
} RADDBG_NameMapKindEnum; } RADDBGI_NameMapKindEnum;
// TODO(allen): documentation here for the hashing and probing strategy for this table // TODO(allen): documentation here for the hashing and probing strategy for this table
typedef struct RADDBG_NameMap{ typedef struct RADDBGI_NameMap{
RADDBG_NameMapKind kind; RADDBGI_NameMapKind kind;
RADDBG_U32 bucket_data_idx; RADDBGI_U32 bucket_data_idx;
RADDBG_U32 node_data_idx; RADDBGI_U32 node_data_idx;
} RADDBG_NameMap; } RADDBGI_NameMap;
typedef struct RADDBG_NameMapBucket{ typedef struct RADDBGI_NameMapBucket{
RADDBG_U32 first_node; RADDBGI_U32 first_node;
RADDBG_U32 node_count; RADDBGI_U32 node_count;
} RADDBG_NameMapBucket; } RADDBGI_NameMapBucket;
typedef struct RADDBG_NameMapNode{ typedef struct RADDBGI_NameMapNode{
RADDBG_U32 string_idx; RADDBGI_U32 string_idx;
RADDBG_U32 match_count; RADDBGI_U32 match_count;
// NOTE: if (match_count == 1) then this is the index of the matching item // 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 // if (match_count > 1) then this is the first for an index run of all the matches
RADDBG_U32 match_idx_or_idx_run_first; RADDBGI_U32 match_idx_or_idx_run_first;
} RADDBG_NameMapNode; } RADDBGI_NameMapNode;
//////////////////////////////// ////////////////////////////////
// Eval Bytecode // Eval Bytecode
// (Name, decodeN, popN, pushN) // (Name, decodeN, popN, pushN)
#define RADDBG_EvalOpXList(X)\ #define RADDBGI_EvalOpXList(X)\
X(Stop, 0, 0, 0)\ X(Stop, 0, 0, 0)\
X(Noop, 0, 0, 0)\ X(Noop, 0, 0, 0)\
X(Cond, 1, 1, 0)\ X(Cond, 1, 1, 0)\
@@ -803,7 +803,7 @@ X(Pop, 0, 1, 0)\
X(Insert, 1, 0, 0) X(Insert, 1, 0, 0)
// (Name) // (Name)
#define RADDBG_EvalTypeGroupXList(X)\ #define RADDBGI_EvalTypeGroupXList(X)\
X(Other)\ X(Other)\
X(U)\ X(U)\
X(S)\ X(S)\
@@ -811,7 +811,7 @@ X(F32)\
X(F64) X(F64)
// (Name, error-message) // (Name, error-message)
#define RADDBG_EvalConversionKindXList(X)\ #define RADDBGI_EvalConversionKindXList(X)\
X(Noop, "")\ X(Noop, "")\
X(Legal, "")\ X(Legal, "")\
X(OtherToOther, "cannot convert between these types")\ X(OtherToOther, "cannot convert between these types")\
@@ -819,7 +819,7 @@ X(ToOther, "cannot convert to this type")\
X(FromOther, "cannot convert this type") X(FromOther, "cannot convert this type")
// Xb(EvalTypeGroup) Y(TypeKind) Xe(EvalTypeGroup) // Xb(EvalTypeGroup) Y(TypeKind) Xe(EvalTypeGroup)
#define RADDBG_EvalTypeGroupFromKindMap(Y,Xb,Xe)\ #define RADDBGI_EvalTypeGroupFromKindMap(Y,Xb,Xe)\
\ \
Xb(U) Y(U8) Y(U16) Y(U32) Y(U64) Y(Bool) Y(Ptr) Y(Enum)\ Xb(U) Y(U8) Y(U16) Y(U32) Y(U64) Y(Bool) Y(Ptr) Y(Enum)\
Xe(U)\ Xe(U)\
@@ -834,7 +834,7 @@ Xb(F64) Y(F64)\
Xe(F64) Xe(F64)
// Xb(EvalConversionKind) Y(EvalTypeGroup, EvalTypeGroup) Xe(EvalConversionKind) // Xb(EvalConversionKind) Y(EvalTypeGroup, EvalTypeGroup) Xe(EvalConversionKind)
#define RADDBG_EvalConversionKindFromTypeGroupPairMap(Y,Xb,Xe)\ #define RADDBGI_EvalConversionKindFromTypeGroupPairMap(Y,Xb,Xe)\
\ \
Xb(Noop) Y(U, U) Y(S, S) Y(F32, F32) Y(F64, F64) Y(U, S) Y(S, U)\ Xb(Noop) Y(U, U) Y(S, S) Y(F32, F32) Y(F64, F64) Y(U, S) Y(S, U)\
Xe(Noop)\ Xe(Noop)\
@@ -855,69 +855,65 @@ Xb(FromOther) Y(Other, U) Y(Other, S) Y(Other, F32) Y(Other, F64)\
Xe(FromOther) Xe(FromOther)
// eval interpretation macros // eval interpretation macros
#define RADDBG_EncodeRegReadParam(reg,bytesize,bytepos) ((reg)|((bytesize)<<8)|((bytepos)<<16)) #define RADDBGI_EncodeRegReadParam(reg,bytesize,bytepos) ((reg)|((bytesize)<<8)|((bytepos)<<16))
// eval enums // eval enums
typedef RADDBG_U8 RADDBG_EvalOp; typedef RADDBGI_U8 RADDBGI_EvalOp;
typedef enum RADDBG_EvalOpEnum{ typedef enum RADDBGI_EvalOpEnum{
#define X(N,dec,pop,push) RADDBG_EvalOp_##N, #define X(N,dec,pop,push) RADDBGI_EvalOp_##N,
RADDBG_EvalOpXList(X) RADDBGI_EvalOpXList(X)
#undef X #undef X
RADDBG_EvalOp_COUNT RADDBGI_EvalOp_COUNT
} RADDBG_EvalOpEnum; } RADDBGI_EvalOpEnum;
typedef RADDBG_U8 RADDBG_EvalTypeGroup; typedef RADDBGI_U8 RADDBGI_EvalTypeGroup;
typedef enum RADDBG_EvalTypeGroupEnum{ typedef enum RADDBGI_EvalTypeGroupEnum{
#define X(N) RADDBG_EvalTypeGroup_##N, #define X(N) RADDBGI_EvalTypeGroup_##N,
RADDBG_EvalTypeGroupXList(X) RADDBGI_EvalTypeGroupXList(X)
#undef X #undef X
RADDBG_EvalTypeGroup_COUNT, RADDBGI_EvalTypeGroup_COUNT,
} RADDBG_EvalTypeGroupEnum; } RADDBGI_EvalTypeGroupEnum;
typedef RADDBG_U8 RADDBG_EvalConversionKind; typedef RADDBGI_U8 RADDBGI_EvalConversionKind;
typedef enum RADDBG_EvalConversionKindEnum{ typedef enum RADDBGI_EvalConversionKindEnum{
#define X(N,msg) RADDBG_EvalConversionKind_##N, #define X(N,msg) RADDBGI_EvalConversionKind_##N,
RADDBG_EvalConversionKindXList(X) RADDBGI_EvalConversionKindXList(X)
#undef X #undef X
RADDBG_EvalConversionKind_COUNT, RADDBGI_EvalConversionKind_COUNT,
} RADDBG_EvalConversionKindEnum; } RADDBGI_EvalConversionKindEnum;
//- eval data tables //- eval data tables
#define RADDBG_EVAL_CTRLBITS(decodeN,popN,pushN) ((decodeN) | ((popN) << 4) | ((pushN) << 6)) #define RADDBGI_EVAL_CTRLBITS(decodeN,popN,pushN) ((decodeN) | ((popN) << 4) | ((pushN) << 6))
#define RADDBG_DECODEN_FROM_CTRLBITS(ctrlbits) ((ctrlbits) & 0xf) #define RADDBGI_DECODEN_FROM_CTRLBITS(ctrlbits) ((ctrlbits) & 0xf)
#define RADDBG_POPN_FROM_CTRLBITS(ctrlbits) (((ctrlbits) >> 4) & 0x3) #define RADDBGI_POPN_FROM_CTRLBITS(ctrlbits) (((ctrlbits) >> 4) & 0x3)
#define RADDBG_PUSHN_FROM_CTRLBITS(ctrlbits) (((ctrlbits) >> 6) & 0x3) #define RADDBGI_PUSHN_FROM_CTRLBITS(ctrlbits) (((ctrlbits) >> 6) & 0x3)
static RADDBG_U8 raddbg_eval_opcode_ctrlbits[] = { static RADDBGI_U8 raddbgi_eval_opcode_ctrlbits[] = {
#define X(Name, decodeN, popN, pushN) RADDBG_EVAL_CTRLBITS(decodeN,popN,pushN), #define X(Name, decodeN, popN, pushN) RADDBGI_EVAL_CTRLBITS(decodeN,popN,pushN),
RADDBG_EvalOpXList(X) RADDBGI_EvalOpXList(X)
#undef X #undef X
}; };
//////////////////////////////// ////////////////////////////////
// Functions // Functions
RADDBG_PROC RADDBG_U64 raddbg_hash(RADDBG_U8 *ptr, RADDBG_U64 size); RADDBGI_PROC RADDBGI_U64 raddbgi_hash(RADDBGI_U8 *ptr, RADDBGI_U64 size);
RADDBG_PROC RADDBG_U32 raddbg_size_from_basic_type_kind(RADDBG_TypeKind kind); RADDBGI_PROC RADDBGI_U32 raddbgi_size_from_basic_type_kind(RADDBGI_TypeKind kind);
RADDBG_PROC RADDBG_U32 raddbg_addr_size_from_arch(RADDBG_Arch arch); RADDBGI_PROC RADDBGI_U32 raddbgi_addr_size_from_arch(RADDBGI_Arch arch);
//- eval helpers //- eval helpers
RADDBG_PROC RADDBG_EvalConversionKind
raddbg_eval_conversion_rule(RADDBG_EvalTypeGroup in, RADDBG_EvalTypeGroup out);
RADDBG_PROC RADDBG_U8* RADDBGI_PROC RADDBGI_EvalConversionKind raddbgi_eval_conversion_rule(RADDBGI_EvalTypeGroup in, RADDBGI_EvalTypeGroup out);
raddbg_eval_conversion_message(RADDBG_EvalConversionKind conversion_kind, RADDBG_U64 *lennout); 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);
RADDBG_PROC RADDBG_S32 #endif // RADDBGI_FORMAT_H
raddbg_eval_opcode_type_compatible(RADDBG_EvalOp op, RADDBG_EvalTypeGroup group);
#endif // RADDBG_FORMAT_H
+234 -234
View File
@@ -4,105 +4,105 @@
//////////////////////////////// ////////////////////////////////
//~ RADDBG Parse API //~ RADDBG Parse API
RADDBG_PROC RADDBG_ParseStatus RADDBGI_PROC RADDBGI_ParseStatus
raddbg_parse(RADDBG_U8 *data, RADDBG_U64 size, RADDBG_Parsed *out){ raddbgi_parse(RADDBGI_U8 *data, RADDBGI_U64 size, RADDBGI_Parsed *out){
RADDBG_ParseStatus result = RADDBG_ParseStatus_Good; RADDBGI_ParseStatus result = RADDBGI_ParseStatus_Good;
// out header // out header
RADDBG_Header *hdr = 0; RADDBGI_Header *hdr = 0;
{ {
if (sizeof(*hdr) <= size){ if (sizeof(*hdr) <= size){
hdr = (RADDBG_Header*)data; hdr = (RADDBGI_Header*)data;
} }
// (errors) // (errors)
if (hdr == 0 || hdr->magic != RADDBG_MAGIC_CONSTANT){ if (hdr == 0 || hdr->magic != RADDBGI_MAGIC_CONSTANT){
hdr = 0; hdr = 0;
result = RADDBG_ParseStatus_HeaderDoesNotMatch; result = RADDBGI_ParseStatus_HeaderDoesNotMatch;
} }
if (hdr != 0 && hdr->encoding_version != 1){ if (hdr != 0 && hdr->encoding_version != 1){
hdr = 0; hdr = 0;
result = RADDBG_ParseStatus_UnsupportedVersionNumber; result = RADDBGI_ParseStatus_UnsupportedVersionNumber;
} }
} }
// out data sections // out data sections
RADDBG_DataSection *dsecs = 0; RADDBGI_DataSection *dsecs = 0;
RADDBG_U32 dsec_count = 0; RADDBGI_U32 dsec_count = 0;
if (hdr != 0){ if (hdr != 0){
RADDBG_U64 opl = (RADDBG_U64)hdr->data_section_off + (RADDBG_U64)hdr->data_section_count*sizeof(*dsecs); RADDBGI_U64 opl = (RADDBGI_U64)hdr->data_section_off + (RADDBGI_U64)hdr->data_section_count*sizeof(*dsecs);
if (opl <= size){ if (opl <= size){
dsecs = (RADDBG_DataSection*)(data + hdr->data_section_off); dsecs = (RADDBGI_DataSection*)(data + hdr->data_section_off);
dsec_count = hdr->data_section_count; dsec_count = hdr->data_section_count;
} }
// (errors) // (errors)
if (dsecs == 0){ if (dsecs == 0){
result = RADDBG_ParseStatus_InvalidDataSecionLayout; result = RADDBGI_ParseStatus_InvalidDataSecionLayout;
} }
} }
// extract primary data section indexes // extract primary data section indexes
RADDBG_U32 dsec_idx[RADDBG_DataSectionTag_PRIMARY_COUNT] = {0}; RADDBGI_U32 dsec_idx[RADDBGI_DataSectionTag_PRIMARY_COUNT] = {0};
if (result == RADDBG_ParseStatus_Good){ if (result == RADDBGI_ParseStatus_Good){
RADDBG_DataSection *sec_ptr = dsecs; RADDBGI_DataSection *sec_ptr = dsecs;
for (RADDBG_U32 i = 0; i < dsec_count; i += 1, sec_ptr += 1){ for (RADDBGI_U32 i = 0; i < dsec_count; i += 1, sec_ptr += 1){
if (sec_ptr->tag < RADDBG_DataSectionTag_PRIMARY_COUNT){ if (sec_ptr->tag < RADDBGI_DataSectionTag_PRIMARY_COUNT){
dsec_idx[sec_ptr->tag] = i; dsec_idx[sec_ptr->tag] = i;
} }
} }
} }
// fill out data block (part 1) // fill out data block (part 1)
if (result == RADDBG_ParseStatus_Good){ if (result == RADDBGI_ParseStatus_Good){
out->raw_data = data; out->raw_data = data;
out->raw_data_size = size; out->raw_data_size = size;
out->dsecs = dsecs; out->dsecs = dsecs;
out->dsec_count = dsec_count; out->dsec_count = dsec_count;
for (RADDBG_U32 i = 0; i < RADDBG_DataSectionTag_PRIMARY_COUNT; i += 1){ for (RADDBGI_U32 i = 0; i < RADDBGI_DataSectionTag_PRIMARY_COUNT; i += 1){
out->dsec_idx[i] = dsec_idx[i]; out->dsec_idx[i] = dsec_idx[i];
} }
} }
// out string table // out string table
RADDBG_U8 *string_data = 0; RADDBGI_U8 *string_data = 0;
RADDBG_U64 string_opl = 0; RADDBGI_U64 string_opl = 0;
RADDBG_U32 *string_offs = 0; RADDBGI_U32 *string_offs = 0;
RADDBG_U64 string_count = 0; RADDBGI_U64 string_count = 0;
if (result == RADDBG_ParseStatus_Good){ if (result == RADDBGI_ParseStatus_Good){
raddbg_parse__extract_primary(out, string_data, &string_opl, raddbgi_parse__extract_primary(out, string_data, &string_opl,
RADDBG_DataSectionTag_StringData); RADDBGI_DataSectionTag_StringData);
RADDBG_U64 table_entry_count = 0; RADDBGI_U64 table_entry_count = 0;
raddbg_parse__extract_primary(out, string_offs, &table_entry_count, raddbgi_parse__extract_primary(out, string_offs, &table_entry_count,
RADDBG_DataSectionTag_StringTable); RADDBGI_DataSectionTag_StringTable);
if (table_entry_count > 0){ if (table_entry_count > 0){
string_count = table_entry_count - 1; string_count = table_entry_count - 1;
} }
// (errors) // (errors)
if (string_data == 0){ if (string_data == 0){
result = RADDBG_ParseStatus_MissingStringDataSection; result = RADDBGI_ParseStatus_MissingStringDataSection;
} }
else if (string_offs == 0){ else if (string_offs == 0){
result = RADDBG_ParseStatus_MissingStringTableSection; result = RADDBGI_ParseStatus_MissingStringTableSection;
} }
} }
// out index runs // out index runs
RADDBG_U32 *idx_run_data = 0; RADDBGI_U32 *idx_run_data = 0;
RADDBG_U64 idx_run_count = 0; RADDBGI_U64 idx_run_count = 0;
if (result == RADDBG_ParseStatus_Good){ if (result == RADDBGI_ParseStatus_Good){
raddbg_parse__extract_primary(out, idx_run_data, &idx_run_count, raddbgi_parse__extract_primary(out, idx_run_data, &idx_run_count,
RADDBG_DataSectionTag_IndexRuns); RADDBGI_DataSectionTag_IndexRuns);
// (errors) // (errors)
if (idx_run_data == 0){ if (idx_run_data == 0){
result = RADDBG_ParseStatus_MissingIndexRunSection; result = RADDBGI_ParseStatus_MissingIndexRunSection;
} }
} }
if (result == RADDBG_ParseStatus_Good){ if (result == RADDBGI_ParseStatus_Good){
// fill out primary data structures (part 2) // fill out primary data structures (part 2)
out->string_data = string_data; out->string_data = string_data;
out->string_offs = string_offs; out->string_offs = string_offs;
@@ -112,81 +112,81 @@ raddbg_parse(RADDBG_U8 *data, RADDBG_U64 size, RADDBG_Parsed *out){
out->idx_run_count = idx_run_count; out->idx_run_count = idx_run_count;
{ {
RADDBG_TopLevelInfo *tli = 0; RADDBGI_TopLevelInfo *tli = 0;
RADDBG_U64 dummy = 0; RADDBGI_U64 dummy = 0;
raddbg_parse__extract_primary(out, tli, &dummy, RADDBG_DataSectionTag_TopLevelInfo); raddbgi_parse__extract_primary(out, tli, &dummy, RADDBGI_DataSectionTag_TopLevelInfo);
if (dummy != 1){ if (dummy != 1){
tli = 0; tli = 0;
} }
out->top_level_info = tli; out->top_level_info = tli;
} }
raddbg_parse__extract_primary(out, out->binary_sections, &out->binary_sections_count, raddbgi_parse__extract_primary(out, out->binary_sections, &out->binary_sections_count,
RADDBG_DataSectionTag_BinarySections); RADDBGI_DataSectionTag_BinarySections);
raddbg_parse__extract_primary(out, out->file_paths, &out->file_paths_count, raddbgi_parse__extract_primary(out, out->file_paths, &out->file_paths_count,
RADDBG_DataSectionTag_FilePathNodes); RADDBGI_DataSectionTag_FilePathNodes);
raddbg_parse__extract_primary(out, out->source_files, &out->source_files_count, raddbgi_parse__extract_primary(out, out->source_files, &out->source_files_count,
RADDBG_DataSectionTag_SourceFiles); RADDBGI_DataSectionTag_SourceFiles);
raddbg_parse__extract_primary(out, out->units, &out->units_count, raddbgi_parse__extract_primary(out, out->units, &out->units_count,
RADDBG_DataSectionTag_Units); RADDBGI_DataSectionTag_Units);
raddbg_parse__extract_primary(out, out->unit_vmap, &out->unit_vmap_count, raddbgi_parse__extract_primary(out, out->unit_vmap, &out->unit_vmap_count,
RADDBG_DataSectionTag_UnitVmap); RADDBGI_DataSectionTag_UnitVmap);
raddbg_parse__extract_primary(out, out->unit_vmap, &out->unit_vmap_count, raddbgi_parse__extract_primary(out, out->unit_vmap, &out->unit_vmap_count,
RADDBG_DataSectionTag_UnitVmap); RADDBGI_DataSectionTag_UnitVmap);
raddbg_parse__extract_primary(out, out->type_nodes, &out->type_nodes_count, raddbgi_parse__extract_primary(out, out->type_nodes, &out->type_nodes_count,
RADDBG_DataSectionTag_TypeNodes); RADDBGI_DataSectionTag_TypeNodes);
raddbg_parse__extract_primary(out, out->udts, &out->udts_count, raddbgi_parse__extract_primary(out, out->udts, &out->udts_count,
RADDBG_DataSectionTag_UDTs); RADDBGI_DataSectionTag_UDTs);
raddbg_parse__extract_primary(out, out->members, &out->members_count, raddbgi_parse__extract_primary(out, out->members, &out->members_count,
RADDBG_DataSectionTag_Members); RADDBGI_DataSectionTag_Members);
raddbg_parse__extract_primary(out, out->enum_members, &out->enum_members_count, raddbgi_parse__extract_primary(out, out->enum_members, &out->enum_members_count,
RADDBG_DataSectionTag_EnumMembers); RADDBGI_DataSectionTag_EnumMembers);
raddbg_parse__extract_primary(out, out->global_variables, &out->global_variables_count, raddbgi_parse__extract_primary(out, out->global_variables, &out->global_variables_count,
RADDBG_DataSectionTag_GlobalVariables); RADDBGI_DataSectionTag_GlobalVariables);
raddbg_parse__extract_primary(out, out->global_vmap, &out->global_vmap_count, raddbgi_parse__extract_primary(out, out->global_vmap, &out->global_vmap_count,
RADDBG_DataSectionTag_GlobalVmap); RADDBGI_DataSectionTag_GlobalVmap);
raddbg_parse__extract_primary(out, out->thread_variables, &out->thread_variables_count, raddbgi_parse__extract_primary(out, out->thread_variables, &out->thread_variables_count,
RADDBG_DataSectionTag_ThreadVariables); RADDBGI_DataSectionTag_ThreadVariables);
raddbg_parse__extract_primary(out, out->procedures, &out->procedures_count, raddbgi_parse__extract_primary(out, out->procedures, &out->procedures_count,
RADDBG_DataSectionTag_Procedures); RADDBGI_DataSectionTag_Procedures);
raddbg_parse__extract_primary(out, out->scopes, &out->scopes_count, raddbgi_parse__extract_primary(out, out->scopes, &out->scopes_count,
RADDBG_DataSectionTag_Scopes); RADDBGI_DataSectionTag_Scopes);
raddbg_parse__extract_primary(out, out->scope_voffs, &out->scope_voffs_count, raddbgi_parse__extract_primary(out, out->scope_voffs, &out->scope_voffs_count,
RADDBG_DataSectionTag_ScopeVoffData); RADDBGI_DataSectionTag_ScopeVoffData);
raddbg_parse__extract_primary(out, out->scope_vmap, &out->scope_vmap_count, raddbgi_parse__extract_primary(out, out->scope_vmap, &out->scope_vmap_count,
RADDBG_DataSectionTag_ScopeVmap); RADDBGI_DataSectionTag_ScopeVmap);
raddbg_parse__extract_primary(out, out->locals, &out->locals_count, raddbgi_parse__extract_primary(out, out->locals, &out->locals_count,
RADDBG_DataSectionTag_Locals); RADDBGI_DataSectionTag_Locals);
raddbg_parse__extract_primary(out, out->location_blocks, &out->location_blocks_count, raddbgi_parse__extract_primary(out, out->location_blocks, &out->location_blocks_count,
RADDBG_DataSectionTag_LocationBlocks); RADDBGI_DataSectionTag_LocationBlocks);
raddbg_parse__extract_primary(out, out->location_data, &out->location_data_size, raddbgi_parse__extract_primary(out, out->location_data, &out->location_data_size,
RADDBG_DataSectionTag_LocationData); RADDBGI_DataSectionTag_LocationData);
{ {
raddbg_parse__extract_primary(out, out->name_maps, &out->name_maps_count, raddbgi_parse__extract_primary(out, out->name_maps, &out->name_maps_count,
RADDBG_DataSectionTag_NameMaps); RADDBGI_DataSectionTag_NameMaps);
RADDBG_NameMap *name_map_ptr = out->name_maps; RADDBGI_NameMap *name_map_ptr = out->name_maps;
RADDBG_NameMap *name_map_opl = out->name_maps + out->name_maps_count; RADDBGI_NameMap *name_map_opl = out->name_maps + out->name_maps_count;
for (; name_map_ptr < name_map_opl; name_map_ptr += 1){ for (; name_map_ptr < name_map_opl; name_map_ptr += 1){
if (out->name_maps_by_kind[name_map_ptr->kind] == 0){ if (out->name_maps_by_kind[name_map_ptr->kind] == 0){
out->name_maps_by_kind[name_map_ptr->kind] = name_map_ptr; out->name_maps_by_kind[name_map_ptr->kind] = name_map_ptr;
@@ -194,25 +194,25 @@ raddbg_parse(RADDBG_U8 *data, RADDBG_U64 size, RADDBG_Parsed *out){
} }
} }
#if !defined(RADDBG_DISABLE_NILS) #if !defined(RADDBGI_DISABLE_NILS)
if(out->binary_sections == 0) { out->binary_sections = &raddbg_binary_section_nil; out->binary_sections_count = 1; } 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 = &raddbg_file_path_node_nil; out->file_paths_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 = &raddbg_source_file_nil; out->source_files_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 = &raddbg_unit_nil; out->units_count = 1; } if(out->units == 0) { out->units = &raddbgi_unit_nil; out->units_count = 1; }
if(out->unit_vmap == 0) { out->unit_vmap = &raddbg_vmap_entry_nil; out->unit_vmap_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 = &raddbg_type_node_nil; out->type_nodes_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 = &raddbg_udt_nil; out->udts_count = 1; } if(out->udts == 0) { out->udts = &raddbgi_udt_nil; out->udts_count = 1; }
if(out->members == 0) { out->members = &raddbg_member_nil; out->members_count = 1; } if(out->members == 0) { out->members = &raddbgi_member_nil; out->members_count = 1; }
if(out->enum_members == 0) { out->enum_members = &raddbg_enum_member_nil; out->enum_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 = &raddbg_global_variable_nil; out->global_variables_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 = &raddbg_vmap_entry_nil; out->global_vmap_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 = &raddbg_thread_variable_nil; out->thread_variables_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 = &raddbg_procedure_nil; out->procedures_count = 1; } if(out->procedures == 0) { out->procedures = &raddbgi_procedure_nil; out->procedures_count = 1; }
if(out->scopes == 0) { out->scopes = &raddbg_scope_nil; out->scopes_count = 1; } if(out->scopes == 0) { out->scopes = &raddbgi_scope_nil; out->scopes_count = 1; }
if(out->scope_voffs == 0) { out->scope_voffs = &raddbg_voff_nil; out->scope_voffs_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 = &raddbg_vmap_entry_nil; out->scope_vmap_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 = &raddbg_local_nil; out->locals_count = 1; } if(out->locals == 0) { out->locals = &raddbgi_local_nil; out->locals_count = 1; }
if(out->location_blocks == 0) { out->location_blocks = &raddbg_location_block_nil; out->location_blocks_count = 1; } if(out->location_blocks == 0) { out->location_blocks = &raddbgi_location_block_nil; out->location_blocks_count = 1; }
#endif #endif
} }
@@ -220,15 +220,15 @@ raddbg_parse(RADDBG_U8 *data, RADDBG_U64 size, RADDBG_Parsed *out){
return(result); return(result);
} }
RADDBG_PROC RADDBG_U8* RADDBGI_PROC RADDBGI_U8*
raddbg_string_from_idx(RADDBG_Parsed *parsed, RADDBG_U32 idx, RADDBG_U64 *len_out){ raddbgi_string_from_idx(RADDBGI_Parsed *parsed, RADDBGI_U32 idx, RADDBGI_U64 *len_out){
RADDBG_U8 *result = 0; RADDBGI_U8 *result = 0;
RADDBG_U64 len_result = 0; RADDBGI_U64 len_result = 0;
if (idx < parsed->string_count){ if (idx < parsed->string_count){
RADDBG_U32 off_raw = parsed->string_offs[idx]; RADDBGI_U32 off_raw = parsed->string_offs[idx];
RADDBG_U32 opl_raw = parsed->string_offs[idx + 1]; RADDBGI_U32 opl_raw = parsed->string_offs[idx + 1];
RADDBG_U32 opl = raddbg_parse__min(opl_raw, parsed->string_data_size); RADDBGI_U32 opl = raddbgi_parse__min(opl_raw, parsed->string_data_size);
RADDBG_U32 off = raddbg_parse__min(off_raw, opl); RADDBGI_U32 off = raddbgi_parse__min(off_raw, opl);
result = parsed->string_data + off; result = parsed->string_data + off;
len_result = opl - off; len_result = opl - off;
} }
@@ -236,15 +236,15 @@ raddbg_string_from_idx(RADDBG_Parsed *parsed, RADDBG_U32 idx, RADDBG_U64 *len_ou
return(result); return(result);
} }
RADDBG_PROC RADDBG_U32* RADDBGI_PROC RADDBGI_U32*
raddbg_idx_run_from_first_count(RADDBG_Parsed *parsed, raddbgi_idx_run_from_first_count(RADDBGI_Parsed *parsed,
RADDBG_U32 raw_first, RADDBG_U32 raw_count, RADDBGI_U32 raw_first, RADDBGI_U32 raw_count,
RADDBG_U32 *n_out){ RADDBGI_U32 *n_out){
RADDBG_U32 raw_opl = raw_first + raw_count; RADDBGI_U32 raw_opl = raw_first + raw_count;
RADDBG_U32 opl = raddbg_parse__min(raw_opl, parsed->idx_run_count); RADDBGI_U32 opl = raddbgi_parse__min(raw_opl, parsed->idx_run_count);
RADDBG_U32 first = raddbg_parse__min(raw_first, opl); RADDBGI_U32 first = raddbgi_parse__min(raw_first, opl);
RADDBG_U32 *result = 0; RADDBGI_U32 *result = 0;
if (first < parsed->idx_run_count){ if (first < parsed->idx_run_count){
result = parsed->idx_run_data + first; result = parsed->idx_run_data + first;
} }
@@ -254,29 +254,29 @@ raddbg_idx_run_from_first_count(RADDBG_Parsed *parsed,
//- line info //- line info
RADDBG_PROC void RADDBGI_PROC void
raddbg_line_info_from_unit(RADDBG_Parsed *p, RADDBG_Unit *unit, RADDBG_ParsedLineInfo *out){ raddbgi_line_info_from_unit(RADDBGI_Parsed *p, RADDBGI_Unit *unit, RADDBGI_ParsedLineInfo *out){
RADDBG_U64 line_info_voff_count = 0; RADDBGI_U64 line_info_voff_count = 0;
RADDBG_U64 *voffs = (RADDBG_U64*) RADDBGI_U64 *voffs = (RADDBGI_U64*)
raddbg_data_from_dsec(p, unit->line_info_voffs_data_idx, sizeof(RADDBG_U64), raddbgi_data_from_dsec(p, unit->line_info_voffs_data_idx, sizeof(RADDBGI_U64),
RADDBG_DataSectionTag_LineInfoVoffs, RADDBGI_DataSectionTag_LineInfoVoffs,
&line_info_voff_count); &line_info_voff_count);
RADDBG_U64 line_info_count_raw = 0; RADDBGI_U64 line_info_count_raw = 0;
RADDBG_Line *lines = (RADDBG_Line*) RADDBGI_Line *lines = (RADDBGI_Line*)
raddbg_data_from_dsec(p, unit->line_info_data_idx, sizeof(RADDBG_Line), raddbgi_data_from_dsec(p, unit->line_info_data_idx, sizeof(RADDBGI_Line),
RADDBG_DataSectionTag_LineInfoData, RADDBGI_DataSectionTag_LineInfoData,
&line_info_count_raw); &line_info_count_raw);
RADDBG_U64 column_info_count_raw = 0; RADDBGI_U64 column_info_count_raw = 0;
RADDBG_Column *cols = (RADDBG_Column*) RADDBGI_Column *cols = (RADDBGI_Column*)
raddbg_data_from_dsec(p, unit->line_info_col_data_idx, sizeof(RADDBG_Column), raddbgi_data_from_dsec(p, unit->line_info_col_data_idx, sizeof(RADDBGI_Column),
RADDBG_DataSectionTag_LineInfoColumns, RADDBGI_DataSectionTag_LineInfoColumns,
&column_info_count_raw); &column_info_count_raw);
RADDBG_U32 line_info_count_a = (line_info_voff_count > 0)?line_info_voff_count - 1:0; RADDBGI_U32 line_info_count_a = (line_info_voff_count > 0)?line_info_voff_count - 1:0;
RADDBG_U32 line_info_count = raddbg_parse__min(line_info_count_a, line_info_count_raw); RADDBGI_U32 line_info_count = raddbgi_parse__min(line_info_count_a, line_info_count_raw);
RADDBG_U32 column_info_count = raddbg_parse__min(column_info_count_raw, line_info_count); RADDBGI_U32 column_info_count = raddbgi_parse__min(column_info_count_raw, line_info_count);
out->voffs = voffs; out->voffs = voffs;
out->lines = lines; out->lines = lines;
@@ -285,17 +285,17 @@ raddbg_line_info_from_unit(RADDBG_Parsed *p, RADDBG_Unit *unit, RADDBG_ParsedLin
out->col_count = column_info_count; out->col_count = column_info_count;
} }
RADDBG_PROC RADDBG_U64 RADDBGI_PROC RADDBGI_U64
raddbg_line_info_idx_from_voff(RADDBG_ParsedLineInfo *line_info, RADDBG_U64 voff) raddbgi_line_info_idx_from_voff(RADDBGI_ParsedLineInfo *line_info, RADDBGI_U64 voff)
{ {
RADDBG_U64 result = 0; RADDBGI_U64 result = 0;
if (line_info->count > 0 && line_info->voffs[0] <= voff && voff < line_info->voffs[line_info->count - 1]){ 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) // assuming: (i < j) -> (vmap[i].voff < vmap[j].voff)
// find i such that: (vmap[i].voff <= voff) && (voff < vmap[i + 1].voff) // find i such that: (vmap[i].voff <= voff) && (voff < vmap[i + 1].voff)
RADDBG_U32 first = 0; RADDBGI_U32 first = 0;
RADDBG_U32 opl = line_info->count; RADDBGI_U32 opl = line_info->count;
for (;;){ for (;;){
RADDBG_U32 mid = (first + opl)/2; RADDBGI_U32 mid = (first + opl)/2;
if (line_info->voffs[mid] < voff){ if (line_info->voffs[mid] < voff){
first = mid; first = mid;
} }
@@ -310,35 +310,35 @@ raddbg_line_info_idx_from_voff(RADDBG_ParsedLineInfo *line_info, RADDBG_U64 voff
break; break;
} }
} }
result = (RADDBG_U64)first; result = (RADDBGI_U64)first;
} }
return(result); return(result);
} }
RADDBG_PROC void RADDBGI_PROC void
raddbg_line_map_from_source_file(RADDBG_Parsed *p, RADDBG_SourceFile *srcfile, raddbgi_line_map_from_source_file(RADDBGI_Parsed *p, RADDBGI_SourceFile *srcfile,
RADDBG_ParsedLineMap *out){ RADDBGI_ParsedLineMap *out){
RADDBG_U64 num_count = 0; RADDBGI_U64 num_count = 0;
RADDBG_U32 *nums = (RADDBG_U32*) RADDBGI_U32 *nums = (RADDBGI_U32*)
raddbg_data_from_dsec(p, srcfile->line_map_nums_data_idx, sizeof(RADDBG_U32), raddbgi_data_from_dsec(p, srcfile->line_map_nums_data_idx, sizeof(RADDBGI_U32),
RADDBG_DataSectionTag_LineMapNumbers, RADDBGI_DataSectionTag_LineMapNumbers,
&num_count); &num_count);
RADDBG_U64 range_count = 0; RADDBGI_U64 range_count = 0;
RADDBG_U32 *ranges = (RADDBG_U32*) RADDBGI_U32 *ranges = (RADDBGI_U32*)
raddbg_data_from_dsec(p, srcfile->line_map_range_data_idx, sizeof(RADDBG_U32), raddbgi_data_from_dsec(p, srcfile->line_map_range_data_idx, sizeof(RADDBGI_U32),
RADDBG_DataSectionTag_LineMapRanges, RADDBGI_DataSectionTag_LineMapRanges,
&range_count); &range_count);
RADDBG_U64 voff_count = 0; RADDBGI_U64 voff_count = 0;
RADDBG_U64 *voffs = (RADDBG_U64*) RADDBGI_U64 *voffs = (RADDBGI_U64*)
raddbg_data_from_dsec(p, srcfile->line_map_voff_data_idx, sizeof(RADDBG_U64), raddbgi_data_from_dsec(p, srcfile->line_map_voff_data_idx, sizeof(RADDBGI_U64),
RADDBG_DataSectionTag_LineMapVoffs, RADDBGI_DataSectionTag_LineMapVoffs,
&voff_count); &voff_count);
RADDBG_U32 count_a = (range_count > 0)?(range_count - 1):0; RADDBGI_U32 count_a = (range_count > 0)?(range_count - 1):0;
RADDBG_U32 count_b = raddbg_parse__min(count_a, num_count); RADDBGI_U32 count_b = raddbgi_parse__min(count_a, num_count);
RADDBG_U32 count = raddbg_parse__min(count_b, srcfile->line_map_count); RADDBGI_U32 count = raddbgi_parse__min(count_b, srcfile->line_map_count);
out->nums = nums; out->nums = nums;
out->ranges = ranges; out->ranges = ranges;
@@ -347,20 +347,20 @@ raddbg_line_map_from_source_file(RADDBG_Parsed *p, RADDBG_SourceFile *srcfile,
out->voff_count = voff_count; out->voff_count = voff_count;
} }
RADDBG_PROC RADDBG_U64* RADDBGI_PROC RADDBGI_U64*
raddbg_line_voffs_from_num(RADDBG_ParsedLineMap *map, RADDBG_U32 linenum, RADDBG_U32 *n_out){ raddbgi_line_voffs_from_num(RADDBGI_ParsedLineMap *map, RADDBGI_U32 linenum, RADDBGI_U32 *n_out){
RADDBG_U64 *result = 0; RADDBGI_U64 *result = 0;
*n_out = 0; *n_out = 0;
RADDBG_U32 closest_i = 0; RADDBGI_U32 closest_i = 0;
if (map->count > 0 && map->nums[0] <= linenum){ if (map->count > 0 && map->nums[0] <= linenum){
// assuming: (i < j) -> (nums[i] < nums[j]) // assuming: (i < j) -> (nums[i] < nums[j])
// find i such that: (nums[i] <= linenum) && (linenum < nums[i + 1]) // find i such that: (nums[i] <= linenum) && (linenum < nums[i + 1])
RADDBG_U32 *nums = map->nums; RADDBGI_U32 *nums = map->nums;
RADDBG_U32 first = 0; RADDBGI_U32 first = 0;
RADDBG_U32 opl = map->count; RADDBGI_U32 opl = map->count;
for (;;){ for (;;){
RADDBG_U32 mid = (first + opl)/2; RADDBGI_U32 mid = (first + opl)/2;
if (nums[mid] < linenum){ if (nums[mid] < linenum){
first = mid; first = mid;
} }
@@ -386,8 +386,8 @@ raddbg_line_voffs_from_num(RADDBG_ParsedLineMap *map, RADDBG_U32 linenum, RADDBG
// set result if possible // set result if possible
if (closest_i < map->count){ if (closest_i < map->count){
RADDBG_U32 first = map->ranges[closest_i]; RADDBGI_U32 first = map->ranges[closest_i];
RADDBG_U32 opl = map->ranges[closest_i + 1]; RADDBGI_U32 opl = map->ranges[closest_i + 1];
if (opl < map->voff_count){ if (opl < map->voff_count){
result = map->voffs + first; result = map->voffs + first;
*n_out = opl - first; *n_out = opl - first;
@@ -400,16 +400,16 @@ raddbg_line_voffs_from_num(RADDBG_ParsedLineMap *map, RADDBG_U32 linenum, RADDBG
//- vmaps //- vmaps
RADDBG_PROC RADDBG_U64 RADDBGI_PROC RADDBGI_U64
raddbg_vmap_idx_from_voff(RADDBG_VMapEntry *vmap, RADDBG_U32 vmap_count, RADDBG_U64 voff){ raddbgi_vmap_idx_from_voff(RADDBGI_VMapEntry *vmap, RADDBGI_U32 vmap_count, RADDBGI_U64 voff){
RADDBG_U64 result = 0; RADDBGI_U64 result = 0;
if (vmap_count > 0 && vmap[0].voff <= voff && voff < vmap[vmap_count - 1].voff){ if (vmap_count > 0 && vmap[0].voff <= voff && voff < vmap[vmap_count - 1].voff){
// assuming: (i < j) -> (vmap[i].voff < vmap[j].voff) // assuming: (i < j) -> (vmap[i].voff < vmap[j].voff)
// find i such that: (vmap[i].voff <= voff) && (voff < vmap[i + 1].voff) // find i such that: (vmap[i].voff <= voff) && (voff < vmap[i + 1].voff)
RADDBG_U32 first = 0; RADDBGI_U32 first = 0;
RADDBG_U32 opl = vmap_count; RADDBGI_U32 opl = vmap_count;
for (;;){ for (;;){
RADDBG_U32 mid = (first + opl)/2; RADDBGI_U32 mid = (first + opl)/2;
if (vmap[mid].voff < voff){ if (vmap[mid].voff < voff){
first = mid; first = mid;
} }
@@ -424,60 +424,60 @@ raddbg_vmap_idx_from_voff(RADDBG_VMapEntry *vmap, RADDBG_U32 vmap_count, RADDBG_
break; break;
} }
} }
result = (RADDBG_U64)vmap[first].idx; result = (RADDBGI_U64)vmap[first].idx;
} }
return(result); return(result);
} }
//- name maps //- name maps
RADDBG_PROC RADDBG_NameMap* RADDBGI_PROC RADDBGI_NameMap*
raddbg_name_map_from_kind(RADDBG_Parsed *p, RADDBG_NameMapKind kind){ raddbgi_name_map_from_kind(RADDBGI_Parsed *p, RADDBGI_NameMapKind kind){
RADDBG_NameMap *result = 0; RADDBGI_NameMap *result = 0;
if (0 < kind && kind < RADDBG_NameMapKind_COUNT){ if (0 < kind && kind < RADDBGI_NameMapKind_COUNT){
result = p->name_maps_by_kind[kind]; result = p->name_maps_by_kind[kind];
} }
return(result); return(result);
} }
RADDBG_PROC void RADDBGI_PROC void
raddbg_name_map_parse(RADDBG_Parsed *p, RADDBG_NameMap *mapptr, RADDBG_ParsedNameMap *out){ raddbgi_name_map_parse(RADDBGI_Parsed *p, RADDBGI_NameMap *mapptr, RADDBGI_ParsedNameMap *out){
out->buckets = 0; out->buckets = 0;
out->bucket_count = 0; out->bucket_count = 0;
if (mapptr != 0){ if (mapptr != 0){
out->buckets = (RADDBG_NameMapBucket*) out->buckets = (RADDBGI_NameMapBucket*)
raddbg_data_from_dsec(p, mapptr->bucket_data_idx, sizeof(RADDBG_NameMapBucket), raddbgi_data_from_dsec(p, mapptr->bucket_data_idx, sizeof(RADDBGI_NameMapBucket),
RADDBG_DataSectionTag_NameMapBuckets, &out->bucket_count); RADDBGI_DataSectionTag_NameMapBuckets, &out->bucket_count);
out->nodes = (RADDBG_NameMapNode*) out->nodes = (RADDBGI_NameMapNode*)
raddbg_data_from_dsec(p, mapptr->node_data_idx, sizeof(RADDBG_NameMapNode), raddbgi_data_from_dsec(p, mapptr->node_data_idx, sizeof(RADDBGI_NameMapNode),
RADDBG_DataSectionTag_NameMapNodes, &out->node_count); RADDBGI_DataSectionTag_NameMapNodes, &out->node_count);
} }
} }
RADDBG_PROC RADDBG_NameMapNode* RADDBGI_PROC RADDBGI_NameMapNode*
raddbg_name_map_lookup(RADDBG_Parsed *p, RADDBG_ParsedNameMap *map, raddbgi_name_map_lookup(RADDBGI_Parsed *p, RADDBGI_ParsedNameMap *map,
RADDBG_U8 *str, RADDBG_U64 len){ RADDBGI_U8 *str, RADDBGI_U64 len){
RADDBG_NameMapNode *result = 0; RADDBGI_NameMapNode *result = 0;
if (map->bucket_count > 0){ if (map->bucket_count > 0){
RADDBG_NameMapBucket *buckets = map->buckets; RADDBGI_NameMapBucket *buckets = map->buckets;
RADDBG_U64 bucket_count = map->bucket_count; RADDBGI_U64 bucket_count = map->bucket_count;
RADDBG_U64 hash = raddbg_hash(str, len); RADDBGI_U64 hash = raddbgi_hash(str, len);
RADDBG_U64 bucket_index = hash%bucket_count; RADDBGI_U64 bucket_index = hash%bucket_count;
RADDBG_NameMapBucket *bucket = map->buckets + bucket_index; RADDBGI_NameMapBucket *bucket = map->buckets + bucket_index;
RADDBG_NameMapNode *node = map->nodes + bucket->first_node; RADDBGI_NameMapNode *node = map->nodes + bucket->first_node;
RADDBG_NameMapNode *node_opl = node + bucket->node_count; RADDBGI_NameMapNode *node_opl = node + bucket->node_count;
for (;node < node_opl; node += 1){ for (;node < node_opl; node += 1){
// extract a string from this node // extract a string from this node
RADDBG_U64 nlen = 0; RADDBGI_U64 nlen = 0;
RADDBG_U8 *nstr = raddbg_string_from_idx(p, node->string_idx, &nlen); RADDBGI_U8 *nstr = raddbgi_string_from_idx(p, node->string_idx, &nlen);
// compare this to the needle string // compare this to the needle string
RADDBG_S32 match = 0; RADDBGI_S32 match = 0;
if (nlen == len){ if (nlen == len){
RADDBG_U8 *a = str; RADDBGI_U8 *a = str;
RADDBG_U8 *aopl = str + len; RADDBGI_U8 *aopl = str + len;
RADDBG_U8 *b = nstr; RADDBGI_U8 *b = nstr;
for (;a < aopl && *a == *b; a += 1, b += 1); for (;a < aopl && *a == *b; a += 1, b += 1);
match = (a == aopl); match = (a == aopl);
} }
@@ -493,10 +493,10 @@ raddbg_name_map_lookup(RADDBG_Parsed *p, RADDBG_ParsedNameMap *map,
return(result); return(result);
} }
RADDBG_PROC RADDBG_U32* RADDBGI_PROC RADDBGI_U32*
raddbg_matches_from_map_node(RADDBG_Parsed *p, RADDBG_NameMapNode *node, raddbgi_matches_from_map_node(RADDBGI_Parsed *p, RADDBGI_NameMapNode *node,
RADDBG_U32 *n_out){ RADDBGI_U32 *n_out){
RADDBG_U32 *result = 0; RADDBGI_U32 *result = 0;
*n_out = 0; *n_out = 0;
if (node != 0){ if (node != 0){
if (node->match_count == 1){ if (node->match_count == 1){
@@ -504,8 +504,8 @@ raddbg_matches_from_map_node(RADDBG_Parsed *p, RADDBG_NameMapNode *node,
*n_out = 1; *n_out = 1;
} }
else{ else{
result = raddbg_idx_run_from_first_count(p, node->match_idx_or_idx_run_first, result = raddbgi_idx_run_from_first_count(p, node->match_idx_or_idx_run_first,
node->match_count, n_out); node->match_count, n_out);
} }
} }
return(result); return(result);
@@ -513,14 +513,14 @@ raddbg_matches_from_map_node(RADDBG_Parsed *p, RADDBG_NameMapNode *node,
//- common helpers //- common helpers
RADDBG_PROC RADDBG_U64 RADDBGI_PROC RADDBGI_U64
raddbg_first_voff_from_proc(RADDBG_Parsed *p, RADDBG_U32 proc_id){ raddbgi_first_voff_from_proc(RADDBGI_Parsed *p, RADDBGI_U32 proc_id){
RADDBG_U64 result = 0; RADDBGI_U64 result = 0;
if (0 < proc_id && proc_id < p->procedures_count){ if (0 < proc_id && proc_id < p->procedures_count){
RADDBG_Procedure *proc = p->procedures + proc_id; RADDBGI_Procedure *proc = p->procedures + proc_id;
RADDBG_U32 scope_id = proc->root_scope_idx; RADDBGI_U32 scope_id = proc->root_scope_idx;
if (0 < scope_id && scope_id < p->scopes_count){ if (0 < scope_id && scope_id < p->scopes_count){
RADDBG_Scope *scope = p->scopes + scope_id; RADDBGI_Scope *scope = p->scopes + scope_id;
if (scope->voff_range_first < scope->voff_range_opl && if (scope->voff_range_first < scope->voff_range_opl &&
scope->voff_range_first < p->scope_voffs_count){ scope->voff_range_first < p->scope_voffs_count){
result = p->scope_voffs[scope->voff_range_first]; result = p->scope_voffs[scope->voff_range_first];
@@ -533,19 +533,19 @@ raddbg_first_voff_from_proc(RADDBG_Parsed *p, RADDBG_U32 proc_id){
//////////////////////////////// ////////////////////////////////
//~ RADDBG Parsing Helpers //~ RADDBG Parsing Helpers
RADDBG_PROC void* RADDBGI_PROC void*
raddbg_data_from_dsec(RADDBG_Parsed *parsed, RADDBG_U32 idx, RADDBG_U32 item_size, raddbgi_data_from_dsec(RADDBGI_Parsed *parsed, RADDBGI_U32 idx, RADDBGI_U32 item_size,
RADDBG_DataSectionTag expected_tag, RADDBGI_DataSectionTag expected_tag,
RADDBG_U64 *count_out){ RADDBGI_U64 *count_out){
void *result = 0; void *result = 0;
RADDBG_U32 count_result = 0; RADDBGI_U32 count_result = 0;
// TODO(allen): need a version of this that works with encodings other than "Unpacked" // TODO(allen): need a version of this that works with encodings other than "Unpacked"
if (0 < idx && idx < parsed->dsec_count){ if (0 < idx && idx < parsed->dsec_count){
RADDBG_DataSection *ds = parsed->dsecs + idx; RADDBGI_DataSection *ds = parsed->dsecs + idx;
if (ds->tag == expected_tag){ if (ds->tag == expected_tag){
RADDBG_U64 opl = ds->off + ds->encoded_size; RADDBGI_U64 opl = ds->off + ds->encoded_size;
if (opl <= parsed->raw_data_size){ if (opl <= parsed->raw_data_size){
count_result = ds->encoded_size/item_size; count_result = ds->encoded_size/item_size;
result = (parsed->raw_data + ds->off); result = (parsed->raw_data + ds->off);
+139 -139
View File
@@ -1,105 +1,105 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_PARSE_H #ifndef RADDBGI_PARSE_H
#define RADDBG_PARSE_H #define RADDBGI_PARSE_H
//////////////////////////////// ////////////////////////////////
//~ RADDBG Parsing Helpers //~ RADDBG Parsing Helpers
typedef struct RADDBG_Parsed{ typedef struct RADDBGI_Parsed{
// raw data & data sections (part 1) // raw data & data sections (part 1)
RADDBG_U8 *raw_data; RADDBGI_U8 *raw_data;
RADDBG_U64 raw_data_size; RADDBGI_U64 raw_data_size;
RADDBG_DataSection *dsecs; RADDBGI_DataSection *dsecs;
RADDBG_U64 dsec_count; RADDBGI_U64 dsec_count;
RADDBG_U32 dsec_idx[RADDBG_DataSectionTag_PRIMARY_COUNT]; RADDBGI_U32 dsec_idx[RADDBGI_DataSectionTag_PRIMARY_COUNT];
// primary data structures (part 2) // primary data structures (part 2)
// handled by helper APIs // handled by helper APIs
RADDBG_U8* string_data; RADDBGI_U8* string_data;
RADDBG_U64 string_data_size; RADDBGI_U64 string_data_size;
RADDBG_U32* string_offs; RADDBGI_U32* string_offs;
RADDBG_U64 string_count; RADDBGI_U64 string_count;
RADDBG_U32* idx_run_data; RADDBGI_U32* idx_run_data;
RADDBG_U32 idx_run_count; RADDBGI_U32 idx_run_count;
// directly readable by users // directly readable by users
// (any of these may be empty and null even in a successful parse) // (any of these may be empty and null even in a successful parse)
RADDBG_TopLevelInfo* top_level_info; RADDBGI_TopLevelInfo* top_level_info;
RADDBG_BinarySection* binary_sections; RADDBGI_BinarySection* binary_sections;
RADDBG_U64 binary_sections_count; RADDBGI_U64 binary_sections_count;
RADDBG_FilePathNode* file_paths; RADDBGI_FilePathNode* file_paths;
RADDBG_U64 file_paths_count; RADDBGI_U64 file_paths_count;
RADDBG_SourceFile* source_files; RADDBGI_SourceFile* source_files;
RADDBG_U64 source_files_count; RADDBGI_U64 source_files_count;
RADDBG_Unit* units; RADDBGI_Unit* units;
RADDBG_U64 units_count; RADDBGI_U64 units_count;
RADDBG_VMapEntry* unit_vmap; RADDBGI_VMapEntry* unit_vmap;
RADDBG_U64 unit_vmap_count; RADDBGI_U64 unit_vmap_count;
RADDBG_TypeNode* type_nodes; RADDBGI_TypeNode* type_nodes;
RADDBG_U64 type_nodes_count; RADDBGI_U64 type_nodes_count;
RADDBG_UDT* udts; RADDBGI_UDT* udts;
RADDBG_U64 udts_count; RADDBGI_U64 udts_count;
RADDBG_Member* members; RADDBGI_Member* members;
RADDBG_U64 members_count; RADDBGI_U64 members_count;
RADDBG_EnumMember* enum_members; RADDBGI_EnumMember* enum_members;
RADDBG_U64 enum_members_count; RADDBGI_U64 enum_members_count;
RADDBG_GlobalVariable* global_variables; RADDBGI_GlobalVariable* global_variables;
RADDBG_U64 global_variables_count; RADDBGI_U64 global_variables_count;
RADDBG_VMapEntry* global_vmap; RADDBGI_VMapEntry* global_vmap;
RADDBG_U64 global_vmap_count; RADDBGI_U64 global_vmap_count;
RADDBG_ThreadVariable* thread_variables; RADDBGI_ThreadVariable* thread_variables;
RADDBG_U64 thread_variables_count; RADDBGI_U64 thread_variables_count;
RADDBG_Procedure* procedures; RADDBGI_Procedure* procedures;
RADDBG_U64 procedures_count; RADDBGI_U64 procedures_count;
RADDBG_Scope* scopes; RADDBGI_Scope* scopes;
RADDBG_U64 scopes_count; RADDBGI_U64 scopes_count;
RADDBG_U64* scope_voffs; RADDBGI_U64* scope_voffs;
RADDBG_U64 scope_voffs_count; RADDBGI_U64 scope_voffs_count;
RADDBG_VMapEntry* scope_vmap; RADDBGI_VMapEntry* scope_vmap;
RADDBG_U64 scope_vmap_count; RADDBGI_U64 scope_vmap_count;
RADDBG_Local* locals; RADDBGI_Local* locals;
RADDBG_U64 locals_count; RADDBGI_U64 locals_count;
RADDBG_LocationBlock* location_blocks; RADDBGI_LocationBlock* location_blocks;
RADDBG_U64 location_blocks_count; RADDBGI_U64 location_blocks_count;
RADDBG_U8* location_data; RADDBGI_U8* location_data;
RADDBG_U64 location_data_size; RADDBGI_U64 location_data_size;
RADDBG_NameMap* name_maps; RADDBGI_NameMap* name_maps;
RADDBG_U64 name_maps_count; RADDBGI_U64 name_maps_count;
// other helpers // other helpers
RADDBG_NameMap* name_maps_by_kind[RADDBG_NameMapKind_COUNT]; RADDBGI_NameMap* name_maps_by_kind[RADDBGI_NameMapKind_COUNT];
} RADDBG_Parsed; } RADDBGI_Parsed;
typedef enum{ typedef enum{
RADDBG_ParseStatus_Good = 0, RADDBGI_ParseStatus_Good = 0,
RADDBG_ParseStatus_HeaderDoesNotMatch = 1, RADDBGI_ParseStatus_HeaderDoesNotMatch = 1,
RADDBG_ParseStatus_UnsupportedVersionNumber = 2, RADDBGI_ParseStatus_UnsupportedVersionNumber = 2,
RADDBG_ParseStatus_InvalidDataSecionLayout = 3, RADDBGI_ParseStatus_InvalidDataSecionLayout = 3,
RADDBG_ParseStatus_MissingStringDataSection = 4, RADDBGI_ParseStatus_MissingStringDataSection = 4,
RADDBG_ParseStatus_MissingStringTableSection = 5, RADDBGI_ParseStatus_MissingStringTableSection = 5,
RADDBG_ParseStatus_MissingIndexRunSection = 6, RADDBGI_ParseStatus_MissingIndexRunSection = 6,
} RADDBG_ParseStatus; } RADDBGI_ParseStatus;
typedef struct RADDBG_ParsedLineInfo{ typedef struct RADDBGI_ParsedLineInfo{
// NOTE: Mapping VOFF -> LINE_INFO // NOTE: Mapping VOFF -> LINE_INFO
// //
// * [ voff[i], voff[i + 1] ) forms the voff range // * [ voff[i], voff[i + 1] ) forms the voff range
// * for the line info at lines[i] (and cols[i] if i < col_count) // * for the line info at lines[i] (and cols[i] if i < col_count)
RADDBG_U64* voffs; // [count + 1] sorted RADDBGI_U64* voffs; // [count + 1] sorted
RADDBG_Line* lines; // [count] RADDBGI_Line* lines; // [count]
RADDBG_Column* cols; // [col_count] RADDBGI_Column* cols; // [col_count]
RADDBG_U64 count; RADDBGI_U64 count;
RADDBG_U64 col_count; RADDBGI_U64 col_count;
} RADDBG_ParsedLineInfo; } RADDBGI_ParsedLineInfo;
typedef struct RADDBG_ParsedLineMap{ typedef struct RADDBGI_ParsedLineMap{
// NOTE: Mapping LINE_NUMBER -> VOFFs // NOTE: Mapping LINE_NUMBER -> VOFFs
// //
// * nums[i] gives a line number // * nums[i] gives a line number
@@ -109,111 +109,111 @@ typedef struct RADDBG_ParsedLineMap{
// * let k span over the range [ ranges[i], ranges[i + 1] ) // * let k span over the range [ ranges[i], ranges[i + 1] )
// * voffs[k] gives the associated voffs // * voffs[k] gives the associated voffs
RADDBG_U32* nums; // [count] sorted RADDBGI_U32* nums; // [count] sorted
RADDBG_U32* ranges; // [count + 1] RADDBGI_U32* ranges; // [count + 1]
RADDBG_U64* voffs; // [voff_count] RADDBGI_U64* voffs; // [voff_count]
RADDBG_U64 count; RADDBGI_U64 count;
RADDBG_U64 voff_count; RADDBGI_U64 voff_count;
} RADDBG_ParsedLineMap; } RADDBGI_ParsedLineMap;
typedef struct RADDBG_ParsedNameMap{ typedef struct RADDBGI_ParsedNameMap{
RADDBG_NameMapBucket *buckets; RADDBGI_NameMapBucket *buckets;
RADDBG_NameMapNode *nodes; RADDBGI_NameMapNode *nodes;
RADDBG_U64 bucket_count; RADDBGI_U64 bucket_count;
RADDBG_U64 node_count; RADDBGI_U64 node_count;
} RADDBG_ParsedNameMap; } RADDBGI_ParsedNameMap;
//////////////////////////////// ////////////////////////////////
//~ Global Nils //~ Global Nils
#if !defined(RADDBG_DISABLE_NILS) #if !defined(RADDBGI_DISABLE_NILS)
static RADDBG_BinarySection raddbg_binary_section_nil = {0}; static RADDBGI_BinarySection raddbgi_binary_section_nil = {0};
static RADDBG_FilePathNode raddbg_file_path_node_nil = {0}; static RADDBGI_FilePathNode raddbgi_file_path_node_nil = {0};
static RADDBG_SourceFile raddbg_source_file_nil = {0}; static RADDBGI_SourceFile raddbgi_source_file_nil = {0};
static RADDBG_Unit raddbg_unit_nil = {0}; static RADDBGI_Unit raddbgi_unit_nil = {0};
static RADDBG_VMapEntry raddbg_vmap_entry_nil = {0}; static RADDBGI_VMapEntry raddbgi_vmap_entry_nil = {0};
static RADDBG_TypeNode raddbg_type_node_nil = {0}; static RADDBGI_TypeNode raddbgi_type_node_nil = {0};
static RADDBG_UDT raddbg_udt_nil = {0}; static RADDBGI_UDT raddbgi_udt_nil = {0};
static RADDBG_Member raddbg_member_nil = {0}; static RADDBGI_Member raddbgi_member_nil = {0};
static RADDBG_EnumMember raddbg_enum_member_nil = {0}; static RADDBGI_EnumMember raddbgi_enum_member_nil = {0};
static RADDBG_GlobalVariable raddbg_global_variable_nil = {0}; static RADDBGI_GlobalVariable raddbgi_global_variable_nil = {0};
static RADDBG_ThreadVariable raddbg_thread_variable_nil = {0}; static RADDBGI_ThreadVariable raddbgi_thread_variable_nil = {0};
static RADDBG_Procedure raddbg_procedure_nil = {0}; static RADDBGI_Procedure raddbgi_procedure_nil = {0};
static RADDBG_Scope raddbg_scope_nil = {0}; static RADDBGI_Scope raddbgi_scope_nil = {0};
static U64 raddbg_voff_nil = 0; static U64 raddbgi_voff_nil = 0;
static RADDBG_LocationBlock raddbg_location_block_nil = {0}; static RADDBGI_LocationBlock raddbgi_location_block_nil = {0};
static RADDBG_Local raddbg_local_nil = {0}; static RADDBGI_Local raddbgi_local_nil = {0};
#endif #endif
//////////////////////////////// ////////////////////////////////
//~ RADDBG Parse API //~ RADDBG Parse API
RADDBG_PROC RADDBG_ParseStatus RADDBGI_PROC RADDBGI_ParseStatus
raddbg_parse(RADDBG_U8 *data, RADDBG_U64 size, RADDBG_Parsed *out); raddbgi_parse(RADDBGI_U8 *data, RADDBGI_U64 size, RADDBGI_Parsed *out);
RADDBG_PROC RADDBG_U8* RADDBGI_PROC RADDBGI_U8*
raddbg_string_from_idx(RADDBG_Parsed *parsed, RADDBG_U32 idx, RADDBG_U64 *len_out); raddbgi_string_from_idx(RADDBGI_Parsed *parsed, RADDBGI_U32 idx, RADDBGI_U64 *len_out);
RADDBG_PROC RADDBG_U32* RADDBGI_PROC RADDBGI_U32*
raddbg_idx_run_from_first_count(RADDBG_Parsed *parsed, RADDBG_U32 first, RADDBG_U32 raw_count, raddbgi_idx_run_from_first_count(RADDBGI_Parsed *parsed, RADDBGI_U32 first, RADDBGI_U32 raw_count,
RADDBG_U32 *n_out); RADDBGI_U32 *n_out);
//- table lookups //- table lookups
#define raddbg_element_from_idx(parsed, name, idx) ((0 <= (idx) && (idx) < (parsed)->name##_count) ? &(parsed)->name[idx] : (parsed)->name ? &(parsed)->name[0] : 0) #define raddbgi_element_from_idx(parsed, name, idx) ((0 <= (idx) && (idx) < (parsed)->name##_count) ? &(parsed)->name[idx] : (parsed)->name ? &(parsed)->name[0] : 0)
//- line info //- line info
RADDBG_PROC void RADDBGI_PROC void
raddbg_line_info_from_unit(RADDBG_Parsed *p, RADDBG_Unit *unit, RADDBG_ParsedLineInfo *out); raddbgi_line_info_from_unit(RADDBGI_Parsed *p, RADDBGI_Unit *unit, RADDBGI_ParsedLineInfo *out);
RADDBG_PROC RADDBG_U64 RADDBGI_PROC RADDBGI_U64
raddbg_line_info_idx_from_voff(RADDBG_ParsedLineInfo *line_info, RADDBG_U64 voff); raddbgi_line_info_idx_from_voff(RADDBGI_ParsedLineInfo *line_info, RADDBGI_U64 voff);
RADDBG_PROC void RADDBGI_PROC void
raddbg_line_map_from_source_file(RADDBG_Parsed *p, RADDBG_SourceFile *srcfile, raddbgi_line_map_from_source_file(RADDBGI_Parsed *p, RADDBGI_SourceFile *srcfile,
RADDBG_ParsedLineMap *out); RADDBGI_ParsedLineMap *out);
RADDBG_PROC RADDBG_U64* RADDBGI_PROC RADDBGI_U64*
raddbg_line_voffs_from_num(RADDBG_ParsedLineMap *map, RADDBG_U32 linenum, RADDBG_U32 *n_out); raddbgi_line_voffs_from_num(RADDBGI_ParsedLineMap *map, RADDBGI_U32 linenum, RADDBGI_U32 *n_out);
//- vmaps //- vmaps
RADDBG_PROC RADDBG_U64 RADDBGI_PROC RADDBGI_U64
raddbg_vmap_idx_from_voff(RADDBG_VMapEntry *vmap, RADDBG_U32 vmap_count, RADDBG_U64 voff); raddbgi_vmap_idx_from_voff(RADDBGI_VMapEntry *vmap, RADDBGI_U32 vmap_count, RADDBGI_U64 voff);
//- name maps //- name maps
RADDBG_PROC RADDBG_NameMap* RADDBGI_PROC RADDBGI_NameMap*
raddbg_name_map_from_kind(RADDBG_Parsed *p, RADDBG_NameMapKind kind); raddbgi_name_map_from_kind(RADDBGI_Parsed *p, RADDBGI_NameMapKind kind);
RADDBG_PROC void RADDBGI_PROC void
raddbg_name_map_parse(RADDBG_Parsed* p, RADDBG_NameMap *mapptr, RADDBG_ParsedNameMap *out); raddbgi_name_map_parse(RADDBGI_Parsed* p, RADDBGI_NameMap *mapptr, RADDBGI_ParsedNameMap *out);
RADDBG_PROC RADDBG_NameMapNode* RADDBGI_PROC RADDBGI_NameMapNode*
raddbg_name_map_lookup(RADDBG_Parsed *p, RADDBG_ParsedNameMap *map, raddbgi_name_map_lookup(RADDBGI_Parsed *p, RADDBGI_ParsedNameMap *map,
RADDBG_U8 *str, RADDBG_U64 len); RADDBGI_U8 *str, RADDBGI_U64 len);
RADDBG_PROC RADDBG_U32* RADDBGI_PROC RADDBGI_U32*
raddbg_matches_from_map_node(RADDBG_Parsed *p, RADDBG_NameMapNode *node, RADDBG_U32 *n_out); raddbgi_matches_from_map_node(RADDBGI_Parsed *p, RADDBGI_NameMapNode *node, RADDBGI_U32 *n_out);
//- common helpers //- common helpers
RADDBG_PROC RADDBG_U64 RADDBGI_PROC RADDBGI_U64
raddbg_first_voff_from_proc(RADDBG_Parsed *p, RADDBG_U32 proc_id); raddbgi_first_voff_from_proc(RADDBGI_Parsed *p, RADDBGI_U32 proc_id);
//////////////////////////////// ////////////////////////////////
//~ RADDBG Parsing Helpers //~ RADDBG Parsing Helpers
#define raddbg_parse__extract_primary(p,outptr,outn,pritag) \ #define raddbgi_parse__extract_primary(p,outptr,outn,pritag) \
( (*(void**)&(outptr)) = \ ( (*(void**)&(outptr)) = \
raddbg_data_from_dsec((p),(p)->dsec_idx[pritag],sizeof(*(outptr)),(pritag),(outn)) ) raddbgi_data_from_dsec((p),(p)->dsec_idx[pritag],sizeof(*(outptr)),(pritag),(outn)) )
RADDBG_PROC void* RADDBGI_PROC void*
raddbg_data_from_dsec(RADDBG_Parsed *p, RADDBG_U32 idx, RADDBG_U32 item_size, raddbgi_data_from_dsec(RADDBGI_Parsed *p, RADDBGI_U32 idx, RADDBGI_U32 item_size,
RADDBG_DataSectionTag expected_tag, RADDBG_U64 *n_out); RADDBGI_DataSectionTag expected_tag, RADDBGI_U64 *n_out);
#define raddbg_parse__min(a,b) (((a)<(b))?(a):(b)) #define raddbgi_parse__min(a,b) (((a)<(b))?(a):(b))
#endif //RADDBG_PARSE_H #endif // RADDBGI_PARSE_H
-322
View File
@@ -1,322 +0,0 @@
// generated
#ifndef _REGS_RADDBG_META_C
#define _REGS_RADDBG_META_C
internal RADDBG_RegisterCode regs_raddbg_code_from_arch_reg_code(Architecture arch, REGS_RegCode code)
{
RADDBG_RegisterCode result = 0;
switch(arch)
{
case Architecture_x64:
{
switch(code)
{
default:{}break;
case REGS_RegCodeX64_rax:{result = RADDBG_RegisterCode_X64_rax;}break;
case REGS_RegCodeX64_rcx:{result = RADDBG_RegisterCode_X64_rcx;}break;
case REGS_RegCodeX64_rdx:{result = RADDBG_RegisterCode_X64_rdx;}break;
case REGS_RegCodeX64_rbx:{result = RADDBG_RegisterCode_X64_rbx;}break;
case REGS_RegCodeX64_rsp:{result = RADDBG_RegisterCode_X64_rsp;}break;
case REGS_RegCodeX64_rbp:{result = RADDBG_RegisterCode_X64_rbp;}break;
case REGS_RegCodeX64_rsi:{result = RADDBG_RegisterCode_X64_rsi;}break;
case REGS_RegCodeX64_rdi:{result = RADDBG_RegisterCode_X64_rdi;}break;
case REGS_RegCodeX64_r8:{result = RADDBG_RegisterCode_X64_r8;}break;
case REGS_RegCodeX64_r9:{result = RADDBG_RegisterCode_X64_r9;}break;
case REGS_RegCodeX64_r10:{result = RADDBG_RegisterCode_X64_r10;}break;
case REGS_RegCodeX64_r11:{result = RADDBG_RegisterCode_X64_r11;}break;
case REGS_RegCodeX64_r12:{result = RADDBG_RegisterCode_X64_r12;}break;
case REGS_RegCodeX64_r13:{result = RADDBG_RegisterCode_X64_r13;}break;
case REGS_RegCodeX64_r14:{result = RADDBG_RegisterCode_X64_r14;}break;
case REGS_RegCodeX64_r15:{result = RADDBG_RegisterCode_X64_r15;}break;
case REGS_RegCodeX64_fsbase:{result = RADDBG_RegisterCode_X64_fsbase;}break;
case REGS_RegCodeX64_gsbase:{result = RADDBG_RegisterCode_X64_gsbase;}break;
case REGS_RegCodeX64_rip:{result = RADDBG_RegisterCode_X64_rip;}break;
case REGS_RegCodeX64_rflags:{result = RADDBG_RegisterCode_X64_rflags;}break;
case REGS_RegCodeX64_dr0:{result = RADDBG_RegisterCode_X64_dr0;}break;
case REGS_RegCodeX64_dr1:{result = RADDBG_RegisterCode_X64_dr1;}break;
case REGS_RegCodeX64_dr2:{result = RADDBG_RegisterCode_X64_dr2;}break;
case REGS_RegCodeX64_dr3:{result = RADDBG_RegisterCode_X64_dr3;}break;
case REGS_RegCodeX64_dr4:{result = RADDBG_RegisterCode_X64_dr4;}break;
case REGS_RegCodeX64_dr5:{result = RADDBG_RegisterCode_X64_dr5;}break;
case REGS_RegCodeX64_dr6:{result = RADDBG_RegisterCode_X64_dr6;}break;
case REGS_RegCodeX64_dr7:{result = RADDBG_RegisterCode_X64_dr7;}break;
case REGS_RegCodeX64_fpr0:{result = RADDBG_RegisterCode_X64_fpr0;}break;
case REGS_RegCodeX64_fpr1:{result = RADDBG_RegisterCode_X64_fpr1;}break;
case REGS_RegCodeX64_fpr2:{result = RADDBG_RegisterCode_X64_fpr2;}break;
case REGS_RegCodeX64_fpr3:{result = RADDBG_RegisterCode_X64_fpr3;}break;
case REGS_RegCodeX64_fpr4:{result = RADDBG_RegisterCode_X64_fpr4;}break;
case REGS_RegCodeX64_fpr5:{result = RADDBG_RegisterCode_X64_fpr5;}break;
case REGS_RegCodeX64_fpr6:{result = RADDBG_RegisterCode_X64_fpr6;}break;
case REGS_RegCodeX64_fpr7:{result = RADDBG_RegisterCode_X64_fpr7;}break;
case REGS_RegCodeX64_st0:{result = RADDBG_RegisterCode_X64_st0;}break;
case REGS_RegCodeX64_st1:{result = RADDBG_RegisterCode_X64_st1;}break;
case REGS_RegCodeX64_st2:{result = RADDBG_RegisterCode_X64_st2;}break;
case REGS_RegCodeX64_st3:{result = RADDBG_RegisterCode_X64_st3;}break;
case REGS_RegCodeX64_st4:{result = RADDBG_RegisterCode_X64_st4;}break;
case REGS_RegCodeX64_st5:{result = RADDBG_RegisterCode_X64_st5;}break;
case REGS_RegCodeX64_st6:{result = RADDBG_RegisterCode_X64_st6;}break;
case REGS_RegCodeX64_st7:{result = RADDBG_RegisterCode_X64_st7;}break;
case REGS_RegCodeX64_fcw:{result = RADDBG_RegisterCode_X64_fcw;}break;
case REGS_RegCodeX64_fsw:{result = RADDBG_RegisterCode_X64_fsw;}break;
case REGS_RegCodeX64_ftw:{result = RADDBG_RegisterCode_X64_ftw;}break;
case REGS_RegCodeX64_fop:{result = RADDBG_RegisterCode_X64_fop;}break;
case REGS_RegCodeX64_fcs:{result = RADDBG_RegisterCode_X64_fcs;}break;
case REGS_RegCodeX64_fds:{result = RADDBG_RegisterCode_X64_fds;}break;
case REGS_RegCodeX64_fip:{result = RADDBG_RegisterCode_X64_fip;}break;
case REGS_RegCodeX64_fdp:{result = RADDBG_RegisterCode_X64_fdp;}break;
case REGS_RegCodeX64_mxcsr:{result = RADDBG_RegisterCode_X64_mxcsr;}break;
case REGS_RegCodeX64_mxcsr_mask:{result = RADDBG_RegisterCode_X64_mxcsr_mask;}break;
case REGS_RegCodeX64_ss:{result = RADDBG_RegisterCode_X64_ss;}break;
case REGS_RegCodeX64_cs:{result = RADDBG_RegisterCode_X64_cs;}break;
case REGS_RegCodeX64_ds:{result = RADDBG_RegisterCode_X64_ds;}break;
case REGS_RegCodeX64_es:{result = RADDBG_RegisterCode_X64_es;}break;
case REGS_RegCodeX64_fs:{result = RADDBG_RegisterCode_X64_fs;}break;
case REGS_RegCodeX64_gs:{result = RADDBG_RegisterCode_X64_gs;}break;
case REGS_RegCodeX64_ymm0:{result = RADDBG_RegisterCode_X64_ymm0;}break;
case REGS_RegCodeX64_ymm1:{result = RADDBG_RegisterCode_X64_ymm1;}break;
case REGS_RegCodeX64_ymm2:{result = RADDBG_RegisterCode_X64_ymm2;}break;
case REGS_RegCodeX64_ymm3:{result = RADDBG_RegisterCode_X64_ymm3;}break;
case REGS_RegCodeX64_ymm4:{result = RADDBG_RegisterCode_X64_ymm4;}break;
case REGS_RegCodeX64_ymm5:{result = RADDBG_RegisterCode_X64_ymm5;}break;
case REGS_RegCodeX64_ymm6:{result = RADDBG_RegisterCode_X64_ymm6;}break;
case REGS_RegCodeX64_ymm7:{result = RADDBG_RegisterCode_X64_ymm7;}break;
case REGS_RegCodeX64_ymm8:{result = RADDBG_RegisterCode_X64_ymm8;}break;
case REGS_RegCodeX64_ymm9:{result = RADDBG_RegisterCode_X64_ymm9;}break;
case REGS_RegCodeX64_ymm10:{result = RADDBG_RegisterCode_X64_ymm10;}break;
case REGS_RegCodeX64_ymm11:{result = RADDBG_RegisterCode_X64_ymm11;}break;
case REGS_RegCodeX64_ymm12:{result = RADDBG_RegisterCode_X64_ymm12;}break;
case REGS_RegCodeX64_ymm13:{result = RADDBG_RegisterCode_X64_ymm13;}break;
case REGS_RegCodeX64_ymm14:{result = RADDBG_RegisterCode_X64_ymm14;}break;
case REGS_RegCodeX64_ymm15:{result = RADDBG_RegisterCode_X64_ymm15;}break;
}
}break;
case Architecture_x86:
{
switch(code)
{
default:{}break;
case REGS_RegCodeX86_eax:{result = RADDBG_RegisterCode_X86_eax;}break;
case REGS_RegCodeX86_ecx:{result = RADDBG_RegisterCode_X86_ecx;}break;
case REGS_RegCodeX86_edx:{result = RADDBG_RegisterCode_X86_edx;}break;
case REGS_RegCodeX86_ebx:{result = RADDBG_RegisterCode_X86_ebx;}break;
case REGS_RegCodeX86_esp:{result = RADDBG_RegisterCode_X86_esp;}break;
case REGS_RegCodeX86_ebp:{result = RADDBG_RegisterCode_X86_ebp;}break;
case REGS_RegCodeX86_esi:{result = RADDBG_RegisterCode_X86_esi;}break;
case REGS_RegCodeX86_edi:{result = RADDBG_RegisterCode_X86_edi;}break;
case REGS_RegCodeX86_fsbase:{result = RADDBG_RegisterCode_X86_fsbase;}break;
case REGS_RegCodeX86_gsbase:{result = RADDBG_RegisterCode_X86_gsbase;}break;
case REGS_RegCodeX86_eflags:{result = RADDBG_RegisterCode_X86_eflags;}break;
case REGS_RegCodeX86_eip:{result = RADDBG_RegisterCode_X86_eip;}break;
case REGS_RegCodeX86_dr0:{result = RADDBG_RegisterCode_X86_dr0;}break;
case REGS_RegCodeX86_dr1:{result = RADDBG_RegisterCode_X86_dr1;}break;
case REGS_RegCodeX86_dr2:{result = RADDBG_RegisterCode_X86_dr2;}break;
case REGS_RegCodeX86_dr3:{result = RADDBG_RegisterCode_X86_dr3;}break;
case REGS_RegCodeX86_dr4:{result = RADDBG_RegisterCode_X86_dr4;}break;
case REGS_RegCodeX86_dr5:{result = RADDBG_RegisterCode_X86_dr5;}break;
case REGS_RegCodeX86_dr6:{result = RADDBG_RegisterCode_X86_dr6;}break;
case REGS_RegCodeX86_dr7:{result = RADDBG_RegisterCode_X86_dr7;}break;
case REGS_RegCodeX86_fpr0:{result = RADDBG_RegisterCode_X86_fpr0;}break;
case REGS_RegCodeX86_fpr1:{result = RADDBG_RegisterCode_X86_fpr1;}break;
case REGS_RegCodeX86_fpr2:{result = RADDBG_RegisterCode_X86_fpr2;}break;
case REGS_RegCodeX86_fpr3:{result = RADDBG_RegisterCode_X86_fpr3;}break;
case REGS_RegCodeX86_fpr4:{result = RADDBG_RegisterCode_X86_fpr4;}break;
case REGS_RegCodeX86_fpr5:{result = RADDBG_RegisterCode_X86_fpr5;}break;
case REGS_RegCodeX86_fpr6:{result = RADDBG_RegisterCode_X86_fpr6;}break;
case REGS_RegCodeX86_fpr7:{result = RADDBG_RegisterCode_X86_fpr7;}break;
case REGS_RegCodeX86_st0:{result = RADDBG_RegisterCode_X86_st0;}break;
case REGS_RegCodeX86_st1:{result = RADDBG_RegisterCode_X86_st1;}break;
case REGS_RegCodeX86_st2:{result = RADDBG_RegisterCode_X86_st2;}break;
case REGS_RegCodeX86_st3:{result = RADDBG_RegisterCode_X86_st3;}break;
case REGS_RegCodeX86_st4:{result = RADDBG_RegisterCode_X86_st4;}break;
case REGS_RegCodeX86_st5:{result = RADDBG_RegisterCode_X86_st5;}break;
case REGS_RegCodeX86_st6:{result = RADDBG_RegisterCode_X86_st6;}break;
case REGS_RegCodeX86_st7:{result = RADDBG_RegisterCode_X86_st7;}break;
case REGS_RegCodeX86_fcw:{result = RADDBG_RegisterCode_X86_fcw;}break;
case REGS_RegCodeX86_fsw:{result = RADDBG_RegisterCode_X86_fsw;}break;
case REGS_RegCodeX86_ftw:{result = RADDBG_RegisterCode_X86_ftw;}break;
case REGS_RegCodeX86_fop:{result = RADDBG_RegisterCode_X86_fop;}break;
case REGS_RegCodeX86_fcs:{result = RADDBG_RegisterCode_X86_fcs;}break;
case REGS_RegCodeX86_fds:{result = RADDBG_RegisterCode_X86_fds;}break;
case REGS_RegCodeX86_fip:{result = RADDBG_RegisterCode_X86_fip;}break;
case REGS_RegCodeX86_fdp:{result = RADDBG_RegisterCode_X86_fdp;}break;
case REGS_RegCodeX86_mxcsr:{result = RADDBG_RegisterCode_X86_mxcsr;}break;
case REGS_RegCodeX86_mxcsr_mask:{result = RADDBG_RegisterCode_X86_mxcsr_mask;}break;
case REGS_RegCodeX86_ss:{result = RADDBG_RegisterCode_X86_ss;}break;
case REGS_RegCodeX86_cs:{result = RADDBG_RegisterCode_X86_cs;}break;
case REGS_RegCodeX86_ds:{result = RADDBG_RegisterCode_X86_ds;}break;
case REGS_RegCodeX86_es:{result = RADDBG_RegisterCode_X86_es;}break;
case REGS_RegCodeX86_fs:{result = RADDBG_RegisterCode_X86_fs;}break;
case REGS_RegCodeX86_gs:{result = RADDBG_RegisterCode_X86_gs;}break;
case REGS_RegCodeX86_ymm0:{result = RADDBG_RegisterCode_X86_ymm0;}break;
case REGS_RegCodeX86_ymm1:{result = RADDBG_RegisterCode_X86_ymm1;}break;
case REGS_RegCodeX86_ymm2:{result = RADDBG_RegisterCode_X86_ymm2;}break;
case REGS_RegCodeX86_ymm3:{result = RADDBG_RegisterCode_X86_ymm3;}break;
case REGS_RegCodeX86_ymm4:{result = RADDBG_RegisterCode_X86_ymm4;}break;
case REGS_RegCodeX86_ymm5:{result = RADDBG_RegisterCode_X86_ymm5;}break;
case REGS_RegCodeX86_ymm6:{result = RADDBG_RegisterCode_X86_ymm6;}break;
case REGS_RegCodeX86_ymm7:{result = RADDBG_RegisterCode_X86_ymm7;}break;
}
}break;
}
return result;
}
internal REGS_RegCode regs_reg_code_from_arch_raddbg_code(Architecture arch, RADDBG_RegisterCode code)
{
REGS_RegCode result = 0;
switch(arch)
{
case Architecture_x64:
{
switch(code)
{
default:{}break;
case RADDBG_RegisterCode_X64_rax:{result = REGS_RegCodeX64_rax;}break;
case RADDBG_RegisterCode_X64_rcx:{result = REGS_RegCodeX64_rcx;}break;
case RADDBG_RegisterCode_X64_rdx:{result = REGS_RegCodeX64_rdx;}break;
case RADDBG_RegisterCode_X64_rbx:{result = REGS_RegCodeX64_rbx;}break;
case RADDBG_RegisterCode_X64_rsp:{result = REGS_RegCodeX64_rsp;}break;
case RADDBG_RegisterCode_X64_rbp:{result = REGS_RegCodeX64_rbp;}break;
case RADDBG_RegisterCode_X64_rsi:{result = REGS_RegCodeX64_rsi;}break;
case RADDBG_RegisterCode_X64_rdi:{result = REGS_RegCodeX64_rdi;}break;
case RADDBG_RegisterCode_X64_r8:{result = REGS_RegCodeX64_r8;}break;
case RADDBG_RegisterCode_X64_r9:{result = REGS_RegCodeX64_r9;}break;
case RADDBG_RegisterCode_X64_r10:{result = REGS_RegCodeX64_r10;}break;
case RADDBG_RegisterCode_X64_r11:{result = REGS_RegCodeX64_r11;}break;
case RADDBG_RegisterCode_X64_r12:{result = REGS_RegCodeX64_r12;}break;
case RADDBG_RegisterCode_X64_r13:{result = REGS_RegCodeX64_r13;}break;
case RADDBG_RegisterCode_X64_r14:{result = REGS_RegCodeX64_r14;}break;
case RADDBG_RegisterCode_X64_r15:{result = REGS_RegCodeX64_r15;}break;
case RADDBG_RegisterCode_X64_fsbase:{result = REGS_RegCodeX64_fsbase;}break;
case RADDBG_RegisterCode_X64_gsbase:{result = REGS_RegCodeX64_gsbase;}break;
case RADDBG_RegisterCode_X64_rip:{result = REGS_RegCodeX64_rip;}break;
case RADDBG_RegisterCode_X64_rflags:{result = REGS_RegCodeX64_rflags;}break;
case RADDBG_RegisterCode_X64_dr0:{result = REGS_RegCodeX64_dr0;}break;
case RADDBG_RegisterCode_X64_dr1:{result = REGS_RegCodeX64_dr1;}break;
case RADDBG_RegisterCode_X64_dr2:{result = REGS_RegCodeX64_dr2;}break;
case RADDBG_RegisterCode_X64_dr3:{result = REGS_RegCodeX64_dr3;}break;
case RADDBG_RegisterCode_X64_dr4:{result = REGS_RegCodeX64_dr4;}break;
case RADDBG_RegisterCode_X64_dr5:{result = REGS_RegCodeX64_dr5;}break;
case RADDBG_RegisterCode_X64_dr6:{result = REGS_RegCodeX64_dr6;}break;
case RADDBG_RegisterCode_X64_dr7:{result = REGS_RegCodeX64_dr7;}break;
case RADDBG_RegisterCode_X64_fpr0:{result = REGS_RegCodeX64_fpr0;}break;
case RADDBG_RegisterCode_X64_fpr1:{result = REGS_RegCodeX64_fpr1;}break;
case RADDBG_RegisterCode_X64_fpr2:{result = REGS_RegCodeX64_fpr2;}break;
case RADDBG_RegisterCode_X64_fpr3:{result = REGS_RegCodeX64_fpr3;}break;
case RADDBG_RegisterCode_X64_fpr4:{result = REGS_RegCodeX64_fpr4;}break;
case RADDBG_RegisterCode_X64_fpr5:{result = REGS_RegCodeX64_fpr5;}break;
case RADDBG_RegisterCode_X64_fpr6:{result = REGS_RegCodeX64_fpr6;}break;
case RADDBG_RegisterCode_X64_fpr7:{result = REGS_RegCodeX64_fpr7;}break;
case RADDBG_RegisterCode_X64_st0:{result = REGS_RegCodeX64_st0;}break;
case RADDBG_RegisterCode_X64_st1:{result = REGS_RegCodeX64_st1;}break;
case RADDBG_RegisterCode_X64_st2:{result = REGS_RegCodeX64_st2;}break;
case RADDBG_RegisterCode_X64_st3:{result = REGS_RegCodeX64_st3;}break;
case RADDBG_RegisterCode_X64_st4:{result = REGS_RegCodeX64_st4;}break;
case RADDBG_RegisterCode_X64_st5:{result = REGS_RegCodeX64_st5;}break;
case RADDBG_RegisterCode_X64_st6:{result = REGS_RegCodeX64_st6;}break;
case RADDBG_RegisterCode_X64_st7:{result = REGS_RegCodeX64_st7;}break;
case RADDBG_RegisterCode_X64_fcw:{result = REGS_RegCodeX64_fcw;}break;
case RADDBG_RegisterCode_X64_fsw:{result = REGS_RegCodeX64_fsw;}break;
case RADDBG_RegisterCode_X64_ftw:{result = REGS_RegCodeX64_ftw;}break;
case RADDBG_RegisterCode_X64_fop:{result = REGS_RegCodeX64_fop;}break;
case RADDBG_RegisterCode_X64_fcs:{result = REGS_RegCodeX64_fcs;}break;
case RADDBG_RegisterCode_X64_fds:{result = REGS_RegCodeX64_fds;}break;
case RADDBG_RegisterCode_X64_fip:{result = REGS_RegCodeX64_fip;}break;
case RADDBG_RegisterCode_X64_fdp:{result = REGS_RegCodeX64_fdp;}break;
case RADDBG_RegisterCode_X64_mxcsr:{result = REGS_RegCodeX64_mxcsr;}break;
case RADDBG_RegisterCode_X64_mxcsr_mask:{result = REGS_RegCodeX64_mxcsr_mask;}break;
case RADDBG_RegisterCode_X64_ss:{result = REGS_RegCodeX64_ss;}break;
case RADDBG_RegisterCode_X64_cs:{result = REGS_RegCodeX64_cs;}break;
case RADDBG_RegisterCode_X64_ds:{result = REGS_RegCodeX64_ds;}break;
case RADDBG_RegisterCode_X64_es:{result = REGS_RegCodeX64_es;}break;
case RADDBG_RegisterCode_X64_fs:{result = REGS_RegCodeX64_fs;}break;
case RADDBG_RegisterCode_X64_gs:{result = REGS_RegCodeX64_gs;}break;
case RADDBG_RegisterCode_X64_ymm0:{result = REGS_RegCodeX64_ymm0;}break;
case RADDBG_RegisterCode_X64_ymm1:{result = REGS_RegCodeX64_ymm1;}break;
case RADDBG_RegisterCode_X64_ymm2:{result = REGS_RegCodeX64_ymm2;}break;
case RADDBG_RegisterCode_X64_ymm3:{result = REGS_RegCodeX64_ymm3;}break;
case RADDBG_RegisterCode_X64_ymm4:{result = REGS_RegCodeX64_ymm4;}break;
case RADDBG_RegisterCode_X64_ymm5:{result = REGS_RegCodeX64_ymm5;}break;
case RADDBG_RegisterCode_X64_ymm6:{result = REGS_RegCodeX64_ymm6;}break;
case RADDBG_RegisterCode_X64_ymm7:{result = REGS_RegCodeX64_ymm7;}break;
case RADDBG_RegisterCode_X64_ymm8:{result = REGS_RegCodeX64_ymm8;}break;
case RADDBG_RegisterCode_X64_ymm9:{result = REGS_RegCodeX64_ymm9;}break;
case RADDBG_RegisterCode_X64_ymm10:{result = REGS_RegCodeX64_ymm10;}break;
case RADDBG_RegisterCode_X64_ymm11:{result = REGS_RegCodeX64_ymm11;}break;
case RADDBG_RegisterCode_X64_ymm12:{result = REGS_RegCodeX64_ymm12;}break;
case RADDBG_RegisterCode_X64_ymm13:{result = REGS_RegCodeX64_ymm13;}break;
case RADDBG_RegisterCode_X64_ymm14:{result = REGS_RegCodeX64_ymm14;}break;
case RADDBG_RegisterCode_X64_ymm15:{result = REGS_RegCodeX64_ymm15;}break;
}
}break;
case Architecture_x86:
{
switch(code)
{
default:{}break;
case RADDBG_RegisterCode_X86_eax:{result = REGS_RegCodeX86_eax;}break;
case RADDBG_RegisterCode_X86_ecx:{result = REGS_RegCodeX86_ecx;}break;
case RADDBG_RegisterCode_X86_edx:{result = REGS_RegCodeX86_edx;}break;
case RADDBG_RegisterCode_X86_ebx:{result = REGS_RegCodeX86_ebx;}break;
case RADDBG_RegisterCode_X86_esp:{result = REGS_RegCodeX86_esp;}break;
case RADDBG_RegisterCode_X86_ebp:{result = REGS_RegCodeX86_ebp;}break;
case RADDBG_RegisterCode_X86_esi:{result = REGS_RegCodeX86_esi;}break;
case RADDBG_RegisterCode_X86_edi:{result = REGS_RegCodeX86_edi;}break;
case RADDBG_RegisterCode_X86_fsbase:{result = REGS_RegCodeX86_fsbase;}break;
case RADDBG_RegisterCode_X86_gsbase:{result = REGS_RegCodeX86_gsbase;}break;
case RADDBG_RegisterCode_X86_eflags:{result = REGS_RegCodeX86_eflags;}break;
case RADDBG_RegisterCode_X86_eip:{result = REGS_RegCodeX86_eip;}break;
case RADDBG_RegisterCode_X86_dr0:{result = REGS_RegCodeX86_dr0;}break;
case RADDBG_RegisterCode_X86_dr1:{result = REGS_RegCodeX86_dr1;}break;
case RADDBG_RegisterCode_X86_dr2:{result = REGS_RegCodeX86_dr2;}break;
case RADDBG_RegisterCode_X86_dr3:{result = REGS_RegCodeX86_dr3;}break;
case RADDBG_RegisterCode_X86_dr4:{result = REGS_RegCodeX86_dr4;}break;
case RADDBG_RegisterCode_X86_dr5:{result = REGS_RegCodeX86_dr5;}break;
case RADDBG_RegisterCode_X86_dr6:{result = REGS_RegCodeX86_dr6;}break;
case RADDBG_RegisterCode_X86_dr7:{result = REGS_RegCodeX86_dr7;}break;
case RADDBG_RegisterCode_X86_fpr0:{result = REGS_RegCodeX86_fpr0;}break;
case RADDBG_RegisterCode_X86_fpr1:{result = REGS_RegCodeX86_fpr1;}break;
case RADDBG_RegisterCode_X86_fpr2:{result = REGS_RegCodeX86_fpr2;}break;
case RADDBG_RegisterCode_X86_fpr3:{result = REGS_RegCodeX86_fpr3;}break;
case RADDBG_RegisterCode_X86_fpr4:{result = REGS_RegCodeX86_fpr4;}break;
case RADDBG_RegisterCode_X86_fpr5:{result = REGS_RegCodeX86_fpr5;}break;
case RADDBG_RegisterCode_X86_fpr6:{result = REGS_RegCodeX86_fpr6;}break;
case RADDBG_RegisterCode_X86_fpr7:{result = REGS_RegCodeX86_fpr7;}break;
case RADDBG_RegisterCode_X86_st0:{result = REGS_RegCodeX86_st0;}break;
case RADDBG_RegisterCode_X86_st1:{result = REGS_RegCodeX86_st1;}break;
case RADDBG_RegisterCode_X86_st2:{result = REGS_RegCodeX86_st2;}break;
case RADDBG_RegisterCode_X86_st3:{result = REGS_RegCodeX86_st3;}break;
case RADDBG_RegisterCode_X86_st4:{result = REGS_RegCodeX86_st4;}break;
case RADDBG_RegisterCode_X86_st5:{result = REGS_RegCodeX86_st5;}break;
case RADDBG_RegisterCode_X86_st6:{result = REGS_RegCodeX86_st6;}break;
case RADDBG_RegisterCode_X86_st7:{result = REGS_RegCodeX86_st7;}break;
case RADDBG_RegisterCode_X86_fcw:{result = REGS_RegCodeX86_fcw;}break;
case RADDBG_RegisterCode_X86_fsw:{result = REGS_RegCodeX86_fsw;}break;
case RADDBG_RegisterCode_X86_ftw:{result = REGS_RegCodeX86_ftw;}break;
case RADDBG_RegisterCode_X86_fop:{result = REGS_RegCodeX86_fop;}break;
case RADDBG_RegisterCode_X86_fcs:{result = REGS_RegCodeX86_fcs;}break;
case RADDBG_RegisterCode_X86_fds:{result = REGS_RegCodeX86_fds;}break;
case RADDBG_RegisterCode_X86_fip:{result = REGS_RegCodeX86_fip;}break;
case RADDBG_RegisterCode_X86_fdp:{result = REGS_RegCodeX86_fdp;}break;
case RADDBG_RegisterCode_X86_mxcsr:{result = REGS_RegCodeX86_mxcsr;}break;
case RADDBG_RegisterCode_X86_mxcsr_mask:{result = REGS_RegCodeX86_mxcsr_mask;}break;
case RADDBG_RegisterCode_X86_ss:{result = REGS_RegCodeX86_ss;}break;
case RADDBG_RegisterCode_X86_cs:{result = REGS_RegCodeX86_cs;}break;
case RADDBG_RegisterCode_X86_ds:{result = REGS_RegCodeX86_ds;}break;
case RADDBG_RegisterCode_X86_es:{result = REGS_RegCodeX86_es;}break;
case RADDBG_RegisterCode_X86_fs:{result = REGS_RegCodeX86_fs;}break;
case RADDBG_RegisterCode_X86_gs:{result = REGS_RegCodeX86_gs;}break;
case RADDBG_RegisterCode_X86_ymm0:{result = REGS_RegCodeX86_ymm0;}break;
case RADDBG_RegisterCode_X86_ymm1:{result = REGS_RegCodeX86_ymm1;}break;
case RADDBG_RegisterCode_X86_ymm2:{result = REGS_RegCodeX86_ymm2;}break;
case RADDBG_RegisterCode_X86_ymm3:{result = REGS_RegCodeX86_ymm3;}break;
case RADDBG_RegisterCode_X86_ymm4:{result = REGS_RegCodeX86_ymm4;}break;
case RADDBG_RegisterCode_X86_ymm5:{result = REGS_RegCodeX86_ymm5;}break;
case RADDBG_RegisterCode_X86_ymm6:{result = REGS_RegCodeX86_ymm6;}break;
case RADDBG_RegisterCode_X86_ymm7:{result = REGS_RegCodeX86_ymm7;}break;
}
}break;
}
return result;
}
#endif
+275 -275
View File
@@ -3,9 +3,9 @@
//- GENERATED CODE //- GENERATED CODE
internal RADDBG_RegisterCode regs_raddbg_code_from_arch_reg_code(Architecture arch, REGS_RegCode code) internal RADDBGI_RegisterCode regs_raddbgi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code)
{ {
RADDBG_RegisterCode result = 0; RADDBGI_RegisterCode result = 0;
switch(arch) switch(arch)
{ {
default:{}break; default:{}break;
@@ -14,82 +14,82 @@ case Architecture_x64:
switch(code) switch(code)
{ {
default:{}break; default:{}break;
case REGS_RegCodeX64_rax:{result = RADDBG_RegisterCode_X64_rax;}break; case REGS_RegCodeX64_rax:{result = RADDBGI_RegisterCode_X64_rax;}break;
case REGS_RegCodeX64_rcx:{result = RADDBG_RegisterCode_X64_rcx;}break; case REGS_RegCodeX64_rcx:{result = RADDBGI_RegisterCode_X64_rcx;}break;
case REGS_RegCodeX64_rdx:{result = RADDBG_RegisterCode_X64_rdx;}break; case REGS_RegCodeX64_rdx:{result = RADDBGI_RegisterCode_X64_rdx;}break;
case REGS_RegCodeX64_rbx:{result = RADDBG_RegisterCode_X64_rbx;}break; case REGS_RegCodeX64_rbx:{result = RADDBGI_RegisterCode_X64_rbx;}break;
case REGS_RegCodeX64_rsp:{result = RADDBG_RegisterCode_X64_rsp;}break; case REGS_RegCodeX64_rsp:{result = RADDBGI_RegisterCode_X64_rsp;}break;
case REGS_RegCodeX64_rbp:{result = RADDBG_RegisterCode_X64_rbp;}break; case REGS_RegCodeX64_rbp:{result = RADDBGI_RegisterCode_X64_rbp;}break;
case REGS_RegCodeX64_rsi:{result = RADDBG_RegisterCode_X64_rsi;}break; case REGS_RegCodeX64_rsi:{result = RADDBGI_RegisterCode_X64_rsi;}break;
case REGS_RegCodeX64_rdi:{result = RADDBG_RegisterCode_X64_rdi;}break; case REGS_RegCodeX64_rdi:{result = RADDBGI_RegisterCode_X64_rdi;}break;
case REGS_RegCodeX64_r8:{result = RADDBG_RegisterCode_X64_r8;}break; case REGS_RegCodeX64_r8:{result = RADDBGI_RegisterCode_X64_r8;}break;
case REGS_RegCodeX64_r9:{result = RADDBG_RegisterCode_X64_r9;}break; case REGS_RegCodeX64_r9:{result = RADDBGI_RegisterCode_X64_r9;}break;
case REGS_RegCodeX64_r10:{result = RADDBG_RegisterCode_X64_r10;}break; case REGS_RegCodeX64_r10:{result = RADDBGI_RegisterCode_X64_r10;}break;
case REGS_RegCodeX64_r11:{result = RADDBG_RegisterCode_X64_r11;}break; case REGS_RegCodeX64_r11:{result = RADDBGI_RegisterCode_X64_r11;}break;
case REGS_RegCodeX64_r12:{result = RADDBG_RegisterCode_X64_r12;}break; case REGS_RegCodeX64_r12:{result = RADDBGI_RegisterCode_X64_r12;}break;
case REGS_RegCodeX64_r13:{result = RADDBG_RegisterCode_X64_r13;}break; case REGS_RegCodeX64_r13:{result = RADDBGI_RegisterCode_X64_r13;}break;
case REGS_RegCodeX64_r14:{result = RADDBG_RegisterCode_X64_r14;}break; case REGS_RegCodeX64_r14:{result = RADDBGI_RegisterCode_X64_r14;}break;
case REGS_RegCodeX64_r15:{result = RADDBG_RegisterCode_X64_r15;}break; case REGS_RegCodeX64_r15:{result = RADDBGI_RegisterCode_X64_r15;}break;
case REGS_RegCodeX64_fsbase:{result = RADDBG_RegisterCode_X64_fsbase;}break; case REGS_RegCodeX64_fsbase:{result = RADDBGI_RegisterCode_X64_fsbase;}break;
case REGS_RegCodeX64_gsbase:{result = RADDBG_RegisterCode_X64_gsbase;}break; case REGS_RegCodeX64_gsbase:{result = RADDBGI_RegisterCode_X64_gsbase;}break;
case REGS_RegCodeX64_rip:{result = RADDBG_RegisterCode_X64_rip;}break; case REGS_RegCodeX64_rip:{result = RADDBGI_RegisterCode_X64_rip;}break;
case REGS_RegCodeX64_rflags:{result = RADDBG_RegisterCode_X64_rflags;}break; case REGS_RegCodeX64_rflags:{result = RADDBGI_RegisterCode_X64_rflags;}break;
case REGS_RegCodeX64_dr0:{result = RADDBG_RegisterCode_X64_dr0;}break; case REGS_RegCodeX64_dr0:{result = RADDBGI_RegisterCode_X64_dr0;}break;
case REGS_RegCodeX64_dr1:{result = RADDBG_RegisterCode_X64_dr1;}break; case REGS_RegCodeX64_dr1:{result = RADDBGI_RegisterCode_X64_dr1;}break;
case REGS_RegCodeX64_dr2:{result = RADDBG_RegisterCode_X64_dr2;}break; case REGS_RegCodeX64_dr2:{result = RADDBGI_RegisterCode_X64_dr2;}break;
case REGS_RegCodeX64_dr3:{result = RADDBG_RegisterCode_X64_dr3;}break; case REGS_RegCodeX64_dr3:{result = RADDBGI_RegisterCode_X64_dr3;}break;
case REGS_RegCodeX64_dr4:{result = RADDBG_RegisterCode_X64_dr4;}break; case REGS_RegCodeX64_dr4:{result = RADDBGI_RegisterCode_X64_dr4;}break;
case REGS_RegCodeX64_dr5:{result = RADDBG_RegisterCode_X64_dr5;}break; case REGS_RegCodeX64_dr5:{result = RADDBGI_RegisterCode_X64_dr5;}break;
case REGS_RegCodeX64_dr6:{result = RADDBG_RegisterCode_X64_dr6;}break; case REGS_RegCodeX64_dr6:{result = RADDBGI_RegisterCode_X64_dr6;}break;
case REGS_RegCodeX64_dr7:{result = RADDBG_RegisterCode_X64_dr7;}break; case REGS_RegCodeX64_dr7:{result = RADDBGI_RegisterCode_X64_dr7;}break;
case REGS_RegCodeX64_fpr0:{result = RADDBG_RegisterCode_X64_fpr0;}break; case REGS_RegCodeX64_fpr0:{result = RADDBGI_RegisterCode_X64_fpr0;}break;
case REGS_RegCodeX64_fpr1:{result = RADDBG_RegisterCode_X64_fpr1;}break; case REGS_RegCodeX64_fpr1:{result = RADDBGI_RegisterCode_X64_fpr1;}break;
case REGS_RegCodeX64_fpr2:{result = RADDBG_RegisterCode_X64_fpr2;}break; case REGS_RegCodeX64_fpr2:{result = RADDBGI_RegisterCode_X64_fpr2;}break;
case REGS_RegCodeX64_fpr3:{result = RADDBG_RegisterCode_X64_fpr3;}break; case REGS_RegCodeX64_fpr3:{result = RADDBGI_RegisterCode_X64_fpr3;}break;
case REGS_RegCodeX64_fpr4:{result = RADDBG_RegisterCode_X64_fpr4;}break; case REGS_RegCodeX64_fpr4:{result = RADDBGI_RegisterCode_X64_fpr4;}break;
case REGS_RegCodeX64_fpr5:{result = RADDBG_RegisterCode_X64_fpr5;}break; case REGS_RegCodeX64_fpr5:{result = RADDBGI_RegisterCode_X64_fpr5;}break;
case REGS_RegCodeX64_fpr6:{result = RADDBG_RegisterCode_X64_fpr6;}break; case REGS_RegCodeX64_fpr6:{result = RADDBGI_RegisterCode_X64_fpr6;}break;
case REGS_RegCodeX64_fpr7:{result = RADDBG_RegisterCode_X64_fpr7;}break; case REGS_RegCodeX64_fpr7:{result = RADDBGI_RegisterCode_X64_fpr7;}break;
case REGS_RegCodeX64_st0:{result = RADDBG_RegisterCode_X64_st0;}break; case REGS_RegCodeX64_st0:{result = RADDBGI_RegisterCode_X64_st0;}break;
case REGS_RegCodeX64_st1:{result = RADDBG_RegisterCode_X64_st1;}break; case REGS_RegCodeX64_st1:{result = RADDBGI_RegisterCode_X64_st1;}break;
case REGS_RegCodeX64_st2:{result = RADDBG_RegisterCode_X64_st2;}break; case REGS_RegCodeX64_st2:{result = RADDBGI_RegisterCode_X64_st2;}break;
case REGS_RegCodeX64_st3:{result = RADDBG_RegisterCode_X64_st3;}break; case REGS_RegCodeX64_st3:{result = RADDBGI_RegisterCode_X64_st3;}break;
case REGS_RegCodeX64_st4:{result = RADDBG_RegisterCode_X64_st4;}break; case REGS_RegCodeX64_st4:{result = RADDBGI_RegisterCode_X64_st4;}break;
case REGS_RegCodeX64_st5:{result = RADDBG_RegisterCode_X64_st5;}break; case REGS_RegCodeX64_st5:{result = RADDBGI_RegisterCode_X64_st5;}break;
case REGS_RegCodeX64_st6:{result = RADDBG_RegisterCode_X64_st6;}break; case REGS_RegCodeX64_st6:{result = RADDBGI_RegisterCode_X64_st6;}break;
case REGS_RegCodeX64_st7:{result = RADDBG_RegisterCode_X64_st7;}break; case REGS_RegCodeX64_st7:{result = RADDBGI_RegisterCode_X64_st7;}break;
case REGS_RegCodeX64_fcw:{result = RADDBG_RegisterCode_X64_fcw;}break; case REGS_RegCodeX64_fcw:{result = RADDBGI_RegisterCode_X64_fcw;}break;
case REGS_RegCodeX64_fsw:{result = RADDBG_RegisterCode_X64_fsw;}break; case REGS_RegCodeX64_fsw:{result = RADDBGI_RegisterCode_X64_fsw;}break;
case REGS_RegCodeX64_ftw:{result = RADDBG_RegisterCode_X64_ftw;}break; case REGS_RegCodeX64_ftw:{result = RADDBGI_RegisterCode_X64_ftw;}break;
case REGS_RegCodeX64_fop:{result = RADDBG_RegisterCode_X64_fop;}break; case REGS_RegCodeX64_fop:{result = RADDBGI_RegisterCode_X64_fop;}break;
case REGS_RegCodeX64_fcs:{result = RADDBG_RegisterCode_X64_fcs;}break; case REGS_RegCodeX64_fcs:{result = RADDBGI_RegisterCode_X64_fcs;}break;
case REGS_RegCodeX64_fds:{result = RADDBG_RegisterCode_X64_fds;}break; case REGS_RegCodeX64_fds:{result = RADDBGI_RegisterCode_X64_fds;}break;
case REGS_RegCodeX64_fip:{result = RADDBG_RegisterCode_X64_fip;}break; case REGS_RegCodeX64_fip:{result = RADDBGI_RegisterCode_X64_fip;}break;
case REGS_RegCodeX64_fdp:{result = RADDBG_RegisterCode_X64_fdp;}break; case REGS_RegCodeX64_fdp:{result = RADDBGI_RegisterCode_X64_fdp;}break;
case REGS_RegCodeX64_mxcsr:{result = RADDBG_RegisterCode_X64_mxcsr;}break; case REGS_RegCodeX64_mxcsr:{result = RADDBGI_RegisterCode_X64_mxcsr;}break;
case REGS_RegCodeX64_mxcsr_mask:{result = RADDBG_RegisterCode_X64_mxcsr_mask;}break; case REGS_RegCodeX64_mxcsr_mask:{result = RADDBGI_RegisterCode_X64_mxcsr_mask;}break;
case REGS_RegCodeX64_ss:{result = RADDBG_RegisterCode_X64_ss;}break; case REGS_RegCodeX64_ss:{result = RADDBGI_RegisterCode_X64_ss;}break;
case REGS_RegCodeX64_cs:{result = RADDBG_RegisterCode_X64_cs;}break; case REGS_RegCodeX64_cs:{result = RADDBGI_RegisterCode_X64_cs;}break;
case REGS_RegCodeX64_ds:{result = RADDBG_RegisterCode_X64_ds;}break; case REGS_RegCodeX64_ds:{result = RADDBGI_RegisterCode_X64_ds;}break;
case REGS_RegCodeX64_es:{result = RADDBG_RegisterCode_X64_es;}break; case REGS_RegCodeX64_es:{result = RADDBGI_RegisterCode_X64_es;}break;
case REGS_RegCodeX64_fs:{result = RADDBG_RegisterCode_X64_fs;}break; case REGS_RegCodeX64_fs:{result = RADDBGI_RegisterCode_X64_fs;}break;
case REGS_RegCodeX64_gs:{result = RADDBG_RegisterCode_X64_gs;}break; case REGS_RegCodeX64_gs:{result = RADDBGI_RegisterCode_X64_gs;}break;
case REGS_RegCodeX64_ymm0:{result = RADDBG_RegisterCode_X64_ymm0;}break; case REGS_RegCodeX64_ymm0:{result = RADDBGI_RegisterCode_X64_ymm0;}break;
case REGS_RegCodeX64_ymm1:{result = RADDBG_RegisterCode_X64_ymm1;}break; case REGS_RegCodeX64_ymm1:{result = RADDBGI_RegisterCode_X64_ymm1;}break;
case REGS_RegCodeX64_ymm2:{result = RADDBG_RegisterCode_X64_ymm2;}break; case REGS_RegCodeX64_ymm2:{result = RADDBGI_RegisterCode_X64_ymm2;}break;
case REGS_RegCodeX64_ymm3:{result = RADDBG_RegisterCode_X64_ymm3;}break; case REGS_RegCodeX64_ymm3:{result = RADDBGI_RegisterCode_X64_ymm3;}break;
case REGS_RegCodeX64_ymm4:{result = RADDBG_RegisterCode_X64_ymm4;}break; case REGS_RegCodeX64_ymm4:{result = RADDBGI_RegisterCode_X64_ymm4;}break;
case REGS_RegCodeX64_ymm5:{result = RADDBG_RegisterCode_X64_ymm5;}break; case REGS_RegCodeX64_ymm5:{result = RADDBGI_RegisterCode_X64_ymm5;}break;
case REGS_RegCodeX64_ymm6:{result = RADDBG_RegisterCode_X64_ymm6;}break; case REGS_RegCodeX64_ymm6:{result = RADDBGI_RegisterCode_X64_ymm6;}break;
case REGS_RegCodeX64_ymm7:{result = RADDBG_RegisterCode_X64_ymm7;}break; case REGS_RegCodeX64_ymm7:{result = RADDBGI_RegisterCode_X64_ymm7;}break;
case REGS_RegCodeX64_ymm8:{result = RADDBG_RegisterCode_X64_ymm8;}break; case REGS_RegCodeX64_ymm8:{result = RADDBGI_RegisterCode_X64_ymm8;}break;
case REGS_RegCodeX64_ymm9:{result = RADDBG_RegisterCode_X64_ymm9;}break; case REGS_RegCodeX64_ymm9:{result = RADDBGI_RegisterCode_X64_ymm9;}break;
case REGS_RegCodeX64_ymm10:{result = RADDBG_RegisterCode_X64_ymm10;}break; case REGS_RegCodeX64_ymm10:{result = RADDBGI_RegisterCode_X64_ymm10;}break;
case REGS_RegCodeX64_ymm11:{result = RADDBG_RegisterCode_X64_ymm11;}break; case REGS_RegCodeX64_ymm11:{result = RADDBGI_RegisterCode_X64_ymm11;}break;
case REGS_RegCodeX64_ymm12:{result = RADDBG_RegisterCode_X64_ymm12;}break; case REGS_RegCodeX64_ymm12:{result = RADDBGI_RegisterCode_X64_ymm12;}break;
case REGS_RegCodeX64_ymm13:{result = RADDBG_RegisterCode_X64_ymm13;}break; case REGS_RegCodeX64_ymm13:{result = RADDBGI_RegisterCode_X64_ymm13;}break;
case REGS_RegCodeX64_ymm14:{result = RADDBG_RegisterCode_X64_ymm14;}break; case REGS_RegCodeX64_ymm14:{result = RADDBGI_RegisterCode_X64_ymm14;}break;
case REGS_RegCodeX64_ymm15:{result = RADDBG_RegisterCode_X64_ymm15;}break; case REGS_RegCodeX64_ymm15:{result = RADDBGI_RegisterCode_X64_ymm15;}break;
} }
}break; }break;
case Architecture_x86: case Architecture_x86:
@@ -97,72 +97,72 @@ case Architecture_x86:
switch(code) switch(code)
{ {
default:{}break; default:{}break;
case REGS_RegCodeX86_eax:{result = RADDBG_RegisterCode_X86_eax;}break; case REGS_RegCodeX86_eax:{result = RADDBGI_RegisterCode_X86_eax;}break;
case REGS_RegCodeX86_ecx:{result = RADDBG_RegisterCode_X86_ecx;}break; case REGS_RegCodeX86_ecx:{result = RADDBGI_RegisterCode_X86_ecx;}break;
case REGS_RegCodeX86_edx:{result = RADDBG_RegisterCode_X86_edx;}break; case REGS_RegCodeX86_edx:{result = RADDBGI_RegisterCode_X86_edx;}break;
case REGS_RegCodeX86_ebx:{result = RADDBG_RegisterCode_X86_ebx;}break; case REGS_RegCodeX86_ebx:{result = RADDBGI_RegisterCode_X86_ebx;}break;
case REGS_RegCodeX86_esp:{result = RADDBG_RegisterCode_X86_esp;}break; case REGS_RegCodeX86_esp:{result = RADDBGI_RegisterCode_X86_esp;}break;
case REGS_RegCodeX86_ebp:{result = RADDBG_RegisterCode_X86_ebp;}break; case REGS_RegCodeX86_ebp:{result = RADDBGI_RegisterCode_X86_ebp;}break;
case REGS_RegCodeX86_esi:{result = RADDBG_RegisterCode_X86_esi;}break; case REGS_RegCodeX86_esi:{result = RADDBGI_RegisterCode_X86_esi;}break;
case REGS_RegCodeX86_edi:{result = RADDBG_RegisterCode_X86_edi;}break; case REGS_RegCodeX86_edi:{result = RADDBGI_RegisterCode_X86_edi;}break;
case REGS_RegCodeX86_fsbase:{result = RADDBG_RegisterCode_X86_fsbase;}break; case REGS_RegCodeX86_fsbase:{result = RADDBGI_RegisterCode_X86_fsbase;}break;
case REGS_RegCodeX86_gsbase:{result = RADDBG_RegisterCode_X86_gsbase;}break; case REGS_RegCodeX86_gsbase:{result = RADDBGI_RegisterCode_X86_gsbase;}break;
case REGS_RegCodeX86_eflags:{result = RADDBG_RegisterCode_X86_eflags;}break; case REGS_RegCodeX86_eflags:{result = RADDBGI_RegisterCode_X86_eflags;}break;
case REGS_RegCodeX86_eip:{result = RADDBG_RegisterCode_X86_eip;}break; case REGS_RegCodeX86_eip:{result = RADDBGI_RegisterCode_X86_eip;}break;
case REGS_RegCodeX86_dr0:{result = RADDBG_RegisterCode_X86_dr0;}break; case REGS_RegCodeX86_dr0:{result = RADDBGI_RegisterCode_X86_dr0;}break;
case REGS_RegCodeX86_dr1:{result = RADDBG_RegisterCode_X86_dr1;}break; case REGS_RegCodeX86_dr1:{result = RADDBGI_RegisterCode_X86_dr1;}break;
case REGS_RegCodeX86_dr2:{result = RADDBG_RegisterCode_X86_dr2;}break; case REGS_RegCodeX86_dr2:{result = RADDBGI_RegisterCode_X86_dr2;}break;
case REGS_RegCodeX86_dr3:{result = RADDBG_RegisterCode_X86_dr3;}break; case REGS_RegCodeX86_dr3:{result = RADDBGI_RegisterCode_X86_dr3;}break;
case REGS_RegCodeX86_dr4:{result = RADDBG_RegisterCode_X86_dr4;}break; case REGS_RegCodeX86_dr4:{result = RADDBGI_RegisterCode_X86_dr4;}break;
case REGS_RegCodeX86_dr5:{result = RADDBG_RegisterCode_X86_dr5;}break; case REGS_RegCodeX86_dr5:{result = RADDBGI_RegisterCode_X86_dr5;}break;
case REGS_RegCodeX86_dr6:{result = RADDBG_RegisterCode_X86_dr6;}break; case REGS_RegCodeX86_dr6:{result = RADDBGI_RegisterCode_X86_dr6;}break;
case REGS_RegCodeX86_dr7:{result = RADDBG_RegisterCode_X86_dr7;}break; case REGS_RegCodeX86_dr7:{result = RADDBGI_RegisterCode_X86_dr7;}break;
case REGS_RegCodeX86_fpr0:{result = RADDBG_RegisterCode_X86_fpr0;}break; case REGS_RegCodeX86_fpr0:{result = RADDBGI_RegisterCode_X86_fpr0;}break;
case REGS_RegCodeX86_fpr1:{result = RADDBG_RegisterCode_X86_fpr1;}break; case REGS_RegCodeX86_fpr1:{result = RADDBGI_RegisterCode_X86_fpr1;}break;
case REGS_RegCodeX86_fpr2:{result = RADDBG_RegisterCode_X86_fpr2;}break; case REGS_RegCodeX86_fpr2:{result = RADDBGI_RegisterCode_X86_fpr2;}break;
case REGS_RegCodeX86_fpr3:{result = RADDBG_RegisterCode_X86_fpr3;}break; case REGS_RegCodeX86_fpr3:{result = RADDBGI_RegisterCode_X86_fpr3;}break;
case REGS_RegCodeX86_fpr4:{result = RADDBG_RegisterCode_X86_fpr4;}break; case REGS_RegCodeX86_fpr4:{result = RADDBGI_RegisterCode_X86_fpr4;}break;
case REGS_RegCodeX86_fpr5:{result = RADDBG_RegisterCode_X86_fpr5;}break; case REGS_RegCodeX86_fpr5:{result = RADDBGI_RegisterCode_X86_fpr5;}break;
case REGS_RegCodeX86_fpr6:{result = RADDBG_RegisterCode_X86_fpr6;}break; case REGS_RegCodeX86_fpr6:{result = RADDBGI_RegisterCode_X86_fpr6;}break;
case REGS_RegCodeX86_fpr7:{result = RADDBG_RegisterCode_X86_fpr7;}break; case REGS_RegCodeX86_fpr7:{result = RADDBGI_RegisterCode_X86_fpr7;}break;
case REGS_RegCodeX86_st0:{result = RADDBG_RegisterCode_X86_st0;}break; case REGS_RegCodeX86_st0:{result = RADDBGI_RegisterCode_X86_st0;}break;
case REGS_RegCodeX86_st1:{result = RADDBG_RegisterCode_X86_st1;}break; case REGS_RegCodeX86_st1:{result = RADDBGI_RegisterCode_X86_st1;}break;
case REGS_RegCodeX86_st2:{result = RADDBG_RegisterCode_X86_st2;}break; case REGS_RegCodeX86_st2:{result = RADDBGI_RegisterCode_X86_st2;}break;
case REGS_RegCodeX86_st3:{result = RADDBG_RegisterCode_X86_st3;}break; case REGS_RegCodeX86_st3:{result = RADDBGI_RegisterCode_X86_st3;}break;
case REGS_RegCodeX86_st4:{result = RADDBG_RegisterCode_X86_st4;}break; case REGS_RegCodeX86_st4:{result = RADDBGI_RegisterCode_X86_st4;}break;
case REGS_RegCodeX86_st5:{result = RADDBG_RegisterCode_X86_st5;}break; case REGS_RegCodeX86_st5:{result = RADDBGI_RegisterCode_X86_st5;}break;
case REGS_RegCodeX86_st6:{result = RADDBG_RegisterCode_X86_st6;}break; case REGS_RegCodeX86_st6:{result = RADDBGI_RegisterCode_X86_st6;}break;
case REGS_RegCodeX86_st7:{result = RADDBG_RegisterCode_X86_st7;}break; case REGS_RegCodeX86_st7:{result = RADDBGI_RegisterCode_X86_st7;}break;
case REGS_RegCodeX86_fcw:{result = RADDBG_RegisterCode_X86_fcw;}break; case REGS_RegCodeX86_fcw:{result = RADDBGI_RegisterCode_X86_fcw;}break;
case REGS_RegCodeX86_fsw:{result = RADDBG_RegisterCode_X86_fsw;}break; case REGS_RegCodeX86_fsw:{result = RADDBGI_RegisterCode_X86_fsw;}break;
case REGS_RegCodeX86_ftw:{result = RADDBG_RegisterCode_X86_ftw;}break; case REGS_RegCodeX86_ftw:{result = RADDBGI_RegisterCode_X86_ftw;}break;
case REGS_RegCodeX86_fop:{result = RADDBG_RegisterCode_X86_fop;}break; case REGS_RegCodeX86_fop:{result = RADDBGI_RegisterCode_X86_fop;}break;
case REGS_RegCodeX86_fcs:{result = RADDBG_RegisterCode_X86_fcs;}break; case REGS_RegCodeX86_fcs:{result = RADDBGI_RegisterCode_X86_fcs;}break;
case REGS_RegCodeX86_fds:{result = RADDBG_RegisterCode_X86_fds;}break; case REGS_RegCodeX86_fds:{result = RADDBGI_RegisterCode_X86_fds;}break;
case REGS_RegCodeX86_fip:{result = RADDBG_RegisterCode_X86_fip;}break; case REGS_RegCodeX86_fip:{result = RADDBGI_RegisterCode_X86_fip;}break;
case REGS_RegCodeX86_fdp:{result = RADDBG_RegisterCode_X86_fdp;}break; case REGS_RegCodeX86_fdp:{result = RADDBGI_RegisterCode_X86_fdp;}break;
case REGS_RegCodeX86_mxcsr:{result = RADDBG_RegisterCode_X86_mxcsr;}break; case REGS_RegCodeX86_mxcsr:{result = RADDBGI_RegisterCode_X86_mxcsr;}break;
case REGS_RegCodeX86_mxcsr_mask:{result = RADDBG_RegisterCode_X86_mxcsr_mask;}break; case REGS_RegCodeX86_mxcsr_mask:{result = RADDBGI_RegisterCode_X86_mxcsr_mask;}break;
case REGS_RegCodeX86_ss:{result = RADDBG_RegisterCode_X86_ss;}break; case REGS_RegCodeX86_ss:{result = RADDBGI_RegisterCode_X86_ss;}break;
case REGS_RegCodeX86_cs:{result = RADDBG_RegisterCode_X86_cs;}break; case REGS_RegCodeX86_cs:{result = RADDBGI_RegisterCode_X86_cs;}break;
case REGS_RegCodeX86_ds:{result = RADDBG_RegisterCode_X86_ds;}break; case REGS_RegCodeX86_ds:{result = RADDBGI_RegisterCode_X86_ds;}break;
case REGS_RegCodeX86_es:{result = RADDBG_RegisterCode_X86_es;}break; case REGS_RegCodeX86_es:{result = RADDBGI_RegisterCode_X86_es;}break;
case REGS_RegCodeX86_fs:{result = RADDBG_RegisterCode_X86_fs;}break; case REGS_RegCodeX86_fs:{result = RADDBGI_RegisterCode_X86_fs;}break;
case REGS_RegCodeX86_gs:{result = RADDBG_RegisterCode_X86_gs;}break; case REGS_RegCodeX86_gs:{result = RADDBGI_RegisterCode_X86_gs;}break;
case REGS_RegCodeX86_ymm0:{result = RADDBG_RegisterCode_X86_ymm0;}break; case REGS_RegCodeX86_ymm0:{result = RADDBGI_RegisterCode_X86_ymm0;}break;
case REGS_RegCodeX86_ymm1:{result = RADDBG_RegisterCode_X86_ymm1;}break; case REGS_RegCodeX86_ymm1:{result = RADDBGI_RegisterCode_X86_ymm1;}break;
case REGS_RegCodeX86_ymm2:{result = RADDBG_RegisterCode_X86_ymm2;}break; case REGS_RegCodeX86_ymm2:{result = RADDBGI_RegisterCode_X86_ymm2;}break;
case REGS_RegCodeX86_ymm3:{result = RADDBG_RegisterCode_X86_ymm3;}break; case REGS_RegCodeX86_ymm3:{result = RADDBGI_RegisterCode_X86_ymm3;}break;
case REGS_RegCodeX86_ymm4:{result = RADDBG_RegisterCode_X86_ymm4;}break; case REGS_RegCodeX86_ymm4:{result = RADDBGI_RegisterCode_X86_ymm4;}break;
case REGS_RegCodeX86_ymm5:{result = RADDBG_RegisterCode_X86_ymm5;}break; case REGS_RegCodeX86_ymm5:{result = RADDBGI_RegisterCode_X86_ymm5;}break;
case REGS_RegCodeX86_ymm6:{result = RADDBG_RegisterCode_X86_ymm6;}break; case REGS_RegCodeX86_ymm6:{result = RADDBGI_RegisterCode_X86_ymm6;}break;
case REGS_RegCodeX86_ymm7:{result = RADDBG_RegisterCode_X86_ymm7;}break; case REGS_RegCodeX86_ymm7:{result = RADDBGI_RegisterCode_X86_ymm7;}break;
} }
}break; }break;
} }
return result; return result;
} }
internal REGS_RegCode regs_reg_code_from_arch_raddbg_code(Architecture arch, RADDBG_RegisterCode code) internal REGS_RegCode regs_reg_code_from_arch_raddbgi_code(Architecture arch, RADDBGI_RegisterCode code)
{ {
REGS_RegCode result = 0; REGS_RegCode result = 0;
switch(arch) switch(arch)
@@ -173,82 +173,82 @@ case Architecture_x64:
switch(code) switch(code)
{ {
default:{}break; default:{}break;
case RADDBG_RegisterCode_X64_rax:{result = REGS_RegCodeX64_rax;}break; case RADDBGI_RegisterCode_X64_rax:{result = REGS_RegCodeX64_rax;}break;
case RADDBG_RegisterCode_X64_rcx:{result = REGS_RegCodeX64_rcx;}break; case RADDBGI_RegisterCode_X64_rcx:{result = REGS_RegCodeX64_rcx;}break;
case RADDBG_RegisterCode_X64_rdx:{result = REGS_RegCodeX64_rdx;}break; case RADDBGI_RegisterCode_X64_rdx:{result = REGS_RegCodeX64_rdx;}break;
case RADDBG_RegisterCode_X64_rbx:{result = REGS_RegCodeX64_rbx;}break; case RADDBGI_RegisterCode_X64_rbx:{result = REGS_RegCodeX64_rbx;}break;
case RADDBG_RegisterCode_X64_rsp:{result = REGS_RegCodeX64_rsp;}break; case RADDBGI_RegisterCode_X64_rsp:{result = REGS_RegCodeX64_rsp;}break;
case RADDBG_RegisterCode_X64_rbp:{result = REGS_RegCodeX64_rbp;}break; case RADDBGI_RegisterCode_X64_rbp:{result = REGS_RegCodeX64_rbp;}break;
case RADDBG_RegisterCode_X64_rsi:{result = REGS_RegCodeX64_rsi;}break; case RADDBGI_RegisterCode_X64_rsi:{result = REGS_RegCodeX64_rsi;}break;
case RADDBG_RegisterCode_X64_rdi:{result = REGS_RegCodeX64_rdi;}break; case RADDBGI_RegisterCode_X64_rdi:{result = REGS_RegCodeX64_rdi;}break;
case RADDBG_RegisterCode_X64_r8:{result = REGS_RegCodeX64_r8;}break; case RADDBGI_RegisterCode_X64_r8:{result = REGS_RegCodeX64_r8;}break;
case RADDBG_RegisterCode_X64_r9:{result = REGS_RegCodeX64_r9;}break; case RADDBGI_RegisterCode_X64_r9:{result = REGS_RegCodeX64_r9;}break;
case RADDBG_RegisterCode_X64_r10:{result = REGS_RegCodeX64_r10;}break; case RADDBGI_RegisterCode_X64_r10:{result = REGS_RegCodeX64_r10;}break;
case RADDBG_RegisterCode_X64_r11:{result = REGS_RegCodeX64_r11;}break; case RADDBGI_RegisterCode_X64_r11:{result = REGS_RegCodeX64_r11;}break;
case RADDBG_RegisterCode_X64_r12:{result = REGS_RegCodeX64_r12;}break; case RADDBGI_RegisterCode_X64_r12:{result = REGS_RegCodeX64_r12;}break;
case RADDBG_RegisterCode_X64_r13:{result = REGS_RegCodeX64_r13;}break; case RADDBGI_RegisterCode_X64_r13:{result = REGS_RegCodeX64_r13;}break;
case RADDBG_RegisterCode_X64_r14:{result = REGS_RegCodeX64_r14;}break; case RADDBGI_RegisterCode_X64_r14:{result = REGS_RegCodeX64_r14;}break;
case RADDBG_RegisterCode_X64_r15:{result = REGS_RegCodeX64_r15;}break; case RADDBGI_RegisterCode_X64_r15:{result = REGS_RegCodeX64_r15;}break;
case RADDBG_RegisterCode_X64_fsbase:{result = REGS_RegCodeX64_fsbase;}break; case RADDBGI_RegisterCode_X64_fsbase:{result = REGS_RegCodeX64_fsbase;}break;
case RADDBG_RegisterCode_X64_gsbase:{result = REGS_RegCodeX64_gsbase;}break; case RADDBGI_RegisterCode_X64_gsbase:{result = REGS_RegCodeX64_gsbase;}break;
case RADDBG_RegisterCode_X64_rip:{result = REGS_RegCodeX64_rip;}break; case RADDBGI_RegisterCode_X64_rip:{result = REGS_RegCodeX64_rip;}break;
case RADDBG_RegisterCode_X64_rflags:{result = REGS_RegCodeX64_rflags;}break; case RADDBGI_RegisterCode_X64_rflags:{result = REGS_RegCodeX64_rflags;}break;
case RADDBG_RegisterCode_X64_dr0:{result = REGS_RegCodeX64_dr0;}break; case RADDBGI_RegisterCode_X64_dr0:{result = REGS_RegCodeX64_dr0;}break;
case RADDBG_RegisterCode_X64_dr1:{result = REGS_RegCodeX64_dr1;}break; case RADDBGI_RegisterCode_X64_dr1:{result = REGS_RegCodeX64_dr1;}break;
case RADDBG_RegisterCode_X64_dr2:{result = REGS_RegCodeX64_dr2;}break; case RADDBGI_RegisterCode_X64_dr2:{result = REGS_RegCodeX64_dr2;}break;
case RADDBG_RegisterCode_X64_dr3:{result = REGS_RegCodeX64_dr3;}break; case RADDBGI_RegisterCode_X64_dr3:{result = REGS_RegCodeX64_dr3;}break;
case RADDBG_RegisterCode_X64_dr4:{result = REGS_RegCodeX64_dr4;}break; case RADDBGI_RegisterCode_X64_dr4:{result = REGS_RegCodeX64_dr4;}break;
case RADDBG_RegisterCode_X64_dr5:{result = REGS_RegCodeX64_dr5;}break; case RADDBGI_RegisterCode_X64_dr5:{result = REGS_RegCodeX64_dr5;}break;
case RADDBG_RegisterCode_X64_dr6:{result = REGS_RegCodeX64_dr6;}break; case RADDBGI_RegisterCode_X64_dr6:{result = REGS_RegCodeX64_dr6;}break;
case RADDBG_RegisterCode_X64_dr7:{result = REGS_RegCodeX64_dr7;}break; case RADDBGI_RegisterCode_X64_dr7:{result = REGS_RegCodeX64_dr7;}break;
case RADDBG_RegisterCode_X64_fpr0:{result = REGS_RegCodeX64_fpr0;}break; case RADDBGI_RegisterCode_X64_fpr0:{result = REGS_RegCodeX64_fpr0;}break;
case RADDBG_RegisterCode_X64_fpr1:{result = REGS_RegCodeX64_fpr1;}break; case RADDBGI_RegisterCode_X64_fpr1:{result = REGS_RegCodeX64_fpr1;}break;
case RADDBG_RegisterCode_X64_fpr2:{result = REGS_RegCodeX64_fpr2;}break; case RADDBGI_RegisterCode_X64_fpr2:{result = REGS_RegCodeX64_fpr2;}break;
case RADDBG_RegisterCode_X64_fpr3:{result = REGS_RegCodeX64_fpr3;}break; case RADDBGI_RegisterCode_X64_fpr3:{result = REGS_RegCodeX64_fpr3;}break;
case RADDBG_RegisterCode_X64_fpr4:{result = REGS_RegCodeX64_fpr4;}break; case RADDBGI_RegisterCode_X64_fpr4:{result = REGS_RegCodeX64_fpr4;}break;
case RADDBG_RegisterCode_X64_fpr5:{result = REGS_RegCodeX64_fpr5;}break; case RADDBGI_RegisterCode_X64_fpr5:{result = REGS_RegCodeX64_fpr5;}break;
case RADDBG_RegisterCode_X64_fpr6:{result = REGS_RegCodeX64_fpr6;}break; case RADDBGI_RegisterCode_X64_fpr6:{result = REGS_RegCodeX64_fpr6;}break;
case RADDBG_RegisterCode_X64_fpr7:{result = REGS_RegCodeX64_fpr7;}break; case RADDBGI_RegisterCode_X64_fpr7:{result = REGS_RegCodeX64_fpr7;}break;
case RADDBG_RegisterCode_X64_st0:{result = REGS_RegCodeX64_st0;}break; case RADDBGI_RegisterCode_X64_st0:{result = REGS_RegCodeX64_st0;}break;
case RADDBG_RegisterCode_X64_st1:{result = REGS_RegCodeX64_st1;}break; case RADDBGI_RegisterCode_X64_st1:{result = REGS_RegCodeX64_st1;}break;
case RADDBG_RegisterCode_X64_st2:{result = REGS_RegCodeX64_st2;}break; case RADDBGI_RegisterCode_X64_st2:{result = REGS_RegCodeX64_st2;}break;
case RADDBG_RegisterCode_X64_st3:{result = REGS_RegCodeX64_st3;}break; case RADDBGI_RegisterCode_X64_st3:{result = REGS_RegCodeX64_st3;}break;
case RADDBG_RegisterCode_X64_st4:{result = REGS_RegCodeX64_st4;}break; case RADDBGI_RegisterCode_X64_st4:{result = REGS_RegCodeX64_st4;}break;
case RADDBG_RegisterCode_X64_st5:{result = REGS_RegCodeX64_st5;}break; case RADDBGI_RegisterCode_X64_st5:{result = REGS_RegCodeX64_st5;}break;
case RADDBG_RegisterCode_X64_st6:{result = REGS_RegCodeX64_st6;}break; case RADDBGI_RegisterCode_X64_st6:{result = REGS_RegCodeX64_st6;}break;
case RADDBG_RegisterCode_X64_st7:{result = REGS_RegCodeX64_st7;}break; case RADDBGI_RegisterCode_X64_st7:{result = REGS_RegCodeX64_st7;}break;
case RADDBG_RegisterCode_X64_fcw:{result = REGS_RegCodeX64_fcw;}break; case RADDBGI_RegisterCode_X64_fcw:{result = REGS_RegCodeX64_fcw;}break;
case RADDBG_RegisterCode_X64_fsw:{result = REGS_RegCodeX64_fsw;}break; case RADDBGI_RegisterCode_X64_fsw:{result = REGS_RegCodeX64_fsw;}break;
case RADDBG_RegisterCode_X64_ftw:{result = REGS_RegCodeX64_ftw;}break; case RADDBGI_RegisterCode_X64_ftw:{result = REGS_RegCodeX64_ftw;}break;
case RADDBG_RegisterCode_X64_fop:{result = REGS_RegCodeX64_fop;}break; case RADDBGI_RegisterCode_X64_fop:{result = REGS_RegCodeX64_fop;}break;
case RADDBG_RegisterCode_X64_fcs:{result = REGS_RegCodeX64_fcs;}break; case RADDBGI_RegisterCode_X64_fcs:{result = REGS_RegCodeX64_fcs;}break;
case RADDBG_RegisterCode_X64_fds:{result = REGS_RegCodeX64_fds;}break; case RADDBGI_RegisterCode_X64_fds:{result = REGS_RegCodeX64_fds;}break;
case RADDBG_RegisterCode_X64_fip:{result = REGS_RegCodeX64_fip;}break; case RADDBGI_RegisterCode_X64_fip:{result = REGS_RegCodeX64_fip;}break;
case RADDBG_RegisterCode_X64_fdp:{result = REGS_RegCodeX64_fdp;}break; case RADDBGI_RegisterCode_X64_fdp:{result = REGS_RegCodeX64_fdp;}break;
case RADDBG_RegisterCode_X64_mxcsr:{result = REGS_RegCodeX64_mxcsr;}break; case RADDBGI_RegisterCode_X64_mxcsr:{result = REGS_RegCodeX64_mxcsr;}break;
case RADDBG_RegisterCode_X64_mxcsr_mask:{result = REGS_RegCodeX64_mxcsr_mask;}break; case RADDBGI_RegisterCode_X64_mxcsr_mask:{result = REGS_RegCodeX64_mxcsr_mask;}break;
case RADDBG_RegisterCode_X64_ss:{result = REGS_RegCodeX64_ss;}break; case RADDBGI_RegisterCode_X64_ss:{result = REGS_RegCodeX64_ss;}break;
case RADDBG_RegisterCode_X64_cs:{result = REGS_RegCodeX64_cs;}break; case RADDBGI_RegisterCode_X64_cs:{result = REGS_RegCodeX64_cs;}break;
case RADDBG_RegisterCode_X64_ds:{result = REGS_RegCodeX64_ds;}break; case RADDBGI_RegisterCode_X64_ds:{result = REGS_RegCodeX64_ds;}break;
case RADDBG_RegisterCode_X64_es:{result = REGS_RegCodeX64_es;}break; case RADDBGI_RegisterCode_X64_es:{result = REGS_RegCodeX64_es;}break;
case RADDBG_RegisterCode_X64_fs:{result = REGS_RegCodeX64_fs;}break; case RADDBGI_RegisterCode_X64_fs:{result = REGS_RegCodeX64_fs;}break;
case RADDBG_RegisterCode_X64_gs:{result = REGS_RegCodeX64_gs;}break; case RADDBGI_RegisterCode_X64_gs:{result = REGS_RegCodeX64_gs;}break;
case RADDBG_RegisterCode_X64_ymm0:{result = REGS_RegCodeX64_ymm0;}break; case RADDBGI_RegisterCode_X64_ymm0:{result = REGS_RegCodeX64_ymm0;}break;
case RADDBG_RegisterCode_X64_ymm1:{result = REGS_RegCodeX64_ymm1;}break; case RADDBGI_RegisterCode_X64_ymm1:{result = REGS_RegCodeX64_ymm1;}break;
case RADDBG_RegisterCode_X64_ymm2:{result = REGS_RegCodeX64_ymm2;}break; case RADDBGI_RegisterCode_X64_ymm2:{result = REGS_RegCodeX64_ymm2;}break;
case RADDBG_RegisterCode_X64_ymm3:{result = REGS_RegCodeX64_ymm3;}break; case RADDBGI_RegisterCode_X64_ymm3:{result = REGS_RegCodeX64_ymm3;}break;
case RADDBG_RegisterCode_X64_ymm4:{result = REGS_RegCodeX64_ymm4;}break; case RADDBGI_RegisterCode_X64_ymm4:{result = REGS_RegCodeX64_ymm4;}break;
case RADDBG_RegisterCode_X64_ymm5:{result = REGS_RegCodeX64_ymm5;}break; case RADDBGI_RegisterCode_X64_ymm5:{result = REGS_RegCodeX64_ymm5;}break;
case RADDBG_RegisterCode_X64_ymm6:{result = REGS_RegCodeX64_ymm6;}break; case RADDBGI_RegisterCode_X64_ymm6:{result = REGS_RegCodeX64_ymm6;}break;
case RADDBG_RegisterCode_X64_ymm7:{result = REGS_RegCodeX64_ymm7;}break; case RADDBGI_RegisterCode_X64_ymm7:{result = REGS_RegCodeX64_ymm7;}break;
case RADDBG_RegisterCode_X64_ymm8:{result = REGS_RegCodeX64_ymm8;}break; case RADDBGI_RegisterCode_X64_ymm8:{result = REGS_RegCodeX64_ymm8;}break;
case RADDBG_RegisterCode_X64_ymm9:{result = REGS_RegCodeX64_ymm9;}break; case RADDBGI_RegisterCode_X64_ymm9:{result = REGS_RegCodeX64_ymm9;}break;
case RADDBG_RegisterCode_X64_ymm10:{result = REGS_RegCodeX64_ymm10;}break; case RADDBGI_RegisterCode_X64_ymm10:{result = REGS_RegCodeX64_ymm10;}break;
case RADDBG_RegisterCode_X64_ymm11:{result = REGS_RegCodeX64_ymm11;}break; case RADDBGI_RegisterCode_X64_ymm11:{result = REGS_RegCodeX64_ymm11;}break;
case RADDBG_RegisterCode_X64_ymm12:{result = REGS_RegCodeX64_ymm12;}break; case RADDBGI_RegisterCode_X64_ymm12:{result = REGS_RegCodeX64_ymm12;}break;
case RADDBG_RegisterCode_X64_ymm13:{result = REGS_RegCodeX64_ymm13;}break; case RADDBGI_RegisterCode_X64_ymm13:{result = REGS_RegCodeX64_ymm13;}break;
case RADDBG_RegisterCode_X64_ymm14:{result = REGS_RegCodeX64_ymm14;}break; case RADDBGI_RegisterCode_X64_ymm14:{result = REGS_RegCodeX64_ymm14;}break;
case RADDBG_RegisterCode_X64_ymm15:{result = REGS_RegCodeX64_ymm15;}break; case RADDBGI_RegisterCode_X64_ymm15:{result = REGS_RegCodeX64_ymm15;}break;
} }
}break; }break;
case Architecture_x86: case Architecture_x86:
@@ -256,66 +256,66 @@ case Architecture_x86:
switch(code) switch(code)
{ {
default:{}break; default:{}break;
case RADDBG_RegisterCode_X86_eax:{result = REGS_RegCodeX86_eax;}break; case RADDBGI_RegisterCode_X86_eax:{result = REGS_RegCodeX86_eax;}break;
case RADDBG_RegisterCode_X86_ecx:{result = REGS_RegCodeX86_ecx;}break; case RADDBGI_RegisterCode_X86_ecx:{result = REGS_RegCodeX86_ecx;}break;
case RADDBG_RegisterCode_X86_edx:{result = REGS_RegCodeX86_edx;}break; case RADDBGI_RegisterCode_X86_edx:{result = REGS_RegCodeX86_edx;}break;
case RADDBG_RegisterCode_X86_ebx:{result = REGS_RegCodeX86_ebx;}break; case RADDBGI_RegisterCode_X86_ebx:{result = REGS_RegCodeX86_ebx;}break;
case RADDBG_RegisterCode_X86_esp:{result = REGS_RegCodeX86_esp;}break; case RADDBGI_RegisterCode_X86_esp:{result = REGS_RegCodeX86_esp;}break;
case RADDBG_RegisterCode_X86_ebp:{result = REGS_RegCodeX86_ebp;}break; case RADDBGI_RegisterCode_X86_ebp:{result = REGS_RegCodeX86_ebp;}break;
case RADDBG_RegisterCode_X86_esi:{result = REGS_RegCodeX86_esi;}break; case RADDBGI_RegisterCode_X86_esi:{result = REGS_RegCodeX86_esi;}break;
case RADDBG_RegisterCode_X86_edi:{result = REGS_RegCodeX86_edi;}break; case RADDBGI_RegisterCode_X86_edi:{result = REGS_RegCodeX86_edi;}break;
case RADDBG_RegisterCode_X86_fsbase:{result = REGS_RegCodeX86_fsbase;}break; case RADDBGI_RegisterCode_X86_fsbase:{result = REGS_RegCodeX86_fsbase;}break;
case RADDBG_RegisterCode_X86_gsbase:{result = REGS_RegCodeX86_gsbase;}break; case RADDBGI_RegisterCode_X86_gsbase:{result = REGS_RegCodeX86_gsbase;}break;
case RADDBG_RegisterCode_X86_eflags:{result = REGS_RegCodeX86_eflags;}break; case RADDBGI_RegisterCode_X86_eflags:{result = REGS_RegCodeX86_eflags;}break;
case RADDBG_RegisterCode_X86_eip:{result = REGS_RegCodeX86_eip;}break; case RADDBGI_RegisterCode_X86_eip:{result = REGS_RegCodeX86_eip;}break;
case RADDBG_RegisterCode_X86_dr0:{result = REGS_RegCodeX86_dr0;}break; case RADDBGI_RegisterCode_X86_dr0:{result = REGS_RegCodeX86_dr0;}break;
case RADDBG_RegisterCode_X86_dr1:{result = REGS_RegCodeX86_dr1;}break; case RADDBGI_RegisterCode_X86_dr1:{result = REGS_RegCodeX86_dr1;}break;
case RADDBG_RegisterCode_X86_dr2:{result = REGS_RegCodeX86_dr2;}break; case RADDBGI_RegisterCode_X86_dr2:{result = REGS_RegCodeX86_dr2;}break;
case RADDBG_RegisterCode_X86_dr3:{result = REGS_RegCodeX86_dr3;}break; case RADDBGI_RegisterCode_X86_dr3:{result = REGS_RegCodeX86_dr3;}break;
case RADDBG_RegisterCode_X86_dr4:{result = REGS_RegCodeX86_dr4;}break; case RADDBGI_RegisterCode_X86_dr4:{result = REGS_RegCodeX86_dr4;}break;
case RADDBG_RegisterCode_X86_dr5:{result = REGS_RegCodeX86_dr5;}break; case RADDBGI_RegisterCode_X86_dr5:{result = REGS_RegCodeX86_dr5;}break;
case RADDBG_RegisterCode_X86_dr6:{result = REGS_RegCodeX86_dr6;}break; case RADDBGI_RegisterCode_X86_dr6:{result = REGS_RegCodeX86_dr6;}break;
case RADDBG_RegisterCode_X86_dr7:{result = REGS_RegCodeX86_dr7;}break; case RADDBGI_RegisterCode_X86_dr7:{result = REGS_RegCodeX86_dr7;}break;
case RADDBG_RegisterCode_X86_fpr0:{result = REGS_RegCodeX86_fpr0;}break; case RADDBGI_RegisterCode_X86_fpr0:{result = REGS_RegCodeX86_fpr0;}break;
case RADDBG_RegisterCode_X86_fpr1:{result = REGS_RegCodeX86_fpr1;}break; case RADDBGI_RegisterCode_X86_fpr1:{result = REGS_RegCodeX86_fpr1;}break;
case RADDBG_RegisterCode_X86_fpr2:{result = REGS_RegCodeX86_fpr2;}break; case RADDBGI_RegisterCode_X86_fpr2:{result = REGS_RegCodeX86_fpr2;}break;
case RADDBG_RegisterCode_X86_fpr3:{result = REGS_RegCodeX86_fpr3;}break; case RADDBGI_RegisterCode_X86_fpr3:{result = REGS_RegCodeX86_fpr3;}break;
case RADDBG_RegisterCode_X86_fpr4:{result = REGS_RegCodeX86_fpr4;}break; case RADDBGI_RegisterCode_X86_fpr4:{result = REGS_RegCodeX86_fpr4;}break;
case RADDBG_RegisterCode_X86_fpr5:{result = REGS_RegCodeX86_fpr5;}break; case RADDBGI_RegisterCode_X86_fpr5:{result = REGS_RegCodeX86_fpr5;}break;
case RADDBG_RegisterCode_X86_fpr6:{result = REGS_RegCodeX86_fpr6;}break; case RADDBGI_RegisterCode_X86_fpr6:{result = REGS_RegCodeX86_fpr6;}break;
case RADDBG_RegisterCode_X86_fpr7:{result = REGS_RegCodeX86_fpr7;}break; case RADDBGI_RegisterCode_X86_fpr7:{result = REGS_RegCodeX86_fpr7;}break;
case RADDBG_RegisterCode_X86_st0:{result = REGS_RegCodeX86_st0;}break; case RADDBGI_RegisterCode_X86_st0:{result = REGS_RegCodeX86_st0;}break;
case RADDBG_RegisterCode_X86_st1:{result = REGS_RegCodeX86_st1;}break; case RADDBGI_RegisterCode_X86_st1:{result = REGS_RegCodeX86_st1;}break;
case RADDBG_RegisterCode_X86_st2:{result = REGS_RegCodeX86_st2;}break; case RADDBGI_RegisterCode_X86_st2:{result = REGS_RegCodeX86_st2;}break;
case RADDBG_RegisterCode_X86_st3:{result = REGS_RegCodeX86_st3;}break; case RADDBGI_RegisterCode_X86_st3:{result = REGS_RegCodeX86_st3;}break;
case RADDBG_RegisterCode_X86_st4:{result = REGS_RegCodeX86_st4;}break; case RADDBGI_RegisterCode_X86_st4:{result = REGS_RegCodeX86_st4;}break;
case RADDBG_RegisterCode_X86_st5:{result = REGS_RegCodeX86_st5;}break; case RADDBGI_RegisterCode_X86_st5:{result = REGS_RegCodeX86_st5;}break;
case RADDBG_RegisterCode_X86_st6:{result = REGS_RegCodeX86_st6;}break; case RADDBGI_RegisterCode_X86_st6:{result = REGS_RegCodeX86_st6;}break;
case RADDBG_RegisterCode_X86_st7:{result = REGS_RegCodeX86_st7;}break; case RADDBGI_RegisterCode_X86_st7:{result = REGS_RegCodeX86_st7;}break;
case RADDBG_RegisterCode_X86_fcw:{result = REGS_RegCodeX86_fcw;}break; case RADDBGI_RegisterCode_X86_fcw:{result = REGS_RegCodeX86_fcw;}break;
case RADDBG_RegisterCode_X86_fsw:{result = REGS_RegCodeX86_fsw;}break; case RADDBGI_RegisterCode_X86_fsw:{result = REGS_RegCodeX86_fsw;}break;
case RADDBG_RegisterCode_X86_ftw:{result = REGS_RegCodeX86_ftw;}break; case RADDBGI_RegisterCode_X86_ftw:{result = REGS_RegCodeX86_ftw;}break;
case RADDBG_RegisterCode_X86_fop:{result = REGS_RegCodeX86_fop;}break; case RADDBGI_RegisterCode_X86_fop:{result = REGS_RegCodeX86_fop;}break;
case RADDBG_RegisterCode_X86_fcs:{result = REGS_RegCodeX86_fcs;}break; case RADDBGI_RegisterCode_X86_fcs:{result = REGS_RegCodeX86_fcs;}break;
case RADDBG_RegisterCode_X86_fds:{result = REGS_RegCodeX86_fds;}break; case RADDBGI_RegisterCode_X86_fds:{result = REGS_RegCodeX86_fds;}break;
case RADDBG_RegisterCode_X86_fip:{result = REGS_RegCodeX86_fip;}break; case RADDBGI_RegisterCode_X86_fip:{result = REGS_RegCodeX86_fip;}break;
case RADDBG_RegisterCode_X86_fdp:{result = REGS_RegCodeX86_fdp;}break; case RADDBGI_RegisterCode_X86_fdp:{result = REGS_RegCodeX86_fdp;}break;
case RADDBG_RegisterCode_X86_mxcsr:{result = REGS_RegCodeX86_mxcsr;}break; case RADDBGI_RegisterCode_X86_mxcsr:{result = REGS_RegCodeX86_mxcsr;}break;
case RADDBG_RegisterCode_X86_mxcsr_mask:{result = REGS_RegCodeX86_mxcsr_mask;}break; case RADDBGI_RegisterCode_X86_mxcsr_mask:{result = REGS_RegCodeX86_mxcsr_mask;}break;
case RADDBG_RegisterCode_X86_ss:{result = REGS_RegCodeX86_ss;}break; case RADDBGI_RegisterCode_X86_ss:{result = REGS_RegCodeX86_ss;}break;
case RADDBG_RegisterCode_X86_cs:{result = REGS_RegCodeX86_cs;}break; case RADDBGI_RegisterCode_X86_cs:{result = REGS_RegCodeX86_cs;}break;
case RADDBG_RegisterCode_X86_ds:{result = REGS_RegCodeX86_ds;}break; case RADDBGI_RegisterCode_X86_ds:{result = REGS_RegCodeX86_ds;}break;
case RADDBG_RegisterCode_X86_es:{result = REGS_RegCodeX86_es;}break; case RADDBGI_RegisterCode_X86_es:{result = REGS_RegCodeX86_es;}break;
case RADDBG_RegisterCode_X86_fs:{result = REGS_RegCodeX86_fs;}break; case RADDBGI_RegisterCode_X86_fs:{result = REGS_RegCodeX86_fs;}break;
case RADDBG_RegisterCode_X86_gs:{result = REGS_RegCodeX86_gs;}break; case RADDBGI_RegisterCode_X86_gs:{result = REGS_RegCodeX86_gs;}break;
case RADDBG_RegisterCode_X86_ymm0:{result = REGS_RegCodeX86_ymm0;}break; case RADDBGI_RegisterCode_X86_ymm0:{result = REGS_RegCodeX86_ymm0;}break;
case RADDBG_RegisterCode_X86_ymm1:{result = REGS_RegCodeX86_ymm1;}break; case RADDBGI_RegisterCode_X86_ymm1:{result = REGS_RegCodeX86_ymm1;}break;
case RADDBG_RegisterCode_X86_ymm2:{result = REGS_RegCodeX86_ymm2;}break; case RADDBGI_RegisterCode_X86_ymm2:{result = REGS_RegCodeX86_ymm2;}break;
case RADDBG_RegisterCode_X86_ymm3:{result = REGS_RegCodeX86_ymm3;}break; case RADDBGI_RegisterCode_X86_ymm3:{result = REGS_RegCodeX86_ymm3;}break;
case RADDBG_RegisterCode_X86_ymm4:{result = REGS_RegCodeX86_ymm4;}break; case RADDBGI_RegisterCode_X86_ymm4:{result = REGS_RegCodeX86_ymm4;}break;
case RADDBG_RegisterCode_X86_ymm5:{result = REGS_RegCodeX86_ymm5;}break; case RADDBGI_RegisterCode_X86_ymm5:{result = REGS_RegCodeX86_ymm5;}break;
case RADDBG_RegisterCode_X86_ymm6:{result = REGS_RegCodeX86_ymm6;}break; case RADDBGI_RegisterCode_X86_ymm6:{result = REGS_RegCodeX86_ymm6;}break;
case RADDBG_RegisterCode_X86_ymm7:{result = REGS_RegCodeX86_ymm7;}break; case RADDBGI_RegisterCode_X86_ymm7:{result = REGS_RegCodeX86_ymm7;}break;
} }
}break; }break;
} }
@@ -3,8 +3,8 @@
//- GENERATED CODE //- GENERATED CODE
#ifndef REGS_RADDBG_META_H #ifndef REGS_RADDBGI_META_H
#define REGS_RADDBG_META_H #define REGS_RADDBGI_META_H
#endif // REGS_RADDBG_META_H #endif // REGS_RADDBGI_META_H
+5 -5
View File
@@ -1,10 +1,10 @@
// Copyright (c) 2024 Epic Games Tools // Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/) // Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef REGS_RADDBG_H #ifndef REGS_RADDBGI_H
#define REGS_RADDBG_H #define REGS_RADDBGI_H
internal RADDBG_RegisterCode regs_raddbg_code_from_arch_reg_code(Architecture arch, REGS_RegCode code); internal RADDBGI_RegisterCode regs_raddbgi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code);
internal REGS_RegCode regs_reg_code_from_arch_raddbg_code(Architecture arch, RADDBG_RegisterCode reg); internal REGS_RegCode regs_reg_code_from_arch_raddbgi_code(Architecture arch, RADDBGI_RegisterCode reg);
#endif //REGS_RADDBG_H #endif //REGS_RADDBGI_H
@@ -6,9 +6,9 @@
@table_gen @c_file @table_gen @c_file
{ {
`internal RADDBG_RegisterCode regs_raddbg_code_from_arch_reg_code(Architecture arch, REGS_RegCode code)`; `internal RADDBGI_RegisterCode regs_raddbgi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code)`;
`{`; `{`;
`RADDBG_RegisterCode result = 0;`; `RADDBGI_RegisterCode result = 0;`;
`switch(arch)`; `switch(arch)`;
`{`; `{`;
`default:{}break;`; `default:{}break;`;
@@ -17,7 +17,7 @@
`switch(code)` `switch(code)`
`{`; `{`;
`default:{}break;`; `default:{}break;`;
@expand(REGS_RegTableX64 a) `case REGS_RegCodeX64_$(a.name):{result = RADDBG_RegisterCode_X64_$(a.name);}break;`; @expand(REGS_RegTableX64 a) `case REGS_RegCodeX64_$(a.name):{result = RADDBGI_RegisterCode_X64_$(a.name);}break;`;
`}`; `}`;
`}break;`; `}break;`;
`case Architecture_x86:`; `case Architecture_x86:`;
@@ -25,7 +25,7 @@
`switch(code)` `switch(code)`
`{`; `{`;
`default:{}break;`; `default:{}break;`;
@expand(REGS_RegTableX86 a) `case REGS_RegCodeX86_$(a.name):{result = RADDBG_RegisterCode_X86_$(a.name);}break;`; @expand(REGS_RegTableX86 a) `case REGS_RegCodeX86_$(a.name):{result = RADDBGI_RegisterCode_X86_$(a.name);}break;`;
`}`; `}`;
`}break;`; `}break;`;
`}`; `}`;
@@ -35,7 +35,7 @@
@table_gen @c_file @table_gen @c_file
{ {
`internal REGS_RegCode regs_reg_code_from_arch_raddbg_code(Architecture arch, RADDBG_RegisterCode code)`; `internal REGS_RegCode regs_reg_code_from_arch_raddbgi_code(Architecture arch, RADDBGI_RegisterCode code)`;
`{`; `{`;
`REGS_RegCode result = 0;`; `REGS_RegCode result = 0;`;
`switch(arch)`; `switch(arch)`;
@@ -46,7 +46,7 @@
`switch(code)` `switch(code)`
`{`; `{`;
`default:{}break;`; `default:{}break;`;
@expand(REGS_RegTableX64 a) `case RADDBG_RegisterCode_X64_$(a.name):{result = REGS_RegCodeX64_$(a.name);}break;`; @expand(REGS_RegTableX64 a) `case RADDBGI_RegisterCode_X64_$(a.name):{result = REGS_RegCodeX64_$(a.name);}break;`;
`}`; `}`;
`}break;`; `}break;`;
`case Architecture_x86:`; `case Architecture_x86:`;
@@ -54,7 +54,7 @@
`switch(code)` `switch(code)`
`{`; `{`;
`default:{}break;`; `default:{}break;`;
@expand(REGS_RegTableX86 a) `case RADDBG_RegisterCode_X86_$(a.name):{result = REGS_RegCodeX86_$(a.name);}break;`; @expand(REGS_RegTableX86 a) `case RADDBGI_RegisterCode_X86_$(a.name):{result = REGS_RegCodeX86_$(a.name);}break;`;
`}`; `}`;
`}break;`; `}break;`;
`}`; `}`;
+8 -8
View File
@@ -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); uint8_t *data = (uint8_t *)MapViewOfFile(map, FILE_MAP_READ, 0, 0, data_size);
// parse raw data as raddbg // parse raw data as raddbg
RADDBG_Parsed rdbg = {0}; RADDBGI_Parsed rdbg = {0};
RADDBG_ParseStatus parse_status = raddbg_parse(data, data_size, &rdbg); RADDBGI_ParseStatus parse_status = raddbgi_parse(data, data_size, &rdbg);
// usage example: print out all procedure symbol names // usage example: print out all procedure symbol names
#if 1 #if 1
for(uint64_t procedure_idx = 0; procedure_idx < rdbg.procedure_count; procedure_idx += 1) for(uint64_t procedure_idx = 0; procedure_idx < rdbg.procedure_count; procedure_idx += 1)
{ {
RADDBG_Procedure *procedure = &rdbg.procedures[procedure_idx]; RADDBGI_Procedure *procedure = &rdbg.procedures[procedure_idx];
uint64_t name_size = 0; uint64_t name_size = 0;
uint8_t *name = raddbg_string_from_idx(&rdbg, procedure->name_string_idx, &name_size); uint8_t *name = raddbgi_string_from_idx(&rdbg, procedure->name_string_idx, &name_size);
printf("[%I64u] %.*s\n", procedure_idx, (int)name_size, name); printf("[%I64u] %.*s\n", procedure_idx, (int)name_size, name);
} }
#endif #endif
@@ -40,15 +40,15 @@ int main(int argument_count, char **arguments)
#if 0 #if 0
for(uint64_t udt_idx = 0; udt_idx < rdbg.udt_count; udt_idx += 1) for(uint64_t udt_idx = 0; udt_idx < rdbg.udt_count; udt_idx += 1)
{ {
RADDBG_UDT *udt = &rdbg.udts[udt_idx]; RADDBGI_UDT *udt = &rdbg.udts[udt_idx];
RADDBG_TypeNode *type = &rdbg.type_nodes[udt->self_type_idx]; RADDBGI_TypeNode *type = &rdbg.type_nodes[udt->self_type_idx];
uint64_t name_size = 0; uint64_t name_size = 0;
uint8_t *name = raddbg_string_from_idx(&rdbg, type->user_defined.name_string_idx, &name_size); uint8_t *name = raddbgi_string_from_idx(&rdbg, type->user_defined.name_string_idx, &name_size);
printf("[%I64u] %.*s\n", udt_idx, (int)name_size, name); printf("[%I64u] %.*s\n", udt_idx, (int)name_size, name);
} }
#endif #endif
// for getting more info, look at the `RADDBG_Parsed` structure. all data is // for getting more info, look at the `RADDBGI_Parsed` structure. all data is
// represented as a bunch of flat plain-old-data tables. data which must // 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 // 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 // example, given a `type_idx`, I will index into `rdbg.type_nodes`. given a
+151 -151
View File
@@ -54,85 +54,85 @@ tg_key_list_copy(Arena *arena, TG_KeyList *src)
//~ rjf: RADDBG <-> TG Enum Conversions //~ rjf: RADDBG <-> TG Enum Conversions
internal TG_Kind internal TG_Kind
tg_kind_from_raddbg_type_kind(RADDBG_TypeKind kind) tg_kind_from_raddbgi_type_kind(RADDBGI_TypeKind kind)
{ {
TG_Kind result = TG_Kind_Null; TG_Kind result = TG_Kind_Null;
switch(kind) switch(kind)
{ {
default:{}break; default:{}break;
case RADDBG_TypeKind_Void: {result = TG_Kind_Void;}break; case RADDBGI_TypeKind_Void: {result = TG_Kind_Void;}break;
case RADDBG_TypeKind_Handle: {result = TG_Kind_Handle;}break; case RADDBGI_TypeKind_Handle: {result = TG_Kind_Handle;}break;
case RADDBG_TypeKind_Char8: {result = TG_Kind_Char8;}break; case RADDBGI_TypeKind_Char8: {result = TG_Kind_Char8;}break;
case RADDBG_TypeKind_Char16: {result = TG_Kind_Char16;}break; case RADDBGI_TypeKind_Char16: {result = TG_Kind_Char16;}break;
case RADDBG_TypeKind_Char32: {result = TG_Kind_Char32;}break; case RADDBGI_TypeKind_Char32: {result = TG_Kind_Char32;}break;
case RADDBG_TypeKind_UChar8: {result = TG_Kind_UChar8;}break; case RADDBGI_TypeKind_UChar8: {result = TG_Kind_UChar8;}break;
case RADDBG_TypeKind_UChar16: {result = TG_Kind_UChar16;}break; case RADDBGI_TypeKind_UChar16: {result = TG_Kind_UChar16;}break;
case RADDBG_TypeKind_UChar32: {result = TG_Kind_UChar32;}break; case RADDBGI_TypeKind_UChar32: {result = TG_Kind_UChar32;}break;
case RADDBG_TypeKind_U8: {result = TG_Kind_U8;}break; case RADDBGI_TypeKind_U8: {result = TG_Kind_U8;}break;
case RADDBG_TypeKind_U16: {result = TG_Kind_U16;}break; case RADDBGI_TypeKind_U16: {result = TG_Kind_U16;}break;
case RADDBG_TypeKind_U32: {result = TG_Kind_U32;}break; case RADDBGI_TypeKind_U32: {result = TG_Kind_U32;}break;
case RADDBG_TypeKind_U64: {result = TG_Kind_U64;}break; case RADDBGI_TypeKind_U64: {result = TG_Kind_U64;}break;
case RADDBG_TypeKind_U128: {result = TG_Kind_U128;}break; case RADDBGI_TypeKind_U128: {result = TG_Kind_U128;}break;
case RADDBG_TypeKind_U256: {result = TG_Kind_U256;}break; case RADDBGI_TypeKind_U256: {result = TG_Kind_U256;}break;
case RADDBG_TypeKind_U512: {result = TG_Kind_U512;}break; case RADDBGI_TypeKind_U512: {result = TG_Kind_U512;}break;
case RADDBG_TypeKind_S8: {result = TG_Kind_S8;}break; case RADDBGI_TypeKind_S8: {result = TG_Kind_S8;}break;
case RADDBG_TypeKind_S16: {result = TG_Kind_S16;}break; case RADDBGI_TypeKind_S16: {result = TG_Kind_S16;}break;
case RADDBG_TypeKind_S32: {result = TG_Kind_S32;}break; case RADDBGI_TypeKind_S32: {result = TG_Kind_S32;}break;
case RADDBG_TypeKind_S64: {result = TG_Kind_S64;}break; case RADDBGI_TypeKind_S64: {result = TG_Kind_S64;}break;
case RADDBG_TypeKind_S128: {result = TG_Kind_S128;}break; case RADDBGI_TypeKind_S128: {result = TG_Kind_S128;}break;
case RADDBG_TypeKind_S256: {result = TG_Kind_S256;}break; case RADDBGI_TypeKind_S256: {result = TG_Kind_S256;}break;
case RADDBG_TypeKind_S512: {result = TG_Kind_S512;}break; case RADDBGI_TypeKind_S512: {result = TG_Kind_S512;}break;
case RADDBG_TypeKind_Bool: {result = TG_Kind_Bool;}break; case RADDBGI_TypeKind_Bool: {result = TG_Kind_Bool;}break;
case RADDBG_TypeKind_F16: {result = TG_Kind_F16;}break; case RADDBGI_TypeKind_F16: {result = TG_Kind_F16;}break;
case RADDBG_TypeKind_F32: {result = TG_Kind_F32;}break; case RADDBGI_TypeKind_F32: {result = TG_Kind_F32;}break;
case RADDBG_TypeKind_F32PP: {result = TG_Kind_F32PP;}break; case RADDBGI_TypeKind_F32PP: {result = TG_Kind_F32PP;}break;
case RADDBG_TypeKind_F48: {result = TG_Kind_F48;}break; case RADDBGI_TypeKind_F48: {result = TG_Kind_F48;}break;
case RADDBG_TypeKind_F64: {result = TG_Kind_F64;}break; case RADDBGI_TypeKind_F64: {result = TG_Kind_F64;}break;
case RADDBG_TypeKind_F80: {result = TG_Kind_F80;}break; case RADDBGI_TypeKind_F80: {result = TG_Kind_F80;}break;
case RADDBG_TypeKind_F128: {result = TG_Kind_F128;}break; case RADDBGI_TypeKind_F128: {result = TG_Kind_F128;}break;
case RADDBG_TypeKind_ComplexF32: {result = TG_Kind_ComplexF32;}break; case RADDBGI_TypeKind_ComplexF32: {result = TG_Kind_ComplexF32;}break;
case RADDBG_TypeKind_ComplexF64: {result = TG_Kind_ComplexF64;}break; case RADDBGI_TypeKind_ComplexF64: {result = TG_Kind_ComplexF64;}break;
case RADDBG_TypeKind_ComplexF80: {result = TG_Kind_ComplexF80;}break; case RADDBGI_TypeKind_ComplexF80: {result = TG_Kind_ComplexF80;}break;
case RADDBG_TypeKind_ComplexF128: {result = TG_Kind_ComplexF128;}break; case RADDBGI_TypeKind_ComplexF128: {result = TG_Kind_ComplexF128;}break;
case RADDBG_TypeKind_Modifier: {result = TG_Kind_Modifier;}break; case RADDBGI_TypeKind_Modifier: {result = TG_Kind_Modifier;}break;
case RADDBG_TypeKind_Ptr: {result = TG_Kind_Ptr;}break; case RADDBGI_TypeKind_Ptr: {result = TG_Kind_Ptr;}break;
case RADDBG_TypeKind_LRef: {result = TG_Kind_LRef;}break; case RADDBGI_TypeKind_LRef: {result = TG_Kind_LRef;}break;
case RADDBG_TypeKind_RRef: {result = TG_Kind_RRef;}break; case RADDBGI_TypeKind_RRef: {result = TG_Kind_RRef;}break;
case RADDBG_TypeKind_Array: {result = TG_Kind_Array;}break; case RADDBGI_TypeKind_Array: {result = TG_Kind_Array;}break;
case RADDBG_TypeKind_Function: {result = TG_Kind_Function;}break; case RADDBGI_TypeKind_Function: {result = TG_Kind_Function;}break;
case RADDBG_TypeKind_Method: {result = TG_Kind_Method;}break; case RADDBGI_TypeKind_Method: {result = TG_Kind_Method;}break;
case RADDBG_TypeKind_MemberPtr: {result = TG_Kind_MemberPtr;}break; case RADDBGI_TypeKind_MemberPtr: {result = TG_Kind_MemberPtr;}break;
case RADDBG_TypeKind_Struct: {result = TG_Kind_Struct;}break; case RADDBGI_TypeKind_Struct: {result = TG_Kind_Struct;}break;
case RADDBG_TypeKind_Class: {result = TG_Kind_Class;}break; case RADDBGI_TypeKind_Class: {result = TG_Kind_Class;}break;
case RADDBG_TypeKind_Union: {result = TG_Kind_Union;}break; case RADDBGI_TypeKind_Union: {result = TG_Kind_Union;}break;
case RADDBG_TypeKind_Enum: {result = TG_Kind_Enum;}break; case RADDBGI_TypeKind_Enum: {result = TG_Kind_Enum;}break;
case RADDBG_TypeKind_Alias: {result = TG_Kind_Alias;}break; case RADDBGI_TypeKind_Alias: {result = TG_Kind_Alias;}break;
case RADDBG_TypeKind_IncompleteStruct: {result = TG_Kind_IncompleteStruct;}break; case RADDBGI_TypeKind_IncompleteStruct: {result = TG_Kind_IncompleteStruct;}break;
case RADDBG_TypeKind_IncompleteUnion: {result = TG_Kind_IncompleteUnion;}break; case RADDBGI_TypeKind_IncompleteUnion: {result = TG_Kind_IncompleteUnion;}break;
case RADDBG_TypeKind_IncompleteClass: {result = TG_Kind_IncompleteClass;}break; case RADDBGI_TypeKind_IncompleteClass: {result = TG_Kind_IncompleteClass;}break;
case RADDBG_TypeKind_IncompleteEnum: {result = TG_Kind_IncompleteEnum;}break; case RADDBGI_TypeKind_IncompleteEnum: {result = TG_Kind_IncompleteEnum;}break;
case RADDBG_TypeKind_Bitfield: {result = TG_Kind_Bitfield;}break; case RADDBGI_TypeKind_Bitfield: {result = TG_Kind_Bitfield;}break;
case RADDBG_TypeKind_Variadic: {result = TG_Kind_Variadic;}break; case RADDBGI_TypeKind_Variadic: {result = TG_Kind_Variadic;}break;
} }
return result; return result;
} }
internal TG_MemberKind internal TG_MemberKind
tg_member_kind_from_raddbg_member_kind(RADDBG_MemberKind kind) tg_member_kind_from_raddbgi_member_kind(RADDBGI_MemberKind kind)
{ {
TG_MemberKind result = TG_MemberKind_Null; TG_MemberKind result = TG_MemberKind_Null;
switch(kind) switch(kind)
{ {
default:{}break; default:{}break;
case RADDBG_MemberKind_DataField: {result = TG_MemberKind_DataField;}break; case RADDBGI_MemberKind_DataField: {result = TG_MemberKind_DataField;}break;
case RADDBG_MemberKind_StaticData: {result = TG_MemberKind_StaticData;}break; case RADDBGI_MemberKind_StaticData: {result = TG_MemberKind_StaticData;}break;
case RADDBG_MemberKind_Method: {result = TG_MemberKind_Method;}break; case RADDBGI_MemberKind_Method: {result = TG_MemberKind_Method;}break;
case RADDBG_MemberKind_StaticMethod: {result = TG_MemberKind_StaticMethod;}break; case RADDBGI_MemberKind_StaticMethod: {result = TG_MemberKind_StaticMethod;}break;
case RADDBG_MemberKind_VirtualMethod: {result = TG_MemberKind_VirtualMethod;}break; case RADDBGI_MemberKind_VirtualMethod: {result = TG_MemberKind_VirtualMethod;}break;
case RADDBG_MemberKind_VTablePtr: {result = TG_MemberKind_VTablePtr;}break; case RADDBGI_MemberKind_VTablePtr: {result = TG_MemberKind_VTablePtr;}break;
case RADDBG_MemberKind_Base: {result = TG_MemberKind_Base;}break; case RADDBGI_MemberKind_Base: {result = TG_MemberKind_Base;}break;
case RADDBG_MemberKind_VirtualBase: {result = TG_MemberKind_VirtualBase;}break; case RADDBGI_MemberKind_VirtualBase: {result = TG_MemberKind_VirtualBase;}break;
case RADDBG_MemberKind_NestedType: {result = TG_MemberKind_NestedType;}break; case RADDBGI_MemberKind_NestedType: {result = TG_MemberKind_NestedType;}break;
} }
return result; return result;
} }
@@ -274,7 +274,7 @@ tg_cons_type_make(TG_Graph *graph, TG_Kind kind, TG_Key direct_type_key, U64 u64
//~ rjf: Graph Introspection API //~ rjf: Graph Introspection API
internal TG_Type * internal TG_Type *
tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key) tg_type_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{ {
TG_Type *type = &tg_type_nil; TG_Type *type = &tg_type_nil;
U64 reg_byte_count = 0; U64 reg_byte_count = 0;
@@ -319,7 +319,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
}break; }break;
case TG_Kind_Array: case TG_Kind_Array:
{ {
U64 ptee_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, cons_type->direct_type_key); U64 ptee_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, cons_type->direct_type_key);
type->byte_size = ptee_size * type->count; type->byte_size = ptee_size * type->count;
}break; }break;
} }
@@ -333,18 +333,18 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
U64 type_node_idx = key.u64[0]; U64 type_node_idx = key.u64[0];
if(0 <= type_node_idx && type_node_idx < rdbg->type_nodes_count) if(0 <= type_node_idx && type_node_idx < rdbg->type_nodes_count)
{ {
RADDBG_TypeNode *rdbg_type = &rdbg->type_nodes[type_node_idx]; RADDBGI_TypeNode *rdbg_type = &rdbg->type_nodes[type_node_idx];
TG_Kind kind = tg_kind_from_raddbg_type_kind(rdbg_type->kind); TG_Kind kind = tg_kind_from_raddbgi_type_kind(rdbg_type->kind);
//- rjf: record types => unpack name * members & produce //- rjf: record types => unpack name * members & produce
if(RADDBG_TypeKind_FirstRecord <= rdbg_type->kind && rdbg_type->kind <= RADDBG_TypeKind_LastRecord) if(RADDBGI_TypeKind_FirstRecord <= rdbg_type->kind && rdbg_type->kind <= RADDBGI_TypeKind_LastRecord)
{ {
// rjf: unpack name // rjf: unpack name
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size); name.str = raddbgi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
// rjf: unpack UDT info // rjf: unpack UDT info
RADDBG_UDT *udt = raddbg_element_from_idx(rdbg, udts, rdbg_type->user_defined.udt_idx); RADDBGI_UDT *udt = raddbgi_element_from_idx(rdbg, udts, rdbg_type->user_defined.udt_idx);
// rjf: unpack members // rjf: unpack members
TG_Member *members = 0; TG_Member *members = 0;
@@ -358,17 +358,17 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
member_idx < udt->member_first+udt->member_count; member_idx < udt->member_first+udt->member_count;
member_idx += 1) member_idx += 1)
{ {
RADDBG_Member *src = &rdbg->members[member_idx]; RADDBGI_Member *src = &rdbg->members[member_idx];
TG_Kind member_type_kind = TG_Kind_Null; TG_Kind member_type_kind = TG_Kind_Null;
if(src->type_idx < rdbg->type_nodes_count) if(src->type_idx < rdbg->type_nodes_count)
{ {
RADDBG_TypeNode *member_type = &rdbg->type_nodes[src->type_idx]; RADDBGI_TypeNode *member_type = &rdbg->type_nodes[src->type_idx];
member_type_kind = tg_kind_from_raddbg_type_kind(member_type->kind); member_type_kind = tg_kind_from_raddbgi_type_kind(member_type->kind);
} }
TG_Member *dst = &members[member_idx-udt->member_first]; TG_Member *dst = &members[member_idx-udt->member_first];
dst->kind = tg_member_kind_from_raddbg_member_kind(src->kind); dst->kind = tg_member_kind_from_raddbgi_member_kind(src->kind);
dst->type_key = tg_key_ext(member_type_kind, (U64)src->type_idx); dst->type_key = tg_key_ext(member_type_kind, (U64)src->type_idx);
dst->name.str = raddbg_string_from_idx(rdbg, src->name_string_idx, &dst->name.size); dst->name.str = raddbgi_string_from_idx(rdbg, src->name_string_idx, &dst->name.size);
dst->off = (U64)src->off; dst->off = (U64)src->off;
} }
} }
@@ -384,18 +384,18 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
} }
//- rjf: enum types => unpack name * values & produce //- rjf: enum types => unpack name * values & produce
else if(rdbg_type->kind == RADDBG_TypeKind_Enum) else if(rdbg_type->kind == RADDBGI_TypeKind_Enum)
{ {
// rjf: unpack name // rjf: unpack name
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size); name.str = raddbgi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
// rjf: unpack direct type // rjf: unpack direct type
TG_Key direct_type_key = zero_struct; TG_Key direct_type_key = zero_struct;
if(rdbg_type->user_defined.direct_type_idx < type_node_idx) if(rdbg_type->user_defined.direct_type_idx < type_node_idx)
{ {
RADDBG_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx]; RADDBGI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbg_type_kind(direct_type_node->kind); TG_Kind direct_type_kind = tg_kind_from_raddbgi_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_key = tg_key_ext(direct_type_kind, (U64)rdbg_type->user_defined.direct_type_idx);
} }
@@ -406,7 +406,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
U32 udt_idx = rdbg_type->user_defined.udt_idx; U32 udt_idx = rdbg_type->user_defined.udt_idx;
if(0 <= udt_idx && udt_idx < rdbg->udts_count) if(0 <= udt_idx && udt_idx < rdbg->udts_count)
{ {
RADDBG_UDT *udt = &rdbg->udts[udt_idx]; RADDBGI_UDT *udt = &rdbg->udts[udt_idx];
enum_vals_count = udt->member_count; enum_vals_count = udt->member_count;
enum_vals = push_array(arena, TG_EnumVal, enum_vals_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) if(0 <= udt->member_first && udt->member_first+udt->member_count < rdbg->enum_members_count)
@@ -415,9 +415,9 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
member_idx < udt->member_first+udt->member_count; member_idx < udt->member_first+udt->member_count;
member_idx += 1) member_idx += 1)
{ {
RADDBG_EnumMember *src = &rdbg->enum_members[member_idx]; RADDBGI_EnumMember *src = &rdbg->enum_members[member_idx];
TG_EnumVal *dst = &enum_vals[member_idx-udt->member_first]; TG_EnumVal *dst = &enum_vals[member_idx-udt->member_first];
dst->name.str = raddbg_string_from_idx(rdbg, src->name_string_idx, &dst->name.size); dst->name.str = raddbgi_string_from_idx(rdbg, src->name_string_idx, &dst->name.size);
dst->val = src->val; dst->val = src->val;
} }
} }
@@ -435,7 +435,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
} }
//- rjf: constructed types //- rjf: constructed types
if(RADDBG_TypeKind_FirstConstructed <= rdbg_type->kind && rdbg_type->kind <= RADDBG_TypeKind_LastConstructed) if(RADDBGI_TypeKind_FirstConstructed <= rdbg_type->kind && rdbg_type->kind <= RADDBGI_TypeKind_LastConstructed)
{ {
// rjf: unpack direct type // rjf: unpack direct type
B32 direct_type_is_good = 0; B32 direct_type_is_good = 0;
@@ -443,8 +443,8 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
U64 direct_type_byte_size = 0; U64 direct_type_byte_size = 0;
if(rdbg_type->constructed.direct_type_idx < type_node_idx) if(rdbg_type->constructed.direct_type_idx < type_node_idx)
{ {
RADDBG_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->constructed.direct_type_idx]; RADDBGI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->constructed.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbg_type_kind(direct_type_node->kind); TG_Kind direct_type_kind = tg_kind_from_raddbgi_type_kind(direct_type_node->kind);
direct_type_key = tg_key_ext(direct_type_kind, (U64)rdbg_type->constructed.direct_type_idx); direct_type_key = tg_key_ext(direct_type_kind, (U64)rdbg_type->constructed.direct_type_idx);
direct_type_is_good = 1; direct_type_is_good = 1;
direct_type_byte_size = (U64)direct_type_node->byte_size; direct_type_byte_size = (U64)direct_type_node->byte_size;
@@ -453,14 +453,14 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
// rjf: construct based on kind // rjf: construct based on kind
switch(rdbg_type->kind) switch(rdbg_type->kind)
{ {
case RADDBG_TypeKind_Modifier: case RADDBGI_TypeKind_Modifier:
{ {
TG_Flags flags = 0; TG_Flags flags = 0;
if(rdbg_type->flags & RADDBG_TypeModifierFlag_Const) if(rdbg_type->flags & RADDBGI_TypeModifierFlag_Const)
{ {
flags |= TG_Flag_Const; flags |= TG_Flag_Const;
} }
if(rdbg_type->flags & RADDBG_TypeModifierFlag_Volatile) if(rdbg_type->flags & RADDBGI_TypeModifierFlag_Volatile)
{ {
flags |= TG_Flag_Volatile; flags |= TG_Flag_Volatile;
} }
@@ -470,9 +470,9 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
type->byte_size = direct_type_byte_size; type->byte_size = direct_type_byte_size;
type->flags = flags; type->flags = flags;
}break; }break;
case RADDBG_TypeKind_Ptr: case RADDBGI_TypeKind_Ptr:
case RADDBG_TypeKind_LRef: case RADDBGI_TypeKind_LRef:
case RADDBG_TypeKind_RRef: case RADDBGI_TypeKind_RRef:
{ {
type = push_array(arena, TG_Type, 1); type = push_array(arena, TG_Type, 1);
type->kind = kind; type->kind = kind;
@@ -480,7 +480,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
type->byte_size = graph->address_size; type->byte_size = graph->address_size;
}break; }break;
case RADDBG_TypeKind_Array: case RADDBGI_TypeKind_Array:
{ {
type = push_array(arena, TG_Type, 1); type = push_array(arena, TG_Type, 1);
type->kind = kind; type->kind = kind;
@@ -488,12 +488,12 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
type->count = rdbg_type->constructed.count; type->count = rdbg_type->constructed.count;
type->byte_size = direct_type_byte_size * type->count; type->byte_size = direct_type_byte_size * type->count;
}break; }break;
case RADDBG_TypeKind_Function: case RADDBGI_TypeKind_Function:
{ {
U32 count = rdbg_type->constructed.count; U32 count = rdbg_type->constructed.count;
U32 idx_run_first = rdbg_type->constructed.param_idx_run_first; U32 idx_run_first = rdbg_type->constructed.param_idx_run_first;
U32 check_count = 0; U32 check_count = 0;
U32 *idx_run = raddbg_idx_run_from_first_count(rdbg, idx_run_first, count, &check_count); U32 *idx_run = raddbgi_idx_run_from_first_count(rdbg, idx_run_first, count, &check_count);
if(check_count == count) if(check_count == count)
{ {
type = push_array(arena, TG_Type, 1); type = push_array(arena, TG_Type, 1);
@@ -507,8 +507,8 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
U32 param_type_idx = idx_run[idx]; U32 param_type_idx = idx_run[idx];
if(param_type_idx < type_node_idx) if(param_type_idx < type_node_idx)
{ {
RADDBG_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx]; RADDBGI_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx];
TG_Kind param_kind = tg_kind_from_raddbg_type_kind(param_type_node->kind); TG_Kind param_kind = tg_kind_from_raddbgi_type_kind(param_type_node->kind);
type->param_type_keys[idx] = tg_key_ext(param_kind, (U64)param_type_idx); type->param_type_keys[idx] = tg_key_ext(param_kind, (U64)param_type_idx);
} }
else else
@@ -518,7 +518,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
} }
} }
}break; }break;
case RADDBG_TypeKind_Method: case RADDBGI_TypeKind_Method:
{ {
// NOTE(rjf): for methods, the `direct` type points at the owner type. // NOTE(rjf): for methods, the `direct` type points at the owner type.
// the return type, instead of being encoded via the `direct` type, is // the return type, instead of being encoded via the `direct` type, is
@@ -526,7 +526,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
U32 count = rdbg_type->constructed.count; U32 count = rdbg_type->constructed.count;
U32 idx_run_first = rdbg_type->constructed.param_idx_run_first; U32 idx_run_first = rdbg_type->constructed.param_idx_run_first;
U32 check_count = 0; U32 check_count = 0;
U32 *idx_run = raddbg_idx_run_from_first_count(rdbg, idx_run_first, count, &check_count); U32 *idx_run = raddbgi_idx_run_from_first_count(rdbg, idx_run_first, count, &check_count);
if(check_count == count) if(check_count == count)
{ {
type = push_array(arena, TG_Type, 1); type = push_array(arena, TG_Type, 1);
@@ -540,8 +540,8 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
U32 param_type_idx = idx_run[idx]; U32 param_type_idx = idx_run[idx];
if(param_type_idx < type_node_idx) if(param_type_idx < type_node_idx)
{ {
RADDBG_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx]; RADDBGI_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx];
TG_Kind param_kind = tg_kind_from_raddbg_type_kind(param_type_node->kind); TG_Kind param_kind = tg_kind_from_raddbgi_type_kind(param_type_node->kind);
type->param_type_keys[idx] = tg_key_ext(param_kind, (U64)param_type_idx); type->param_type_keys[idx] = tg_key_ext(param_kind, (U64)param_type_idx);
} }
else else
@@ -557,14 +557,14 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
} }
} }
}break; }break;
case RADDBG_TypeKind_MemberPtr: case RADDBGI_TypeKind_MemberPtr:
{ {
// rjf: unpack owner type // rjf: unpack owner type
TG_Key owner_type_key = zero_struct; TG_Key owner_type_key = zero_struct;
if(rdbg_type->constructed.owner_type_idx < type_node_idx) if(rdbg_type->constructed.owner_type_idx < type_node_idx)
{ {
RADDBG_TypeNode *owner_type_node = &rdbg->type_nodes[rdbg_type->constructed.owner_type_idx]; RADDBGI_TypeNode *owner_type_node = &rdbg->type_nodes[rdbg_type->constructed.owner_type_idx];
TG_Kind owner_type_kind = tg_kind_from_raddbg_type_kind(owner_type_node->kind); TG_Kind owner_type_kind = tg_kind_from_raddbgi_type_kind(owner_type_node->kind);
owner_type_key = tg_key_ext(owner_type_kind, (U64)rdbg_type->constructed.owner_type_idx); owner_type_key = tg_key_ext(owner_type_kind, (U64)rdbg_type->constructed.owner_type_idx);
} }
type = push_array(arena, TG_Type, 1); type = push_array(arena, TG_Type, 1);
@@ -577,19 +577,19 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
} }
//- rjf: alias types //- rjf: alias types
else if(rdbg_type->kind == RADDBG_TypeKind_Alias) else if(rdbg_type->kind == RADDBGI_TypeKind_Alias)
{ {
// rjf: unpack name // rjf: unpack name
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size); name.str = raddbgi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
// rjf: unpack direct type // rjf: unpack direct type
TG_Key direct_type_key = zero_struct; TG_Key direct_type_key = zero_struct;
U64 direct_type_byte_size = 0; U64 direct_type_byte_size = 0;
if(rdbg_type->user_defined.direct_type_idx < type_node_idx) if(rdbg_type->user_defined.direct_type_idx < type_node_idx)
{ {
RADDBG_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx]; RADDBGI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbg_type_kind(direct_type_node->kind); TG_Kind direct_type_kind = tg_kind_from_raddbgi_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_key = tg_key_ext(direct_type_kind, (U64)rdbg_type->user_defined.direct_type_idx);
direct_type_byte_size = direct_type_node->byte_size; direct_type_byte_size = direct_type_node->byte_size;
} }
@@ -603,11 +603,11 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
} }
//- rjf: incomplete types //- rjf: incomplete types
else if(RADDBG_TypeKind_FirstIncomplete <= rdbg_type->kind && rdbg_type->kind <= RADDBG_TypeKind_LastIncomplete) else if(RADDBGI_TypeKind_FirstIncomplete <= rdbg_type->kind && rdbg_type->kind <= RADDBGI_TypeKind_LastIncomplete)
{ {
// rjf: unpack name // rjf: unpack name
String8 name = {0}; String8 name = {0};
name.str = raddbg_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size); name.str = raddbgi_string_from_idx(rdbg, rdbg_type->user_defined.name_string_idx, &name.size);
// rjf: produce // rjf: produce
type = push_array(arena, TG_Type, 1); type = push_array(arena, TG_Type, 1);
@@ -790,7 +790,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
} }
internal TG_Key internal TG_Key
tg_direct_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key) tg_direct_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{ {
TG_Key result = zero_struct; TG_Key result = zero_struct;
switch(key.kind) switch(key.kind)
@@ -800,7 +800,7 @@ tg_direct_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key
case TG_KeyKind_Cons: case TG_KeyKind_Cons:
{ {
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
result = type->direct_type_key; result = type->direct_type_key;
scratch_end(scratch); scratch_end(scratch);
}break; }break;
@@ -809,16 +809,16 @@ tg_direct_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key
} }
internal TG_Key internal TG_Key
tg_unwrapped_direct_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key) tg_unwrapped_direct_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{ {
key = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, key); key = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, key);
key = tg_direct_from_graph_raddbg_key(graph, rdbg, key); key = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
key = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, key); key = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, key);
return key; return key;
} }
internal TG_Key internal TG_Key
tg_owner_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key) tg_owner_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{ {
TG_Key result = zero_struct; TG_Key result = zero_struct;
switch(key.kind) switch(key.kind)
@@ -828,7 +828,7 @@ tg_owner_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
case TG_KeyKind_Cons: case TG_KeyKind_Cons:
{ {
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
result = type->owner_type_key; result = type->owner_type_key;
scratch_end(scratch); scratch_end(scratch);
}break; }break;
@@ -837,14 +837,14 @@ tg_owner_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
} }
internal TG_Key internal TG_Key
tg_ptee_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key) tg_ptee_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{ {
TG_Key result = key; TG_Key result = key;
B32 passed_ptr = 0; B32 passed_ptr = 0;
for(;;) for(;;)
{ {
TG_Kind kind = tg_kind_from_key(result); TG_Kind kind = tg_kind_from_key(result);
result = tg_direct_from_graph_raddbg_key(graph, rdbg, result); result = tg_direct_from_graph_raddbgi_key(graph, rdbg, result);
if(kind == TG_Kind_Ptr || kind == TG_Kind_LRef || kind == TG_Kind_RRef) if(kind == TG_Kind_Ptr || kind == TG_Kind_LRef || kind == TG_Kind_RRef)
{ {
passed_ptr = 1; passed_ptr = 1;
@@ -869,7 +869,7 @@ tg_ptee_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key)
} }
internal TG_Key internal TG_Key
tg_unwrapped_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key) tg_unwrapped_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{ {
TG_Key result = key; TG_Key result = key;
for(B32 good = 1; good;) for(B32 good = 1; good;)
@@ -879,7 +879,7 @@ tg_unwrapped_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key
kind == TG_Kind_Modifier || kind == TG_Kind_Modifier ||
kind == TG_Kind_Alias) kind == TG_Kind_Alias)
{ {
result = tg_direct_from_graph_raddbg_key(graph, rdbg, result); result = tg_direct_from_graph_raddbgi_key(graph, rdbg, result);
} }
else else
{ {
@@ -890,7 +890,7 @@ tg_unwrapped_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key
} }
internal U64 internal U64
tg_byte_size_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key) tg_byte_size_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{ {
U64 result = 0; U64 result = 0;
switch(key.kind) switch(key.kind)
@@ -905,7 +905,7 @@ tg_byte_size_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key
case TG_KeyKind_Cons: case TG_KeyKind_Cons:
{ {
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
result = type->byte_size; result = type->byte_size;
scratch_end(scratch); scratch_end(scratch);
}break; }break;
@@ -940,12 +940,12 @@ tg_member_copy(Arena *arena, TG_Member *src)
} }
internal TG_MemberArray internal TG_MemberArray
tg_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key) tg_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{ {
TG_MemberArray result = {0}; TG_MemberArray result = {0};
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
{ {
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
if(type->members != 0) if(type->members != 0)
{ {
result.count = type->count; result.count = type->count;
@@ -962,7 +962,7 @@ tg_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *r
} }
internal TG_MemberArray internal TG_MemberArray
tg_data_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key) tg_data_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
TG_Kind root_type_kind = tg_kind_from_key(key); TG_Kind root_type_kind = tg_kind_from_key(key);
@@ -971,7 +971,7 @@ tg_data_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Pars
TG_MemberList members_list = {0}; TG_MemberList members_list = {0};
B32 members_need_offset_sort = 0; B32 members_need_offset_sort = 0;
{ {
TG_Type *root_type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key); TG_Type *root_type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
typedef struct Task Task; typedef struct Task Task;
struct Task struct Task
{ {
@@ -1010,7 +1010,7 @@ tg_data_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Pars
t->inheritance_chain = tg_key_list_copy(scratch.arena, &task->inheritance_chain); 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); 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_key = type->members[member_idx].type_key;
t->type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, type->members[member_idx].type_key); t->type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, type->members[member_idx].type_key);
SLLQueuePush(first_task, last_task, t); SLLQueuePush(first_task, last_task, t);
members_need_offset_sort = 1; members_need_offset_sort = 1;
} }
@@ -1059,7 +1059,7 @@ tg_data_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Pars
TG_Member *member = &members.v[idx]; TG_Member *member = &members.v[idx];
if(idx+1 < members.count) if(idx+1 < members.count)
{ {
U64 member_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, member->type_key); U64 member_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, member->type_key);
Rng1U64 member_byte_range = r1u64(member->off, member->off + member_byte_size); Rng1U64 member_byte_range = r1u64(member->off, member->off + member_byte_size);
if(member[1].off > member_byte_range.max) if(member[1].off > member_byte_range.max)
{ {
@@ -1106,7 +1106,7 @@ tg_data_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Pars
} }
internal void internal void
tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return) tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return)
{ {
String8 keyword = {0}; String8 keyword = {0};
TG_Kind kind = tg_kind_from_key(key); TG_Kind kind = tg_kind_from_key(key);
@@ -1115,7 +1115,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
default: default:
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
str8_list_push(arena, out, push_str8_copy(arena, type->name)); str8_list_push(arena, out, push_str8_copy(arena, type->name));
str8_list_push(arena, out, str8_lit(" ")); str8_list_push(arena, out, str8_lit(" "));
scratch_end(scratch); scratch_end(scratch);
@@ -1123,14 +1123,14 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_Bitfield: case TG_Kind_Bitfield:
{ {
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key); TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, prec, skip_return); tg_lhs_string_from_key(arena, graph, rdbg, direct, out, prec, skip_return);
}break; }break;
case TG_Kind_Modifier: case TG_Kind_Modifier:
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Key direct = type->direct_type_key; TG_Key direct = type->direct_type_key;
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return); tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
if(type->flags & TG_Flag_Const) if(type->flags & TG_Flag_Const)
@@ -1156,7 +1156,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_Alias: case TG_Kind_Alias:
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
str8_list_push(arena, out, push_str8_copy(arena, type->name)); str8_list_push(arena, out, push_str8_copy(arena, type->name));
str8_list_push(arena, out, str8_lit(" ")); str8_list_push(arena, out, str8_lit(" "));
scratch_end(scratch); scratch_end(scratch);
@@ -1169,7 +1169,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
fwd_udt:; fwd_udt:;
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
str8_list_push(arena, out, keyword); str8_list_push(arena, out, keyword);
str8_list_push(arena, out, str8_lit(" ")); str8_list_push(arena, out, str8_lit(" "));
str8_list_push(arena, out, push_str8_copy(arena, type->name)); str8_list_push(arena, out, push_str8_copy(arena, type->name));
@@ -1179,7 +1179,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_Array: case TG_Kind_Array:
{ {
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key); TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 2, skip_return); tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 2, skip_return);
if(prec == 1) if(prec == 1)
{ {
@@ -1191,7 +1191,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
{ {
if(!skip_return) if(!skip_return)
{ {
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key); TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 2, 0); tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 2, 0);
} }
if(prec == 1) if(prec == 1)
@@ -1202,21 +1202,21 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_Ptr: case TG_Kind_Ptr:
{ {
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key); TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return); tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
str8_list_push(arena, out, str8_lit("*")); str8_list_push(arena, out, str8_lit("*"));
}break; }break;
case TG_Kind_LRef: case TG_Kind_LRef:
{ {
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key); TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return); tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
str8_list_push(arena, out, str8_lit("&")); str8_list_push(arena, out, str8_lit("&"));
}break; }break;
case TG_Kind_RRef: case TG_Kind_RRef:
{ {
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key); TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return); tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
str8_list_push(arena, out, str8_lit("&&")); str8_list_push(arena, out, str8_lit("&&"));
}break; }break;
@@ -1224,10 +1224,10 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_MemberPtr: case TG_Kind_MemberPtr:
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
TG_Key direct = type->direct_type_key; TG_Key direct = type->direct_type_key;
tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return); tg_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
TG_Type *container = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, type->owner_type_key); TG_Type *container = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, type->owner_type_key);
if(container->kind != TG_Kind_Null) if(container->kind != TG_Kind_Null)
{ {
str8_list_push(arena, out, push_str8_copy(arena, container->name)); str8_list_push(arena, out, push_str8_copy(arena, container->name));
@@ -1243,7 +1243,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
} }
internal void internal void
tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key, String8List *out, U32 prec) tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec)
{ {
TG_Kind kind = tg_kind_from_key(key); TG_Kind kind = tg_kind_from_key(key);
switch(kind) switch(kind)
@@ -1252,7 +1252,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_Bitfield: case TG_Kind_Bitfield:
{ {
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key); TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_rhs_string_from_key(arena, graph, rdbg, direct, out, prec); tg_rhs_string_from_key(arena, graph, rdbg, direct, out, prec);
}break; }break;
@@ -1262,14 +1262,14 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_RRef: case TG_Kind_RRef:
case TG_Kind_MemberPtr: case TG_Kind_MemberPtr:
{ {
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key); TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 1); tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 1);
}break; }break;
case TG_Kind_Array: case TG_Kind_Array:
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
if(prec == 1) if(prec == 1)
{ {
str8_list_push(arena, out, str8_lit(")")); str8_list_push(arena, out, str8_lit(")"));
@@ -1278,7 +1278,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
str8_list_push(arena, out, str8_lit("[")); str8_list_push(arena, out, str8_lit("["));
str8_list_push(arena, out, count_str); str8_list_push(arena, out, count_str);
str8_list_push(arena, out, str8_lit("]")); str8_list_push(arena, out, str8_lit("]"));
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key); TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 2); tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 2);
scratch_end(scratch); scratch_end(scratch);
}break; }break;
@@ -1286,7 +1286,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_Function: case TG_Kind_Function:
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
TG_Type *type = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, key); TG_Type *type = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, key);
if(prec == 1) if(prec == 1)
{ {
str8_list_push(arena, out, str8_lit(")")); str8_list_push(arena, out, str8_lit(")"));
@@ -1315,7 +1315,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
} }
str8_list_push(arena, out, str8_lit(")")); str8_list_push(arena, out, str8_lit(")"));
} }
TG_Key direct = tg_direct_from_graph_raddbg_key(graph, rdbg, key); TG_Key direct = tg_direct_from_graph_raddbgi_key(graph, rdbg, key);
tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 2); tg_rhs_string_from_key(arena, graph, rdbg, direct, out, 2);
scratch_end(scratch); scratch_end(scratch);
}break; }break;
@@ -1323,7 +1323,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
} }
internal String8 internal String8
tg_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key) tg_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{ {
Temp scratch = scratch_begin(&arena, 1); Temp scratch = scratch_begin(&arena, 1);
String8List list = {0}; String8List list = {0};
+14 -14
View File
@@ -203,8 +203,8 @@ internal TG_KeyList tg_key_list_copy(Arena *arena, TG_KeyList *src);
//////////////////////////////// ////////////////////////////////
//~ rjf: RADDBG <-> TG Enum Conversions //~ rjf: RADDBG <-> TG Enum Conversions
internal TG_Kind tg_kind_from_raddbg_type_kind(RADDBG_TypeKind kind); internal TG_Kind tg_kind_from_raddbgi_type_kind(RADDBGI_TypeKind kind);
internal TG_MemberKind tg_member_kind_from_raddbg_member_kind(RADDBG_MemberKind kind); internal TG_MemberKind tg_member_kind_from_raddbgi_member_kind(RADDBGI_MemberKind kind);
//////////////////////////////// ////////////////////////////////
//~ rjf: Key Type Functions //~ 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 //~ rjf: Graph Introspection API
internal TG_Type *tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key); 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_raddbg_key(TG_Graph *graph, RADDBG_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_raddbg_key(TG_Graph *graph, RADDBG_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_raddbg_key(TG_Graph *graph, RADDBG_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_raddbg_key(TG_Graph *graph, RADDBG_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_raddbg_key(TG_Graph *graph, RADDBG_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_raddbg_key(TG_Graph *graph, RADDBG_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_Kind tg_kind_from_key(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_Member *tg_member_copy(Arena *arena, TG_Member *src);
internal TG_MemberArray tg_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key); 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_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_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, RADDBG_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return); 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, RADDBG_Parsed *rdbg, TG_Key key, String8List *out, U32 prec); 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, RADDBG_Parsed *rdbg, TG_Key key); internal String8 tg_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
#endif // TYPE_GRAPH_NEW_H #endif // TYPE_GRAPH_NEW_H