raddbg -> raddbgi

This commit is contained in:
Ryan Fleury
2024-02-12 14:56:10 -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 release`
:: `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,
:: search for @build_targets in this file.
@@ -85,7 +85,7 @@ pushd build
popd
:: --- Get Current Git Commit Id ----------------------------------------------
for /f %%i in ('call git describe --always --dirty') do set compile=%compile% -DRADDBG_GIT=\"%%i\"
for /f %%i in ('call git describe --always --dirty') do set compile=%compile% -DRADDBGI_GIT=\"%%i\"
:: --- Build & Run Metaprogram ------------------------------------------------
if "%no_meta%"=="1" echo [skipping metagen]
+1 -1
View File
@@ -74,7 +74,7 @@ commands =
},
.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 = "",
.out = "*compilation*",
.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();
String8 exe_path = demon_full_path_from_module(scratch.arena, module);
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);
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
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)
{
RADDBG_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, mapptr, &map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, filename_normalized.str, filename_normalized.size);
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, mapptr, &map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, filename_normalized.str, filename_normalized.size);
if(node != 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)
{
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
{
RADDBG_SourceFile *src = raddbg_element_from_idx(rdbg, source_files, src_id);
RADDBG_ParsedLineMap line_map = {0};
raddbg_line_map_from_source_file(rdbg, src, &line_map);
RADDBGI_SourceFile *src = raddbgi_element_from_idx(rdbg, source_files, src_id);
RADDBGI_ParsedLineMap line_map = {0};
raddbgi_line_map_from_source_file(rdbg, src, &line_map);
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)
{
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;
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)
{
RADDBG_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, mapptr, &map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, symbol_name.str, symbol_name.size);
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, mapptr, &map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, symbol_name.str, symbol_name.size);
if(node != 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)
{
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;
DEMON_Trap trap = {process, proc_vaddr + voff, (U64)bp};
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]);
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);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBG_NameMap *unparsed_map = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_GlobalVariables);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_NameMap *unparsed_map = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_GlobalVariables);
if(rdbg->global_variables != 0 && unparsed_map != 0)
{
RADDBG_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, unparsed_map, &map);
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, unparsed_map, &map);
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)
{
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)
{
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_vaddr = global_var->voff + demon_base_vaddr_from_module(ctrl_demon_handle_from_ctrl(module));
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);
String8 exe_path = demon_full_path_from_module(scratch.arena, module);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBG_NameMap *unparsed_map = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_Procedures);
RADDBG_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, unparsed_map, &map);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_NameMap *unparsed_map = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_Procedures);
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, unparsed_map, &map);
//- rjf: add trap for user-specified entry point, if specified
B32 entries_found = 0;
@@ -2157,15 +2157,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0;
{
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 *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)
{
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)
{
entries_found = 1;
@@ -2183,15 +2183,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0;
{
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 *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)
{
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)
{
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;
{
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 *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)
{
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)
{
entries_found = 1;
@@ -2260,15 +2260,15 @@ ctrl_thread__launch_and_init(CTRL_Msg *msg)
U32 procedure_id = 0;
{
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 *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)
{
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)
{
entries_found = 1;
@@ -2866,7 +2866,7 @@ ctrl_thread__run(CTRL_Msg *msg)
{
String8 exe_path = demon_full_path_from_module(temp.arena, module);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
for(String8Node *condition_n = conditions.first; condition_n != 0; condition_n = condition_n->next)
{
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.regs_map = ctrl_string2reg_from_arch(arch);
parse_ctx.reg_alias_map = ctrl_string2alias_from_arch(arch);
parse_ctx.locals_map = eval_push_locals_map_from_raddbg_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.locals_map = eval_push_locals_map_from_raddbgi_voff(temp.arena, rdbg, thread_rip_voff);
parse_ctx.member_map = eval_push_member_map_from_raddbgi_voff(temp.arena, rdbg, thread_rip_voff);
}
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);
+71 -71
View File
@@ -111,7 +111,7 @@ dbgi_fuzzy_item_num_from_array_element_idx__linear_search(DBGI_FuzzySearchItemAr
}
internal String8
dbgi_fuzzy_item_string_from_rdbg_target_element_idx(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};
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
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;
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);
}break;
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;
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);
}break;
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;
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);
}break;
case DBGI_FuzzySearchTarget_UDTs:
{
RADDBG_UDT *udt = raddbg_element_from_idx(rdbg, udts, element_idx);
RADDBG_TypeNode *type_node = raddbg_element_from_idx(rdbg, type_nodes, udt->self_type_idx);
RADDBGI_UDT *udt = raddbgi_element_from_idx(rdbg, udts, element_idx);
RADDBGI_TypeNode *type_node = raddbgi_element_from_idx(rdbg, type_nodes, udt->self_type_idx);
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);
}break;
case DBGI_FuzzySearchTarget_COUNT:{}break;
@@ -769,7 +769,7 @@ dbgi_parse_thread_entry_point(void *p)
}
if(!og_dbg_format_is_known)
{
if(data.size >= 8 && *(U64 *)data.str == RADDBG_MAGIC_CONSTANT)
if(data.size >= 8 && *(U64 *)data.str == RADDBGI_MAGIC_CONSTANT)
{
og_dbg_format_is_known = 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
String8 raddbg_path = {0};
String8 raddbgi_path = {0};
if(do_task)
{
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)
{
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
B32 raddbg_file_is_up_to_date = 0;
B32 raddbgi_file_is_up_to_date = 0;
if(do_task)
{
if(raddbg_path.size != 0)
if(raddbgi_path.size != 0)
{
FileProperties props = os_properties_from_file_path(raddbg_path);
raddbg_file_is_up_to_date = (props.modified > og_dbg_props.modified);
FileProperties props = os_properties_from_file_path(raddbgi_path);
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
// encoding generation number, to see if we need to regenerate it
// 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_map = {0};
FileProperties file_props = {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_props = os_properties_from_file(file);
file_base = os_file_map_view_open(file_map, OS_AccessFlag_Read, r1u64(0, file_props.size));
if(sizeof(RADDBG_Header) <= file_props.size)
if(sizeof(RADDBGI_Header) <= file_props.size)
{
RADDBG_Header *header = (RADDBG_Header*)file_base;
if(header->encoding_version != RADDBG_ENCODING_VERSION)
RADDBGI_Header *header = (RADDBGI_Header*)file_base;
if(header->encoding_version != RADDBGI_ENCODING_VERSION)
{
raddbg_file_is_up_to_date = 0;
raddbgi_file_is_up_to_date = 0;
}
}
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_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
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)
{
// rjf: push conversion task begin event
{
DBGI_Event event = {DBGI_EventKind_ConversionStarted};
event.string = raddbg_path;
event.string = raddbgi_path;
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, "--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, "--out:%S", raddbg_path);
str8_list_pushf(scratch.arena, &opts.cmd_line, "--out:%S", raddbgi_path);
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);
if(wait_done)
{
raddbg_file_is_up_to_date = 1;
raddbgi_file_is_up_to_date = 1;
break;
}
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
{
DBGI_Event event = {DBGI_EventKind_ConversionEnded};
event.string = raddbg_path;
event.string = raddbgi_path;
dbgi_p2u_push_event(&event);
}
}
@@ -917,7 +917,7 @@ dbgi_parse_thread_entry_point(void *p)
// rjf: push conversion task failure event
{
DBGI_Event event = {DBGI_EventKind_ConversionFailureUnsupportedFormat};
event.string = raddbg_path;
event.string = raddbgi_path;
dbgi_p2u_push_event(&event);
}
}
@@ -925,16 +925,16 @@ dbgi_parse_thread_entry_point(void *p)
}
//- rjf: open raddbg file & gather info
OS_Handle raddbg_file = {0};
OS_Handle raddbg_file_map = {0};
FileProperties raddbg_file_props = {0};
void *raddbg_file_base = 0;
if(do_task && raddbg_file_is_up_to_date)
OS_Handle raddbgi_file = {0};
OS_Handle raddbgi_file_map = {0};
FileProperties raddbgi_file_props = {0};
void *raddbgi_file_base = 0;
if(do_task && raddbgi_file_is_up_to_date)
{
raddbg_file = os_file_open(OS_AccessFlag_Read|OS_AccessFlag_ShareRead, raddbg_path);
raddbg_file_map = os_file_map_open(OS_AccessFlag_Read, raddbg_file);
raddbg_file_props = os_properties_from_file(raddbg_file);
raddbg_file_base = os_file_map_view_open(raddbg_file_map, OS_AccessFlag_Read, r1u64(0, raddbg_file_props.size));
raddbgi_file = os_file_open(OS_AccessFlag_Read|OS_AccessFlag_ShareRead, raddbgi_path);
raddbgi_file_map = os_file_map_open(OS_AccessFlag_Read, raddbgi_file);
raddbgi_file_props = os_properties_from_file(raddbgi_file);
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
@@ -958,7 +958,7 @@ dbgi_parse_thread_entry_point(void *p)
// either EXE or raddbg file is new. if so, clear all old results &
// store new top-level info
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")
{
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;
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)
{
raddbg_or_exe_file_is_updated = 1;
raddbgi_or_exe_file_is_updated = 1;
// rjf: clean up old stuff
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->parse.exe_base = exe_file_base;
bin->parse.exe_props = exe_file_props;
bin->dbg_file = raddbg_file;
bin->dbg_file_map = raddbg_file_map;
bin->parse.dbg_base = raddbg_file_base;
bin->parse.dbg_props = raddbg_file_props;
bin->dbg_file = raddbgi_file;
bin->dbg_file_map = raddbgi_file_map;
bin->parse.dbg_base = raddbgi_file_base;
bin->parse.dbg_props = raddbgi_file_props;
bin->gen += 1;
}
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
// 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_close(raddbg_file_map);
os_file_close(raddbg_file);
os_file_map_view_close(raddbgi_file_map, raddbgi_file_base);
os_file_map_close(raddbgi_file_map);
os_file_close(raddbgi_file);
os_file_map_view_close(exe_file_map, exe_file_base);
os_file_map_close(exe_file_map);
os_file_close(exe_file);
@@ -1017,14 +1017,14 @@ dbgi_parse_thread_entry_point(void *p)
}
//- 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;
if(do_task)
{
RADDBG_ParseStatus parse_status = raddbg_parse((U8 *)raddbg_file_base, raddbg_file_props.size, &raddbg_parsed);
if(raddbg_parsed.top_level_info != 0)
RADDBGI_ParseStatus parse_status = raddbgi_parse((U8 *)raddbgi_file_base, raddbgi_file_props.size, &raddbgi_parsed);
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.dbg_path = push_str8_copy(parse_arena, dbg_path);
MemoryCopyStruct(&bin->parse.pe, &exe_pe_info);
MemoryCopyStruct(&bin->parse.rdbg, &raddbg_parsed);
MemoryCopyStruct(&bin->parse.rdbg, &raddbgi_parsed);
bin->parse.gen = bin->gen;
break;
}
@@ -1197,7 +1197,7 @@ dbgi_fuzzy_thread__entry_point(void *p)
//- rjf: exe_path -> dbgi_parse, raddbg
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, max_U64);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
//- rjf: rdbg * query -> item list
U64 table_ptr_off = 0;
@@ -1210,30 +1210,30 @@ dbgi_fuzzy_thread__entry_point(void *p)
case DBGI_FuzzySearchTarget_COUNT:{}break;
case DBGI_FuzzySearchTarget_Procedures:
{
table_ptr_off = OffsetOf(RADDBG_Parsed, procedures);
element_name_idx_off = OffsetOf(RADDBG_Procedure, name_string_idx);
table_ptr_off = OffsetOf(RADDBGI_Parsed, procedures);
element_name_idx_off = OffsetOf(RADDBGI_Procedure, name_string_idx);
element_count = rdbg->procedures_count;
element_size = sizeof(RADDBG_Procedure);
element_size = sizeof(RADDBGI_Procedure);
}break;
case DBGI_FuzzySearchTarget_GlobalVariables:
{
table_ptr_off = OffsetOf(RADDBG_Parsed, global_variables);
element_name_idx_off = OffsetOf(RADDBG_GlobalVariable, name_string_idx);
table_ptr_off = OffsetOf(RADDBGI_Parsed, global_variables);
element_name_idx_off = OffsetOf(RADDBGI_GlobalVariable, name_string_idx);
element_count = rdbg->global_variables_count;
element_size = sizeof(RADDBG_GlobalVariable);
element_size = sizeof(RADDBGI_GlobalVariable);
}break;
case DBGI_FuzzySearchTarget_ThreadVariables:
{
table_ptr_off = OffsetOf(RADDBG_Parsed, thread_variables);
element_name_idx_off = OffsetOf(RADDBG_ThreadVariable, name_string_idx);
table_ptr_off = OffsetOf(RADDBGI_Parsed, thread_variables);
element_name_idx_off = OffsetOf(RADDBGI_ThreadVariable, name_string_idx);
element_count = rdbg->thread_variables_count;
element_size = sizeof(RADDBG_ThreadVariable);
element_size = sizeof(RADDBGI_ThreadVariable);
}break;
case DBGI_FuzzySearchTarget_UDTs:
{
table_ptr_off = OffsetOf(RADDBG_Parsed, udts);
table_ptr_off = OffsetOf(RADDBGI_Parsed, udts);
element_count = rdbg->udts_count;
element_size = sizeof(RADDBG_UDT);
element_size = sizeof(RADDBGI_UDT);
}break;
}
DBGI_FuzzySearchItemChunkList items_list = {0};
@@ -1246,13 +1246,13 @@ dbgi_fuzzy_thread__entry_point(void *p)
U32 *name_idx_ptr = (U32 *)((U8 *)element + element_name_idx_off);
if(target == DBGI_FuzzySearchTarget_UDTs)
{
RADDBG_UDT *udt = (RADDBG_UDT *)element;
RADDBG_TypeNode *type_node = raddbg_element_from_idx(rdbg, type_nodes, udt->self_type_idx);
RADDBGI_UDT *udt = (RADDBGI_UDT *)element;
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;
}
U32 name_idx = *name_idx_ptr;
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);
if(name.size == 0) { continue; }
FuzzyMatchRangeList matches = fuzzy_match_find(task_arena, query, name);
+20 -20
View File
@@ -18,7 +18,7 @@ struct DBGI_Parse
void *dbg_base;
FileProperties dbg_props;
PE_BinInfo pe;
RADDBG_Parsed rdbg;
RADDBGI_Parsed rdbg;
};
////////////////////////////////
@@ -341,24 +341,24 @@ global DBGI_Parse dbgi_parse_nil =
0,
0,
0,
&raddbg_binary_section_nil, 1,
&raddbg_file_path_node_nil, 1,
&raddbg_source_file_nil, 1,
&raddbg_unit_nil, 1,
&raddbg_vmap_entry_nil, 1,
&raddbg_type_node_nil, 1,
&raddbg_udt_nil, 1,
&raddbg_member_nil, 1,
&raddbg_enum_member_nil, 1,
&raddbg_global_variable_nil, 1,
&raddbg_vmap_entry_nil, 1,
&raddbg_thread_variable_nil, 1,
&raddbg_procedure_nil, 1,
&raddbg_scope_nil, 1,
&raddbg_voff_nil, 1,
&raddbg_vmap_entry_nil, 1,
&raddbg_local_nil, 1,
&raddbg_location_block_nil, 1,
&raddbgi_binary_section_nil, 1,
&raddbgi_file_path_node_nil, 1,
&raddbgi_source_file_nil, 1,
&raddbgi_unit_nil, 1,
&raddbgi_vmap_entry_nil, 1,
&raddbgi_type_node_nil, 1,
&raddbgi_udt_nil, 1,
&raddbgi_member_nil, 1,
&raddbgi_enum_member_nil, 1,
&raddbgi_global_variable_nil, 1,
&raddbgi_vmap_entry_nil, 1,
&raddbgi_thread_variable_nil, 1,
&raddbgi_procedure_nil, 1,
&raddbgi_scope_nil, 1,
&raddbgi_voff_nil, 1,
&raddbgi_vmap_entry_nil, 1,
&raddbgi_local_nil, 1,
&raddbgi_location_block_nil, 1,
0, 0,
0, 0,
},
@@ -379,7 +379,7 @@ internal void dbgi_ensure_tctx_inited(void);
internal U64 dbgi_hash_from_string(String8 string);
internal U64 dbgi_fuzzy_item_num_from_array_element_idx__linear_search(DBGI_FuzzySearchItemArray *array, U64 element_idx);
internal String8 dbgi_fuzzy_item_string_from_rdbg_target_element_idx(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
+104 -104
View File
@@ -1085,7 +1085,7 @@ df_cmd_params_apply_spec_query(Arena *arena, DF_CtrlCtx *ctrl_ctx, DF_CmdParams
DF_Eval eval = df_eval_from_string(scratch.arena, scope, ctrl_ctx, &parse_ctx, &eval_string2expr_map_nil, query);
if(eval.errors.count == 0)
{
TG_Kind eval_type_kind = tg_kind_from_key(tg_unwrapped_from_graph_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)
{
eval = df_value_mode_eval_from_eval(parse_ctx.type_graph, parse_ctx.rdbg, ctrl_ctx, eval);
@@ -3196,23 +3196,23 @@ df_symbol_name_from_binary_voff(Arena *arena, DF_Entity *binary, U64 voff)
DBGI_Scope *scope = dbgi_scope_open();
String8 path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
if(result.size == 0 && rdbg->scope_vmap != 0)
{
U64 scope_idx = raddbg_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff);
RADDBG_Scope *scope = &rdbg->scopes[scope_idx];
U64 scope_idx = raddbgi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff);
RADDBGI_Scope *scope = &rdbg->scopes[scope_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;
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));
}
if(result.size == 0 && rdbg->global_vmap != 0)
{
U64 global_idx = raddbg_vmap_idx_from_voff(rdbg->global_vmap, rdbg->global_vmap_count, voff);
RADDBG_GlobalVariable *global_var = &rdbg->global_variables[global_idx];
U64 global_idx = raddbgi_vmap_idx_from_voff(rdbg->global_vmap, rdbg->global_vmap_count, voff);
RADDBGI_GlobalVariable *global_var = &rdbg->global_variables[global_idx];
U64 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));
}
dbgi_scope_close(scope);
@@ -3263,23 +3263,23 @@ df_text_line_src2dasm_info_list_array_from_src_line_range(Arena *arena, DF_Entit
DF_Entity *binary = binary_n->entity;
String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
// rjf: file_path_normalized * rdbg -> src_id
B32 good_src_id = 0;
U32 src_id = 0;
if(dbgi != &dbgi_parse_nil)
{
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)
{
RADDBG_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, mapptr, &map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, file_path_normalized.str, file_path_normalized.size);
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, mapptr, &map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, file_path_normalized.str, file_path_normalized.size);
if(node != 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)
{
good_src_id = 1;
@@ -3292,9 +3292,9 @@ df_text_line_src2dasm_info_list_array_from_src_line_range(Arena *arena, DF_Entit
// rjf: good src-id -> look up line info for visible range
if(good_src_id)
{
RADDBG_SourceFile *src = rdbg->source_files+src_id;
RADDBG_ParsedLineMap line_map = {0};
raddbg_line_map_from_source_file(rdbg, src, &line_map);
RADDBGI_SourceFile *src = rdbg->source_files+src_id;
RADDBGI_ParsedLineMap line_map = {0};
raddbgi_line_map_from_source_file(rdbg, src, &line_map);
U64 line_idx = 0;
for(S64 line_num = line_num_range.min;
line_num <= line_num_range.max;
@@ -3302,15 +3302,15 @@ df_text_line_src2dasm_info_list_array_from_src_line_range(Arena *arena, DF_Entit
{
DF_TextLineSrc2DasmInfoList *src2dasm_list = &src2dasm_array.v[line_idx];
U32 voff_count = 0;
U64 *voffs = 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)
{
U64 base_voff = voffs[idx];
U64 unit_idx = raddbg_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, base_voff);
RADDBG_Unit *unit = &rdbg->units[unit_idx];
RADDBG_ParsedLineInfo unit_line_info = {0};
raddbg_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 unit_idx = raddbgi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, base_voff);
RADDBGI_Unit *unit = &rdbg->units[unit_idx];
RADDBGI_ParsedLineInfo unit_line_info = {0};
raddbgi_line_info_from_unit(rdbg, unit, &unit_line_info);
U64 line_info_idx = raddbgi_line_info_idx_from_voff(&unit_line_info, base_voff);
if(unit_line_info.voffs != 0)
{
Rng1U64 range = r1u64(base_voff, unit_line_info.voffs[line_info_idx+1]);
@@ -3347,23 +3347,23 @@ df_text_line_dasm2src_info_from_binary_voff(DF_Entity *binary, U64 voff)
DBGI_Scope *scope = dbgi_scope_open();
String8 path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
DF_TextLineDasm2SrcInfo result = {0};
result.file = result.binary = &df_g_nil_entity;
if(rdbg->unit_vmap != 0 && rdbg->units != 0 && rdbg->source_files != 0)
{
U64 unit_idx = raddbg_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, voff);
RADDBG_Unit *unit = &rdbg->units[unit_idx];
RADDBG_ParsedLineInfo unit_line_info = {0};
raddbg_line_info_from_unit(rdbg, unit, &unit_line_info);
U64 line_info_idx = raddbg_line_info_idx_from_voff(&unit_line_info, voff);
U64 unit_idx = raddbgi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, voff);
RADDBGI_Unit *unit = &rdbg->units[unit_idx];
RADDBGI_ParsedLineInfo unit_line_info = {0};
raddbgi_line_info_from_unit(rdbg, unit, &unit_line_info);
U64 line_info_idx = raddbgi_line_info_idx_from_voff(&unit_line_info, voff);
if(line_info_idx < unit_line_info.count)
{
RADDBG_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;
RADDBG_SourceFile *file = &rdbg->source_files[line->file_idx];
RADDBGI_Line *line = &unit_line_info.lines[line_info_idx];
RADDBGI_Column *column = (line_info_idx < unit_line_info.col_count) ? &unit_line_info.cols[line_info_idx] : 0;
RADDBGI_SourceFile *file = &rdbg->source_files[line->file_idx];
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;
if(line->file_idx != 0 && file_normalized_full_path.size != 0)
{
@@ -3412,11 +3412,11 @@ df_voff_from_binary_symbol_name(DF_Entity *binary, String8 symbol_name)
{
String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBG_NameMapKind name_map_kinds[] =
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_NameMapKind name_map_kinds[] =
{
RADDBG_NameMapKind_GlobalVariables,
RADDBG_NameMapKind_Procedures,
RADDBGI_NameMapKind_GlobalVariables,
RADDBGI_NameMapKind_Procedures,
};
if(dbgi != &dbgi_parse_nil)
{
@@ -3424,11 +3424,11 @@ df_voff_from_binary_symbol_name(DF_Entity *binary, String8 symbol_name)
name_map_kind_idx < ArrayCount(name_map_kinds);
name_map_kind_idx += 1)
{
RADDBG_NameMapKind name_map_kind = name_map_kinds[name_map_kind_idx];
RADDBG_NameMap *name_map = raddbg_name_map_from_kind(rdbg, name_map_kind);
RADDBG_ParsedNameMap parsed_name_map = {0};
raddbg_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_NameMapKind name_map_kind = name_map_kinds[name_map_kind_idx];
RADDBGI_NameMap *name_map = raddbgi_name_map_from_kind(rdbg, name_map_kind);
RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbgi_name_map_parse(rdbg, name_map, &parsed_name_map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &parsed_name_map, symbol_name.str, symbol_name.size);
// rjf: node -> num
U64 entity_num = 0;
@@ -3443,7 +3443,7 @@ df_voff_from_binary_symbol_name(DF_Entity *binary, String8 symbol_name)
default:
{
U32 num = 0;
U32 *run = raddbg_matches_from_map_node(rdbg, node, &num);
U32 *run = raddbgi_matches_from_map_node(rdbg, node, &num);
if(num != 0)
{
entity_num = run[0]+1;
@@ -3457,15 +3457,15 @@ df_voff_from_binary_symbol_name(DF_Entity *binary, String8 symbol_name)
if(entity_num != 0) switch(name_map_kind)
{
default:{}break;
case 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;
}break;
case RADDBG_NameMapKind_Procedures:
case RADDBGI_NameMapKind_Procedures:
{
RADDBG_Procedure *procedure = raddbg_element_from_idx(rdbg, procedures, entity_num-1);
RADDBG_Scope *scope = raddbg_element_from_idx(rdbg, scopes, procedure->root_scope_idx);
RADDBGI_Procedure *procedure = raddbgi_element_from_idx(rdbg, procedures, entity_num-1);
RADDBGI_Scope *scope = raddbgi_element_from_idx(rdbg, scopes, procedure->root_scope_idx);
voff = rdbg->scope_voffs[scope->voff_range_first];
}break;
}
@@ -3495,11 +3495,11 @@ df_type_num_from_binary_name(DF_Entity *binary, String8 name)
{
String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBG_NameMap *name_map = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_Types);
RADDBG_ParsedNameMap parsed_name_map = {0};
raddbg_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_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_NameMap *name_map = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_Types);
RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbgi_name_map_parse(rdbg, name_map, &parsed_name_map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &parsed_name_map, name.str, name.size);
U64 entity_num = 0;
if(node != 0)
{
@@ -3512,7 +3512,7 @@ df_type_num_from_binary_name(DF_Entity *binary, String8 name)
default:
{
U32 num = 0;
U32 *run = raddbg_matches_from_map_node(rdbg, node, &num);
U32 *run = raddbgi_matches_from_map_node(rdbg, node, &num);
if(num != 0)
{
entity_num = run[0]+1;
@@ -3697,8 +3697,8 @@ df_push_locals_map_from_binary_voff(Arena *arena, DBGI_Scope *scope, DF_Entity *
Temp scratch = scratch_begin(&arena, 1);
String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
EVAL_String2NumMap *result = eval_push_locals_map_from_raddbg_voff(arena, rdbg, voff);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
EVAL_String2NumMap *result = eval_push_locals_map_from_raddbgi_voff(arena, rdbg, voff);
scratch_end(scratch);
return result;
}
@@ -3709,8 +3709,8 @@ df_push_member_map_from_binary_voff(Arena *arena, DBGI_Scope *scope, DF_Entity *
Temp scratch = scratch_begin(&arena, 1);
String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
EVAL_String2NumMap *result = eval_push_member_map_from_raddbg_voff(arena, rdbg, voff);
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
EVAL_String2NumMap *result = eval_push_member_map_from_raddbgi_voff(arena, rdbg, voff);
scratch_end(scratch);
return result;
}
@@ -3987,7 +3987,7 @@ df_eval_parse_ctx_from_process_vaddr(DBGI_Scope *scope, DF_Entity *process, U64
DF_Entity *binary = df_binary_file_from_module(module);
String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
Architecture arch = df_architecture_from_entity(process);
EVAL_String2NumMap *reg_map = ctrl_string2reg_from_arch(arch);
EVAL_String2NumMap *reg_alias_map = ctrl_string2alias_from_arch(arch);
@@ -4035,22 +4035,22 @@ df_eval_parse_ctx_from_src_loc(DBGI_Scope *scope, DF_Entity *file, TxtPt pt)
DF_Entity *binary = binary_n->entity;
String8 binary_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, binary_path, 0);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
// rjf: file_path_normalized * rdbg -> src_id
B32 good_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)
{
RADDBG_ParsedNameMap map = {0};
raddbg_name_map_parse(rdbg, mapptr, &map);
RADDBG_NameMapNode *node = raddbg_name_map_lookup(rdbg, &map, file_path_normalized.str, file_path_normalized.size);
RADDBGI_ParsedNameMap map = {0};
raddbgi_name_map_parse(rdbg, mapptr, &map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &map, file_path_normalized.str, file_path_normalized.size);
if(node != 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)
{
good_src_id = 1;
@@ -4063,19 +4063,19 @@ df_eval_parse_ctx_from_src_loc(DBGI_Scope *scope, DF_Entity *file, TxtPt pt)
// rjf: good src-id -> look up line info for visible range
if(good_src_id)
{
RADDBG_SourceFile *src = rdbg->source_files+src_id;
RADDBG_ParsedLineMap line_map = {0};
raddbg_line_map_from_source_file(rdbg, src, &line_map);
RADDBGI_SourceFile *src = rdbg->source_files+src_id;
RADDBGI_ParsedLineMap line_map = {0};
raddbgi_line_map_from_source_file(rdbg, src, &line_map);
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)
{
U64 base_voff = voffs[idx];
U64 unit_idx = raddbg_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, base_voff);
RADDBG_Unit *unit = &rdbg->units[unit_idx];
RADDBG_ParsedLineInfo unit_line_info = {0};
raddbg_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 unit_idx = raddbgi_vmap_idx_from_voff(rdbg->unit_vmap, rdbg->unit_vmap_count, base_voff);
RADDBGI_Unit *unit = &rdbg->units[unit_idx];
RADDBGI_ParsedLineInfo unit_line_info = {0};
raddbgi_line_info_from_unit(rdbg, unit, &unit_line_info);
U64 line_info_idx = raddbgi_line_info_idx_from_voff(&unit_line_info, base_voff);
Rng1U64 range = r1u64(base_voff, unit_line_info.voffs[line_info_idx+1]);
S64 actual_line = (S64)unit_line_info.lines[line_info_idx].line_num;
DF_TextLineSrc2DasmInfoNode *src2dasm_n = push_array(scratch.arena, DF_TextLineSrc2DasmInfoNode, 1);
@@ -4246,7 +4246,7 @@ df_eval_from_string(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_
}
internal DF_Eval
df_value_mode_eval_from_eval(TG_Graph *graph, 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();
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_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)
{
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:
{
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;
CTRL_Unwind unwind = df_query_cached_unwind_from_thread(thread);
if(unwind.first != 0)
@@ -4316,7 +4316,7 @@ df_value_mode_eval_from_eval(TG_Graph *graph, RADDBG_Parsed *rdbg, DF_CtrlCtx *c
}
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();
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);
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);
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;
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;
MemoryCopy(&vtable_vaddr, vtable_base_ptr_memory.str, addr_size);
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);
RADDBG_GlobalVariable *global_var = raddbg_element_from_idx(rdbg, global_variables, global_idx);
if(global_var->link_flags & RADDBG_LinkFlag_TypeScoped)
U64 global_idx = raddbgi_vmap_idx_from_voff(rdbg->global_vmap, rdbg->global_vmap_count, vtable_voff);
RADDBGI_GlobalVariable *global_var = raddbgi_element_from_idx(rdbg, global_variables, global_idx);
if(global_var->link_flags & RADDBGI_LinkFlag_TypeScoped)
{
RADDBG_UDT *udt = raddbg_element_from_idx(rdbg, udts, global_var->container_idx);
RADDBG_TypeNode *type = raddbg_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);
RADDBGI_UDT *udt = raddbgi_element_from_idx(rdbg, udts, global_var->container_idx);
RADDBGI_TypeNode *type = raddbgi_element_from_idx(rdbg, type_nodes, udt->self_type_idx);
TG_Key derived_type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type->kind), (U64)udt->self_type_idx);
TG_Key ptr_to_derived_type_key = tg_cons_type_make(graph, TG_Kind_Ptr, derived_type_key, 0);
eval.type_key = ptr_to_derived_type_key;
}
@@ -4579,13 +4579,13 @@ df_string_from_ascii_value(Arena *arena, U8 val)
}
internal String8
df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, 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();
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);
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;
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:
{
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};
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
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;
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_Kind dst_type_kind = tg_kind_from_key(dst_type_key);
TG_Kind src_type_kind = tg_kind_from_key(src_type_key);
U64 dst_type_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, dst_type_key);
U64 src_type_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, src_type_key);
U64 dst_type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, dst_type_key);
U64 src_type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, src_type_key);
//- rjf: get commit data based on destination type
String8 commit_data = {0};
@@ -4914,7 +4914,7 @@ df_filtered_data_members_from_members_cfg_table(Arena *arena, TG_MemberArray mem
}
internal DF_EvalLinkBaseChunkList
df_eval_link_base_chunk_list_from_eval(Arena *arena, TG_Graph *graph, 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};
for(DF_Eval base_eval = eval, last_eval = zero_struct; list.count < cap;)
@@ -5053,7 +5053,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie
//////////////////////////////
//- rjf: unpack eval
//
TG_Key eval_type_key = tg_unwrapped_from_graph_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);
//////////////////////////////
@@ -5084,7 +5084,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie
TG_Kind ptr_type_kind = TG_Kind_Null;
if(eval_type_kind == TG_Kind_Ptr || eval_type_kind == TG_Kind_LRef || eval_type_kind == TG_Kind_RRef)
{
TG_Key direct_type_key = tg_ptee_from_graph_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);
DF_Eval ptr_val_eval = df_value_mode_eval_from_eval(parse_ctx->type_graph, parse_ctx->rdbg, ctrl_ctx, eval);
@@ -5199,7 +5199,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie
ProfScope("build viz blocks for UDT members")
{
//- rjf: type -> filtered data members
TG_MemberArray data_members = tg_data_members_from_graph_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);
//- rjf: build blocks for all members, split by sub-expansions
@@ -5255,7 +5255,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie
ProfScope("build viz blocks for UDT type-eval enums")
{
//- rjf: type -> full type info
TG_Type *type = tg_type_from_graph_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)
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_EnumMembers, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth+1);
@@ -5277,7 +5277,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie
ProfScope("(structs, unions, classes) descend to members & make block(s), with linked list view")
{
//- rjf: type -> data members
TG_MemberArray data_members = tg_data_members_from_graph_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
TG_Member *link_member = 0;
@@ -5290,7 +5290,7 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie
{
link_member = mem;
link_member_type_kind = tg_kind_from_key(link_member->type_key);
link_member_ptee_type_key = tg_ptee_from_graph_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;
}
}
@@ -5371,10 +5371,10 @@ df_append_viz_blocks_for_parent__rec(Arena *arena, DBGI_Scope *scope, DF_EvalVie
ProfScope("(arrays) descend to elements & make block(s)")
{
//- rjf: unpack array type info
TG_Type *array_type = tg_type_from_graph_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;
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
DF_EvalVizBlock *last_vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Elements, key, df_expand_key_make(df_hash_from_expand_key(key), 0), depth+1);
@@ -5612,7 +5612,7 @@ df_eval_viz_row_list_push_new(Arena *arena, EVAL_ParseCtx *parse_ctx, DF_EvalViz
// rjf: determine exandability, editability
if(tg_kind_from_key(eval.type_key) != TG_Kind_Null)
{
for(TG_Key t = eval.type_key;; t = tg_unwrapped_direct_from_graph_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);
if(kind == TG_Kind_Null)
+5 -5
View File
@@ -1579,8 +1579,8 @@ internal B32 df_eval_memory_read(void *u, void *out, U64 addr, U64 size);
internal EVAL_ParseCtx df_eval_parse_ctx_from_process_vaddr(DBGI_Scope *scope, DF_Entity *process, U64 vaddr);
internal EVAL_ParseCtx df_eval_parse_ctx_from_src_loc(DBGI_Scope *scope, DF_Entity *file, TxtPt pt);
internal DF_Eval df_eval_from_string(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, String8 string);
internal DF_Eval df_value_mode_eval_from_eval(TG_Graph *graph, RADDBG_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_value_mode_eval_from_eval(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval);
internal DF_Eval df_dynamically_typed_eval_from_eval(TG_Graph *graph, RADDBGI_Parsed *rdbg, DF_CtrlCtx *ctrl_ctx, DF_Eval eval);
internal DF_Eval df_eval_from_eval_cfg_table(Arena *arena, DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, DF_Eval eval, DF_CfgTable *cfg);
////////////////////////////////
@@ -1604,14 +1604,14 @@ internal String8 df_eval_view_rule_from_key(DF_EvalView *eval_view, DF_ExpandKey
//- rjf: evaluation value string builder helpers
internal String8 df_string_from_ascii_value(Arena *arena, U8 val);
internal String8 df_string_from_simple_typed_eval(Arena *arena, TG_Graph *graph, 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
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
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_EvalLinkBaseArray df_eval_link_base_array_from_chunk_list(Arena *arena, DF_EvalLinkBaseChunkList *chunks);
+17 -17
View File
@@ -4410,15 +4410,15 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D
DF_Entity *task = n->entity;
if(task->alloc_time_us + 500000 < os_now_microseconds())
{
String8 raddbg_path = task->name;
String8 raddbg_name = str8_skip_last_slash(raddbg_path);
String8 task_text = push_str8f(scratch.arena, "Creating %S...", raddbg_name);
String8 raddbgi_path = task->name;
String8 raddbgi_name = str8_skip_last_slash(raddbgi_path);
String8 task_text = push_str8f(scratch.arena, "Creating %S...", raddbgi_name);
UI_Key key = ui_key_from_stringf(ui_key_zero(), "task_%p", task);
UI_Box *box = ui_build_box_from_key(UI_BoxFlag_DrawHotEffects|UI_BoxFlag_DrawText|UI_BoxFlag_DrawBorder|UI_BoxFlag_DrawBackground|UI_BoxFlag_Clickable, key);
UI_Signal sig = ui_signal_from_box(box);
if(ui_hovering(sig)) UI_Tooltip
{
ui_label(raddbg_path);
ui_label(raddbgi_path);
}
ui_box_equip_display_string(box, task_text);
}
@@ -5232,7 +5232,7 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D
default:{}break;
case EVAL_EvalMode_Addr:
{
U64 size = tg_byte_size_from_graph_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);
Rng1U64 vaddr_rng = r1u64(row->eval.offset, row->eval.offset+size);
CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, vaddr_rng, 0);
@@ -6858,7 +6858,7 @@ df_eval_escaped_from_raw_string(Arena *arena, String8 raw)
}
internal String8List
df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, TG_Graph *graph, 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();
String8List list = {0};
@@ -6869,13 +6869,13 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
{
if(opt_member != 0)
{
U64 member_byte_size = tg_byte_size_from_graph_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" : "");
}
else
{
String8 basic_type_kind_string = tg_kind_basic_string_table[tg_kind_from_key(eval.type_key)];
U64 byte_size = tg_byte_size_from_graph_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" : "");
}
}
@@ -6883,7 +6883,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
//- rjf: non-type path: descend recursively & produce single-line value strings
else if(max_size > 0)
{
TG_Kind eval_type_kind = tg_kind_from_key(tg_unwrapped_from_graph_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;
DF_CfgVal *dec_cfg = df_cfg_val_from_string(cfg_table, str8_lit("dec"));
DF_CfgVal *hex_cfg = df_cfg_val_from_string(cfg_table, str8_lit("hex"));
@@ -6924,7 +6924,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
// rjf: get pointed-at info
TG_Kind type_kind = tg_kind_from_key(eval.type_key);
TG_Key direct_type_key = tg_ptee_from_graph_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);
B32 direct_type_has_content = (direct_type_kind != TG_Kind_Null && direct_type_kind != TG_Kind_Void && value_eval.imm_u64 != 0);
B32 direct_type_is_string = (direct_type_kind != TG_Kind_Null && value_eval.imm_u64 != 0 &&
@@ -7011,7 +7011,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
case TG_Kind_Array:
{
Temp scratch = scratch_begin(&arena, 1);
TG_Type *eval_type = tg_type_from_graph_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_Kind direct_type_kind = tg_kind_from_key(direct_type_key);
U64 array_count = eval_type->count;
@@ -7055,7 +7055,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
{
if(depth < 3)
{
U64 direct_type_byte_size = tg_byte_size_from_graph_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)
{
DF_Eval element_eval = zero_struct;
@@ -7111,7 +7111,7 @@ df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags
if(depth < 4)
{
Temp scratch = scratch_begin(&arena, 1);
TG_MemberArray data_members = tg_data_members_from_graph_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);
for(U64 member_idx = 0; member_idx < filtered_data_members.count && max_size > space_taken; member_idx += 1)
{
@@ -7312,7 +7312,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop
case DF_EvalVizBlockKind_Members:
if(block_type_kind != TG_Kind_Null)
{
TG_MemberArray data_members = tg_data_members_from_graph_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);
for(U64 idx = visible_idx_range.min; idx < visible_idx_range.max && idx < filtered_data_members.count; idx += 1)
{
@@ -7370,7 +7370,7 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop
case DF_EvalVizBlockKind_EnumMembers:
if(block_type_kind == TG_Kind_Enum)
{
TG_Type *type = tg_type_from_graph_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)
{
TG_EnumVal *enum_val = &type->enum_vals[idx];
@@ -7414,9 +7414,9 @@ df_eval_viz_windowed_row_list_from_viz_block_list(Arena *arena, DBGI_Scope *scop
//
case DF_EvalVizBlockKind_Elements:
{
TG_Key direct_type_key = tg_unwrapped_direct_from_graph_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);
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)
{
// rjf: get keys for this row
+1 -1
View File
@@ -961,7 +961,7 @@ internal void df_window_update_and_render(Arena *arena, OS_EventList *events, DF
//~ rjf: Eval Viz
internal String8 df_eval_escaped_from_raw_string(Arena *arena, String8 raw);
internal String8List df_single_line_eval_value_strings_from_eval(Arena *arena, DF_EvalVizStringFlags flags, TG_Graph *graph, 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);
////////////////////////////////
+14 -14
View File
@@ -5,7 +5,7 @@
//~ rjf: Helpers
internal Vec4F32
df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, 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};
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:
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);
Rng1U64 array_memory_vaddr_rng = r1u64(eval.offset, eval.offset + array_total_size_capped);
CTRL_ProcessMemorySlice array_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, array_memory_vaddr_rng, 0);
String8 array_memory = array_slice.data;
TG_Key element_type_key = tg_unwrapped_direct_from_graph_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);
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)
{
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:
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);
Rng1U64 struct_memory_vaddr_rng = r1u64(eval.offset, eval.offset + struct_total_size_capped);
CTRL_ProcessMemorySlice struct_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, struct_memory_vaddr_rng, 0);
String8 struct_memory = struct_slice.data;
TG_Type *type = tg_type_from_graph_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;
element_idx < 4 && member_idx < type->count;
member_idx += 1)
@@ -102,7 +102,7 @@ df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RADDBG_Parsed
}
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_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:
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);
Rng1U64 array_memory_vaddr_rng = r1u64(eval.offset, eval.offset + array_total_size_capped);
String8 array_memory = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, array_memory_vaddr_rng);
TG_Key element_type_key = tg_unwrapped_direct_from_graph_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);
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)
{
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:
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);
Rng1U64 struct_memory_vaddr_rng = r1u64(eval.offset, eval.offset + struct_total_size_capped);
String8 struct_memory = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, struct_memory_vaddr_rng);
TG_Type *type = tg_type_from_graph_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;
element_idx < 4 && member_idx < type->count;
member_idx += 1)
@@ -343,7 +343,7 @@ DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_DEF(array)
}
// rjf: apply array size to type
TG_Key pointee = tg_ptee_from_graph_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);
eval.type_key = tg_cons_type_make(parse_ctx->type_graph, TG_Kind_Ptr, array_type, 0);
}
@@ -373,7 +373,7 @@ DF_CORE_VIEW_RULE_EVAL_RESOLUTION_FUNCTION_DEF(bswap)
Temp scratch = scratch_begin(&arena, 1);
TG_Key type_key = eval.type_key;
TG_Kind type_kind = tg_kind_from_key(type_key);
U64 type_size_bytes = tg_byte_size_from_graph_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 &&
(type_size_bytes == 2 ||
type_size_bytes == 4 ||
+2 -2
View File
@@ -32,8 +32,8 @@ struct DF_TxtTopologyInfo
////////////////////////////////
//~ rjf: Helpers
internal Vec4F32 df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RADDBG_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 Vec4F32 df_view_rule_hooks__rgba_from_eval(DF_Eval eval, TG_Graph *graph, RADDBGI_Parsed *raddbg, DF_Entity *process);
internal void df_view_rule_hooks__eval_commit_rgba(DF_Eval eval, TG_Graph *graph, RADDBGI_Parsed *raddbg, DF_CtrlCtx *ctrl_ctx, Vec4F32 rgba);
internal DF_BitmapTopologyInfo df_view_rule_hooks__bitmap_topology_info_from_cfg(DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, DF_CfgNode *cfg);
internal DF_GeoTopologyInfo df_view_rule_hooks__geo_topology_info_from_cfg(DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, DF_CfgNode *cfg);
internal DF_TxtTopologyInfo df_view_rule_hooks__txt_topology_info_from_cfg(DBGI_Scope *scope, DF_CtrlCtx *ctrl_ctx, EVAL_ParseCtx *parse_ctx, EVAL_String2ExprMap *macro_map, DF_CfgNode *cfg);
+12 -12
View File
@@ -751,7 +751,7 @@ df_eval_viz_block_list_from_watch_view_state(Arena *arena, DBGI_Scope *scope, DF
DF_Entity *binary = df_binary_file_from_module(module);
String8 exe_path = df_full_path_from_entity(scratch.arena, binary);
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, os_now_microseconds()+100);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
//- rjf: calculate top-level keys, expand root-level, grab root expansion node
DF_ExpandKey parent_key = df_expand_key_make(5381, 0);
@@ -1180,7 +1180,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW
default:{}break;
case EVAL_EvalMode_Addr:
{
U64 size = tg_byte_size_from_graph_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);
Rng1U64 vaddr_rng = r1u64(row->eval.offset, row->eval.offset+size);
CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, vaddr_rng, 0);
@@ -1270,7 +1270,7 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW
row->depth > 0 &&
!row_expanded)
{
U64 next_off = (row->eval.offset + tg_byte_size_from_graph_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)
{
ui_set_next_fixed_x(0);
@@ -2918,7 +2918,7 @@ DF_VIEW_UI_FUNCTION_DEF(SymbolLister)
//- rjf: query -> raddbg, filtered items
U128 fuzzy_search_key = {(U64)view, df_hash_from_string(str8_struct(&view))};
DBGI_Parse *dbgi = dbgi_parse_from_exe_path(scope, exe_path, os_now_microseconds()+100);
RADDBG_Parsed *rdbg = &dbgi->rdbg;
RADDBGI_Parsed *rdbg = &dbgi->rdbg;
B32 items_stale = 0;
DBGI_FuzzySearchItemArray items = dbgi_fuzzy_search_items_from_key_exe_query(scope, fuzzy_search_key, exe_path, query, DBGI_FuzzySearchTarget_Procedures, os_now_microseconds()+100, &items_stale);
if(items_stale)
@@ -2929,9 +2929,9 @@ DF_VIEW_UI_FUNCTION_DEF(SymbolLister)
//- rjf: submit best match when hitting enter w/ no selection
if(slv->cursor.y == 0 && items.count != 0 && os_key_press(ui_events(), ui_window(), 0, OS_Key_Return))
{
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;
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);
if(name.size != 0)
{
@@ -2967,12 +2967,12 @@ DF_VIEW_UI_FUNCTION_DEF(SymbolLister)
UI_Focus((slv->cursor.y == idx+1) ? UI_FocusKind_On : UI_FocusKind_Off)
{
DBGI_FuzzySearchItem *item = &items.v[idx];
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;
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);
RADDBG_TypeNode *type_node = raddbg_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);
RADDBGI_TypeNode *type_node = raddbgi_element_from_idx(rdbg, type_nodes, procedure->type_idx);
TG_Key type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), procedure->type_idx);
ui_set_next_hover_cursor(OS_Cursor_HandPoint);
UI_Box *box = ui_build_box_from_stringf(UI_BoxFlag_Clickable|
UI_BoxFlag_DrawBackground|
@@ -7902,7 +7902,7 @@ DF_VIEW_UI_FUNCTION_DEF(Memory)
DBGI_Scope *scope = dbgi_scope_open();
U64 thread_rip_vaddr = df_query_cached_rip_from_thread_unwind(thread, ctrl_ctx.unwind_count);
EVAL_ParseCtx parse_ctx = df_eval_parse_ctx_from_process_vaddr(scope, process, thread_rip_vaddr);
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)
{
String8 local_name = n->string;
@@ -7910,7 +7910,7 @@ DF_VIEW_UI_FUNCTION_DEF(Memory)
if(local_eval.mode == EVAL_EvalMode_Addr)
{
TG_Kind local_eval_type_kind = tg_kind_from_key(local_eval.type_key);
U64 local_eval_type_size = tg_byte_size_from_graph_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_in_visible = intersect_1u64(viz_range_bytes, vaddr_rng);
if(vaddr_rng_in_visible.max != vaddr_rng_in_visible.min)
+149 -149
View File
@@ -23,8 +23,8 @@ eval_bytecode_from_oplist(Arena *arena, EVAL_OpList *list){
default:
{
// compute bytecode advance
U8 ctrlbits = raddbg_eval_opcode_ctrlbits[opcode];
U64 extra_byte_count = RADDBG_DECODEN_FROM_CTRLBITS(ctrlbits);
U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[opcode];
U64 extra_byte_count = RADDBGI_DECODEN_FROM_CTRLBITS(ctrlbits);
U8 *next_ptr = ptr + 1 + extra_byte_count;
Assert(next_ptr <= opl);
@@ -62,9 +62,9 @@ eval_bytecode_from_oplist(Arena *arena, EVAL_OpList *list){
}
internal void
eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RADDBG_EvalOp opcode, U64 p){
U8 ctrlbits = raddbg_eval_opcode_ctrlbits[opcode];
U32 p_size = RADDBG_DECODEN_FROM_CTRLBITS(ctrlbits);
eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RADDBGI_EvalOp opcode, U64 p){
U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[opcode];
U32 p_size = RADDBGI_DECODEN_FROM_CTRLBITS(ctrlbits);
EVAL_Op *node = push_array_no_zero(arena, EVAL_Op, 1);
node->opcode = opcode;
@@ -78,35 +78,35 @@ eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RADDBG_EvalOp opcode, U64 p
internal void
eval_oplist_push_uconst(Arena *arena, EVAL_OpList *list, U64 x){
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){
eval_oplist_push_op(arena, list, RADDBG_EvalOp_ConstU16, x);
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU16, x);
}
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{
eval_oplist_push_op(arena, list, RADDBG_EvalOp_ConstU64, x);
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU64, x);
}
}
internal void
eval_oplist_push_sconst(Arena *arena, EVAL_OpList *list, S64 x){
if (-0x80 <= x && x <= 0x7F){
eval_oplist_push_op(arena, list, RADDBG_EvalOp_ConstU8, (U64)x);
eval_oplist_push_op(arena, list, RADDBG_EvalOp_TruncSigned, 8);
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU8, (U64)x);
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_TruncSigned, 8);
}
else if (-0x8000 <= x && x <= 0x7FFF){
eval_oplist_push_op(arena, list, RADDBG_EvalOp_ConstU16, (U64)x);
eval_oplist_push_op(arena, list, RADDBG_EvalOp_TruncSigned, 16);
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU16, (U64)x);
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_TruncSigned, 16);
}
else if (-0x80000000ll <= x && x <= 0x7FFFFFFFll){
eval_oplist_push_op(arena, list, RADDBG_EvalOp_ConstU32, (U64)x);
eval_oplist_push_op(arena, list, RADDBG_EvalOp_TruncSigned, 32);
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_ConstU32, (U64)x);
eval_oplist_push_op(arena, list, RADDBGI_EvalOp_TruncSigned, 32);
}
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
internal RADDBG_EvalOp
internal RADDBGI_EvalOp
eval_opcode_from_expr_kind(EVAL_ExprKind kind){
RADDBG_EvalOp result = RADDBG_EvalOp_Stop;
RADDBGI_EvalOp result = RADDBGI_EvalOp_Stop;
switch (kind){
case EVAL_ExprKind_Neg: result = RADDBG_EvalOp_Neg; break;
case EVAL_ExprKind_LogNot: result = RADDBG_EvalOp_LogNot; break;
case EVAL_ExprKind_BitNot: result = RADDBG_EvalOp_BitNot; break;
case EVAL_ExprKind_Mul: result = RADDBG_EvalOp_Mul; break;
case EVAL_ExprKind_Div: result = RADDBG_EvalOp_Div; break;
case EVAL_ExprKind_Mod: result = RADDBG_EvalOp_Mod; break;
case EVAL_ExprKind_Add: result = RADDBG_EvalOp_Add; break;
case EVAL_ExprKind_Sub: result = RADDBG_EvalOp_Sub; break;
case EVAL_ExprKind_LShift: result = RADDBG_EvalOp_LShift; break;
case EVAL_ExprKind_RShift: result = RADDBG_EvalOp_RShift; break;
case EVAL_ExprKind_Less: result = RADDBG_EvalOp_Less; break;
case EVAL_ExprKind_LsEq: result = RADDBG_EvalOp_LsEq; break;
case EVAL_ExprKind_Grtr: result = RADDBG_EvalOp_Grtr; break;
case EVAL_ExprKind_GrEq: result = RADDBG_EvalOp_GrEq; break;
case EVAL_ExprKind_EqEq: result = RADDBG_EvalOp_EqEq; break;
case EVAL_ExprKind_NtEq: result = RADDBG_EvalOp_NtEq; break;
case EVAL_ExprKind_BitAnd: result = RADDBG_EvalOp_BitAnd; break;
case EVAL_ExprKind_BitXor: result = RADDBG_EvalOp_BitXor; break;
case EVAL_ExprKind_BitOr: result = RADDBG_EvalOp_BitOr; break;
case EVAL_ExprKind_LogAnd: result = RADDBG_EvalOp_LogAnd; break;
case EVAL_ExprKind_LogOr: result = RADDBG_EvalOp_LogOr; break;
case EVAL_ExprKind_Neg: result = RADDBGI_EvalOp_Neg; break;
case EVAL_ExprKind_LogNot: result = RADDBGI_EvalOp_LogNot; break;
case EVAL_ExprKind_BitNot: result = RADDBGI_EvalOp_BitNot; break;
case EVAL_ExprKind_Mul: result = RADDBGI_EvalOp_Mul; break;
case EVAL_ExprKind_Div: result = RADDBGI_EvalOp_Div; break;
case EVAL_ExprKind_Mod: result = RADDBGI_EvalOp_Mod; break;
case EVAL_ExprKind_Add: result = RADDBGI_EvalOp_Add; break;
case EVAL_ExprKind_Sub: result = RADDBGI_EvalOp_Sub; break;
case EVAL_ExprKind_LShift: result = RADDBGI_EvalOp_LShift; break;
case EVAL_ExprKind_RShift: result = RADDBGI_EvalOp_RShift; break;
case EVAL_ExprKind_Less: result = RADDBGI_EvalOp_Less; break;
case EVAL_ExprKind_LsEq: result = RADDBGI_EvalOp_LsEq; break;
case EVAL_ExprKind_Grtr: result = RADDBGI_EvalOp_Grtr; break;
case EVAL_ExprKind_GrEq: result = RADDBGI_EvalOp_GrEq; break;
case EVAL_ExprKind_EqEq: result = RADDBGI_EvalOp_EqEq; break;
case EVAL_ExprKind_NtEq: result = RADDBGI_EvalOp_NtEq; break;
case EVAL_ExprKind_BitAnd: result = RADDBGI_EvalOp_BitAnd; break;
case EVAL_ExprKind_BitXor: result = RADDBGI_EvalOp_BitXor; break;
case EVAL_ExprKind_BitOr: result = RADDBGI_EvalOp_BitOr; break;
case EVAL_ExprKind_LogAnd: result = RADDBGI_EvalOp_LogAnd; break;
case EVAL_ExprKind_LogOr: result = RADDBGI_EvalOp_LogOr; break;
}
return(result);
}
@@ -286,9 +286,9 @@ eval_expr_leaf_type(Arena *arena, void *location, TG_Key type_key){
////////////////////////////////
//~ allen: EVAL Type Information Transformers
internal RADDBG_EvalTypeGroup
internal RADDBGI_EvalTypeGroup
eval_type_group_from_kind(TG_Kind kind){
RADDBG_EvalTypeGroup result = 0;
RADDBGI_EvalTypeGroup result = 0;
switch (kind){
default:{}break;
@@ -303,7 +303,7 @@ eval_type_group_from_kind(TG_Kind kind){
case TG_Kind_IncompleteStruct: case TG_Kind_IncompleteClass:
case TG_Kind_IncompleteUnion: case TG_Kind_IncompleteEnum:
case TG_Kind_Bitfield: case TG_Kind_Variadic:
result = RADDBG_EvalTypeGroup_Other; break;
result = RADDBGI_EvalTypeGroup_Other; break;
case TG_Kind_Handle:
case TG_Kind_UChar8: case TG_Kind_UChar16: case TG_Kind_UChar32:
@@ -312,26 +312,26 @@ eval_type_group_from_kind(TG_Kind kind){
case TG_Kind_U512:
case TG_Kind_Ptr: case TG_Kind_LRef: case TG_Kind_RRef:
case TG_Kind_Function: case TG_Kind_Method: case TG_Kind_MemberPtr:
result = RADDBG_EvalTypeGroup_U; break;
result = RADDBGI_EvalTypeGroup_U; break;
case TG_Kind_Char8: case TG_Kind_Char16: case TG_Kind_Char32:
case TG_Kind_S8: case TG_Kind_S16: case TG_Kind_S32:
case TG_Kind_S64: case TG_Kind_S128: case TG_Kind_S256:
case TG_Kind_S512:
case TG_Kind_Bool:
result = RADDBG_EvalTypeGroup_S; break;
result = RADDBGI_EvalTypeGroup_S; break;
case TG_Kind_F32:
result = RADDBG_EvalTypeGroup_F32; break;
result = RADDBGI_EvalTypeGroup_F32; break;
case TG_Kind_F64:
result = RADDBG_EvalTypeGroup_F64; break;
result = RADDBGI_EvalTypeGroup_F64; break;
}
return(result);
}
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;
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);
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
{
@@ -350,7 +350,7 @@ eval_type_unwrap_enum(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key 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_Kind kind = tg_kind_from_key(key);
if(kind == TG_Kind_Bool ||
@@ -365,7 +365,7 @@ eval_type_promote(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key 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)) &&
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
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;
// unwrap
TG_Key lu = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, l);
TG_Key ru = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, r);
TG_Key lu = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, l);
TG_Key ru = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, r);
if (tg_key_match(lu, ru)){
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_RRef:
{
TG_Key lud = tg_direct_from_graph_raddbg_key(graph, rdbg, lu);
TG_Key rud = tg_direct_from_graph_raddbg_key(graph, rdbg, ru);
TG_Key lud = tg_direct_from_graph_raddbgi_key(graph, rdbg, lu);
TG_Key rud = tg_direct_from_graph_raddbgi_key(graph, rdbg, ru);
if (eval_type_match(graph, rdbg, lud, rud)){
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:
{
TG_Key lud = tg_direct_from_graph_raddbg_key(graph, rdbg, lu);
TG_Key rud = tg_direct_from_graph_raddbg_key(graph, rdbg, ru);
TG_Key luo = tg_owner_from_graph_raddbg_key(graph, rdbg, lu);
TG_Key ruo = tg_owner_from_graph_raddbg_key(graph, rdbg, ru);
TG_Key lud = tg_direct_from_graph_raddbgi_key(graph, rdbg, lu);
TG_Key rud = tg_direct_from_graph_raddbgi_key(graph, rdbg, ru);
TG_Key luo = tg_owner_from_graph_raddbgi_key(graph, rdbg, lu);
TG_Key ruo = tg_owner_from_graph_raddbgi_key(graph, rdbg, ru);
if (eval_type_match(graph, rdbg, lud, rud) &&
eval_type_match(graph, rdbg, luo, ruo)){
result = 1;
@@ -430,8 +430,8 @@ eval_type_match(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key l, TG_Key r){
case TG_Kind_Array:
{
Temp scratch = scratch_begin(0, 0);
TG_Type *lt = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, r);
TG_Type *lt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, r);
if(lt->count == rt->count && eval_type_match(graph, rdbg, lt->direct_type_key, rt->direct_type_key))
{
result = 1;
@@ -442,8 +442,8 @@ eval_type_match(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key l, TG_Key r){
case TG_Kind_Function:
{
Temp scratch = scratch_begin(0, 0);
TG_Type *lt = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, r);
TG_Type *lt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, r);
if (lt->count == rt->count && eval_type_match(graph, rdbg, lt->direct_type_key, rt->direct_type_key))
{
B32 params_match = 1;
@@ -466,8 +466,8 @@ eval_type_match(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key l, TG_Key r){
case TG_Kind_Method:
{
Temp scratch = scratch_begin(0, 0);
TG_Type *lt = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_raddbg_key(scratch.arena, graph, rdbg, r);
TG_Type *lt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, l);
TG_Type *rt = tg_type_from_graph_raddbgi_key(scratch.arena, graph, rdbg, r);
if (lt->count == rt->count &&
eval_type_match(graph, rdbg, lt->direct_type_key, rt->direct_type_key) &&
eval_type_match(graph, rdbg, lt->owner_type_key, rt->owner_type_key))
@@ -522,15 +522,15 @@ eval_kind_is_basic_or_enum(TG_Kind kind){
internal EVAL_IRTree*
eval_irtree_const_u(Arena *arena, U64 v){
// choose encoding op
RADDBG_EvalOp op = RADDBG_EvalOp_ConstU64;
RADDBGI_EvalOp op = RADDBGI_EvalOp_ConstU64;
if (v < 0x100){
op = RADDBG_EvalOp_ConstU8;
op = RADDBGI_EvalOp_ConstU8;
}
else if (v < 0x10000){
op = RADDBG_EvalOp_ConstU16;
op = RADDBGI_EvalOp_ConstU16;
}
else if (v < 0x100000000){
op = RADDBG_EvalOp_ConstU32;
op = RADDBGI_EvalOp_ConstU32;
}
// make the tree node
@@ -541,8 +541,8 @@ eval_irtree_const_u(Arena *arena, U64 v){
}
internal EVAL_IRTree*
eval_irtree_unary_op(Arena *arena, RADDBG_EvalOp op,
RADDBG_EvalTypeGroup group, EVAL_IRTree *c){
eval_irtree_unary_op(Arena *arena, RADDBGI_EvalOp op,
RADDBGI_EvalTypeGroup group, EVAL_IRTree *c){
EVAL_IRTree *result = push_array(arena, EVAL_IRTree, 1);
result->op = op;
result->p = group;
@@ -551,7 +551,7 @@ eval_irtree_unary_op(Arena *arena, RADDBG_EvalOp op,
}
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 *result = push_array(arena, EVAL_IRTree, 1);
result->op = op;
@@ -562,15 +562,15 @@ eval_irtree_binary_op(Arena *arena, RADDBG_EvalOp op, RADDBG_EvalTypeGroup group
}
internal EVAL_IRTree*
eval_irtree_binary_op_u(Arena *arena, RADDBG_EvalOp op, EVAL_IRTree *l, EVAL_IRTree *r){
EVAL_IRTree *result = eval_irtree_binary_op(arena, op, RADDBG_EvalTypeGroup_U, l, 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, RADDBGI_EvalTypeGroup_U, l, r);
return(result);
}
internal EVAL_IRTree*
eval_irtree_conditional(Arena *arena, EVAL_IRTree *c, EVAL_IRTree *l, EVAL_IRTree *r){
EVAL_IRTree *result = push_array(arena, EVAL_IRTree, 1);
result->op = RADDBG_EvalOp_Cond;
result->op = RADDBGI_EvalOp_Cond;
result->children[0] = c;
result->children[1] = l;
result->children[2] = r;
@@ -589,13 +589,13 @@ eval_irtree_bytecode_no_copy(Arena *arena, String8 bytecode){
//~ allen: EVAL IR-Tree High Level Helpers
internal EVAL_IRTree*
eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key){
U64 byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, 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_raddbgi_key(graph, rdbg, type_key);
EVAL_IRTree *result = &eval_irtree_nil;
if (0 < byte_size && byte_size <= 8){
// build the read node
EVAL_IRTree *read_node = push_array(arena, EVAL_IRTree, 1);
read_node->op = RADDBG_EvalOp_MemRead;
read_node->op = RADDBGI_EvalOp_MemRead;
read_node->p = byte_size;
read_node->children[0] = c;
@@ -605,7 +605,7 @@ eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EV
TG_Kind kind = tg_kind_from_key(type_key);
if (bit_size < 64 && eval_kind_is_signed(kind)){
with_trunc = push_array(arena, EVAL_IRTree, 1);
with_trunc->op = RADDBG_EvalOp_TruncSigned;
with_trunc->op = RADDBGI_EvalOp_TruncSigned;
with_trunc->p = bit_size;
with_trunc->children[0] = read_node;
}
@@ -620,23 +620,23 @@ eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EV
}
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);
result->op = RADDBG_EvalOp_Convert;
result->op = RADDBGI_EvalOp_Convert;
result->p = in | (out << 8);
result->children[0] = c;
return(result);
}
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;
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){
RADDBG_EvalOp op = RADDBG_EvalOp_Trunc;
RADDBGI_EvalOp op = RADDBGI_EvalOp_Trunc;
TG_Kind kind = tg_kind_from_key(type_key);
if (eval_kind_is_signed(kind)){
op = RADDBG_EvalOp_TruncSigned;
op = RADDBGI_EvalOp_TruncSigned;
}
U64 bit_size = byte_size << 3;
result = push_array(arena, EVAL_IRTree, 1);
@@ -648,19 +648,19 @@ eval_irtree_trunc(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_IRTre
}
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;
TG_Kind in_kind = tg_kind_from_key(in);
TG_Kind out_kind = tg_kind_from_key(out);
U8 in_group = eval_type_group_from_kind(in_kind);
U8 out_group = eval_type_group_from_kind(out_kind);
U32 conversion_rule = raddbg_eval_conversion_rule(in_group, out_group);
if(conversion_rule == RADDBG_EvalConversionKind_Legal)
U32 conversion_rule = raddbgi_eval_conversion_rule(in_group, out_group);
if(conversion_rule == RADDBGI_EvalConversionKind_Legal)
{
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 out_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, out);
U64 in_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, in);
U64 out_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, out);
if(out_byte_size < in_byte_size && eval_kind_is_integer(out_kind))
{
result = eval_irtree_trunc(arena, graph, rdbg, result, out);
@@ -669,7 +669,7 @@ eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_
}
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 *result = tree;
switch (from_mode){
@@ -680,7 +680,7 @@ eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg,
}break;
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;
}
return(result);
@@ -715,7 +715,7 @@ eval_push_leaf_ident_exprs_from_expr__in_place(Arena *arena, EVAL_String2ExprMap
}
internal TG_Key
eval_type_from_type_expr(Arena *arena, TG_Graph *graph, 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;
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
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();
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);
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 r_restype = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, r.type_key);
TG_Key l_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, l.type_key);
TG_Key r_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, r.type_key);
TG_Kind l_restype_kind = tg_kind_from_key(l_restype);
TG_Kind r_restype_kind = tg_kind_from_key(r_restype);
@@ -795,8 +795,8 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
eval_errorf(arena, eout, EVAL_ErrorKind_MalformedInput, exprr->location, "Cannot index with this type.");
}
else{
direct_type = tg_unwrapped_direct_from_graph_raddbg_key(graph, rdbg, l_restype);
direct_type_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, direct_type);
direct_type = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, l_restype);
direct_type_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, direct_type);
if (l_restype_kind == TG_Kind_Ptr){
if (direct_type_size == 0){
eval_errorf(arena, eout, EVAL_ErrorKind_MalformedInput, exprr->location, "Cannot index into pointers of zero-sized types.");
@@ -832,7 +832,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
EVAL_IRTree *index_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, r.mode, r.tree, r_restype);
if (direct_type_size > 1){
EVAL_IRTree *const_tree = eval_irtree_const_u(arena, direct_type_size);
index_tree = eval_irtree_binary_op_u(arena, 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
@@ -842,7 +842,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
}
// 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
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);
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);
// determine which type to use
TG_Key check_type_key = l_restype;
TG_Kind check_type_kind = l_restype_kind;
if (l_restype_kind == TG_Kind_Ptr || l_restype_kind == TG_Kind_LRef || l_restype_kind == TG_Kind_RRef){
check_type_key = tg_unwrapped_direct_from_graph_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);
}
@@ -921,7 +921,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
if (l_good && r_good){
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
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){
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
@@ -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);
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_Key c_restype_direct = tg_unwrapped_direct_from_graph_raddbg_key(graph, rdbg, c_restype);
U64 c_restype_direct_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, c_restype_direct);
TG_Key c_restype_direct = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, c_restype);
U64 c_restype_direct_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, c_restype_direct);
// analyze situation
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);
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);
// 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)
{
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);
U64 c_restype_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, c_restype);
U64 cast_type_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, cast_type_key);
U64 c_restype_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, c_restype);
U64 cast_type_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, cast_type_key);
// analyze situation
U8 in_group = eval_type_group_from_kind(c_restype_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
switch(conversion_rule)
{
case RADDBG_EvalConversionKind_Noop:
case RADDBG_EvalConversionKind_Legal:
case RADDBGI_EvalConversionKind_Noop:
case RADDBGI_EvalConversionKind_Legal:
{
EVAL_IRTree *in_tree = eval_irtree_resolve_to_value(arena, graph, rdbg, c.mode, c.tree, c_restype);
EVAL_IRTree *new_tree = in_tree;
if (conversion_rule == RADDBG_EvalConversionKind_Legal){
if (conversion_rule == RADDBGI_EvalConversionKind_Legal){
new_tree = eval_irtree_convert_lo(arena, in_tree, out_group, in_group);
}
if (cast_type_byte_size < c_restype_byte_size && eval_kind_is_integer(cast_type_kind)){
@@ -1104,8 +1104,8 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
default:
{
String8 text = str8_lit("(internal) unknown conversion rule");
if (conversion_rule < RADDBG_EvalConversionKind_COUNT){
text.str = raddbg_eval_conversion_message(conversion_rule, &text.size);
if (conversion_rule < RADDBGI_EvalConversionKind_COUNT){
text.str = raddbgi_eval_conversion_message(conversion_rule, &text.size);
}
eval_error(arena, eout, EVAL_ErrorKind_MalformedInput, expr->location, text);
}break;
@@ -1141,7 +1141,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
TG_Kind type_kind = tg_kind_from_key(type_key);
if (type_kind != TG_Kind_Null){
can_generate = 1;
size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, type_key);
size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, type_key);
}
// 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);
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_Kind c_restype_kind = tg_kind_from_key(c_restype);
// analyze situation
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);
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.");
}
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);
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 r_restype = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, r.type_key);
TG_Key l_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, l.type_key);
TG_Key r_restype = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, r.type_key);
TG_Kind l_restype_kind = tg_kind_from_key(l_restype);
TG_Kind r_restype_kind = tg_kind_from_key(r_restype);
@@ -1235,7 +1235,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
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
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;
}
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 r_restype_direct = tg_unwrapped_direct_from_graph_raddbg_key(graph, rdbg, r_restype);
U64 l_restype_direct_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, l_restype_direct);
U64 r_restype_direct_byte_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, r_restype_direct);
TG_Key l_restype_direct = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, l_restype);
TG_Key r_restype_direct = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, r_restype);
U64 l_restype_direct_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, l_restype_direct);
U64 r_restype_direct_byte_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, r_restype_direct);
if (l_restype_direct_byte_size == r_restype_direct_byte_size){
arith_path = EVAL_ArithPath_PtrSub;
}
@@ -1299,7 +1299,7 @@ eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdb
U8 cv_group = eval_type_group_from_kind(cv_type_kind);
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;
}
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;
}
TG_Key direct = tg_unwrapped_direct_from_graph_raddbg_key(graph, rdbg, ptr->type_key);
U64 direct_type_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, direct);
TG_Key direct = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, ptr->type_key);
U64 direct_type_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, direct);
// generate ir 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);
if (direct_type_size > 1){
EVAL_IRTree *const_tree = eval_irtree_const_u(arena, direct_type_size);
integer_tree = eval_irtree_binary_op_u(arena, 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;
@@ -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);
}
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.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:
{
TG_Key direct = tg_unwrapped_direct_from_graph_raddbg_key(graph, rdbg, l_restype);
U64 direct_type_size = tg_byte_size_from_graph_raddbg_key(graph, rdbg, direct);
TG_Key direct = tg_unwrapped_direct_from_graph_raddbgi_key(graph, rdbg, l_restype);
U64 direct_type_size = tg_byte_size_from_graph_raddbgi_key(graph, rdbg, direct);
// generate ir 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);
}
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;
if (direct_type_size > 1){
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;
@@ -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){
TG_Key c_restype = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, c.type_key);
TG_Key l_restype = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, l.type_key);
TG_Key r_restype = tg_unwrapped_from_graph_raddbg_key(graph, rdbg, r.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_raddbgi_key(graph, rdbg, l.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 l_restype_kind = tg_kind_from_key(l_restype);
TG_Kind r_restype_kind = tg_kind_from_key(r_restype);
@@ -1568,8 +1568,8 @@ eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out){
ProfBeginFunction();
U32 op = tree->op;
switch (op){
case RADDBG_EvalOp_Stop:
case RADDBG_EvalOp_Skip:
case RADDBGI_EvalOp_Stop:
case RADDBGI_EvalOp_Skip:
{
// TODO: error - invalid ir-tree op
}break;
@@ -1579,7 +1579,7 @@ eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out){
eval_oplist_push_bytecode(arena, out, tree->bytecode);
}break;
case RADDBG_EvalOp_Cond:
case RADDBGI_EvalOp_Cond:
{
// split out each of the children
EVAL_OpList prt_cond = {0};
@@ -1598,11 +1598,11 @@ eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out){
// 4.
// modify prt_right in place to create step 2
eval_oplist_push_op(arena, &prt_right, 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
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
eval_oplist_concat_in_place(out, &prt_right);
@@ -1613,20 +1613,20 @@ eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out){
default:
{
if (op >= RADDBG_EvalOp_COUNT){
if (op >= RADDBGI_EvalOp_COUNT){
// TODO: error - invalid ir-tree op
}
else{
// handle all children
U8 ctrlbits = raddbg_eval_opcode_ctrlbits[op];
U64 child_count = RADDBG_POPN_FROM_CTRLBITS(ctrlbits);
U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[op];
U64 child_count = RADDBGI_POPN_FROM_CTRLBITS(ctrlbits);
EVAL_IRTree**child = tree->children;
for (U64 i = 0; i < child_count; i += 1, child += 1){
eval_oplist_from_irtree(arena, *child, out);
}
// emit op to compute this node
eval_oplist_push_op(arena, out, (RADDBG_EvalOp)tree->op, tree->p);
eval_oplist_push_op(arena, out, (RADDBGI_EvalOp)tree->op, tree->p);
}
}break;
}
+18 -18
View File
@@ -9,7 +9,7 @@
internal String8 eval_bytecode_from_oplist(Arena *arena, EVAL_OpList *list);
internal void eval_oplist_push_op(Arena *arena, EVAL_OpList *list, 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_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
internal RADDBG_EvalOp eval_opcode_from_expr_kind(EVAL_ExprKind kind);
internal B32 eval_expr_kind_is_comparison(EVAL_ExprKind kind);
internal RADDBGI_EvalOp eval_opcode_from_expr_kind(EVAL_ExprKind kind);
internal B32 eval_expr_kind_is_comparison(EVAL_ExprKind kind);
////////////////////////////////
//~ 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
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_promote(TG_Graph *graph, RADDBG_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_unwrap_enum(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key eval_type_promote(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key eval_type_coerce(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key l, TG_Key r);
internal 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_signed(TG_Kind kind);
@@ -56,27 +56,27 @@ internal B32 eval_kind_is_basic_or_enum(TG_Kind kind);
//~ allen: EVAL IR-Tree Constructors
internal EVAL_IRTree* eval_irtree_const_u(Arena *arena, U64 v);
internal EVAL_IRTree* eval_irtree_unary_op(Arena *arena, RADDBG_EvalOp op, RADDBG_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_u(Arena *arena, RADDBG_EvalOp op, EVAL_IRTree *l, EVAL_IRTree *r);
internal EVAL_IRTree* eval_irtree_unary_op(Arena *arena, RADDBGI_EvalOp op, RADDBGI_EvalTypeGroup group, EVAL_IRTree *c);
internal EVAL_IRTree* eval_irtree_binary_op(Arena *arena, RADDBGI_EvalOp op, RADDBGI_EvalTypeGroup group, EVAL_IRTree *l, EVAL_IRTree *r);
internal EVAL_IRTree* eval_irtree_binary_op_u(Arena *arena, RADDBGI_EvalOp op, EVAL_IRTree *l, EVAL_IRTree *r);
internal EVAL_IRTree* eval_irtree_conditional(Arena *arena, EVAL_IRTree *c, EVAL_IRTree *l, EVAL_IRTree *r);
internal EVAL_IRTree* eval_irtree_bytecode_no_copy(Arena *arena, String8 bytecode);
////////////////////////////////
//~ allen: EVAL IR-Tree High Level Helpers
internal EVAL_IRTree* eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RADDBG_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_trunc(Arena *arena, TG_Graph *graph, RADDBG_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_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_mem_read_type(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key);
internal EVAL_IRTree* eval_irtree_convert_lo(Arena *arena, EVAL_IRTree *c, RADDBGI_EvalTypeGroup out, RADDBGI_EvalTypeGroup in);
internal EVAL_IRTree* eval_irtree_trunc(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key);
internal EVAL_IRTree* eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_IRTree *c, TG_Key out, TG_Key in);
internal EVAL_IRTree* eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_EvalMode from_mode, EVAL_IRTree *tree, TG_Key type_key);
////////////////////////////////
//~ allen: EVAL Compiler Phases
internal void eval_push_leaf_ident_exprs_from_expr__in_place(Arena *arena, EVAL_String2ExprMap *map, EVAL_Expr *expr, EVAL_ErrorList *eout);
internal TG_Key eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RADDBG_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 TG_Key eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_Expr *expr, EVAL_ErrorList *eout);
internal EVAL_IRTreeAndType eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, EVAL_String2ExprMap *leaf_ident_expr_map, EVAL_Expr *expr, EVAL_ErrorList *eout);
internal void eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out);
#endif //EVAL_COMPILER_H
+3 -3
View File
@@ -41,7 +41,7 @@ struct EVAL_ErrorList
enum
{
EVAL_IRExtKind_Bytecode = RADDBG_EvalOp_COUNT,
EVAL_IRExtKind_Bytecode = RADDBGI_EvalOp_COUNT,
EVAL_IRExtKind_COUNT
};
@@ -49,7 +49,7 @@ typedef struct EVAL_Op EVAL_Op;
struct EVAL_Op
{
EVAL_Op *next;
RADDBG_EvalOp opcode;
RADDBGI_EvalOp opcode;
union
{
U64 p;
@@ -115,7 +115,7 @@ struct EVAL_Expr
typedef struct EVAL_IRTree EVAL_IRTree;
struct EVAL_IRTree{
RADDBG_EvalOp op;
RADDBGI_EvalOp op;
EVAL_IRTree *children[3];
union{
U64 p;
+113 -113
View File
@@ -22,18 +22,18 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
for (;ptr < opl;){
// consume opcode
RADDBG_EvalOp op = (RADDBG_EvalOp)*ptr;
if (op >= RADDBG_EvalOp_COUNT){
RADDBGI_EvalOp op = (RADDBGI_EvalOp)*ptr;
if (op >= RADDBGI_EvalOp_COUNT){
result.code = EVAL_ResultCode_BadOp;
goto done;
}
U8 ctrlbits = raddbg_eval_opcode_ctrlbits[op];
U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[op];
ptr += 1;
// decode
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;
if (next_ptr > opl){
result.code = EVAL_ResultCode_BadOp;
@@ -54,7 +54,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
// pop
EVAL_Slot *svals = 0;
{
U32 pop_count = RADDBG_POPN_FROM_CTRLBITS(ctrlbits);
U32 pop_count = RADDBGI_POPN_FROM_CTRLBITS(ctrlbits);
if (pop_count > stack_count){
result.code = EVAL_ResultCode_BadOp;
goto done;
@@ -68,29 +68,29 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
// interpret
EVAL_Slot nval = {0};
switch (op){
case RADDBG_EvalOp_Stop:
case RADDBGI_EvalOp_Stop:
{
goto done;
}break;
case RADDBG_EvalOp_Noop:
case RADDBGI_EvalOp_Noop:
{
// do nothing
}break;
case RADDBG_EvalOp_Cond:
case RADDBGI_EvalOp_Cond:
{
if (svals[0].u64){
ptr += imm;
}
}break;
case RADDBG_EvalOp_Skip:
case RADDBGI_EvalOp_Skip:
{
ptr += imm;
}break;
case RADDBG_EvalOp_MemRead:
case RADDBGI_EvalOp_MemRead:
{
U64 addr = svals[0].u64;
U64 size = imm;
@@ -105,12 +105,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_RegRead:
case RADDBGI_EvalOp_RegRead:
{
U8 raddbg_reg_code = (imm&0x0000FF)>>0;
U8 byte_size = (imm&0x00FF00)>>8;
U8 byte_off = (imm&0xFF0000)>>16;
REGS_RegCode base_reg_code = regs_reg_code_from_arch_raddbg_code(machine->arch, raddbg_reg_code);
U8 raddbgi_reg_code = (imm&0x0000FF)>>0;
U8 byte_size = (imm&0x00FF00)>>8;
U8 byte_off = (imm&0xFF0000)>>16;
REGS_RegCode base_reg_code = regs_reg_code_from_arch_raddbgi_code(machine->arch, raddbgi_reg_code);
REGS_Rng rng = regs_reg_code_rng_table_from_architecture(machine->arch)[base_reg_code];
U64 off = (U64)rng.byte_off + byte_off;
U64 size = (U64)byte_size;
@@ -123,7 +123,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_RegReadDyn:
case RADDBGI_EvalOp_RegReadDyn:
{
U64 off = svals[0].u64;
U64 size = bit_size_from_arch(machine->arch)/8;
@@ -136,7 +136,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_FrameOff:
case RADDBGI_EvalOp_FrameOff:
{
if (machine->frame_base != 0){
nval.u64 = *machine->frame_base + imm;
@@ -147,7 +147,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_ModuleOff:
case RADDBGI_EvalOp_ModuleOff:
{
if (machine->module_base != 0){
nval.u64 = *machine->module_base + imm;
@@ -158,7 +158,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_TLSOff:
case RADDBGI_EvalOp_TLSOff:
{
if (machine->tls_base != 0){
nval.u64 = *machine->tls_base + imm;
@@ -169,23 +169,23 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_ConstU8:
case RADDBG_EvalOp_ConstU16:
case RADDBG_EvalOp_ConstU32:
case RADDBG_EvalOp_ConstU64:
case RADDBGI_EvalOp_ConstU8:
case RADDBGI_EvalOp_ConstU16:
case RADDBGI_EvalOp_ConstU32:
case RADDBGI_EvalOp_ConstU64:
{
nval.u64 = imm;
}break;
case RADDBG_EvalOp_Abs:
case RADDBGI_EvalOp_Abs:
{
if (imm == RADDBG_EvalTypeGroup_F32){
if (imm == RADDBGI_EvalTypeGroup_F32){
nval.f32 = svals[0].f32;
if (svals[0].f32 < 0){
nval.f32 = -svals[0].f32;
}
}
else if (imm == RADDBG_EvalTypeGroup_F64){
else if (imm == RADDBGI_EvalTypeGroup_F64){
nval.f64 = svals[0].f64;
if (svals[0].f64 < 0){
nval.f64 = -svals[0].f64;
@@ -199,12 +199,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_Neg:
case RADDBGI_EvalOp_Neg:
{
if (imm == RADDBG_EvalTypeGroup_F32){
if (imm == RADDBGI_EvalTypeGroup_F32){
nval.f32 = -svals[0].f32;
}
else if (imm == RADDBG_EvalTypeGroup_F64){
else if (imm == RADDBGI_EvalTypeGroup_F64){
nval.f64 = -svals[0].f64;
}
else{
@@ -212,12 +212,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}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;
}
else if (imm == RADDBG_EvalTypeGroup_F64){
else if (imm == RADDBGI_EvalTypeGroup_F64){
nval.f64 = svals[0].f64 + svals[1].f64;
}
else{
@@ -225,12 +225,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}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;
}
else if (imm == RADDBG_EvalTypeGroup_F64){
else if (imm == RADDBGI_EvalTypeGroup_F64){
nval.f64 = svals[0].f64 - svals[1].f64;
}
else{
@@ -238,12 +238,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}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;
}
else if (imm == RADDBG_EvalTypeGroup_F64){
else if (imm == RADDBGI_EvalTypeGroup_F64){
nval.f64 = svals[0].f64*svals[1].f64;
}
else{
@@ -251,9 +251,9 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}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){
nval.f32 = svals[0].f32/svals[1].f32;
}
@@ -263,7 +263,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
goto done;
}
}
else if (imm == RADDBG_EvalTypeGroup_F64){
else if (imm == RADDBGI_EvalTypeGroup_F64){
if (svals[1].f64 != 0.){
nval.f64 = svals[0].f64/svals[1].f64;
}
@@ -273,8 +273,8 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
goto done;
}
}
else if (imm == RADDBG_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){
else if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
if (svals[1].u64 != 0){
nval.u64 = svals[0].u64/svals[1].u64;
}
@@ -290,10 +290,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_Mod:
case RADDBGI_EvalOp_Mod:
{
if (imm == RADDBG_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
if (svals[1].u64 != 0){
nval.u64 = svals[0].u64%svals[1].u64;
}
@@ -304,10 +304,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_LShift:
case RADDBGI_EvalOp_LShift:
{
if (imm == RADDBG_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = svals[0].u64 << svals[1].u64;
}
else{
@@ -316,12 +316,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}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;
}
else if (imm == RADDBG_EvalTypeGroup_S){
else if (imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = svals[0].s64 >> svals[1].u64;
}
else{
@@ -330,10 +330,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_BitAnd:
case RADDBGI_EvalOp_BitAnd:
{
if (imm == RADDBG_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = svals[0].u64&svals[1].u64;
}
else{
@@ -342,10 +342,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_BitOr:
case RADDBGI_EvalOp_BitOr:
{
if (imm == RADDBG_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = svals[0].u64|svals[1].u64;
}
else{
@@ -354,10 +354,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_BitXor:
case RADDBGI_EvalOp_BitXor:
{
if (imm == RADDBG_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = svals[0].u64^svals[1].u64;
}
else{
@@ -366,10 +366,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_BitNot:
case RADDBGI_EvalOp_BitNot:
{
if (imm == RADDBG_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = ~svals[0].u64;
}
else{
@@ -378,10 +378,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_LogAnd:
case RADDBGI_EvalOp_LogAnd:
{
if (imm == RADDBG_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = (svals[0].u64 && svals[1].u64);
}
else{
@@ -390,10 +390,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_LogOr:
case RADDBGI_EvalOp_LogOr:
{
if (imm == RADDBG_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = (svals[0].u64 || svals[1].u64);
}
else{
@@ -402,10 +402,10 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_LogNot:
case RADDBGI_EvalOp_LogNot:
{
if (imm == RADDBG_EvalTypeGroup_U ||
imm == RADDBG_EvalTypeGroup_S){
if (imm == RADDBGI_EvalTypeGroup_U ||
imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = (!svals[0].u64);
}
else{
@@ -414,28 +414,28 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_EqEq:
case RADDBGI_EvalOp_EqEq:
{
nval.u64 = (svals[0].u64 == svals[1].u64);
}break;
case RADDBG_EvalOp_NtEq:
case RADDBGI_EvalOp_NtEq:
{
nval.u64 = (svals[0].u64 != svals[1].u64);
}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);
}
else if (imm == RADDBG_EvalTypeGroup_F64){
else if (imm == RADDBGI_EvalTypeGroup_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);
}
else if (imm == RADDBG_EvalTypeGroup_S){
else if (imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = (svals[0].s64 <= svals[1].s64);
}
else{
@@ -444,18 +444,18 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}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);
}
else if (imm == RADDBG_EvalTypeGroup_F64){
else if (imm == RADDBGI_EvalTypeGroup_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);
}
else if (imm == RADDBG_EvalTypeGroup_S){
else if (imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = (svals[0].s64 >= svals[1].s64);
}
else{
@@ -464,18 +464,18 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}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);
}
else if (imm == RADDBG_EvalTypeGroup_F64){
else if (imm == RADDBGI_EvalTypeGroup_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);
}
else if (imm == RADDBG_EvalTypeGroup_S){
else if (imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = (svals[0].s64 < svals[1].s64);
}
else{
@@ -484,18 +484,18 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}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);
}
else if (imm == RADDBG_EvalTypeGroup_F64){
else if (imm == RADDBGI_EvalTypeGroup_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);
}
else if (imm == RADDBG_EvalTypeGroup_S){
else if (imm == RADDBGI_EvalTypeGroup_S){
nval.u64 = (svals[0].s64 > svals[1].s64);
}
else{
@@ -504,7 +504,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_Trunc:
case RADDBGI_EvalOp_Trunc:
{
if (0 < imm){
U64 mask = 0;
@@ -515,7 +515,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_TruncSigned:
case RADDBGI_EvalOp_TruncSigned:
{
if (0 < imm){
U64 mask = 0;
@@ -530,52 +530,52 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_Convert:
case RADDBGI_EvalOp_Convert:
{
U32 in = imm&0xFF;
U32 out = (imm >> 8)&0xFF;
if (in != out){
switch (in + out*RADDBG_EvalTypeGroup_COUNT){
case RADDBG_EvalTypeGroup_F32 + RADDBG_EvalTypeGroup_U*RADDBG_EvalTypeGroup_COUNT:
switch (in + out*RADDBGI_EvalTypeGroup_COUNT){
case RADDBGI_EvalTypeGroup_F32 + RADDBGI_EvalTypeGroup_U*RADDBGI_EvalTypeGroup_COUNT:
{
nval.u64 = (U64)svals[0].f32;
}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;
}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;
}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;
}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;
}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;
}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;
}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;
}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;
}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;
}break;
@@ -583,7 +583,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_Pick:
case RADDBGI_EvalOp_Pick:
{
if (stack_count > imm){
nval = stack[stack_count - imm - 1];
@@ -594,12 +594,12 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
}
}break;
case RADDBG_EvalOp_Pop:
case RADDBGI_EvalOp_Pop:
{
// do nothing - the pop is handled by the control bits
}break;
case RADDBG_EvalOp_Insert:
case RADDBGI_EvalOp_Insert:
{
if (stack_count > imm){
if (imm > 0){
@@ -619,7 +619,7 @@ eval_interpret(EVAL_Machine *machine, String8 bytecode)
// push
{
U64 push_count = RADDBG_PUSHN_FROM_CTRLBITS(ctrlbits);
U64 push_count = RADDBGI_PUSHN_FROM_CTRLBITS(ctrlbits);
if (push_count == 1){
if (stack_count < stack_cap){
stack[stack_count] = nval;
+104 -104
View File
@@ -57,7 +57,7 @@ global read_only S64 eval_g_max_precedence = 15;
//~ rjf: Map Building Fast Paths
internal EVAL_String2NumMap *
eval_push_locals_map_from_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);
@@ -66,17 +66,17 @@ eval_push_locals_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 vof
struct Task
{
Task *next;
RADDBG_Scope *scope;
RADDBGI_Scope *scope;
};
Task *first_task = 0;
Task *last_task = 0;
//- rjf: voff -> tightest scope
RADDBG_Scope *tightest_scope = 0;
RADDBGI_Scope *tightest_scope = 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);
RADDBG_Scope *scope = &rdbg->scopes[scope_idx];
U64 scope_idx = raddbgi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff);
RADDBGI_Scope *scope = &rdbg->scopes[scope_idx];
Task *task = push_array(scratch.arena, Task, 1);
task->scope = scope;
SLLQueuePush(first_task, last_task, task);
@@ -86,8 +86,8 @@ eval_push_locals_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 vof
//- rjf: voff-1 -> scope
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);
RADDBG_Scope *scope = &rdbg->scopes[scope_idx];
U64 scope_idx = raddbgi_vmap_idx_from_voff(rdbg->scope_vmap, rdbg->scope_vmap_count, voff-1);
RADDBGI_Scope *scope = &rdbg->scopes[scope_idx];
if(scope != tightest_scope)
{
Task *task = push_array(scratch.arena, Task, 1);
@@ -99,7 +99,7 @@ eval_push_locals_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 vof
//- rjf: tightest scope -> walk up the tree & build tasks for each parent scope
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 = &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
for(Task *task = first_task; task != 0; task = task->next)
{
RADDBG_Scope *scope = task->scope;
RADDBGI_Scope *scope = task->scope;
if(scope != 0)
{
U32 local_opl_idx = scope->local_first + scope->local_count;
for(U32 local_idx = scope->local_first; local_idx < local_opl_idx; local_idx += 1)
{
RADDBG_Local *local_var = &rdbg->locals[local_idx];
RADDBGI_Local *local_var = &rdbg->locals[local_idx];
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));
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 *
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
RADDBG_Scope *tightest_scope = 0;
RADDBGI_Scope *tightest_scope = 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];
}
//- rjf: tightest scope -> procedure
RADDBG_Procedure *procedure = 0;
RADDBGI_Procedure *procedure = 0;
if(tightest_scope != 0 && rdbg->procedures != 0)
{
U32 proc_idx = tightest_scope->proc_idx;
@@ -158,8 +158,8 @@ eval_push_member_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 vof
}
//- rjf: procedure -> udt
RADDBG_UDT *udt = 0;
if(procedure != 0 && rdbg->udts != 0 && procedure->link_flags & RADDBG_LinkFlag_TypeScoped)
RADDBGI_UDT *udt = 0;
if(procedure != 0 && rdbg->udts != 0 && procedure->link_flags & RADDBGI_LinkFlag_TypeScoped)
{
U32 udt_idx = procedure->container_idx;
if(0 < udt_idx && udt_idx < rdbg->udts_count)
@@ -173,7 +173,7 @@ eval_push_member_map_from_raddbg_voff(Arena *arena, RADDBG_Parsed *rdbg, U64 vof
*map = eval_string2num_map_make(arena, 64);
//- 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;
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;
}
RADDBG_Member *m = &rdbg->members[member_idx];
if(m->kind == RADDBG_MemberKind_DataField)
RADDBGI_Member *m = &rdbg->members[member_idx];
if(m->kind == RADDBGI_MemberKind_DataField)
{
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);
data_member_num += 1;
}
@@ -464,25 +464,25 @@ eval_token_array_make_first_opl(EVAL_Token *first, EVAL_Token *opl)
//~ rjf: Parser Functions
internal TG_Key
eval_leaf_type_from_name(RADDBG_Parsed *rdbg, String8 name)
eval_leaf_type_from_name(RADDBGI_Parsed *rdbg, String8 name)
{
TG_Key key = zero_struct;
B32 found = 0;
if(rdbg->type_nodes != 0)
{
RADDBG_NameMap *name_map = raddbg_name_map_from_kind(rdbg, RADDBG_NameMapKind_Types);
RADDBG_ParsedNameMap parsed_name_map = {0};
raddbg_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_NameMap *name_map = raddbgi_name_map_from_kind(rdbg, RADDBGI_NameMapKind_Types);
RADDBGI_ParsedNameMap parsed_name_map = {0};
raddbgi_name_map_parse(rdbg, name_map, &parsed_name_map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(rdbg, &parsed_name_map, name.str, name.size);
if(node != 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)
{
RADDBG_TypeNode *type_node = raddbg_element_from_idx(rdbg, type_nodes, matches[0]);
found = type_node->kind != RADDBG_TypeKind_NULL;
key = tg_key_ext(tg_kind_from_raddbg_type_kind(type_node->kind), (U64)matches[0]);
RADDBGI_TypeNode *type_node = raddbgi_element_from_idx(rdbg, type_nodes, matches[0]);
found = type_node->kind != RADDBGI_TypeKind_NULL;
key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), (U64)matches[0]);
}
}
}
@@ -787,9 +787,9 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
B32 mapped_identifier = 0;
B32 identifier_type_is_possibly_dynamically_overridden = 0;
B32 identifier_looks_like_type_expr = 0;
RADDBG_LocationKind loc_kind = RADDBG_LocationKind_NULL;
RADDBG_LocationRegister loc_reg = {0};
RADDBG_LocationRegisterPlusU16 loc_reg_u16 = {0};
RADDBGI_LocationKind loc_kind = RADDBGI_LocationKind_NULL;
RADDBGI_LocationRegister loc_reg = {0};
RADDBGI_LocationRegisterPlusU16 loc_reg_u16 = {0};
String8 loc_bytecode = {0};
REGS_RegCode reg_code = 0;
REGS_AliasCode alias_code = 0;
@@ -800,12 +800,12 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
String8List namespaceified_token_strings = {0};
if(ctx->rdbg->procedures != 0 && ctx->rdbg->scopes != 0 && ctx->rdbg->scope_vmap != 0)
{
U64 scope_idx = raddbg_vmap_idx_from_voff(ctx->rdbg->scope_vmap, ctx->rdbg->scope_vmap_count, ctx->ip_voff);
RADDBG_Scope *scope = &ctx->rdbg->scopes[scope_idx];
U64 scope_idx = raddbgi_vmap_idx_from_voff(ctx->rdbg->scope_vmap, ctx->rdbg->scope_vmap_count, ctx->ip_voff);
RADDBGI_Scope *scope = &ctx->rdbg->scopes[scope_idx];
U64 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;
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);
U64 last_past_scope_resolution_pos = 0;
for(;;)
@@ -843,26 +843,26 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
{
mapped_identifier = 1;
identifier_type_is_possibly_dynamically_overridden = 1;
RADDBG_Local *local_var = raddbg_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);
type_key = tg_key_ext(tg_kind_from_raddbg_type_kind(type_node->kind), (U64)local_var->type_idx);
RADDBGI_Local *local_var = raddbgi_element_from_idx(ctx->rdbg, locals, local_num-1);
RADDBGI_TypeNode *type_node = raddbgi_element_from_idx(ctx->rdbg, type_nodes, local_var->type_idx);
type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), (U64)local_var->type_idx);
// rjf: grab location info
for(U32 loc_block_idx = local_var->location_first;
loc_block_idx < local_var->location_opl;
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)
{
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)
{
default:{mapped_identifier = 0;}break;
case RADDBG_LocationKind_AddrBytecodeStream:
case RADDBG_LocationKind_ValBytecodeStream:
case RADDBGI_LocationKind_AddrBytecodeStream:
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;
for(U64 idx = 0; idx < ctx->rdbg->location_data_size; idx += 1)
{
@@ -871,18 +871,18 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
{
break;
}
U8 ctrlbits = raddbg_eval_opcode_ctrlbits[op];
U32 p_size = RADDBG_DECODEN_FROM_CTRLBITS(ctrlbits);
U8 ctrlbits = raddbgi_eval_opcode_ctrlbits[op];
U32 p_size = RADDBGI_DECODEN_FROM_CTRLBITS(ctrlbits);
bytecode_size += 1+p_size;
}
loc_bytecode = str8(bytecode_base, bytecode_size);
}break;
case RADDBG_LocationKind_AddrRegisterPlusU16:
case RADDBG_LocationKind_AddrAddrRegisterPlusU16:
case RADDBGI_LocationKind_AddrRegisterPlusU16:
case RADDBGI_LocationKind_AddrAddrRegisterPlusU16:
{
MemoryCopy(&loc_reg_u16, (ctx->rdbg->location_data + block->location_data_off), sizeof(loc_reg_u16));
}break;
case RADDBG_LocationKind_ValRegister:
case RADDBGI_LocationKind_ValRegister:
{
MemoryCopy(&loc_reg, (ctx->rdbg->location_data + block->location_data_off), sizeof(loc_reg));
}break;
@@ -919,21 +919,21 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
//- rjf: try global variables
if(mapped_identifier == 0)
{
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)
{
RADDBG_ParsedNameMap parsed_name_map = {0};
raddbg_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_ParsedNameMap parsed_name_map = {0};
raddbgi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size);
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;
n != 0 && matches_count == 0;
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 = 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)
{
@@ -942,16 +942,16 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
// don't know of a magic hash table fixup path in PDBs, so
// in this case, I'm going to prefer the latest-added global.
U32 match_idx = matches[matches_count-1];
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_push_op(arena, &oplist, RADDBG_EvalOp_ModuleOff, global_var->voff);
loc_kind = RADDBG_LocationKind_AddrBytecodeStream;
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_ModuleOff, global_var->voff);
loc_kind = RADDBGI_LocationKind_AddrBytecodeStream;
loc_bytecode = eval_bytecode_from_oplist(arena, &oplist);
U32 type_idx = global_var->type_idx;
if(type_idx < ctx->rdbg->type_nodes_count)
{
RADDBG_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);
RADDBGI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx];
type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), (U64)type_idx);
}
mapped_identifier = 1;
}
@@ -961,35 +961,35 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
//- rjf: try thread variables
if(mapped_identifier == 0)
{
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)
{
RADDBG_ParsedNameMap parsed_name_map = {0};
raddbg_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_ParsedNameMap parsed_name_map = {0};
raddbgi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size);
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;
n != 0 && matches_count == 0;
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 = 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)
{
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_push_op(arena, &oplist, RADDBG_EvalOp_TLSOff, thread_var->tls_off);
loc_kind = RADDBG_LocationKind_AddrBytecodeStream;
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_TLSOff, thread_var->tls_off);
loc_kind = RADDBGI_LocationKind_AddrBytecodeStream;
loc_bytecode = eval_bytecode_from_oplist(arena, &oplist);
U32 type_idx = thread_var->type_idx;
if(type_idx < ctx->rdbg->type_nodes_count)
{
RADDBG_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);
RADDBGI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx];
type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), (U64)type_idx);
}
mapped_identifier = 1;
}
@@ -999,37 +999,37 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
//- rjf: try procedures
if(mapped_identifier == 0)
{
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)
{
RADDBG_ParsedNameMap parsed_name_map = {0};
raddbg_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_ParsedNameMap parsed_name_map = {0};
raddbgi_name_map_parse(ctx->rdbg, name_map, &parsed_name_map);
RADDBGI_NameMapNode *node = raddbgi_name_map_lookup(ctx->rdbg, &parsed_name_map, token_string.str, token_string.size);
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;
n != 0 && matches_count == 0;
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 = 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)
{
U32 match_idx = matches[0];
RADDBG_Procedure *procedure = &ctx->rdbg->procedures[match_idx];
RADDBG_Scope *scope = &ctx->rdbg->scopes[procedure->root_scope_idx];
RADDBGI_Procedure *procedure = &ctx->rdbg->procedures[match_idx];
RADDBGI_Scope *scope = &ctx->rdbg->scopes[procedure->root_scope_idx];
U64 voff = ctx->rdbg->scope_voffs[scope->voff_range_first];
EVAL_OpList oplist = {0};
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_ModuleOff, voff);
loc_kind = RADDBG_LocationKind_ValBytecodeStream;
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_ModuleOff, voff);
loc_kind = RADDBGI_LocationKind_ValBytecodeStream;
loc_bytecode = eval_bytecode_from_oplist(arena, &oplist);
U32 type_idx = procedure->type_idx;
if(type_idx < ctx->rdbg->type_nodes_count)
{
RADDBG_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);
RADDBGI_TypeNode *type_node = &ctx->rdbg->type_nodes[type_idx];
type_key = tg_key_ext(tg_kind_from_raddbgi_type_kind(type_node->kind), (U64)type_idx);
}
mapped_identifier = 1;
}
@@ -1086,44 +1086,44 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8
eval_errorf(arena, &result.errors, EVAL_ErrorKind_MissingInfo, token_string.str, "Missing location information for \"%S\".", token_string);
}
}break;
case RADDBG_LocationKind_AddrBytecodeStream:
case RADDBGI_LocationKind_AddrBytecodeStream:
{
atom = eval_expr_leaf_bytecode(arena, token_string.str, type_key, loc_bytecode, EVAL_EvalMode_Addr);
}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);
}break;
case RADDBG_LocationKind_AddrRegisterPlusU16:
case RADDBGI_LocationKind_AddrRegisterPlusU16:
{
EVAL_OpList oplist = {0};
U64 byte_size = bit_size_from_arch(ctx->arch)/8;
U64 regread_param = RADDBG_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, RADDBG_EvalOp_ConstU16, loc_reg_u16.offset);
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_Add, 0);
U64 regread_param = RADDBGI_EncodeRegReadParam(loc_reg_u16.register_code, byte_size, 0);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_RegRead, regread_param);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_ConstU16, loc_reg_u16.offset);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_Add, 0);
atom = eval_expr_leaf_op_list(arena, token_string.str, type_key, &oplist, EVAL_EvalMode_Addr);
}break;
case RADDBG_LocationKind_AddrAddrRegisterPlusU16:
case RADDBGI_LocationKind_AddrAddrRegisterPlusU16:
{
EVAL_OpList oplist = {0};
U64 byte_size = bit_size_from_arch(ctx->arch)/8;
U64 regread_param = RADDBG_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, RADDBG_EvalOp_ConstU16, loc_reg_u16.offset);
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_Add, 0);
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_MemRead, bit_size_from_arch(ctx->arch)/8);
U64 regread_param = RADDBGI_EncodeRegReadParam(loc_reg_u16.register_code, byte_size, 0);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_RegRead, regread_param);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_ConstU16, loc_reg_u16.offset);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_Add, 0);
eval_oplist_push_op(arena, &oplist, RADDBGI_EvalOp_MemRead, bit_size_from_arch(ctx->arch)/8);
atom = eval_expr_leaf_op_list(arena, token_string.str, type_key, &oplist, EVAL_EvalMode_Addr);
}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];
EVAL_OpList oplist = {0};
U64 byte_size = (U64)reg_rng.byte_size;
U64 byte_pos = 0;
U64 regread_param = RADDBG_EncodeRegReadParam(loc_reg.register_code, byte_size, byte_pos);
eval_oplist_push_op(arena, &oplist, RADDBG_EvalOp_RegRead, regread_param);
U64 regread_param = RADDBGI_EncodeRegReadParam(loc_reg.register_code, byte_size, byte_pos);
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);
}break;
}
+4 -4
View File
@@ -67,7 +67,7 @@ struct EVAL_ParseCtx
{
Architecture arch;
U64 ip_voff;
RADDBG_Parsed *rdbg;
RADDBGI_Parsed *rdbg;
TG_Graph *type_graph;
EVAL_String2NumMap *regs_map;
EVAL_String2NumMap *reg_alias_map;
@@ -85,8 +85,8 @@ global read_only EVAL_ParseResult eval_parse_result_nil = {0, &eval_expr_nil};
////////////////////////////////
//~ rjf: Debug-Info-Driven Map Building Fast Paths
internal EVAL_String2NumMap *eval_push_locals_map_from_raddbg_voff(Arena *arena, RADDBG_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_locals_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 voff);
internal EVAL_String2NumMap *eval_push_member_map_from_raddbgi_voff(Arena *arena, RADDBGI_Parsed *rdbg, U64 voff);
////////////////////////////////
//~ rjf: Tokenization Functions
@@ -101,7 +101,7 @@ internal EVAL_TokenArray eval_token_array_make_first_opl(EVAL_Token *first, EVAL
////////////////////////////////
//~ rjf: Parser Functions
internal TG_Key eval_leaf_type_from_name(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_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 text, EVAL_TokenArray *tokens, S64 max_precedence);
internal EVAL_ParseResult eval_parse_expr_from_text_tokens(Arena *arena, EVAL_ParseCtx *ctx, String8 text, EVAL_TokenArray *tokens);
+3 -3
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_MARKUP_H
#define RADDBG_MARKUP_H
#ifndef RADDBGI_MARKUP_H
#define RADDBGI_MARKUP_H
////////////////////////////////
//~ Usage Macros
@@ -75,4 +75,4 @@ raddbg_log__impl(char *fmt, ...)
#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;
String8 name;
RADDBG_BinarySectionFlags flags;
RADDBGI_BinarySectionFlags flags;
U64 voff_first;
U64 voff_opl;
U64 foff_first;
@@ -134,7 +134,7 @@ struct CONS_UnitInfo
String8 object_file;
String8 archive_file;
String8 build_path;
RADDBG_Language language;
RADDBGI_Language language;
};
typedef struct CONS_Unit CONS_Unit;
@@ -149,7 +149,7 @@ struct CONS_Unit
String8 object_file;
String8 archive_file;
String8 build_path;
RADDBG_Language language;
RADDBGI_Language language;
CONS_LineSequenceNode *line_seq_first;
CONS_LineSequenceNode *line_seq_last;
U64 line_seq_count;
@@ -185,7 +185,7 @@ typedef struct CONS_TypeMember CONS_TypeMember;
struct CONS_TypeMember
{
CONS_TypeMember *next;
RADDBG_MemberKind kind;
RADDBGI_MemberKind kind;
String8 name;
struct CONS_Type *type;
U32 off;
@@ -203,7 +203,7 @@ typedef struct CONS_Type CONS_Type;
struct CONS_Type
{
CONS_Type *next_order;
RADDBG_TypeKind kind;
RADDBGI_TypeKind kind;
U32 idx;
U32 byte_size;
U32 flags;
@@ -298,7 +298,7 @@ struct CONS_Symbol
typedef struct CONS_LocalInfo CONS_LocalInfo;
struct CONS_LocalInfo
{
RADDBG_LocalKind kind;
RADDBGI_LocalKind kind;
struct CONS_Scope *scope;
String8 name;
CONS_Type *type;
@@ -308,7 +308,7 @@ typedef struct CONS_Local CONS_Local;
struct CONS_Local
{
CONS_Local *next;
RADDBG_LocalKind kind;
RADDBGI_LocalKind kind;
String8 name;
CONS_Type *type;
struct CONS_LocationSet *locset;
@@ -348,7 +348,7 @@ typedef struct CONS_EvalBytecodeOp CONS_EvalBytecodeOp;
struct CONS_EvalBytecodeOp
{
CONS_EvalBytecodeOp *next;
RADDBG_EvalOp op;
RADDBGI_EvalOp op;
U32 p_size;
U64 p;
};
@@ -365,7 +365,7 @@ struct CONS_EvalBytecode
typedef struct CONS_Location CONS_Location;
struct CONS_Location
{
RADDBG_LocationKind kind;
RADDBGI_LocationKind kind;
U8 register_code;
U16 offset;
CONS_EvalBytecode bytecode;
@@ -426,7 +426,7 @@ struct CONS__NameMap
typedef struct CONS_TopLevelInfo CONS_TopLevelInfo;
struct CONS_TopLevelInfo
{
RADDBG_Arch architecture;
RADDBGI_Arch architecture;
String8 exe_name;
U64 exe_hash;
U64 voff_max;
@@ -513,7 +513,7 @@ struct CONS_Root
U64 location_count;
// name maps
CONS__NameMap *name_maps[RADDBG_NameMapKind_COUNT];
CONS__NameMap *name_maps[RADDBGI_NameMapKind_COUNT];
//////// Handle Relationship Maps
@@ -536,7 +536,7 @@ struct CONS__DSectionNode
CONS__DSectionNode *next;
void *data;
U64 size;
RADDBG_DataSectionTag tag;
RADDBGI_DataSectionTag tag;
};
typedef struct CONS__DSections CONS__DSections;
@@ -664,7 +664,7 @@ typedef struct CONS__UnitLinesCombined CONS__UnitLinesCombined;
struct CONS__UnitLinesCombined
{
U64 *voffs;
RADDBG_Line *lines;
RADDBGI_Line *lines;
U16 *cols;
U32 line_count;
};
@@ -702,7 +702,7 @@ struct CONS__SrcLineMapBucket
typedef struct CONS__VMap CONS__VMap;
struct CONS__VMap
{
RADDBG_VMapEntry *vmap; // [count + 1]
RADDBGI_VMapEntry *vmap; // [count + 1]
U32 count;
};
@@ -725,16 +725,16 @@ struct CONS__VMapRangeTracker
typedef struct CONS__TypeData CONS__TypeData;
struct CONS__TypeData
{
RADDBG_TypeNode *type_nodes;
RADDBGI_TypeNode *type_nodes;
U32 type_node_count;
RADDBG_UDT *udts;
RADDBGI_UDT *udts;
U32 udt_count;
RADDBG_Member *members;
RADDBGI_Member *members;
U32 member_count;
RADDBG_EnumMember *enum_members;
RADDBGI_EnumMember *enum_members;
U32 enum_member_count;
};
@@ -743,18 +743,18 @@ struct CONS__TypeData
typedef struct CONS__SymbolData CONS__SymbolData;
struct CONS__SymbolData
{
RADDBG_GlobalVariable *global_variables;
RADDBGI_GlobalVariable *global_variables;
U32 global_variable_count;
CONS__VMap *global_vmap;
RADDBG_ThreadVariable *thread_variables;
RADDBGI_ThreadVariable *thread_variables;
U32 thread_variable_count;
RADDBG_Procedure *procedures;
RADDBGI_Procedure *procedures;
U32 procedure_count;
RADDBG_Scope *scopes;
RADDBGI_Scope *scopes;
U32 scope_count;
U64 *scope_voffs;
@@ -762,10 +762,10 @@ struct CONS__SymbolData
CONS__VMap *scope_vmap;
RADDBG_Local *locals;
RADDBGI_Local *locals;
U32 local_count;
RADDBG_LocationBlock *location_blocks;
RADDBGI_LocationBlock *location_blocks;
U32 location_block_count;
void *location_data;
@@ -792,8 +792,8 @@ struct CONS__NameMapSemiBucket
typedef struct CONS__NameMapBaked CONS__NameMapBaked;
struct CONS__NameMapBaked
{
RADDBG_NameMapBucket *buckets;
RADDBG_NameMapNode *nodes;
RADDBGI_NameMapBucket *buckets;
RADDBGI_NameMapNode *nodes;
U32 bucket_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);
//- 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_sconst(Arena *arena, CONS_EvalBytecode *bytecode, S64 x);
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
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 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);
//- 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_modifier(CONS_Root *root, CONS_Type *direct_type, RADDBG_TypeModifierFlags flags);
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, 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_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_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);
//- 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_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
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);
//- 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);
////////////////////////////////
@@ -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);
//- 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
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
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_DWARF_H
#define RADDBG_DWARF_H
#ifndef RADDBGI_DWARF_H
#define RADDBGI_DWARF_H
// https://dwarfstd.org/doc/DWARF4.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_section_code(DWARF_SectionCode sec_code);
#endif //RADDBG_DWARF_H
#endif //RADDBGI_DWARF_H
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_DWARF_STRINGIZE_H
#define RADDBG_DWARF_STRINGIZE_H
#ifndef RADDBGI_DWARF_STRINGIZE_H
#define RADDBGI_DWARF_STRINGIZE_H
////////////////////////////////
//~ 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
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_ELF_H
#define RADDBG_ELF_H
#ifndef RADDBGI_ELF_H
#define RADDBGI_ELF_H
// 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_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);
CmdLine cmdline = cmd_line_from_string_list(arena, args);
ProfBeginCapture("raddbg_from_dwarf");
ProfBeginCapture("raddbgi_from_dwarf");
// parse arguments
DWARFCONV_Params *params = dwarf_convert_params_from_cmd_line(arena, &cmdline);
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_FROM_DWARF_H
#define RADDBG_FROM_DWARF_H
#ifndef RADDBGI_FROM_DWARF_H
#define RADDBGI_FROM_DWARF_H
////////////////////////////////
//~ 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
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_CODEVIEW_H
#define RADDBG_CODEVIEW_H
#ifndef RADDBGI_CODEVIEW_H
#define RADDBGI_CODEVIEW_H
#pragma pack(push, 1)
@@ -155,7 +155,7 @@ typedef enum{
} 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) \
X(NONE, 0, nil, 0, 0)\
X(AL, 1, eax, 0, 1)\
@@ -408,7 +408,7 @@ typedef enum{
#undef X
} 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) \
X(NONE, 0, nil, 0, 0)\
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,
struct PDB_Strtbl *strtbl, struct PDB_CoffSectionArray *sections);
#endif //RADDBG_CODEVIEW_H
#endif //RADDBGI_CODEVIEW_H
@@ -4,12 +4,12 @@
////////////////////////////////
//~ CodeView Conversion Functions
static RADDBG_Arch
raddbg_arch_from_cv_arch(CV_Arch cv_arch){
RADDBG_Arch result = 0;
static RADDBGI_Arch
raddbgi_arch_from_cv_arch(CV_Arch cv_arch){
RADDBGI_Arch result = 0;
switch (cv_arch){
case CV_Arch_8086: result = RADDBG_Arch_X86; break;
case CV_Arch_X64: result = RADDBG_Arch_X64; break;
case CV_Arch_8086: result = RADDBGI_Arch_X86; break;
case CV_Arch_X64: result = RADDBGI_Arch_X64; break;
//case CV_Arch_8080: break;
//case CV_Arch_80286: break;
@@ -73,23 +73,23 @@ raddbg_arch_from_cv_arch(CV_Arch cv_arch){
return(result);
}
static RADDBG_RegisterCode
raddbg_reg_code_from_cv_reg_code(RADDBG_Arch arch, CV_Reg reg_code){
RADDBG_RegisterCode result = 0;
static RADDBGI_RegisterCode
raddbgi_reg_code_from_cv_reg_code(RADDBGI_Arch arch, CV_Reg reg_code){
RADDBGI_RegisterCode result = 0;
switch (arch){
case RADDBG_Arch_X86:
case RADDBGI_Arch_X86:
{
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)
#undef X
}
}break;
case RADDBG_Arch_X64:
case RADDBGI_Arch_X64:
{
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)
#undef X
}
@@ -98,12 +98,12 @@ raddbg_reg_code_from_cv_reg_code(RADDBG_Arch arch, CV_Reg reg_code){
return(result);
}
static RADDBG_Language
raddbg_language_from_cv_language(CV_Language cv_language){
RADDBG_Language result = 0;
static RADDBGI_Language
raddbgi_language_from_cv_language(CV_Language cv_language){
RADDBGI_Language result = 0;
switch (cv_language){
case CV_Language_C: result = RADDBG_Language_C; break;
case CV_Language_CXX: result = RADDBG_Language_CPlusPlus; break;
case CV_Language_C: result = RADDBGI_Language_C; break;
case CV_Language_CXX: result = RADDBGI_Language_CPlusPlus; break;
//case CV_Language_FORTRAN: result = ; break;
//case CV_Language_MASM: result = ; break;
//case CV_Language_PASCAL: result = ; break;
@@ -1,14 +1,14 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_CODEVIEW_CONVERSION_H
#define RADDBG_CODEVIEW_CONVERSION_H
#ifndef RADDBGI_CODEVIEW_CONVERSION_H
#define RADDBGI_CODEVIEW_CONVERSION_H
////////////////////////////////
//~ CodeView Conversion Functions
static RADDBG_Arch raddbg_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 RADDBG_Language raddbg_language_from_cv_language(CV_Language language);
static RADDBGI_Arch raddbgi_arch_from_cv_arch(CV_Arch arch);
static RADDBGI_RegisterCode raddbgi_reg_code_from_cv_reg_code(RADDBGI_Arch arch, CV_Reg reg_code);
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
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_CODEVIEW_STRINGIZE_H
#define RADDBG_CODEVIEW_STRINGIZE_H
#ifndef RADDBGI_CODEVIEW_STRINGIZE_H
#define RADDBGI_CODEVIEW_STRINGIZE_H
////////////////////////////////
//~ 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);
#endif //RADDBG_CODEVIEW_STRINGIZE_H
#endif //RADDBGI_CODEVIEW_STRINGIZE_H
+2 -2
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_COFF_H
#define RADDBG_COFF_H
#ifndef RADDBGI_COFF_H
#define RADDBGI_COFF_H
////////////////////////////////
//~ COFF Format Types
@@ -4,18 +4,18 @@
////////////////////////////////
//~ COFF Conversion Functions
static RADDBG_BinarySectionFlags
raddbg_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags){
RADDBG_BinarySectionFlags result = 0;
static RADDBGI_BinarySectionFlags
raddbgi_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags){
RADDBGI_BinarySectionFlags result = 0;
if (flags & COFF_SectionFlag_MEM_READ){
result |= RADDBG_BinarySectionFlag_Read;
result |= RADDBGI_BinarySectionFlag_Read;
}
if (flags & COFF_SectionFlag_MEM_WRITE){
result |= RADDBG_BinarySectionFlag_Write;
result |= RADDBGI_BinarySectionFlag_Write;
}
if (flags & COFF_SectionFlag_MEM_EXECUTE){
result |= RADDBG_BinarySectionFlag_Execute;
result |= RADDBGI_BinarySectionFlag_Execute;
}
return(result);
@@ -1,13 +1,13 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_COFF_CONVERSION_H
#define RADDBG_COFF_CONVERSION_H
#ifndef RADDBGI_COFF_CONVERSION_H
#define RADDBGI_COFF_CONVERSION_H
////////////////////////////////
//~ COFF Conversion Functions
static RADDBG_BinarySectionFlags
raddbg_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags);
static RADDBGI_BinarySectionFlags
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);
pdb_ctx->arena = arena;
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->leaf = params->tpi_leaf;
pdb_ctx->sections = params->sections->sections;
@@ -980,165 +980,165 @@ pdbconv_type_cons_basic(PDBCONV_Ctx *ctx, CV_TypeId itype){
switch (basic_type_code){
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;
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;
case CV_BasicType_RCHAR:
case CV_BasicType_CHAR:
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;
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;
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;
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;
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;
case CV_BasicType_BOOL8:
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;
case CV_BasicType_BOOL16:
case CV_BasicType_INT16:
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;
case CV_BasicType_BOOL32:
case CV_BasicType_INT32:
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;
case CV_BasicType_BOOL64:
case CV_BasicType_INT64:
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;
case CV_BasicType_INT128:
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;
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;
case CV_BasicType_UINT16:
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;
case CV_BasicType_UINT32:
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;
case CV_BasicType_UINT64:
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;
case CV_BasicType_UINT128:
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;
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;
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;
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;
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;
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;
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;
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;
case CV_BasicType_COMPLEX32:
{
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;
case CV_BasicType_COMPLEX64:
{
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;
case CV_BasicType_COMPLEX80:
{
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;
case CV_BasicType_COMPLEX128:
{
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;
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;
}
@@ -1158,7 +1158,7 @@ pdbconv_type_cons_basic(PDBCONV_Ctx *ctx, CV_TypeId itype){
case CV_BasicPointerKind_16_32BIT:
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;
}
@@ -1196,12 +1196,12 @@ pdbconv_type_cons_leaf_record(PDBCONV_Ctx *ctx, CV_TypeId itype){
if (sizeof(CV_LeafModifier) <= cap){
CV_LeafModifier *modifier = (CV_LeafModifier*)first;
RADDBG_TypeModifierFlags flags = 0;
RADDBGI_TypeModifierFlags flags = 0;
if (modifier->flags & CV_ModifierFlag_Const){
flags |= RADDBG_TypeModifierFlag_Const;
flags |= RADDBGI_TypeModifierFlag_Const;
}
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);
@@ -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
// extract modifier flags
RADDBG_TypeModifierFlags modifier_flags = 0;
RADDBGI_TypeModifierFlags modifier_flags = 0;
if (pointer->attribs & CV_PointerAttrib_Const){
modifier_flags |= RADDBG_TypeModifierFlag_Const;
modifier_flags |= RADDBGI_TypeModifierFlag_Const;
}
if (pointer->attribs & CV_PointerAttrib_Volatile){
modifier_flags |= RADDBG_TypeModifierFlag_Volatile;
modifier_flags |= RADDBGI_TypeModifierFlag_Volatile;
}
// determine type kind
RADDBG_TypeKind type_kind = RADDBG_TypeKind_Ptr;
RADDBGI_TypeKind type_kind = RADDBGI_TypeKind_Ptr;
if (pointer->attribs & CV_PointerAttrib_LRef){
type_kind = RADDBG_TypeKind_LRef;
type_kind = RADDBGI_TypeKind_LRef;
}
else if (pointer->attribs & CV_PointerAttrib_RRef){
type_kind = RADDBG_TypeKind_RRef;
type_kind = RADDBGI_TypeKind_RRef;
}
if (ptr_mode == CV_PointerMode_LRef){
type_kind = RADDBG_TypeKind_LRef;
type_kind = RADDBGI_TypeKind_LRef;
}
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);
@@ -1363,18 +1363,18 @@ pdbconv_type_cons_leaf_record(PDBCONV_Ctx *ctx, CV_TypeId itype){
// incomplete type
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){
type_kind = RADDBG_TypeKind_IncompleteClass;
type_kind = RADDBGI_TypeKind_IncompleteClass;
}
result = cons_type_incomplete(ctx->root, type_kind, name);
}
// complete type
else{
RADDBG_TypeKind type_kind = RADDBG_TypeKind_Struct;
RADDBGI_TypeKind type_kind = RADDBGI_TypeKind_Struct;
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);
@@ -1409,18 +1409,18 @@ pdbconv_type_cons_leaf_record(PDBCONV_Ctx *ctx, CV_TypeId itype){
// incomplete type
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){
type_kind = RADDBG_TypeKind_IncompleteClass;
type_kind = RADDBGI_TypeKind_IncompleteClass;
}
result = cons_type_incomplete(ctx->root, type_kind, name);
}
// complete type
else{
RADDBG_TypeKind type_kind = RADDBG_TypeKind_Struct;
RADDBGI_TypeKind type_kind = RADDBGI_TypeKind_Struct;
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);
@@ -1455,12 +1455,12 @@ pdbconv_type_cons_leaf_record(PDBCONV_Ctx *ctx, CV_TypeId itype){
// incomplete type
if (lf_union->props & CV_TypeProp_FwdRef){
result =
cons_type_incomplete(ctx->root, RADDBG_TypeKind_IncompleteUnion, name);
cons_type_incomplete(ctx->root, RADDBGI_TypeKind_IncompleteUnion, name);
}
// complete type
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
{
@@ -1487,7 +1487,7 @@ pdbconv_type_cons_leaf_record(PDBCONV_Ctx *ctx, CV_TypeId itype){
// incomplete type
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
@@ -1667,7 +1667,8 @@ pdbconv_type_cons_leaf_record(PDBCONV_Ctx *ctx, CV_TypeId itype){
static CONS_Type*
pdbconv_type_resolve_and_check(PDBCONV_Ctx *ctx, CV_TypeId 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);
}
return(result);
@@ -1798,7 +1799,7 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
// extract important values from parameters
String8 data = sym->data;
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
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;
// need arch for analyzing register stuff
RADDBG_Arch arch = ctx->arch;
RADDBGI_Arch arch = ctx->arch;
U64 addr_size = ctx->addr_size;
// 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;
switch (arch){
case RADDBG_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_X86: is_stack_reg = (cv_reg == CV_Regx86_ESP); break;
case RADDBGI_Arch_X64: is_stack_reg = (cv_reg == CV_Regx64_RSP); break;
}
if (is_stack_reg){
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;
}
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
B32 extra_indirection_to_value = 0;
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))){
extra_indirection_to_value = 1;
}
}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))){
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
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
U32 byte_size = 8;
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
else{
// local kind
RADDBG_LocalKind local_kind = RADDBG_LocalKind_Variable;
RADDBGI_LocalKind local_kind = RADDBGI_LocalKind_Variable;
if (slocal->flags & CV_LocalFlag_Param){
local_kind = RADDBG_LocalKind_Parameter;
local_kind = RADDBGI_LocalKind_Parameter;
}
// 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);
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;
@@ -2312,9 +2313,9 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
CV_SymDefrangeRegister *defrange_register = (CV_SymDefrangeRegister*)first;
// 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;
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
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
CV_EncodedFramePtrReg encoded_fp_reg =
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);
// 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){
// 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;
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
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
CV_EncodedFramePtrReg encoded_fp_reg =
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);
// setup location
@@ -2459,9 +2460,9 @@ pdbconv_symbol_cons(PDBCONV_Ctx *ctx, CV_SymParsed *sym, U32 sym_unique_id){
else
{
// 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;
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_pos = 0;
@@ -2758,7 +2759,7 @@ pdbconv_known_global_insert(Arena *arena, PDBCONV_KnownGlobalSet *set, String8 n
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_pos,
S64 offset,
@@ -2776,12 +2777,12 @@ pdbconv_location_from_addr_reg_off(PDBCONV_Ctx *ctx,
Arena *arena = ctx->arena;
CONS_EvalBytecode bytecode = {0};
U32 regread_param = RADDBG_EncodeRegReadParam(reg_code, reg_byte_size, reg_byte_pos);
cons_bytecode_push_op(arena, &bytecode, RADDBG_EvalOp_RegRead, regread_param);
U32 regread_param = RADDBGI_EncodeRegReadParam(reg_code, reg_byte_size, reg_byte_pos);
cons_bytecode_push_op(arena, &bytecode, RADDBGI_EvalOp_RegRead, regread_param);
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){
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);
@@ -2806,12 +2807,12 @@ pdbconv_cv_encoded_fp_reg_from_proc(PDBCONV_Ctx *ctx, CONS_Symbol *proc, B32 par
return(result);
}
static RADDBG_RegisterCode
pdbconv_reg_code_from_arch_encoded_fp_reg(RADDBG_Arch arch, CV_EncodedFramePtrReg encoded_reg){
RADDBG_RegisterCode result = 0;
static RADDBGI_RegisterCode
pdbconv_reg_code_from_arch_encoded_fp_reg(RADDBGI_Arch arch, CV_EncodedFramePtrReg encoded_reg){
RADDBGI_RegisterCode result = 0;
switch (arch){
case RADDBG_Arch_X86:
case RADDBGI_Arch_X86:
{
switch (encoded_reg){
case CV_EncodedFramePtrReg_StackPtr:
@@ -2821,29 +2822,29 @@ pdbconv_reg_code_from_arch_encoded_fp_reg(RADDBG_Arch arch, CV_EncodedFramePtrRe
}break;
case CV_EncodedFramePtrReg_FramePtr:
{
result = RADDBG_RegisterCode_X86_ebp;
result = RADDBGI_RegisterCode_X86_ebp;
}break;
case CV_EncodedFramePtrReg_BasePtr:
{
result = RADDBG_RegisterCode_X86_ebx;
result = RADDBGI_RegisterCode_X86_ebx;
}break;
}
}break;
case RADDBG_Arch_X64:
case RADDBGI_Arch_X64:
{
switch (encoded_reg){
case CV_EncodedFramePtrReg_StackPtr:
{
result = RADDBG_RegisterCode_X64_rsp;
result = RADDBGI_RegisterCode_X64_rsp;
}break;
case CV_EncodedFramePtrReg_FramePtr:
{
result = RADDBG_RegisterCode_X64_rbp;
result = RADDBGI_RegisterCode_X64_rbp;
}break;
case CV_EncodedFramePtrReg_BasePtr:
{
result = RADDBG_RegisterCode_X64_r13;
result = RADDBGI_RegisterCode_X64_r13;
}break;
}
}break;
@@ -3139,7 +3140,7 @@ str8_list_pushf(arena, &out->errors, fmt, __VA_ARGS__);\
// exe hash
U64 exe_hash = 0;
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
@@ -3147,7 +3148,7 @@ str8_list_pushf(arena, &out->errors, fmt, __VA_ARGS__);\
if (params->output_name.size > 0){
// 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
// architecture, as it's sometimes used as a "nil" unit. this causes bugs
// 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)
{
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)
{
break;
}
}
}
U64 addr_size = raddbg_addr_size_from_arch(architecture);
U64 addr_size = raddbgi_addr_size_from_arch(architecture);
// 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_opl = name_first + sizeof(coff_ptr->name);
String8 name = str8_cstring_capped(name_first, name_opl);
RADDBG_BinarySectionFlags flags =
raddbg_binary_section_flags_from_coff_section_flags(coff_ptr->flags);
RADDBGI_BinarySectionFlags flags =
raddbgi_binary_section_flags_from_coff_section_flags(coff_ptr->flags);
cons_add_binary_section(root, name, flags,
coff_ptr->voff, coff_ptr->voff + coff_ptr->vsize,
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;
// 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
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
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_FROM_PDB_H
#define RADDBG_FROM_PDB_H
#ifndef RADDBGI_FROM_PDB_H
#define RADDBGI_FROM_PDB_H
////////////////////////////////
//~ Program Parameters Type
@@ -107,7 +107,7 @@ typedef struct PDBCONV_KnownGlobalSet{
typedef struct PDBCONV_CtxParams PDBCONV_CtxParams;
struct PDBCONV_CtxParams
{
RADDBG_Arch arch;
RADDBGI_Arch arch;
PDB_TpiHashParsed *tpi_hash;
CV_LeafParsed *tpi_leaf;
PDB_CoffSectionArray *sections;
@@ -140,7 +140,7 @@ typedef struct PDBCONV_Ctx{
Arena *arena;
// INPUT data
RADDBG_Arch arch;
RADDBGI_Arch arch;
U64 addr_size;
PDB_TpiHashParsed *hash;
CV_LeafParsed *leaf;
@@ -247,7 +247,7 @@ static void pdbconv_known_global_insert(Arena *arena, PDBCONV_KnownGlobalSet *se
// location info helpers
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_pos,
S64 offset,
@@ -257,8 +257,8 @@ static CV_EncodedFramePtrReg pdbconv_cv_encoded_fp_reg_from_proc(PDBCONV_Ctx *ct
CONS_Symbol *proc,
B32 param_base);
static RADDBG_RegisterCode pdbconv_reg_code_from_arch_encoded_fp_reg(RADDBG_Arch arch,
CV_EncodedFramePtrReg encoded_reg);
static RADDBGI_RegisterCode pdbconv_reg_code_from_arch_encoded_fp_reg(RADDBGI_Arch arch,
CV_EncodedFramePtrReg encoded_reg);
static void pdbconv_location_over_lvar_addr_range(PDBCONV_Ctx *ctx,
CONS_LocationSet *locset,
@@ -288,4 +288,4 @@ struct PDBCONV_Out
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);
CmdLine cmdline = cmd_line_from_string_list(arena, args);
ProfBeginCapture("raddbg_from_pdb");
ProfBeginCapture("raddbgi_from_pdb");
//- rjf: parse arguments
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
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_MSF_H
#define RADDBG_MSF_H
#ifndef RADDBGI_MSF_H
#define RADDBGI_MSF_H
////////////////////////////////
//~ MSF Format Types
@@ -57,4 +57,4 @@ typedef struct MSF_Parsed{
static MSF_Parsed* msf_parsed_from_data(Arena *arena, String8 msf_data);
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
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_PDB_H
#define RADDBG_PDB_H
#ifndef RADDBGI_PDB_H
#define RADDBGI_PDB_H
// 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,
PDB_StringIndex idx);
#endif //RADDBG_PDB_H
#endif //RADDBGI_PDB_H
@@ -1,12 +1,12 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_PDB_STRINGIZE_H
#define RADDBG_PDB_STRINGIZE_H
#ifndef RADDBGI_PDB_STRINGIZE_H
#define RADDBGI_PDB_STRINGIZE_H
////////////////////////////////
//~ PDB Stringize Functions
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
B32 try_parse_input = (params->errors.node_count == 0);
RADDBG_ParseStatus parse_status = RADDBG_ParseStatus_Good;
RADDBG_Parsed raddbg__ = {0};
RADDBG_Parsed *raddbg = 0;
RADDBGI_ParseStatus parse_status = RADDBGI_ParseStatus_Good;
RADDBGI_Parsed raddbg__ = {0};
RADDBGI_Parsed *raddbg = 0;
if (try_parse_input){
parse_status = raddbg_parse(params->input_data.str, params->input_data.size, &raddbg__);
if (parse_status == RADDBG_ParseStatus_Good){
parse_status = raddbgi_parse(params->input_data.str, params->input_data.size, &raddbg__);
if (parse_status == RADDBGI_ParseStatus_Good){
raddbg = &raddbg__;
}
}
@@ -181,24 +181,24 @@ main(int argc, char **argv){
// DATA SECTIONS
if (raddbg->dsecs != 0 && params->dump_data_sections){
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"));
}
// TOP LEVEL INFO
if (raddbg->top_level_info != 0 && params->dump_top_level_info){
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"));
}
// BINARY SECTIONS
if (raddbg->binary_sections != 0 && params->dump_binary_sections){
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){
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"));
@@ -206,17 +206,17 @@ main(int argc, char **argv){
// 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_path_count = raddbg->file_paths_count;
}
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){
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"));
@@ -225,10 +225,10 @@ main(int argc, char **argv){
// SOURCE FILES
if (raddbg->source_files != 0 && params->dump_source_files){
str8_list_pushf(arena, &dump, "# SOURCE FILES\n");
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){
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"));
@@ -237,10 +237,10 @@ main(int argc, char **argv){
// UNITS
if (raddbg->units != 0 && params->dump_units){
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){
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"));
@@ -249,7 +249,7 @@ main(int argc, char **argv){
// UNIT VMAP
if (raddbg->unit_vmap != 0 && params->dump_unit_vmap){
str8_list_pushf(arena, &dump, "# UNIT VMAP\n");
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){
str8_list_pushf(arena, &dump, " 0x%08x: %llu\n", ptr->voff, ptr->idx);
}
@@ -259,10 +259,10 @@ main(int argc, char **argv){
// TYPE NODES
if (raddbg->type_nodes != 0 && params->dump_type_nodes){
str8_list_pushf(arena, &dump, "# TYPE NODES:\n");
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){
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"));
@@ -270,7 +270,7 @@ main(int argc, char **argv){
// 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.enum_members = raddbg->enum_members;
@@ -279,10 +279,10 @@ main(int argc, char **argv){
}
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){
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"));
@@ -291,10 +291,10 @@ main(int argc, char **argv){
// GLOBAL VARIABLES
if (raddbg->global_variables != 0 && params->dump_global_variables){
str8_list_pushf(arena, &dump, "# GLOBAL VARIABLES:\n");
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){
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"));
@@ -303,7 +303,7 @@ main(int argc, char **argv){
// GLOBAL VMAP
if (raddbg->global_vmap != 0 && params->dump_global_vmap){
str8_list_pushf(arena, &dump, "# GLOBAL VMAP:\n");
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){
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
if (raddbg->thread_variables != 0 && params->dump_thread_variables){
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){
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"));
@@ -325,10 +325,10 @@ main(int argc, char **argv){
// PROCEDURES
if (raddbg->procedures != 0 && params->dump_procedures){
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){
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"));
@@ -336,7 +336,7 @@ main(int argc, char **argv){
// 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.scope_count = raddbg->scopes_count;
@@ -351,10 +351,10 @@ main(int argc, char **argv){
}
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){
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"));
}
}
@@ -364,7 +364,7 @@ main(int argc, char **argv){
// SCOPE VMAP
if (raddbg->scope_vmap != 0 && params->dump_scope_vmap){
str8_list_pushf(arena, &dump, "# SCOPE VMAP:\n");
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){
str8_list_pushf(arena, &dump, " 0x%08x: %llu\n", ptr->voff, ptr->idx);
}
@@ -374,33 +374,33 @@ main(int argc, char **argv){
// NAME MAPS
if (raddbg->name_maps != 0 && params->dump_name_map){
str8_list_pushf(arena, &dump, "# NAME MAP:\n");
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){
str8_list_pushf(arena, &dump, " name_map[%u]:\n", i);
RADDBG_ParsedNameMap name_map = {0};
raddbg_name_map_parse(raddbg, ptr, &name_map);
RADDBGI_ParsedNameMap name_map = {0};
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){
if (bucket->node_count > 0){
str8_list_pushf(arena, &dump, " bucket[%u]:\n", j);
RADDBG_NameMapNode *node = name_map.nodes + bucket->first_node;
RADDBG_NameMapNode *node_opl = node + bucket->node_count;
RADDBGI_NameMapNode *node = name_map.nodes + bucket->first_node;
RADDBGI_NameMapNode *node_opl = node + bucket->node_count;
for (; node < node_opl; node += 1){
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));
if (node->match_count == 1){
str8_list_pushf(arena, &dump, "%u", node->match_idx_or_idx_run_first);
}
else{
RADDBG_U32 idx_count = 0;
RADDBG_U32 *idx_run =
raddbg_idx_run_from_first_count(raddbg, node->match_idx_or_idx_run_first,
node->match_count, &idx_count);
RADDBGI_U32 idx_count = 0;
RADDBGI_U32 *idx_run =
raddbgi_idx_run_from_first_count(raddbg, node->match_idx_or_idx_run_first,
node->match_count, &idx_count);
if (idx_count > 0){
RADDBG_U32 last = idx_count - 1;
RADDBGI_U32 last = idx_count - 1;
for (U32 k = 0; k < last; k += 1){
str8_list_pushf(arena, &dump, "%u, ", idx_run[k]);
}
+3 -3
View File
@@ -1,8 +1,8 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_DUMP_H
#define RADDBG_DUMP_H
#ifndef RADDBGI_DUMP_H
#define RADDBGI_DUMP_H
////////////////////////////////
//~ Program Parameters Type
@@ -42,4 +42,4 @@ typedef struct DUMP_Params{
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
static String8
raddbg_string_from_data_section_tag(RADDBG_DataSectionTag tag){
raddbgi_string_from_data_section_tag(RADDBGI_DataSectionTag tag){
String8 result = {0};
switch (tag){
#define X(N,C) case C: result = str8_lit(#N); break;
#define Y(N)
RADDBG_DataSectionTagXList(X,Y)
RADDBGI_DataSectionTagXList(X,Y)
#undef X
#undef Y
}
@@ -18,36 +18,36 @@ raddbg_string_from_data_section_tag(RADDBG_DataSectionTag tag){
}
static String8
raddbg_string_from_arch(RADDBG_Arch arch){
raddbgi_string_from_arch(RADDBGI_Arch arch){
String8 result = {0};
switch (arch){
default: result = str8_lit("<invalid-arch>"); break;
case RADDBG_Arch_X86: result = str8_lit("x86"); break;
case RADDBG_Arch_X64: result = str8_lit("x64"); break;
case RADDBGI_Arch_X86: result = str8_lit("x86"); break;
case RADDBGI_Arch_X64: result = str8_lit("x64"); break;
}
return(result);
}
static String8
raddbg_string_from_language(RADDBG_Language language){
raddbgi_string_from_language(RADDBGI_Language language){
String8 result = {0};
switch (language){
#define X(name,code) case code: result = str8_lit(#name); break;
RADDBG_LanguageXList(X)
RADDBGI_LanguageXList(X)
#undef X
}
return(result);
}
static String8
raddbg_string_from_type_kind(RADDBG_TypeKind type_kind){
raddbgi_string_from_type_kind(RADDBGI_TypeKind type_kind){
String8 result = {0};
switch (type_kind){
default: result = str8_lit("<invalid-type-kind>"); break;
#define X(name,code) case code: result = str8_lit(#name); break;
#define XZ(name,code,size) X(name,code)
#define Y(a,n)
RADDBG_TypeKindXList(X,XZ,Y)
RADDBGI_TypeKindXList(X,XZ,Y)
#undef X
#undef XZ
#undef Y
@@ -56,24 +56,24 @@ raddbg_string_from_type_kind(RADDBG_TypeKind type_kind){
}
static String8
raddbg_string_from_member_kind(RADDBG_MemberKind member_kind){
raddbgi_string_from_member_kind(RADDBGI_MemberKind member_kind){
String8 result = {0};
switch (member_kind){
default: result = str8_lit("<invalid-member-kind>"); break;
#define X(N,C) case C: result = str8_lit(#N); break;
RADDBG_MemberKindXList(X)
RADDBGI_MemberKindXList(X)
#undef X
}
return(result);
}
static String8
raddbg_string_from_local_kind(RADDBG_LocalKind local_kind){
raddbgi_string_from_local_kind(RADDBGI_LocalKind local_kind){
String8 result = {0};
switch (local_kind){
default: result = str8_lit("<invalid-local-kind>"); break;
case RADDBG_LocalKind_Parameter: result = str8_lit("Parameter"); break;
case RADDBG_LocalKind_Variable: result = str8_lit("Variable"); break;
case RADDBGI_LocalKind_Parameter: result = str8_lit("Parameter"); break;
case RADDBGI_LocalKind_Variable: result = str8_lit("Variable"); break;
}
return(result);
}
@@ -83,59 +83,59 @@ raddbg_string_from_local_kind(RADDBG_LocalKind local_kind){
//~ RADDBG Flags Stringize Functions
static void
raddbg_stringize_binary_section_flags(Arena *arena, String8List *out,
RADDBG_BinarySectionFlags flags){
raddbgi_stringize_binary_section_flags(Arena *arena, String8List *out,
RADDBGI_BinarySectionFlags flags){
if (flags == 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 "));
}
if (flags & RADDBG_BinarySectionFlag_Write){
if (flags & RADDBGI_BinarySectionFlag_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 "));
}
}
static void
raddbg_stringize_type_modifier_flags(Arena *arena, String8List *out,
RADDBG_TypeModifierFlags flags){
raddbgi_stringize_type_modifier_flags(Arena *arena, String8List *out,
RADDBGI_TypeModifierFlags flags){
if (flags == 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 "));
}
if (flags & RADDBG_TypeModifierFlag_Volatile){
if (flags & RADDBGI_TypeModifierFlag_Volatile){
str8_list_push(arena, out, str8_lit("Volatile "));
}
}
static void
raddbg_stringize_user_defined_type_flags(Arena *arena, String8List *out,
RADDBG_UserDefinedTypeFlags flags){
raddbgi_stringize_user_defined_type_flags(Arena *arena, String8List *out,
RADDBGI_UserDefinedTypeFlags flags){
if (flags == 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 "));
}
}
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){
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 "));
}
if (flags & RADDBG_LinkFlag_TypeScoped){
if (flags & RADDBGI_LinkFlag_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 "));
}
}
@@ -144,82 +144,82 @@ raddbg_stringize_link_flags(Arena *arena, String8List *out, RADDBG_LinkFlags fla
////////////////////////////////
//~ RADDBG Compound Stringize Functions
static char raddbg_stringize_spaces[] = " ";
static char raddbgi_stringize_spaces[] = " ";
static void
raddbg_stringize_data_sections(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
U32 indent_level){
raddbgi_stringize_data_sections(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
U32 indent_level){
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){
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",
indent_level, raddbg_stringize_spaces,
indent_level, raddbgi_stringize_spaces,
i, ptr->off, ptr->encoded_size, ptr->unpacked_size, str8_varg(tag_str));
}
}
static void
raddbg_stringize_top_level_info(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_TopLevelInfo *tli, U32 indent_level){
String8 arch_str = raddbg_string_from_arch(tli->architecture);
raddbgi_stringize_top_level_info(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_TopLevelInfo *tli, U32 indent_level){
String8 arch_str = raddbgi_string_from_arch(tli->architecture);
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",
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",
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",
indent_level, raddbg_stringize_spaces, tli->voff_max);
indent_level, raddbgi_stringize_spaces, tli->voff_max);
}
static void
raddbg_stringize_binary_section(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_BinarySection *bin_section, U32 indent_level){
raddbgi_stringize_binary_section(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_BinarySection *bin_section, U32 indent_level){
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",
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);
raddbg_stringize_binary_section_flags(arena, out, bin_section->flags);
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbgi_stringize_spaces);
raddbgi_stringize_binary_section_flags(arena, out, bin_section->flags);
str8_list_pushf(arena, out, "\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",
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",
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",
indent_level, raddbg_stringize_spaces, bin_section->foff_opl);
indent_level, raddbgi_stringize_spaces, bin_section->foff_opl);
}
static void
raddbg_stringize_file_path(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_FilePathBundle *bundle, RADDBG_FilePathNode *file_path,
U32 indent_level){
raddbgi_stringize_file_path(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_FilePathBundle *bundle, RADDBGI_FilePathNode *file_path,
U32 indent_level){
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);
if (file_path->source_file_idx == 0){
str8_list_pushf(arena, out, "%.*s[%u] '%.*s'\n",
indent_level, raddbg_stringize_spaces,
indent_level, raddbgi_stringize_spaces,
this_idx, str8_varg(name));
}
else{
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);
}
for (U32 child = file_path->first_child;
child != 0;){
// get node for child
RADDBG_FilePathNode *child_node = 0;
RADDBGI_FilePathNode *child_node = 0;
if (child < bundle->file_path_count){
child_node = bundle->file_paths + child;
}
@@ -228,7 +228,7 @@ raddbg_stringize_file_path(Arena *arena, String8List *out, RADDBG_Parsed *parsed
}
// 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
child = child_node->next_sibling;
@@ -236,14 +236,14 @@ raddbg_stringize_file_path(Arena *arena, String8List *out, RADDBG_Parsed *parsed
}
static void
raddbg_stringize_source_file(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_SourceFile *source_file, U32 indent_level){
raddbgi_stringize_source_file(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_SourceFile *source_file, U32 indent_level){
// extract line map data
RADDBG_ParsedLineMap line_map = {0};
raddbg_line_map_from_source_file(parsed, source_file, &line_map);
RADDBGI_ParsedLineMap line_map = {0};
raddbgi_line_map_from_source_file(parsed, source_file, &line_map);
// 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){
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: ",
indent_level, raddbg_stringize_spaces, line_num);
indent_level, raddbgi_stringize_spaces, line_num);
U32 first = line_map.ranges[i];
U32 opl_raw = line_map.ranges[i + 1];
@@ -272,7 +272,7 @@ raddbg_stringize_source_file(Arena *arena, String8List *out, RADDBG_Parsed *pars
}
else{
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]);
}
}
@@ -280,57 +280,57 @@ raddbg_stringize_source_file(Arena *arena, String8List *out, RADDBG_Parsed *pars
}
static void
raddbg_stringize_unit(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_Unit *unit, U32 indent_level){
raddbgi_stringize_unit(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_Unit *unit, U32 indent_level){
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};
compiler_name.str = raddbg_string_from_idx(parsed, unit->compiler_name_string_idx,
&compiler_name.size);
compiler_name.str = raddbgi_string_from_idx(parsed, unit->compiler_name_string_idx,
&compiler_name.size);
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",
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",
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",
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",
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",
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",
indent_level, raddbg_stringize_spaces, str8_varg(language_str));
indent_level, raddbgi_stringize_spaces, str8_varg(language_str));
// extract line info data
RADDBG_ParsedLineInfo line_info = {0};
raddbg_line_info_from_unit(parsed, unit, &line_info);
RADDBGI_ParsedLineInfo line_info = {0};
raddbgi_line_info_from_unit(parsed, unit, &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){
U64 first = line_info.voffs[i];
U64 opl = line_info.voffs[i + 1];
RADDBG_Line *line = line_info.lines + i;
RADDBG_Column *col = 0;
RADDBGI_Line *line = line_info.lines + i;
RADDBGI_Column *col = 0;
if (i < line_info.col_count){
col = line_info.cols + i;
}
if (col == 0){
str8_list_pushf(arena, out, "%.*s [0x%08llx,0x%08llx) file=%u; line=%u\n",
indent_level, raddbg_stringize_spaces,
indent_level, raddbgi_stringize_spaces,
first, opl, line->file_idx, line->line_num);
}
else{
str8_list_pushf(arena, out, "%.*s [0x%08llx,0x%08llx) file=%u; line=%u; columns=[%u,%u)\n",
indent_level, raddbg_stringize_spaces,
indent_level, raddbgi_stringize_spaces,
first, opl, line->file_idx, line->line_num,
col->col_first, col->col_opl);
}
@@ -338,19 +338,19 @@ raddbg_stringize_unit(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
}
static void
raddbg_stringize_type_node(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_TypeNode *type, U32 indent_level){
RADDBG_TypeKind kind = type->kind;
String8 type_kind_str = raddbg_string_from_type_kind(kind);
raddbgi_stringize_type_node(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_TypeNode *type, U32 indent_level){
RADDBGI_TypeKind kind = type->kind;
String8 type_kind_str = raddbgi_string_from_type_kind(kind);
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){
case RADDBG_TypeKind_Modifier:
case RADDBGI_TypeKind_Modifier:
{
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbg_stringize_spaces);
raddbg_stringize_type_modifier_flags(arena, out, type->flags);
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbgi_stringize_spaces);
raddbgi_stringize_type_modifier_flags(arena, out, type->flags);
str8_list_push(arena, out, str8_lit("\n"));
}break;
@@ -358,42 +358,42 @@ raddbg_stringize_type_node(Arena *arena, String8List *out, RADDBG_Parsed *parsed
{
if (type->flags != 0){
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;
}
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 &&
kind <= RADDBG_TypeKind_LastBuiltIn){
if (RADDBGI_TypeKind_FirstBuiltIn <= kind &&
kind <= RADDBGI_TypeKind_LastBuiltIn){
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",
indent_level, raddbg_stringize_spaces, str8_varg(name));
indent_level, raddbgi_stringize_spaces, str8_varg(name));
}
else if (RADDBG_TypeKind_FirstConstructed <= kind &&
kind <= RADDBG_TypeKind_LastConstructed){
else if (RADDBGI_TypeKind_FirstConstructed <= kind &&
kind <= RADDBGI_TypeKind_LastConstructed){
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",
indent_level, raddbg_stringize_spaces, type->constructed.count);
indent_level, raddbgi_stringize_spaces, type->constructed.count);
}
if (type->kind == RADDBG_TypeKind_Function ||
type->kind == RADDBG_TypeKind_Method){
if (type->kind == RADDBGI_TypeKind_Function ||
type->kind == RADDBGI_TypeKind_Method){
U32 run_first = type->constructed.param_idx_run_first;
U32 run_count_raw = type->constructed.count;
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;
if (run_count > 0 && type->kind == RADDBG_TypeKind_Method){
if (run_count > 0 && type->kind == RADDBGI_TypeKind_Method){
this_type_idx = run[0];
run += 1;
run_count -= 1;
@@ -401,11 +401,11 @@ raddbg_stringize_type_node(Arena *arena, String8List *out, RADDBG_Parsed *parsed
if (this_type_idx != 0){
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={",
indent_level, raddbg_stringize_spaces);
indent_level, raddbgi_stringize_spaces);
if (run_count > 0){
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 &&
kind <= RADDBG_TypeKind_LastUserDefined){
else if (RADDBGI_TypeKind_FirstUserDefined <= kind &&
kind <= RADDBGI_TypeKind_LastUserDefined){
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",
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",
indent_level, raddbg_stringize_spaces,
indent_level, raddbgi_stringize_spaces,
type->user_defined.direct_type_idx);
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);
}
else if (kind == RADDBG_TypeKind_Bitfield){
else if (kind == RADDBGI_TypeKind_Bitfield){
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",
indent_level, raddbg_stringize_spaces, type->bitfield.size);
indent_level, raddbgi_stringize_spaces, type->bitfield.size);
}
}
static void
raddbg_stringize_udt(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_UDTMemberBundle *member_bundle, RADDBG_UDT *udt,
U32 indent_level){
raddbgi_stringize_udt(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_UDTMemberBundle *member_bundle, RADDBGI_UDT *udt,
U32 indent_level){
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);
raddbg_stringize_user_defined_type_flags(arena, out, udt->flags);
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbgi_stringize_spaces);
raddbgi_stringize_user_defined_type_flags(arena, out, udt->flags);
str8_list_push(arena, out, str8_lit("\n"));
if (udt->file_idx != 0){
str8_list_pushf(arena, out, "%.*sloc={file=%u; line=%u; col=%u}\n",
indent_level, raddbg_stringize_spaces,
indent_level, raddbgi_stringize_spaces,
udt->file_idx, udt->line, udt->col);
}
// enum members
if (udt->flags & RADDBG_UserDefinedTypeFlag_EnumMembers){
if (udt->flags & RADDBGI_UserDefinedTypeFlag_EnumMembers){
U32 first_raw = udt->member_first;
U32 opl_raw = first_raw + udt->member_count;
U32 opl = ClampTop(opl_raw, member_bundle->enum_member_count);
U32 first = ClampTop(first_raw, opl);
if (first < opl){
str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, raddbg_stringize_spaces);
RADDBG_EnumMember *enum_member = member_bundle->enum_members + first;
str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, raddbgi_stringize_spaces);
RADDBGI_EnumMember *enum_member = member_bundle->enum_members + first;
for (U32 i = first; i < opl; i += 1, enum_member += 1){
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",
indent_level, raddbg_stringize_spaces,
indent_level, raddbgi_stringize_spaces,
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);
if (first < opl){
str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, raddbg_stringize_spaces);
RADDBG_Member *member = member_bundle->members + first;
str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, raddbgi_stringize_spaces);
RADDBGI_Member *member = member_bundle->members + first;
for (U32 i = first; i < opl; i += 1, member += 1){
str8_list_pushf(arena, out, "%.*s {\n", indent_level, 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",
indent_level, raddbg_stringize_spaces, str8_varg(kind_str));
indent_level, raddbgi_stringize_spaces, str8_varg(kind_str));
if (member->name_string_idx != 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",
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",
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",
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
raddbg_stringize_global_variable(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_GlobalVariable *global_variable, U32 indent_level){
raddbgi_stringize_global_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_GlobalVariable *global_variable, U32 indent_level){
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",
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);
raddbg_stringize_link_flags(arena, out, global_variable->link_flags);
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbgi_stringize_spaces);
raddbgi_stringize_link_flags(arena, out, global_variable->link_flags);
str8_list_push(arena, out, str8_lit("\n"));
str8_list_pushf(arena, out, "%.*svoff=0x%08llx\n",
indent_level, raddbg_stringize_spaces, global_variable->voff);
indent_level, raddbgi_stringize_spaces, global_variable->voff);
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",
indent_level, raddbg_stringize_spaces, global_variable->container_idx);
indent_level, raddbgi_stringize_spaces, global_variable->container_idx);
}
static void
raddbg_stringize_thread_variable(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_ThreadVariable *thread_var,
U32 indent_level){
raddbgi_stringize_thread_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_ThreadVariable *thread_var,
U32 indent_level){
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",
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);
raddbg_stringize_link_flags(arena, out, thread_var->link_flags);
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbgi_stringize_spaces);
raddbgi_stringize_link_flags(arena, out, thread_var->link_flags);
str8_list_push(arena, out, str8_lit("\n"));
str8_list_pushf(arena, out, "%.*stls_off=0x%08x\n",
indent_level, 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",
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",
indent_level, raddbg_stringize_spaces, thread_var->container_idx);
indent_level, raddbgi_stringize_spaces, thread_var->container_idx);
}
static void
raddbg_stringize_procedure(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_Procedure *proc, U32 indent_level){
raddbgi_stringize_procedure(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_Procedure *proc, U32 indent_level){
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",
indent_level, raddbg_stringize_spaces, str8_varg(name));
indent_level, raddbgi_stringize_spaces, str8_varg(name));
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",
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);
raddbg_stringize_link_flags(arena, out, proc->link_flags);
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbgi_stringize_spaces);
raddbgi_stringize_link_flags(arena, out, proc->link_flags);
str8_list_push(arena, out, str8_lit("\n"));
str8_list_pushf(arena, out, "%.*stype_idx=%u\n",
indent_level, raddbg_stringize_spaces, proc->type_idx);
indent_level, raddbgi_stringize_spaces, proc->type_idx);
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",
indent_level, raddbg_stringize_spaces, proc->container_idx);
indent_level, raddbgi_stringize_spaces, proc->container_idx);
}
static void
raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_ScopeBundle *bundle, RADDBG_Scope *scope, U32 indent_level){
raddbgi_stringize_scope(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_ScopeBundle *bundle, RADDBGI_Scope *scope, U32 indent_level){
U32 this_idx = (U32)(scope - bundle->scopes);
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",
indent_level, raddbg_stringize_spaces, scope->proc_idx);
indent_level, raddbgi_stringize_spaces, scope->proc_idx);
// voff ranges
{
@@ -614,18 +614,18 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
if (voff_range_opl - voff_range_first > 2){
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){
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]);
}
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){
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]);
}
}
@@ -637,60 +637,60 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
U32 local_opl = ClampTop(local_opl_raw, bundle->local_count);
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){
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",
indent_level, raddbg_stringize_spaces, str8_varg(local_kind_str));
indent_level, raddbgi_stringize_spaces, str8_varg(local_kind_str));
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",
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",
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_opl_raw = local_ptr->location_opl;
U32 location_opl = ClampTop(location_opl_raw, bundle->location_block_count);
if (location_first < location_opl){
str8_list_pushf(arena, out, "%.*s locations:\n", indent_level, raddbg_stringize_spaces);
RADDBG_LocationBlock *block_ptr = bundle->location_blocks + location_first;
str8_list_pushf(arena, out, "%.*s locations:\n", indent_level, raddbgi_stringize_spaces);
RADDBGI_LocationBlock *block_ptr = bundle->location_blocks + location_first;
for (U32 j = location_first; j < location_opl; j += 1, block_ptr += 1){
if (block_ptr->scope_off_first == 0 && block_ptr->scope_off_opl == max_U32){
str8_list_pushf(arena, out, "%.*s case *always*:\n", indent_level, raddbg_stringize_spaces);
str8_list_pushf(arena, out, "%.*s case *always*:\n", indent_level, raddbgi_stringize_spaces);
}
else{
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);
}
if (block_ptr->location_data_off >= bundle->location_data_size){
str8_list_pushf(arena, out, "%.*s <bad-location-data-offset>\n",
indent_level, raddbg_stringize_spaces);
indent_level, raddbgi_stringize_spaces);
}
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_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){
default:
{
str8_list_pushf(arena, out, "<invalid-location-kind>\n");
}break;
case RADDBG_LocationKind_AddrBytecodeStream:
case RADDBGI_LocationKind_AddrBytecodeStream:
{
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;
for (;bytecode_ptr < loc_data_opl && *bytecode_ptr != 0; bytecode_ptr += 1){
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");
}break;
case RADDBG_LocationKind_ValBytecodeStream:
case RADDBGI_LocationKind_ValBytecodeStream:
{
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;
for (;bytecode_ptr < loc_data_opl && *bytecode_ptr != 0; bytecode_ptr += 1){
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");
}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");
}
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",
loc->register_code, loc->offset);
}
}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");
}
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",
loc->register_code, loc->offset);
}
}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");
}
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);
}
}break;
@@ -756,7 +756,7 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
for (U32 child = scope->first_child_scope_idx;
child != 0;){
// get scope for child
RADDBG_Scope *child_scope = 0;
RADDBGI_Scope *child_scope = 0;
if (child < bundle->scope_count){
child_scope = bundle->scopes + child;
}
@@ -765,12 +765,12 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
}
// 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
child = child_scope->next_sibling_scope_idx;
}
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
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_STRINGIZE_H
#define RADDBG_STRINGIZE_H
#ifndef RADDBGI_STRINGIZE_H
#define RADDBGI_STRINGIZE_H
// 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
@@ -13,108 +13,108 @@
////////////////////////////////
//~ RADDBG Stringize Helper Types
typedef struct RADDBG_FilePathBundle{
RADDBG_FilePathNode *file_paths;
typedef struct RADDBGI_FilePathBundle{
RADDBGI_FilePathNode *file_paths;
U32 file_path_count;
} RADDBG_FilePathBundle;
} RADDBGI_FilePathBundle;
typedef struct RADDBG_UDTMemberBundle{
RADDBG_Member *members;
RADDBG_EnumMember *enum_members;
typedef struct RADDBGI_UDTMemberBundle{
RADDBGI_Member *members;
RADDBGI_EnumMember *enum_members;
U32 member_count;
U32 enum_member_count;
} RADDBG_UDTMemberBundle;
} RADDBGI_UDTMemberBundle;
typedef struct RADDBG_ScopeBundle{
RADDBG_Scope *scopes;
typedef struct RADDBGI_ScopeBundle{
RADDBGI_Scope *scopes;
U64 *scope_voffs;
RADDBG_Local *locals;
RADDBG_LocationBlock *location_blocks;
RADDBGI_Local *locals;
RADDBGI_LocationBlock *location_blocks;
U8 *location_data;
U32 scope_count;
U32 scope_voff_count;
U32 local_count;
U32 location_block_count;
U32 location_data_size;
} RADDBG_ScopeBundle;
} RADDBGI_ScopeBundle;
////////////////////////////////
//~ RADDBG Common Stringize Functions
static String8 raddbg_string_from_data_section_tag(RADDBG_DataSectionTag tag);
static String8 raddbg_string_from_arch(RADDBG_Arch arch);
static String8 raddbg_string_from_language(RADDBG_Language language);
static String8 raddbg_string_from_type_kind(RADDBG_TypeKind type_kind);
static String8 raddbg_string_from_member_kind(RADDBG_MemberKind member_kind);
static String8 raddbg_string_from_local_kind(RADDBG_LocalKind local_kind);
static String8 raddbgi_string_from_data_section_tag(RADDBGI_DataSectionTag tag);
static String8 raddbgi_string_from_arch(RADDBGI_Arch arch);
static String8 raddbgi_string_from_language(RADDBGI_Language language);
static String8 raddbgi_string_from_type_kind(RADDBGI_TypeKind type_kind);
static String8 raddbgi_string_from_member_kind(RADDBGI_MemberKind member_kind);
static String8 raddbgi_string_from_local_kind(RADDBGI_LocalKind local_kind);
////////////////////////////////
//~ RADDBG Flags Stringize Functions
static void raddbg_stringize_binary_section_flags(Arena *arena, String8List *out,
RADDBG_BinarySectionFlags flags);
static void raddbgi_stringize_binary_section_flags(Arena *arena, String8List *out,
RADDBGI_BinarySectionFlags flags);
static void raddbg_stringize_type_modifier_flags(Arena *arena, String8List *out,
RADDBG_TypeModifierFlags flags);
static void raddbgi_stringize_type_modifier_flags(Arena *arena, String8List *out,
RADDBGI_TypeModifierFlags flags);
static void raddbg_stringize_user_defined_type_flags(Arena *arena, String8List *out,
RADDBG_UserDefinedTypeFlags flags);
static void raddbgi_stringize_user_defined_type_flags(Arena *arena, String8List *out,
RADDBGI_UserDefinedTypeFlags flags);
static void raddbg_stringize_link_flags(Arena *arena, String8List *out,
RADDBG_LinkFlags flags);
static void raddbgi_stringize_link_flags(Arena *arena, String8List *out,
RADDBGI_LinkFlags flags);
////////////////////////////////
//~ RADDBG Compound Stringize Functions
static void
raddbg_stringize_data_sections(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
U32 indent_level);
raddbgi_stringize_data_sections(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
U32 indent_level);
static void
raddbg_stringize_top_level_info(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_TopLevelInfo *tli, U32 indent_level);
raddbgi_stringize_top_level_info(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_TopLevelInfo *tli, U32 indent_level);
static void
raddbg_stringize_binary_section(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_BinarySection *bin_section, U32 indent_level);
raddbgi_stringize_binary_section(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_BinarySection *bin_section, U32 indent_level);
static void
raddbg_stringize_file_path(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_FilePathBundle *bundle, RADDBG_FilePathNode *file_path,
U32 indent_level);
raddbgi_stringize_file_path(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_FilePathBundle *bundle, RADDBGI_FilePathNode *file_path,
U32 indent_level);
static void
raddbg_stringize_source_file(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_SourceFile *source_file, U32 indent_level);
raddbgi_stringize_source_file(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_SourceFile *source_file, U32 indent_level);
static void
raddbg_stringize_unit(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_Unit *unit, U32 indent_level);
raddbgi_stringize_unit(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_Unit *unit, U32 indent_level);
static void
raddbg_stringize_type_node(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_TypeNode *type, U32 indent_level);
raddbgi_stringize_type_node(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_TypeNode *type, U32 indent_level);
static void
raddbg_stringize_udt(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_UDTMemberBundle *bundle, RADDBG_UDT *udt,
U32 indent_level);
raddbgi_stringize_udt(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_UDTMemberBundle *bundle, RADDBGI_UDT *udt,
U32 indent_level);
static void
raddbg_stringize_global_variable(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_GlobalVariable *global_variable, U32 indent_level);
raddbgi_stringize_global_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_GlobalVariable *global_variable, U32 indent_level);
static void
raddbg_stringize_thread_variable(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_ThreadVariable *thread_var,
U32 indent_level);
raddbgi_stringize_thread_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_ThreadVariable *thread_var,
U32 indent_level);
static void
raddbg_stringize_procedure(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_Procedure *proc, U32 indent_level);
raddbgi_stringize_procedure(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
RADDBGI_Procedure *proc, U32 indent_level);
static void
raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
RADDBG_ScopeBundle *bundle, RADDBG_Scope *scope, U32 indent_level);
raddbgi_stringize_scope(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
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
RADDBG_PROC RADDBG_U64
raddbg_hash(RADDBG_U8 *ptr, RADDBG_U64 size){
RADDBG_U64 result = 5381;
RADDBG_U8 *opl = ptr + size;
RADDBGI_PROC RADDBGI_U64
raddbgi_hash(RADDBGI_U8 *ptr, RADDBGI_U64 size){
RADDBGI_U64 result = 5381;
RADDBGI_U8 *opl = ptr + size;
for (; ptr < opl; ptr += 1){
result = ((result << 5) + result) + *ptr;
}
return(result);
}
RADDBG_PROC RADDBG_U32
raddbg_size_from_basic_type_kind(RADDBG_TypeKind kind){
RADDBG_U32 result = 0;
RADDBGI_PROC RADDBGI_U32
raddbgi_size_from_basic_type_kind(RADDBGI_TypeKind kind){
RADDBGI_U32 result = 0;
switch (kind){
#define X(N,C)
#define XZ(N,C,Z) case C: result = Z; break;
#define Y(A,N)
RADDBG_TypeKindXList(X,XZ,Y)
RADDBGI_TypeKindXList(X,XZ,Y)
#undef X
#undef XZ
#undef Y
@@ -29,12 +29,12 @@ raddbg_size_from_basic_type_kind(RADDBG_TypeKind kind){
return(result);
}
RADDBG_PROC RADDBG_U32
raddbg_addr_size_from_arch(RADDBG_Arch arch){
RADDBG_U32 result = 0;
RADDBGI_PROC RADDBGI_U32
raddbgi_addr_size_from_arch(RADDBGI_Arch arch){
RADDBGI_U32 result = 0;
switch (arch){
#define X(N,C,Z) case C: result = Z; break;
RADDBG_ArchXList(X)
RADDBGI_ArchXList(X)
#undef X
}
return(result);
@@ -42,14 +42,14 @@ raddbg_addr_size_from_arch(RADDBG_Arch arch){
//- eval helpers
RADDBG_PROC RADDBG_EvalConversionKind
raddbg_eval_conversion_rule(RADDBG_EvalTypeGroup in, RADDBG_EvalTypeGroup out){
RADDBG_EvalConversionKind result = 0;
RADDBGI_PROC RADDBGI_EvalConversionKind
raddbgi_eval_conversion_rule(RADDBGI_EvalTypeGroup in, RADDBGI_EvalTypeGroup out){
RADDBGI_EvalConversionKind result = 0;
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 Xe(c) result = RADDBG_EvalConversionKind_##c; break;
RADDBG_EvalConversionKindFromTypeGroupPairMap(Y,Xb,Xe)
#define Xe(c) result = RADDBGI_EvalConversionKind_##c; break;
RADDBGI_EvalConversionKindFromTypeGroupPairMap(Y,Xb,Xe)
#undef Xe
#undef Xb
#undef Y
@@ -57,38 +57,38 @@ raddbg_eval_conversion_rule(RADDBG_EvalTypeGroup in, RADDBG_EvalTypeGroup out){
return(result);
}
RADDBG_PROC RADDBG_U8*
raddbg_eval_conversion_message(RADDBG_EvalConversionKind conversion_kind, RADDBG_U64 *lenout){
RADDBG_U8 *result = 0;
RADDBGI_PROC RADDBGI_U8*
raddbgi_eval_conversion_message(RADDBGI_EvalConversionKind conversion_kind, RADDBGI_U64 *lenout){
RADDBGI_U8 *result = 0;
switch (conversion_kind){
#define X(N,msg) \
case RADDBG_EvalConversionKind_##N: result = (RADDBG_U8*)msg; *lenout = sizeof(msg) - 1; break;
RADDBG_EvalConversionKindXList(X)
case RADDBGI_EvalConversionKind_##N: result = (RADDBGI_U8*)msg; *lenout = sizeof(msg) - 1; break;
RADDBGI_EvalConversionKindXList(X)
#undef X
}
return(result);
}
RADDBG_PROC RADDBG_S32
raddbg_eval_opcode_type_compatible(RADDBG_EvalOp op, RADDBG_EvalTypeGroup group){
RADDBG_S32 result = 0;
RADDBGI_PROC RADDBGI_S32
raddbgi_eval_opcode_type_compatible(RADDBGI_EvalOp op, RADDBGI_EvalTypeGroup group){
RADDBGI_S32 result = 0;
switch (op){
case RADDBG_EvalOp_Neg: case RADDBG_EvalOp_Add: case RADDBG_EvalOp_Sub:
case RADDBG_EvalOp_Mul: case RADDBG_EvalOp_Div:
case RADDBG_EvalOp_EqEq:case RADDBG_EvalOp_NtEq:
case RADDBG_EvalOp_LsEq:case RADDBG_EvalOp_GrEq:
case RADDBG_EvalOp_Less:case RADDBG_EvalOp_Grtr:
case RADDBGI_EvalOp_Neg: case RADDBGI_EvalOp_Add: case RADDBGI_EvalOp_Sub:
case RADDBGI_EvalOp_Mul: case RADDBGI_EvalOp_Div:
case RADDBGI_EvalOp_EqEq:case RADDBGI_EvalOp_NtEq:
case RADDBGI_EvalOp_LsEq:case RADDBGI_EvalOp_GrEq:
case RADDBGI_EvalOp_Less:case RADDBGI_EvalOp_Grtr:
{
if (group != RADDBG_EvalTypeGroup_Other){
if (group != RADDBGI_EvalTypeGroup_Other){
result = 1;
}
}break;
case RADDBG_EvalOp_Mod:case RADDBG_EvalOp_LShift:case RADDBG_EvalOp_RShift:
case RADDBG_EvalOp_BitNot:case RADDBG_EvalOp_BitAnd:case RADDBG_EvalOp_BitXor:
case RADDBG_EvalOp_BitOr:case RADDBG_EvalOp_LogNot:case RADDBG_EvalOp_LogAnd:
case RADDBG_EvalOp_LogOr:
case RADDBGI_EvalOp_Mod:case RADDBGI_EvalOp_LShift:case RADDBGI_EvalOp_RShift:
case RADDBGI_EvalOp_BitNot:case RADDBGI_EvalOp_BitAnd:case RADDBGI_EvalOp_BitXor:
case RADDBGI_EvalOp_BitOr:case RADDBGI_EvalOp_LogNot:case RADDBGI_EvalOp_LogAnd:
case RADDBGI_EvalOp_LogOr:
{
if (group == RADDBG_EvalTypeGroup_S || group == RADDBG_EvalTypeGroup_U){
if (group == RADDBGI_EvalTypeGroup_S || group == RADDBGI_EvalTypeGroup_U){
result = 1;
}
}break;
+335 -339
View File
@@ -1,60 +1,60 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_FORMAT_H
#define RADDBG_FORMAT_H
#ifndef RADDBGI_FORMAT_H
#define RADDBGI_FORMAT_H
////////////////////////////////////////////////////////////////
// Overridable procedure decoration
#if !defined(RADDBG_PROC)
# define RADDBG_PROC static
#if !defined(RADDBGI_PROC)
# define RADDBGI_PROC static
#endif
////////////////////////////////////////////////////////////////
// Overridable integer types
#if !defined(RADDBG_U8)
# define RADDBG_U8 RADDBG_U8
# define RADDBG_U16 RADDBG_U16
# define RADDBG_U32 RADDBG_U32
# define RADDBG_U64 RADDBG_U64
# define RADDBG_S8 RADDBG_S8
# define RADDBG_S16 RADDBG_S16
# define RADDBG_S32 RADDBG_S32
# define RADDBG_S64 RADDBG_S64
#if !defined(RADDBGI_U8)
# define RADDBGI_U8 RADDBGI_U8
# define RADDBGI_U16 RADDBGI_U16
# define RADDBGI_U32 RADDBGI_U32
# define RADDBGI_U64 RADDBGI_U64
# define RADDBGI_S8 RADDBGI_S8
# define RADDBGI_S16 RADDBGI_S16
# define RADDBGI_S32 RADDBGI_S32
# define RADDBGI_S64 RADDBGI_S64
#include <stdint.h>
typedef uint8_t RADDBG_U8;
typedef uint16_t RADDBG_U16;
typedef uint32_t RADDBG_U32;
typedef uint64_t RADDBG_U64;
typedef int8_t RADDBG_S8;
typedef int16_t RADDBG_S16;
typedef int32_t RADDBG_S32;
typedef int64_t RADDBG_S64;
typedef uint8_t RADDBGI_U8;
typedef uint16_t RADDBGI_U16;
typedef uint32_t RADDBGI_U32;
typedef uint64_t RADDBGI_U64;
typedef int8_t RADDBGI_S8;
typedef int16_t RADDBGI_S16;
typedef int32_t RADDBGI_S32;
typedef int64_t RADDBGI_S64;
#endif
////////////////////////////////////////////////////////////////
// Architecture Constants
#define RADDBG_ArchXList(X)\
#define RADDBGI_ArchXList(X)\
X(NULL, 0, 0)\
X(X86, 1, 4)\
X(X64, 2, 8)
typedef RADDBG_U32 RADDBG_Arch;
typedef enum RADDBG_ArchEnum{
#define X(N,C,Z) RADDBG_Arch_##N = C,
RADDBG_ArchXList(X)
typedef RADDBGI_U32 RADDBGI_Arch;
typedef enum RADDBGI_ArchEnum{
#define X(N,C,Z) RADDBGI_Arch_##N = C,
RADDBGI_ArchXList(X)
#undef X
} RADDBG_ArchEnum;
} RADDBGI_ArchEnum;
typedef RADDBG_U8 RADDBG_RegisterCode;
typedef RADDBGI_U8 RADDBGI_RegisterCode;
// x86 registers
#define RADDBG_RegisterCode_X86_XList(X) \
#define RADDBGI_RegisterCode_X86_XList(X) \
X(nil, 0) \
X(eax, 1) \
X(ecx, 2) \
@@ -118,14 +118,14 @@ X(ymm6, 59) \
X(ymm7, 60) \
X(COUNT, 61)
typedef enum RADDBG_RegisterCode_X86_Enum{
#define X(N,C) RADDBG_RegisterCode_X86_##N = C,
RADDBG_RegisterCode_X86_XList(X)
typedef enum RADDBGI_RegisterCode_X86_Enum{
#define X(N,C) RADDBGI_RegisterCode_X86_##N = C,
RADDBGI_RegisterCode_X86_XList(X)
#undef X
} RADDBG_RegisterCode_X86_Enum;
} RADDBGI_RegisterCode_X86_Enum;
// x64 registers
#define RADDBG_RegisterCode_X64_XList(X) \
#define RADDBGI_RegisterCode_X64_XList(X) \
X(nil, 0) \
X(rax, 1) \
X(rcx, 2) \
@@ -205,48 +205,48 @@ X(fdp, 75) \
X(mxcsr_mask, 76) \
X(COUNT, 77)
typedef enum RADDBG_RegisterCode_X64_Enum{
#define X(N,C) RADDBG_RegisterCode_X64_##N = C,
RADDBG_RegisterCode_X64_XList(X)
typedef enum RADDBGI_RegisterCode_X64_Enum{
#define X(N,C) RADDBGI_RegisterCode_X64_##N = C,
RADDBGI_RegisterCode_X64_XList(X)
#undef X
} RADDBG_RegisterCode_X64_Enum;
} RADDBGI_RegisterCode_X64_Enum;
////////////////////////////////////////////////////////////////
// Format types
// "raddbg\0\0"
#define RADDBG_MAGIC_CONSTANT 0x0000676264646172
#define RADDBG_ENCODING_VERSION 1
#define RADDBGI_MAGIC_CONSTANT 0x0000676264646172
#define RADDBGI_ENCODING_VERSION 1
#define RADDBG_LanguageXList(X) \
#define RADDBGI_LanguageXList(X) \
X(NULL, 0) \
X(C, 1) \
X(CPlusPlus, 2)
typedef RADDBG_U32 RADDBG_Language;
typedef enum RADDBG_LanguageEnum{
#define X(N,C) RADDBG_Language_##N = C,
RADDBG_LanguageXList(X)
typedef RADDBGI_U32 RADDBGI_Language;
typedef enum RADDBGI_LanguageEnum{
#define X(N,C) RADDBGI_Language_##N = C,
RADDBGI_LanguageXList(X)
#undef X
} RADDBG_LanguageEnum;
} RADDBGI_LanguageEnum;
typedef struct RADDBG_Header{
typedef struct RADDBGI_Header{
// identification
RADDBG_U64 magic;
RADDBG_U32 encoding_version;
RADDBGI_U64 magic;
RADDBGI_U32 encoding_version;
// data sections
RADDBG_U32 data_section_off;
RADDBG_U32 data_section_count;
} RADDBG_Header;
RADDBGI_U32 data_section_off;
RADDBGI_U32 data_section_count;
} RADDBGI_Header;
//- 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(TopLevelInfo, 0x0001)\
X(StringData, 0x0002)\
@@ -273,131 +273,131 @@ X(LocationBlocks, 0x0016)\
X(LocationData, 0x0017)\
X(NameMaps, 0x0018)\
Y(PRIMARY_COUNT)\
X(SKIP, RADDBG_DataSectionTag_SECONDARY|0x0000)\
X(LineInfoVoffs, RADDBG_DataSectionTag_SECONDARY|0x0001)\
X(LineInfoData, RADDBG_DataSectionTag_SECONDARY|0x0002)\
X(LineInfoColumns, RADDBG_DataSectionTag_SECONDARY|0x0003)\
X(LineMapNumbers, RADDBG_DataSectionTag_SECONDARY|0x0004)\
X(LineMapRanges, RADDBG_DataSectionTag_SECONDARY|0x0005)\
X(LineMapVoffs, RADDBG_DataSectionTag_SECONDARY|0x0006)\
X(NameMapBuckets, RADDBG_DataSectionTag_SECONDARY|0x0007)\
X(NameMapNodes, RADDBG_DataSectionTag_SECONDARY|0x0008)
X(SKIP, RADDBGI_DataSectionTag_SECONDARY|0x0000)\
X(LineInfoVoffs, RADDBGI_DataSectionTag_SECONDARY|0x0001)\
X(LineInfoData, RADDBGI_DataSectionTag_SECONDARY|0x0002)\
X(LineInfoColumns, RADDBGI_DataSectionTag_SECONDARY|0x0003)\
X(LineMapNumbers, RADDBGI_DataSectionTag_SECONDARY|0x0004)\
X(LineMapRanges, RADDBGI_DataSectionTag_SECONDARY|0x0005)\
X(LineMapVoffs, RADDBGI_DataSectionTag_SECONDARY|0x0006)\
X(NameMapBuckets, RADDBGI_DataSectionTag_SECONDARY|0x0007)\
X(NameMapNodes, RADDBGI_DataSectionTag_SECONDARY|0x0008)
typedef RADDBG_U32 RADDBG_DataSectionTag;
typedef enum RADDBG_DataSectionTagEnum{
#define X(N,C) RADDBG_DataSectionTag_##N = C,
#define Y(N) RADDBG_DataSectionTag_##N,
RADDBG_DataSectionTagXList(X,Y)
typedef RADDBGI_U32 RADDBGI_DataSectionTag;
typedef enum RADDBGI_DataSectionTagEnum{
#define X(N,C) RADDBGI_DataSectionTag_##N = C,
#define Y(N) RADDBGI_DataSectionTag_##N,
RADDBGI_DataSectionTagXList(X,Y)
#undef X
#undef Y
} RADDBG_DataSectionTagEnum;
} RADDBGI_DataSectionTagEnum;
#define RADDBG_DataSectionEncodingXList(X) \
#define RADDBGI_DataSectionEncodingXList(X) \
X(Unpacked, 0)
typedef RADDBG_U32 RADDBG_DataSectionEncoding;
typedef enum RADDBG_DataSectionEncodingEnum{
#define X(N,C) RADDBG_DataSectionEncoding_##N = C,
RADDBG_DataSectionEncodingXList(X)
typedef RADDBGI_U32 RADDBGI_DataSectionEncoding;
typedef enum RADDBGI_DataSectionEncodingEnum{
#define X(N,C) RADDBGI_DataSectionEncoding_##N = C,
RADDBGI_DataSectionEncodingXList(X)
#undef X
} RADDBG_DataSectionEncodingEnum;
} RADDBGI_DataSectionEncodingEnum;
typedef struct RADDBG_DataSection{
RADDBG_DataSectionTag tag;
RADDBG_DataSectionEncoding encoding;
RADDBG_U64 off;
RADDBG_U64 encoded_size;
RADDBG_U64 unpacked_size;
} RADDBG_DataSection;
typedef struct RADDBGI_DataSection{
RADDBGI_DataSectionTag tag;
RADDBGI_DataSectionEncoding encoding;
RADDBGI_U64 off;
RADDBGI_U64 encoded_size;
RADDBGI_U64 unpacked_size;
} RADDBGI_DataSection;
//- common types
typedef struct RADDBG_VMapEntry{
RADDBG_U64 voff;
RADDBG_U64 idx;
} RADDBG_VMapEntry;
typedef struct RADDBGI_VMapEntry{
RADDBGI_U64 voff;
RADDBGI_U64 idx;
} RADDBGI_VMapEntry;
//- top level info
typedef struct RADDBG_TopLevelInfo{
RADDBG_Arch architecture;
RADDBG_U32 exe_name_string_idx;
RADDBG_U64 exe_hash;
RADDBG_U64 voff_max;
} RADDBG_TopLevelInfo;
typedef struct RADDBGI_TopLevelInfo{
RADDBGI_Arch architecture;
RADDBGI_U32 exe_name_string_idx;
RADDBGI_U64 exe_hash;
RADDBGI_U64 voff_max;
} RADDBGI_TopLevelInfo;
//- binary sections
typedef RADDBG_U32 RADDBG_BinarySectionFlags;
typedef enum RADDBG_BinarySectionFlagsEnum{
RADDBG_BinarySectionFlag_Read = (1 << 0),
RADDBG_BinarySectionFlag_Write = (1 << 1),
RADDBG_BinarySectionFlag_Execute = (1 << 2)
} RADDBG_BinarySectionFlagsEnum;
typedef RADDBGI_U32 RADDBGI_BinarySectionFlags;
typedef enum RADDBGI_BinarySectionFlagsEnum{
RADDBGI_BinarySectionFlag_Read = (1 << 0),
RADDBGI_BinarySectionFlag_Write = (1 << 1),
RADDBGI_BinarySectionFlag_Execute = (1 << 2)
} RADDBGI_BinarySectionFlagsEnum;
typedef struct RADDBG_BinarySection{
RADDBG_U32 name_string_idx;
RADDBG_BinarySectionFlags flags;
RADDBG_U64 voff_first;
RADDBG_U64 voff_opl;
RADDBG_U64 foff_first;
RADDBG_U64 foff_opl;
} RADDBG_BinarySection;
typedef struct RADDBGI_BinarySection{
RADDBGI_U32 name_string_idx;
RADDBGI_BinarySectionFlags flags;
RADDBGI_U64 voff_first;
RADDBGI_U64 voff_opl;
RADDBGI_U64 foff_first;
RADDBGI_U64 foff_opl;
} RADDBGI_BinarySection;
//- file & file system info
typedef struct RADDBG_FilePathNode{
RADDBG_U32 name_string_idx;
RADDBG_U32 parent_path_node;
RADDBG_U32 first_child;
RADDBG_U32 next_sibling;
RADDBG_U32 source_file_idx;
} RADDBG_FilePathNode;
typedef struct RADDBGI_FilePathNode{
RADDBGI_U32 name_string_idx;
RADDBGI_U32 parent_path_node;
RADDBGI_U32 first_child;
RADDBGI_U32 next_sibling;
RADDBGI_U32 source_file_idx;
} RADDBGI_FilePathNode;
typedef struct RADDBG_SourceFile{
RADDBG_U32 file_path_node_idx;
typedef struct RADDBGI_SourceFile{
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
// (line_map_nums * line_number) -> (nil | index)
// (line_map_data * index) -> (range)
// (line_map_voff_data * range) -> (array(voff))
RADDBG_U32 line_map_count;
RADDBG_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)
RADDBG_U32 line_map_voff_data_idx; // U64[...] (idx by line_map_range_data)
} RADDBG_SourceFile;
RADDBGI_U32 line_map_count;
RADDBGI_U32 line_map_nums_data_idx; // U32[line_map_count] (sorted - not closed ranges)
RADDBGI_U32 line_map_range_data_idx; // U32[line_map_count + 1] (pairs form ranges)
RADDBGI_U32 line_map_voff_data_idx; // U64[...] (idx by line_map_range_data)
} RADDBGI_SourceFile;
//- units & line info
typedef struct RADDBG_Unit{
RADDBG_U32 unit_name_string_idx;
RADDBG_U32 compiler_name_string_idx;
RADDBG_U32 source_file_path_node;
RADDBG_U32 object_file_path_node;
RADDBG_U32 archive_file_path_node;
RADDBG_U32 build_path_node;
RADDBG_Language language;
typedef struct RADDBGI_Unit{
RADDBGI_U32 unit_name_string_idx;
RADDBGI_U32 compiler_name_string_idx;
RADDBGI_U32 source_file_path_node;
RADDBGI_U32 object_file_path_node;
RADDBGI_U32 archive_file_path_node;
RADDBGI_U32 build_path_node;
RADDBGI_Language language;
// usage of line info to go from voff to file & line number:
// (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)
RADDBG_U32 line_info_data_idx; // RADDBG_Line[line_info_count]
RADDBG_U32 line_info_col_data_idx; // RADDBG_Col[line_info_count]
RADDBG_U32 line_info_count;
} RADDBG_Unit;
RADDBGI_U32 line_info_voffs_data_idx; // U64[line_info_count + 1] (sorted ranges)
RADDBGI_U32 line_info_data_idx; // RADDBGI_Line[line_info_count]
RADDBGI_U32 line_info_col_data_idx; // RADDBGI_Col[line_info_count]
RADDBGI_U32 line_info_count;
} RADDBGI_Unit;
typedef struct RADDBG_Line{
RADDBG_U32 file_idx;
RADDBG_U32 line_num;
} RADDBG_Line;
typedef struct RADDBGI_Line{
RADDBGI_U32 file_idx;
RADDBGI_U32 line_num;
} RADDBGI_Line;
typedef struct RADDBG_Column{
RADDBG_U16 col_first;
RADDBG_U16 col_opl;
} RADDBG_Column;
typedef struct RADDBGI_Column{
RADDBGI_U16 col_first;
RADDBGI_U16 col_opl;
} RADDBGI_Column;
//- type info
@@ -405,7 +405,7 @@ typedef struct RADDBG_Column{
// X(name,code) - defines a primary code
// XZ(name,code size) - defines a primary code & associates a size
// Y(alias_name,name) - defines an alias for bookends
#define RADDBG_TypeKindXList(X,XZ,Y)\
#define RADDBGI_TypeKindXList(X,XZ,Y)\
X(NULL, 0x0000) \
\
XZ(Void, 0x0001, 0) Y(FirstBuiltIn, Void) \
@@ -466,23 +466,23 @@ Y(LastUserDefined, IncompleteEnum) \
X(Bitfield, 0xF000) \
X(Variadic, 0xF001)
typedef RADDBG_U16 RADDBG_TypeKind;
typedef enum RADDBG_TypeKindEnum{
typedef RADDBGI_U16 RADDBGI_TypeKind;
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 Y(alias_name,name) RADDBG_TypeKind_##alias_name = RADDBG_TypeKind_##name,
RADDBG_TypeKindXList(X,XZ,Y)
#define Y(alias_name,name) RADDBGI_TypeKind_##alias_name = RADDBGI_TypeKind_##name,
RADDBGI_TypeKindXList(X,XZ,Y)
#undef X
#undef XZ
#undef Y
} RADDBG_TypeKindEnum;
} RADDBGI_TypeKindEnum;
typedef RADDBG_U16 RADDBG_TypeModifierFlags;
typedef RADDBGI_U16 RADDBGI_TypeModifierFlags;
enum{
RADDBG_TypeModifierFlag_Const = (1 << 0),
RADDBG_TypeModifierFlag_Volatile = (1 << 1),
RADDBGI_TypeModifierFlag_Const = (1 << 0),
RADDBGI_TypeModifierFlag_Volatile = (1 << 1),
};
// 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
// attached through a "UDT" though.
typedef struct RADDBG_TypeNode{
RADDBG_TypeKind kind;
// when kind is 'Modifier' -> RADDBG_TypeModifierFlags
RADDBG_U16 flags;
typedef struct RADDBGI_TypeNode{
RADDBGI_TypeKind kind;
// when kind is 'Modifier' -> RADDBGI_TypeModifierFlags
RADDBGI_U16 flags;
RADDBG_U32 byte_size;
RADDBGI_U32 byte_size;
union{
// kind is 'built-in'
struct{
RADDBG_U32 name_string_idx;
RADDBGI_U32 name_string_idx;
} built_in;
// kind is 'constructed'
struct{
RADDBG_U32 direct_type_idx;
RADDBG_U32 count;
RADDBGI_U32 direct_type_idx;
RADDBGI_U32 count;
union{
// when kind is 'Function' or 'Method'
RADDBG_U32 param_idx_run_first;
RADDBGI_U32 param_idx_run_first;
// when kind is 'MemberPtr'
RADDBG_U32 owner_type_idx;
RADDBGI_U32 owner_type_idx;
};
} constructed;
// kind is 'user defined'
struct{
RADDBG_U32 name_string_idx;
RADDBG_U32 direct_type_idx;
RADDBG_U32 udt_idx;
RADDBGI_U32 name_string_idx;
RADDBGI_U32 direct_type_idx;
RADDBGI_U32 udt_idx;
} user_defined;
// (kind = Bitfield)
struct{
RADDBG_U32 off;
RADDBG_U32 size;
RADDBGI_U32 off;
RADDBGI_U32 size;
} bitfield;
};
} RADDBG_TypeNode;
} RADDBGI_TypeNode;
typedef RADDBG_U32 RADDBG_UserDefinedTypeFlags;
typedef RADDBGI_U32 RADDBGI_UserDefinedTypeFlags;
enum{
RADDBG_UserDefinedTypeFlag_EnumMembers = (1 << 0),
RADDBGI_UserDefinedTypeFlag_EnumMembers = (1 << 0),
};
typedef struct RADDBG_UDT{
RADDBG_U32 self_type_idx;
RADDBG_UserDefinedTypeFlags flags;
typedef struct RADDBGI_UDT{
RADDBGI_U32 self_type_idx;
RADDBGI_UserDefinedTypeFlags flags;
// when EnumMembers flag is set, indexes into enum "enum_members" instead of "members"
RADDBG_U32 member_first;
RADDBG_U32 member_count;
RADDBGI_U32 member_first;
RADDBGI_U32 member_count;
RADDBG_U32 file_idx;
RADDBG_U32 line;
RADDBG_U32 col;
} RADDBG_UDT;
RADDBGI_U32 file_idx;
RADDBGI_U32 line;
RADDBGI_U32 col;
} RADDBGI_UDT;
#define RADDBG_MemberKindXList(X) \
#define RADDBGI_MemberKindXList(X) \
X(NULL, 0x0000) \
X(DataField, 0x0001) \
X(StaticData, 0x0002) \
@@ -563,12 +563,12 @@ X(Base, 0x0201) \
X(VirtualBase, 0x0202) \
X(NestedType, 0x0300)
typedef RADDBG_U16 RADDBG_MemberKind;
typedef enum RADDBG_MemberKindEnum{
#define X(N,C) RADDBG_MemberKind_##N = C,
RADDBG_MemberKindXList(X)
typedef RADDBGI_U16 RADDBGI_MemberKind;
typedef enum RADDBGI_MemberKindEnum{
#define X(N,C) RADDBGI_MemberKind_##N = C,
RADDBGI_MemberKindXList(X)
#undef X
} RADDBG_MemberKindEnum;
} RADDBGI_MemberKindEnum;
// TODO(allen): need a way to equip methods and some virtual methods
// with procedure symbol information. I'm thinking a seperate data
@@ -578,141 +578,141 @@ typedef enum RADDBG_MemberKindEnum{
// like 'associate_method_to_proc' that can be used *after* both the
// method and proc are known, rather than one that forces us to know
// the association when constructing the member data.
typedef struct RADDBG_Member{
RADDBG_MemberKind kind;
RADDBG_U16 __unused__;
typedef struct RADDBGI_Member{
RADDBGI_MemberKind kind;
RADDBGI_U16 __unused__;
RADDBG_U32 name_string_idx;
RADDBG_U32 type_idx;
RADDBG_U32 off;
} RADDBG_Member;
RADDBGI_U32 name_string_idx;
RADDBGI_U32 type_idx;
RADDBGI_U32 off;
} RADDBGI_Member;
typedef struct RADDBG_EnumMember{
RADDBG_U32 name_string_idx;
RADDBG_U32 __unused__;
RADDBG_U64 val;
} RADDBG_EnumMember;
typedef struct RADDBGI_EnumMember{
RADDBGI_U32 name_string_idx;
RADDBGI_U32 __unused__;
RADDBGI_U64 val;
} RADDBGI_EnumMember;
//- symbol info
typedef RADDBG_U32 RADDBG_LinkFlags;
typedef RADDBGI_U32 RADDBGI_LinkFlags;
enum{
RADDBG_LinkFlag_External = (1 << 0),
RADDBGI_LinkFlag_External = (1 << 0),
// NOTE: Scope flags are mutually exclusive.
// A symbol is either global scoped, type scoped, or procedure scoped.
RADDBG_LinkFlag_TypeScoped = (1 << 1),
RADDBG_LinkFlag_ProcScoped = (1 << 2),
RADDBGI_LinkFlag_TypeScoped = (1 << 1),
RADDBGI_LinkFlag_ProcScoped = (1 << 2),
};
typedef struct RADDBG_GlobalVariable{
RADDBG_U32 name_string_idx;
typedef struct RADDBGI_GlobalVariable{
RADDBGI_U32 name_string_idx;
// NOTE: "global variables" can be scoped in *any* way. The scope flags here refer to
// *namespace* scoping. "global variables" are all in the data section of the
// final exe/dll type file, so they are "global" in the life-time sense of the
// word. In the namespace sense of the word, they can be scoped globally, by type,
// or by procedure.
RADDBG_LinkFlags link_flags;
RADDBG_U64 voff;
RADDBG_U32 type_idx;
RADDBGI_LinkFlags link_flags;
RADDBGI_U64 voff;
RADDBGI_U32 type_idx;
// container_idx: UDT for "TypeScoped", Procedure for "ProcScoped"
RADDBG_U32 container_idx;
} RADDBG_GlobalVariable;
RADDBGI_U32 container_idx;
} RADDBGI_GlobalVariable;
typedef struct RADDBG_ThreadVariable{
RADDBG_U32 name_string_idx;
typedef struct RADDBGI_ThreadVariable{
RADDBGI_U32 name_string_idx;
// NOTE: See the note in GlobalVariable regarding scoping. The same concept applies here.
RADDBG_LinkFlags link_flags;
RADDBG_U32 tls_off;
RADDBG_U32 type_idx;
RADDBGI_LinkFlags link_flags;
RADDBGI_U32 tls_off;
RADDBGI_U32 type_idx;
// container_idx: UDT for "TypeScoped", Procedure for "ProcScoped"
RADDBG_U32 container_idx;
} RADDBG_ThreadVariable;
RADDBGI_U32 container_idx;
} RADDBGI_ThreadVariable;
typedef struct RADDBG_Procedure{
RADDBG_U32 name_string_idx;
RADDBG_U32 link_name_string_idx;
typedef struct RADDBGI_Procedure{
RADDBGI_U32 name_string_idx;
RADDBGI_U32 link_name_string_idx;
// NOTE: See the note in GlobalVariable regarding scoping. The same concept applies here.
RADDBG_LinkFlags link_flags;
RADDBG_U32 type_idx;
RADDBG_U32 root_scope_idx;
RADDBGI_LinkFlags link_flags;
RADDBGI_U32 type_idx;
RADDBGI_U32 root_scope_idx;
// container_idx: UDT for "TypeScoped", Procedure for "ProcScoped"
RADDBG_U32 container_idx;
} RADDBG_Procedure;
RADDBGI_U32 container_idx;
} RADDBGI_Procedure;
typedef struct RADDBG_Scope{
RADDBG_U32 proc_idx;
RADDBG_U32 parent_scope_idx;
RADDBG_U32 first_child_scope_idx;
RADDBG_U32 next_sibling_scope_idx;
typedef struct RADDBGI_Scope{
RADDBGI_U32 proc_idx;
RADDBGI_U32 parent_scope_idx;
RADDBGI_U32 first_child_scope_idx;
RADDBGI_U32 next_sibling_scope_idx;
RADDBG_U32 voff_range_first;
RADDBG_U32 voff_range_opl;
RADDBGI_U32 voff_range_first;
RADDBGI_U32 voff_range_opl;
// indexes into "locals"
RADDBG_U32 local_first;
RADDBG_U32 local_count;
RADDBGI_U32 local_first;
RADDBGI_U32 local_count;
RADDBG_U32 static_local_idx_run_first;
RADDBG_U32 static_local_count;
RADDBGI_U32 static_local_idx_run_first;
RADDBGI_U32 static_local_count;
// TODO(allen): attach less common scope-relevant info
} RADDBG_Scope;
} RADDBGI_Scope;
typedef RADDBG_U32 RADDBG_LocalKind;
typedef RADDBGI_U32 RADDBGI_LocalKind;
typedef enum{
RADDBG_LocalKind_NULL,
RADDBG_LocalKind_Parameter,
RADDBG_LocalKind_Variable,
RADDBG_LocalKind_COUNT
} RADDBG_LocalKindEnum;
RADDBGI_LocalKind_NULL,
RADDBGI_LocalKind_Parameter,
RADDBGI_LocalKind_Variable,
RADDBGI_LocalKind_COUNT
} RADDBGI_LocalKindEnum;
typedef struct RADDBG_Local{
RADDBG_LocalKind kind;
RADDBG_U32 name_string_idx;
RADDBG_U64 type_idx;
typedef struct RADDBGI_Local{
RADDBGI_LocalKind kind;
RADDBGI_U32 name_string_idx;
RADDBGI_U64 type_idx;
// indexes into "location_blocks"
RADDBG_U32 location_first;
RADDBG_U32 location_opl;
} RADDBG_Local;
RADDBGI_U32 location_first;
RADDBGI_U32 location_opl;
} RADDBGI_Local;
typedef struct RADDBG_LocationBlock{
RADDBG_U32 scope_off_first;
RADDBG_U32 scope_off_opl;
RADDBG_U32 location_data_off;
} RADDBG_LocationBlock;
typedef struct RADDBGI_LocationBlock{
RADDBGI_U32 scope_off_first;
RADDBGI_U32 scope_off_opl;
RADDBGI_U32 location_data_off;
} RADDBGI_LocationBlock;
typedef RADDBG_U8 RADDBG_LocationKind;
typedef RADDBGI_U8 RADDBGI_LocationKind;
typedef enum{
RADDBG_LocationKind_NULL,
RADDBG_LocationKind_AddrBytecodeStream,
RADDBG_LocationKind_ValBytecodeStream,
RADDBG_LocationKind_AddrRegisterPlusU16,
RADDBG_LocationKind_AddrAddrRegisterPlusU16,
RADDBG_LocationKind_ValRegister,
RADDBG_LocationKind_COUNT
} RADDBG_LocationKindEnum;
RADDBGI_LocationKind_NULL,
RADDBGI_LocationKind_AddrBytecodeStream,
RADDBGI_LocationKind_ValBytecodeStream,
RADDBGI_LocationKind_AddrRegisterPlusU16,
RADDBGI_LocationKind_AddrAddrRegisterPlusU16,
RADDBGI_LocationKind_ValRegister,
RADDBGI_LocationKind_COUNT
} RADDBGI_LocationKindEnum;
typedef struct RADDBG_LocationBytecodeStream{
RADDBG_LocationKind kind;
// [... 0] null terminated byte sequence RADDBG_EvalBytecodeStream
} RADDBG_LocationBytecodeStream;
typedef struct RADDBGI_LocationBytecodeStream{
RADDBGI_LocationKind kind;
// [... 0] null terminated byte sequence RADDBGI_EvalBytecodeStream
} RADDBGI_LocationBytecodeStream;
typedef struct RADDBG_LocationRegisterPlusU16{
RADDBG_LocationKind kind;
RADDBG_RegisterCode register_code;
RADDBG_U16 offset;
} RADDBG_LocationRegisterPlusU16;
typedef struct RADDBGI_LocationRegisterPlusU16{
RADDBGI_LocationKind kind;
RADDBGI_RegisterCode register_code;
RADDBGI_U16 offset;
} RADDBGI_LocationRegisterPlusU16;
typedef struct RADDBG_LocationRegister{
RADDBG_LocationKind kind;
RADDBG_RegisterCode register_code;
} RADDBG_LocationRegister;
typedef struct RADDBGI_LocationRegister{
RADDBGI_LocationKind kind;
RADDBGI_RegisterCode register_code;
} RADDBGI_LocationRegister;
//- name map types
#define RADDBG_NameMapXList(X)\
#define RADDBGI_NameMapXList(X)\
X(NULL, 0)\
X(GlobalVariables, 1)\
X(ThreadVariables, 2)\
@@ -721,42 +721,42 @@ X(Types, 4)\
X(LinkNameProcedures, 5)\
X(NormalSourcePaths, 6)
typedef RADDBG_U32 RADDBG_NameMapKind;
typedef enum RADDBG_NameMapKindEnum{
#define X(N,C) RADDBG_NameMapKind_##N = C,
RADDBG_NameMapXList(X)
typedef RADDBGI_U32 RADDBGI_NameMapKind;
typedef enum RADDBGI_NameMapKindEnum{
#define X(N,C) RADDBGI_NameMapKind_##N = C,
RADDBGI_NameMapXList(X)
#undef X
RADDBG_NameMapKind_COUNT
} RADDBG_NameMapKindEnum;
RADDBGI_NameMapKind_COUNT
} RADDBGI_NameMapKindEnum;
// TODO(allen): documentation here for the hashing and probing strategy for this table
typedef struct RADDBG_NameMap{
RADDBG_NameMapKind kind;
RADDBG_U32 bucket_data_idx;
RADDBG_U32 node_data_idx;
} RADDBG_NameMap;
typedef struct RADDBGI_NameMap{
RADDBGI_NameMapKind kind;
RADDBGI_U32 bucket_data_idx;
RADDBGI_U32 node_data_idx;
} RADDBGI_NameMap;
typedef struct RADDBG_NameMapBucket{
RADDBG_U32 first_node;
RADDBG_U32 node_count;
} RADDBG_NameMapBucket;
typedef struct RADDBGI_NameMapBucket{
RADDBGI_U32 first_node;
RADDBGI_U32 node_count;
} RADDBGI_NameMapBucket;
typedef struct RADDBG_NameMapNode{
RADDBG_U32 string_idx;
RADDBG_U32 match_count;
typedef struct RADDBGI_NameMapNode{
RADDBGI_U32 string_idx;
RADDBGI_U32 match_count;
// NOTE: if (match_count == 1) then this is the index of the matching item
// if (match_count > 1) then this is the first for an index run of all the matches
RADDBG_U32 match_idx_or_idx_run_first;
} RADDBG_NameMapNode;
RADDBGI_U32 match_idx_or_idx_run_first;
} RADDBGI_NameMapNode;
////////////////////////////////
// Eval Bytecode
// (Name, decodeN, popN, pushN)
#define RADDBG_EvalOpXList(X)\
#define RADDBGI_EvalOpXList(X)\
X(Stop, 0, 0, 0)\
X(Noop, 0, 0, 0)\
X(Cond, 1, 1, 0)\
@@ -803,7 +803,7 @@ X(Pop, 0, 1, 0)\
X(Insert, 1, 0, 0)
// (Name)
#define RADDBG_EvalTypeGroupXList(X)\
#define RADDBGI_EvalTypeGroupXList(X)\
X(Other)\
X(U)\
X(S)\
@@ -811,7 +811,7 @@ X(F32)\
X(F64)
// (Name, error-message)
#define RADDBG_EvalConversionKindXList(X)\
#define RADDBGI_EvalConversionKindXList(X)\
X(Noop, "")\
X(Legal, "")\
X(OtherToOther, "cannot convert between these types")\
@@ -819,7 +819,7 @@ X(ToOther, "cannot convert to this type")\
X(FromOther, "cannot convert this type")
// 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)\
Xe(U)\
@@ -834,7 +834,7 @@ Xb(F64) Y(F64)\
Xe(F64)
// 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)\
Xe(Noop)\
@@ -855,69 +855,65 @@ Xb(FromOther) Y(Other, U) Y(Other, S) Y(Other, F32) Y(Other, F64)\
Xe(FromOther)
// 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
typedef RADDBG_U8 RADDBG_EvalOp;
typedef RADDBGI_U8 RADDBGI_EvalOp;
typedef enum RADDBG_EvalOpEnum{
#define X(N,dec,pop,push) RADDBG_EvalOp_##N,
RADDBG_EvalOpXList(X)
typedef enum RADDBGI_EvalOpEnum{
#define X(N,dec,pop,push) RADDBGI_EvalOp_##N,
RADDBGI_EvalOpXList(X)
#undef X
RADDBG_EvalOp_COUNT
} RADDBG_EvalOpEnum;
RADDBGI_EvalOp_COUNT
} RADDBGI_EvalOpEnum;
typedef RADDBG_U8 RADDBG_EvalTypeGroup;
typedef RADDBGI_U8 RADDBGI_EvalTypeGroup;
typedef enum RADDBG_EvalTypeGroupEnum{
#define X(N) RADDBG_EvalTypeGroup_##N,
RADDBG_EvalTypeGroupXList(X)
typedef enum RADDBGI_EvalTypeGroupEnum{
#define X(N) RADDBGI_EvalTypeGroup_##N,
RADDBGI_EvalTypeGroupXList(X)
#undef X
RADDBG_EvalTypeGroup_COUNT,
} RADDBG_EvalTypeGroupEnum;
RADDBGI_EvalTypeGroup_COUNT,
} RADDBGI_EvalTypeGroupEnum;
typedef RADDBG_U8 RADDBG_EvalConversionKind;
typedef RADDBGI_U8 RADDBGI_EvalConversionKind;
typedef enum RADDBG_EvalConversionKindEnum{
#define X(N,msg) RADDBG_EvalConversionKind_##N,
RADDBG_EvalConversionKindXList(X)
typedef enum RADDBGI_EvalConversionKindEnum{
#define X(N,msg) RADDBGI_EvalConversionKind_##N,
RADDBGI_EvalConversionKindXList(X)
#undef X
RADDBG_EvalConversionKind_COUNT,
} RADDBG_EvalConversionKindEnum;
RADDBGI_EvalConversionKind_COUNT,
} RADDBGI_EvalConversionKindEnum;
//- eval data tables
#define RADDBG_EVAL_CTRLBITS(decodeN,popN,pushN) ((decodeN) | ((popN) << 4) | ((pushN) << 6))
#define RADDBG_DECODEN_FROM_CTRLBITS(ctrlbits) ((ctrlbits) & 0xf)
#define RADDBG_POPN_FROM_CTRLBITS(ctrlbits) (((ctrlbits) >> 4) & 0x3)
#define RADDBG_PUSHN_FROM_CTRLBITS(ctrlbits) (((ctrlbits) >> 6) & 0x3)
#define RADDBGI_EVAL_CTRLBITS(decodeN,popN,pushN) ((decodeN) | ((popN) << 4) | ((pushN) << 6))
#define RADDBGI_DECODEN_FROM_CTRLBITS(ctrlbits) ((ctrlbits) & 0xf)
#define RADDBGI_POPN_FROM_CTRLBITS(ctrlbits) (((ctrlbits) >> 4) & 0x3)
#define RADDBGI_PUSHN_FROM_CTRLBITS(ctrlbits) (((ctrlbits) >> 6) & 0x3)
static RADDBG_U8 raddbg_eval_opcode_ctrlbits[] = {
#define X(Name, decodeN, popN, pushN) RADDBG_EVAL_CTRLBITS(decodeN,popN,pushN),
RADDBG_EvalOpXList(X)
static RADDBGI_U8 raddbgi_eval_opcode_ctrlbits[] = {
#define X(Name, decodeN, popN, pushN) RADDBGI_EVAL_CTRLBITS(decodeN,popN,pushN),
RADDBGI_EvalOpXList(X)
#undef X
};
////////////////////////////////
// Functions
RADDBG_PROC RADDBG_U64 raddbg_hash(RADDBG_U8 *ptr, RADDBG_U64 size);
RADDBG_PROC RADDBG_U32 raddbg_size_from_basic_type_kind(RADDBG_TypeKind kind);
RADDBG_PROC RADDBG_U32 raddbg_addr_size_from_arch(RADDBG_Arch arch);
RADDBGI_PROC RADDBGI_U64 raddbgi_hash(RADDBGI_U8 *ptr, RADDBGI_U64 size);
RADDBGI_PROC RADDBGI_U32 raddbgi_size_from_basic_type_kind(RADDBGI_TypeKind kind);
RADDBGI_PROC RADDBGI_U32 raddbgi_addr_size_from_arch(RADDBGI_Arch arch);
//- eval helpers
RADDBG_PROC RADDBG_EvalConversionKind
raddbg_eval_conversion_rule(RADDBG_EvalTypeGroup in, RADDBG_EvalTypeGroup out);
RADDBG_PROC RADDBG_U8*
raddbg_eval_conversion_message(RADDBG_EvalConversionKind conversion_kind, RADDBG_U64 *lennout);
RADDBGI_PROC RADDBGI_EvalConversionKind raddbgi_eval_conversion_rule(RADDBGI_EvalTypeGroup in, RADDBGI_EvalTypeGroup out);
RADDBGI_PROC RADDBGI_U8* raddbgi_eval_conversion_message(RADDBGI_EvalConversionKind conversion_kind, RADDBGI_U64 *lennout);
RADDBGI_PROC RADDBGI_S32 raddbgi_eval_opcode_type_compatible(RADDBGI_EvalOp op, RADDBGI_EvalTypeGroup group);
RADDBG_PROC RADDBG_S32
raddbg_eval_opcode_type_compatible(RADDBG_EvalOp op, RADDBG_EvalTypeGroup group);
#endif // RADDBG_FORMAT_H
#endif // RADDBGI_FORMAT_H
+234 -234
View File
@@ -4,105 +4,105 @@
////////////////////////////////
//~ RADDBG Parse API
RADDBG_PROC RADDBG_ParseStatus
raddbg_parse(RADDBG_U8 *data, RADDBG_U64 size, RADDBG_Parsed *out){
RADDBG_ParseStatus result = RADDBG_ParseStatus_Good;
RADDBGI_PROC RADDBGI_ParseStatus
raddbgi_parse(RADDBGI_U8 *data, RADDBGI_U64 size, RADDBGI_Parsed *out){
RADDBGI_ParseStatus result = RADDBGI_ParseStatus_Good;
// out header
RADDBG_Header *hdr = 0;
RADDBGI_Header *hdr = 0;
{
if (sizeof(*hdr) <= size){
hdr = (RADDBG_Header*)data;
hdr = (RADDBGI_Header*)data;
}
// (errors)
if (hdr == 0 || hdr->magic != RADDBG_MAGIC_CONSTANT){
if (hdr == 0 || hdr->magic != RADDBGI_MAGIC_CONSTANT){
hdr = 0;
result = RADDBG_ParseStatus_HeaderDoesNotMatch;
result = RADDBGI_ParseStatus_HeaderDoesNotMatch;
}
if (hdr != 0 && hdr->encoding_version != 1){
hdr = 0;
result = RADDBG_ParseStatus_UnsupportedVersionNumber;
result = RADDBGI_ParseStatus_UnsupportedVersionNumber;
}
}
// out data sections
RADDBG_DataSection *dsecs = 0;
RADDBG_U32 dsec_count = 0;
RADDBGI_DataSection *dsecs = 0;
RADDBGI_U32 dsec_count = 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){
dsecs = (RADDBG_DataSection*)(data + hdr->data_section_off);
dsecs = (RADDBGI_DataSection*)(data + hdr->data_section_off);
dsec_count = hdr->data_section_count;
}
// (errors)
if (dsecs == 0){
result = RADDBG_ParseStatus_InvalidDataSecionLayout;
result = RADDBGI_ParseStatus_InvalidDataSecionLayout;
}
}
// extract primary data section indexes
RADDBG_U32 dsec_idx[RADDBG_DataSectionTag_PRIMARY_COUNT] = {0};
if (result == RADDBG_ParseStatus_Good){
RADDBG_DataSection *sec_ptr = dsecs;
for (RADDBG_U32 i = 0; i < dsec_count; i += 1, sec_ptr += 1){
if (sec_ptr->tag < RADDBG_DataSectionTag_PRIMARY_COUNT){
RADDBGI_U32 dsec_idx[RADDBGI_DataSectionTag_PRIMARY_COUNT] = {0};
if (result == RADDBGI_ParseStatus_Good){
RADDBGI_DataSection *sec_ptr = dsecs;
for (RADDBGI_U32 i = 0; i < dsec_count; i += 1, sec_ptr += 1){
if (sec_ptr->tag < RADDBGI_DataSectionTag_PRIMARY_COUNT){
dsec_idx[sec_ptr->tag] = i;
}
}
}
// fill out data block (part 1)
if (result == RADDBG_ParseStatus_Good){
if (result == RADDBGI_ParseStatus_Good){
out->raw_data = data;
out->raw_data_size = size;
out->dsecs = dsecs;
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 string table
RADDBG_U8 *string_data = 0;
RADDBG_U64 string_opl = 0;
RADDBG_U32 *string_offs = 0;
RADDBG_U64 string_count = 0;
if (result == RADDBG_ParseStatus_Good){
raddbg_parse__extract_primary(out, string_data, &string_opl,
RADDBG_DataSectionTag_StringData);
RADDBGI_U8 *string_data = 0;
RADDBGI_U64 string_opl = 0;
RADDBGI_U32 *string_offs = 0;
RADDBGI_U64 string_count = 0;
if (result == RADDBGI_ParseStatus_Good){
raddbgi_parse__extract_primary(out, string_data, &string_opl,
RADDBGI_DataSectionTag_StringData);
RADDBG_U64 table_entry_count = 0;
raddbg_parse__extract_primary(out, string_offs, &table_entry_count,
RADDBG_DataSectionTag_StringTable);
RADDBGI_U64 table_entry_count = 0;
raddbgi_parse__extract_primary(out, string_offs, &table_entry_count,
RADDBGI_DataSectionTag_StringTable);
if (table_entry_count > 0){
string_count = table_entry_count - 1;
}
// (errors)
if (string_data == 0){
result = RADDBG_ParseStatus_MissingStringDataSection;
result = RADDBGI_ParseStatus_MissingStringDataSection;
}
else if (string_offs == 0){
result = RADDBG_ParseStatus_MissingStringTableSection;
result = RADDBGI_ParseStatus_MissingStringTableSection;
}
}
// out index runs
RADDBG_U32 *idx_run_data = 0;
RADDBG_U64 idx_run_count = 0;
if (result == RADDBG_ParseStatus_Good){
raddbg_parse__extract_primary(out, idx_run_data, &idx_run_count,
RADDBG_DataSectionTag_IndexRuns);
RADDBGI_U32 *idx_run_data = 0;
RADDBGI_U64 idx_run_count = 0;
if (result == RADDBGI_ParseStatus_Good){
raddbgi_parse__extract_primary(out, idx_run_data, &idx_run_count,
RADDBGI_DataSectionTag_IndexRuns);
// (errors)
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)
out->string_data = string_data;
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;
{
RADDBG_TopLevelInfo *tli = 0;
RADDBG_U64 dummy = 0;
raddbg_parse__extract_primary(out, tli, &dummy, RADDBG_DataSectionTag_TopLevelInfo);
RADDBGI_TopLevelInfo *tli = 0;
RADDBGI_U64 dummy = 0;
raddbgi_parse__extract_primary(out, tli, &dummy, RADDBGI_DataSectionTag_TopLevelInfo);
if (dummy != 1){
tli = 0;
}
out->top_level_info = tli;
}
raddbg_parse__extract_primary(out, out->binary_sections, &out->binary_sections_count,
RADDBG_DataSectionTag_BinarySections);
raddbgi_parse__extract_primary(out, out->binary_sections, &out->binary_sections_count,
RADDBGI_DataSectionTag_BinarySections);
raddbg_parse__extract_primary(out, out->file_paths, &out->file_paths_count,
RADDBG_DataSectionTag_FilePathNodes);
raddbgi_parse__extract_primary(out, out->file_paths, &out->file_paths_count,
RADDBGI_DataSectionTag_FilePathNodes);
raddbg_parse__extract_primary(out, out->source_files, &out->source_files_count,
RADDBG_DataSectionTag_SourceFiles);
raddbgi_parse__extract_primary(out, out->source_files, &out->source_files_count,
RADDBGI_DataSectionTag_SourceFiles);
raddbg_parse__extract_primary(out, out->units, &out->units_count,
RADDBG_DataSectionTag_Units);
raddbgi_parse__extract_primary(out, out->units, &out->units_count,
RADDBGI_DataSectionTag_Units);
raddbg_parse__extract_primary(out, out->unit_vmap, &out->unit_vmap_count,
RADDBG_DataSectionTag_UnitVmap);
raddbgi_parse__extract_primary(out, out->unit_vmap, &out->unit_vmap_count,
RADDBGI_DataSectionTag_UnitVmap);
raddbg_parse__extract_primary(out, out->unit_vmap, &out->unit_vmap_count,
RADDBG_DataSectionTag_UnitVmap);
raddbgi_parse__extract_primary(out, out->unit_vmap, &out->unit_vmap_count,
RADDBGI_DataSectionTag_UnitVmap);
raddbg_parse__extract_primary(out, out->type_nodes, &out->type_nodes_count,
RADDBG_DataSectionTag_TypeNodes);
raddbgi_parse__extract_primary(out, out->type_nodes, &out->type_nodes_count,
RADDBGI_DataSectionTag_TypeNodes);
raddbg_parse__extract_primary(out, out->udts, &out->udts_count,
RADDBG_DataSectionTag_UDTs);
raddbgi_parse__extract_primary(out, out->udts, &out->udts_count,
RADDBGI_DataSectionTag_UDTs);
raddbg_parse__extract_primary(out, out->members, &out->members_count,
RADDBG_DataSectionTag_Members);
raddbgi_parse__extract_primary(out, out->members, &out->members_count,
RADDBGI_DataSectionTag_Members);
raddbg_parse__extract_primary(out, out->enum_members, &out->enum_members_count,
RADDBG_DataSectionTag_EnumMembers);
raddbgi_parse__extract_primary(out, out->enum_members, &out->enum_members_count,
RADDBGI_DataSectionTag_EnumMembers);
raddbg_parse__extract_primary(out, out->global_variables, &out->global_variables_count,
RADDBG_DataSectionTag_GlobalVariables);
raddbgi_parse__extract_primary(out, out->global_variables, &out->global_variables_count,
RADDBGI_DataSectionTag_GlobalVariables);
raddbg_parse__extract_primary(out, out->global_vmap, &out->global_vmap_count,
RADDBG_DataSectionTag_GlobalVmap);
raddbgi_parse__extract_primary(out, out->global_vmap, &out->global_vmap_count,
RADDBGI_DataSectionTag_GlobalVmap);
raddbg_parse__extract_primary(out, out->thread_variables, &out->thread_variables_count,
RADDBG_DataSectionTag_ThreadVariables);
raddbgi_parse__extract_primary(out, out->thread_variables, &out->thread_variables_count,
RADDBGI_DataSectionTag_ThreadVariables);
raddbg_parse__extract_primary(out, out->procedures, &out->procedures_count,
RADDBG_DataSectionTag_Procedures);
raddbgi_parse__extract_primary(out, out->procedures, &out->procedures_count,
RADDBGI_DataSectionTag_Procedures);
raddbg_parse__extract_primary(out, out->scopes, &out->scopes_count,
RADDBG_DataSectionTag_Scopes);
raddbgi_parse__extract_primary(out, out->scopes, &out->scopes_count,
RADDBGI_DataSectionTag_Scopes);
raddbg_parse__extract_primary(out, out->scope_voffs, &out->scope_voffs_count,
RADDBG_DataSectionTag_ScopeVoffData);
raddbgi_parse__extract_primary(out, out->scope_voffs, &out->scope_voffs_count,
RADDBGI_DataSectionTag_ScopeVoffData);
raddbg_parse__extract_primary(out, out->scope_vmap, &out->scope_vmap_count,
RADDBG_DataSectionTag_ScopeVmap);
raddbgi_parse__extract_primary(out, out->scope_vmap, &out->scope_vmap_count,
RADDBGI_DataSectionTag_ScopeVmap);
raddbg_parse__extract_primary(out, out->locals, &out->locals_count,
RADDBG_DataSectionTag_Locals);
raddbgi_parse__extract_primary(out, out->locals, &out->locals_count,
RADDBGI_DataSectionTag_Locals);
raddbg_parse__extract_primary(out, out->location_blocks, &out->location_blocks_count,
RADDBG_DataSectionTag_LocationBlocks);
raddbgi_parse__extract_primary(out, out->location_blocks, &out->location_blocks_count,
RADDBGI_DataSectionTag_LocationBlocks);
raddbg_parse__extract_primary(out, out->location_data, &out->location_data_size,
RADDBG_DataSectionTag_LocationData);
raddbgi_parse__extract_primary(out, out->location_data, &out->location_data_size,
RADDBGI_DataSectionTag_LocationData);
{
raddbg_parse__extract_primary(out, out->name_maps, &out->name_maps_count,
RADDBG_DataSectionTag_NameMaps);
raddbgi_parse__extract_primary(out, out->name_maps, &out->name_maps_count,
RADDBGI_DataSectionTag_NameMaps);
RADDBG_NameMap *name_map_ptr = out->name_maps;
RADDBG_NameMap *name_map_opl = out->name_maps + out->name_maps_count;
RADDBGI_NameMap *name_map_ptr = out->name_maps;
RADDBGI_NameMap *name_map_opl = out->name_maps + out->name_maps_count;
for (; name_map_ptr < name_map_opl; name_map_ptr += 1){
if (out->name_maps_by_kind[name_map_ptr->kind] == 0){
out->name_maps_by_kind[name_map_ptr->kind] = name_map_ptr;
@@ -194,25 +194,25 @@ raddbg_parse(RADDBG_U8 *data, RADDBG_U64 size, RADDBG_Parsed *out){
}
}
#if !defined(RADDBG_DISABLE_NILS)
if(out->binary_sections == 0) { out->binary_sections = &raddbg_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->source_files == 0) { out->source_files = &raddbg_source_file_nil; out->source_files_count = 1; }
if(out->units == 0) { out->units = &raddbg_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->type_nodes == 0) { out->type_nodes = &raddbg_type_node_nil; out->type_nodes_count = 1; }
if(out->udts == 0) { out->udts = &raddbg_udt_nil; out->udts_count = 1; }
if(out->members == 0) { out->members = &raddbg_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->global_variables == 0) { out->global_variables = &raddbg_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->thread_variables == 0) { out->thread_variables = &raddbg_thread_variable_nil; out->thread_variables_count = 1; }
if(out->procedures == 0) { out->procedures = &raddbg_procedure_nil; out->procedures_count = 1; }
if(out->scopes == 0) { out->scopes = &raddbg_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_vmap == 0) { out->scope_vmap = &raddbg_vmap_entry_nil; out->scope_vmap_count = 1; }
if(out->locals == 0) { out->locals = &raddbg_local_nil; out->locals_count = 1; }
if(out->location_blocks == 0) { out->location_blocks = &raddbg_location_block_nil; out->location_blocks_count = 1; }
#if !defined(RADDBGI_DISABLE_NILS)
if(out->binary_sections == 0) { out->binary_sections = &raddbgi_binary_section_nil; out->binary_sections_count = 1; }
if(out->file_paths == 0) { out->file_paths = &raddbgi_file_path_node_nil; out->file_paths_count = 1; }
if(out->source_files == 0) { out->source_files = &raddbgi_source_file_nil; out->source_files_count = 1; }
if(out->units == 0) { out->units = &raddbgi_unit_nil; out->units_count = 1; }
if(out->unit_vmap == 0) { out->unit_vmap = &raddbgi_vmap_entry_nil; out->unit_vmap_count = 1; }
if(out->type_nodes == 0) { out->type_nodes = &raddbgi_type_node_nil; out->type_nodes_count = 1; }
if(out->udts == 0) { out->udts = &raddbgi_udt_nil; out->udts_count = 1; }
if(out->members == 0) { out->members = &raddbgi_member_nil; out->members_count = 1; }
if(out->enum_members == 0) { out->enum_members = &raddbgi_enum_member_nil; out->enum_members_count = 1; }
if(out->global_variables == 0) { out->global_variables = &raddbgi_global_variable_nil; out->global_variables_count = 1; }
if(out->global_vmap == 0) { out->global_vmap = &raddbgi_vmap_entry_nil; out->global_vmap_count = 1; }
if(out->thread_variables == 0) { out->thread_variables = &raddbgi_thread_variable_nil; out->thread_variables_count = 1; }
if(out->procedures == 0) { out->procedures = &raddbgi_procedure_nil; out->procedures_count = 1; }
if(out->scopes == 0) { out->scopes = &raddbgi_scope_nil; out->scopes_count = 1; }
if(out->scope_voffs == 0) { out->scope_voffs = &raddbgi_voff_nil; out->scope_voffs_count = 1; }
if(out->scope_vmap == 0) { out->scope_vmap = &raddbgi_vmap_entry_nil; out->scope_vmap_count = 1; }
if(out->locals == 0) { out->locals = &raddbgi_local_nil; out->locals_count = 1; }
if(out->location_blocks == 0) { out->location_blocks = &raddbgi_location_block_nil; out->location_blocks_count = 1; }
#endif
}
@@ -220,15 +220,15 @@ raddbg_parse(RADDBG_U8 *data, RADDBG_U64 size, RADDBG_Parsed *out){
return(result);
}
RADDBG_PROC RADDBG_U8*
raddbg_string_from_idx(RADDBG_Parsed *parsed, RADDBG_U32 idx, RADDBG_U64 *len_out){
RADDBG_U8 *result = 0;
RADDBG_U64 len_result = 0;
RADDBGI_PROC RADDBGI_U8*
raddbgi_string_from_idx(RADDBGI_Parsed *parsed, RADDBGI_U32 idx, RADDBGI_U64 *len_out){
RADDBGI_U8 *result = 0;
RADDBGI_U64 len_result = 0;
if (idx < parsed->string_count){
RADDBG_U32 off_raw = parsed->string_offs[idx];
RADDBG_U32 opl_raw = parsed->string_offs[idx + 1];
RADDBG_U32 opl = raddbg_parse__min(opl_raw, parsed->string_data_size);
RADDBG_U32 off = raddbg_parse__min(off_raw, opl);
RADDBGI_U32 off_raw = parsed->string_offs[idx];
RADDBGI_U32 opl_raw = parsed->string_offs[idx + 1];
RADDBGI_U32 opl = raddbgi_parse__min(opl_raw, parsed->string_data_size);
RADDBGI_U32 off = raddbgi_parse__min(off_raw, opl);
result = parsed->string_data + 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);
}
RADDBG_PROC RADDBG_U32*
raddbg_idx_run_from_first_count(RADDBG_Parsed *parsed,
RADDBG_U32 raw_first, RADDBG_U32 raw_count,
RADDBG_U32 *n_out){
RADDBG_U32 raw_opl = raw_first + raw_count;
RADDBG_U32 opl = raddbg_parse__min(raw_opl, parsed->idx_run_count);
RADDBG_U32 first = raddbg_parse__min(raw_first, opl);
RADDBGI_PROC RADDBGI_U32*
raddbgi_idx_run_from_first_count(RADDBGI_Parsed *parsed,
RADDBGI_U32 raw_first, RADDBGI_U32 raw_count,
RADDBGI_U32 *n_out){
RADDBGI_U32 raw_opl = raw_first + raw_count;
RADDBGI_U32 opl = raddbgi_parse__min(raw_opl, parsed->idx_run_count);
RADDBGI_U32 first = raddbgi_parse__min(raw_first, opl);
RADDBG_U32 *result = 0;
RADDBGI_U32 *result = 0;
if (first < parsed->idx_run_count){
result = parsed->idx_run_data + first;
}
@@ -254,29 +254,29 @@ raddbg_idx_run_from_first_count(RADDBG_Parsed *parsed,
//- line info
RADDBG_PROC void
raddbg_line_info_from_unit(RADDBG_Parsed *p, RADDBG_Unit *unit, RADDBG_ParsedLineInfo *out){
RADDBG_U64 line_info_voff_count = 0;
RADDBG_U64 *voffs = (RADDBG_U64*)
raddbg_data_from_dsec(p, unit->line_info_voffs_data_idx, sizeof(RADDBG_U64),
RADDBG_DataSectionTag_LineInfoVoffs,
&line_info_voff_count);
RADDBGI_PROC void
raddbgi_line_info_from_unit(RADDBGI_Parsed *p, RADDBGI_Unit *unit, RADDBGI_ParsedLineInfo *out){
RADDBGI_U64 line_info_voff_count = 0;
RADDBGI_U64 *voffs = (RADDBGI_U64*)
raddbgi_data_from_dsec(p, unit->line_info_voffs_data_idx, sizeof(RADDBGI_U64),
RADDBGI_DataSectionTag_LineInfoVoffs,
&line_info_voff_count);
RADDBG_U64 line_info_count_raw = 0;
RADDBG_Line *lines = (RADDBG_Line*)
raddbg_data_from_dsec(p, unit->line_info_data_idx, sizeof(RADDBG_Line),
RADDBG_DataSectionTag_LineInfoData,
&line_info_count_raw);
RADDBGI_U64 line_info_count_raw = 0;
RADDBGI_Line *lines = (RADDBGI_Line*)
raddbgi_data_from_dsec(p, unit->line_info_data_idx, sizeof(RADDBGI_Line),
RADDBGI_DataSectionTag_LineInfoData,
&line_info_count_raw);
RADDBG_U64 column_info_count_raw = 0;
RADDBG_Column *cols = (RADDBG_Column*)
raddbg_data_from_dsec(p, unit->line_info_col_data_idx, sizeof(RADDBG_Column),
RADDBG_DataSectionTag_LineInfoColumns,
&column_info_count_raw);
RADDBGI_U64 column_info_count_raw = 0;
RADDBGI_Column *cols = (RADDBGI_Column*)
raddbgi_data_from_dsec(p, unit->line_info_col_data_idx, sizeof(RADDBGI_Column),
RADDBGI_DataSectionTag_LineInfoColumns,
&column_info_count_raw);
RADDBG_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);
RADDBG_U32 column_info_count = raddbg_parse__min(column_info_count_raw, line_info_count);
RADDBGI_U32 line_info_count_a = (line_info_voff_count > 0)?line_info_voff_count - 1:0;
RADDBGI_U32 line_info_count = raddbgi_parse__min(line_info_count_a, line_info_count_raw);
RADDBGI_U32 column_info_count = raddbgi_parse__min(column_info_count_raw, line_info_count);
out->voffs = voffs;
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;
}
RADDBG_PROC RADDBG_U64
raddbg_line_info_idx_from_voff(RADDBG_ParsedLineInfo *line_info, RADDBG_U64 voff)
RADDBGI_PROC RADDBGI_U64
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]){
// assuming: (i < j) -> (vmap[i].voff < vmap[j].voff)
// find i such that: (vmap[i].voff <= voff) && (voff < vmap[i + 1].voff)
RADDBG_U32 first = 0;
RADDBG_U32 opl = line_info->count;
RADDBGI_U32 first = 0;
RADDBGI_U32 opl = line_info->count;
for (;;){
RADDBG_U32 mid = (first + opl)/2;
RADDBGI_U32 mid = (first + opl)/2;
if (line_info->voffs[mid] < voff){
first = mid;
}
@@ -310,35 +310,35 @@ raddbg_line_info_idx_from_voff(RADDBG_ParsedLineInfo *line_info, RADDBG_U64 voff
break;
}
}
result = (RADDBG_U64)first;
result = (RADDBGI_U64)first;
}
return(result);
}
RADDBG_PROC void
raddbg_line_map_from_source_file(RADDBG_Parsed *p, RADDBG_SourceFile *srcfile,
RADDBG_ParsedLineMap *out){
RADDBG_U64 num_count = 0;
RADDBG_U32 *nums = (RADDBG_U32*)
raddbg_data_from_dsec(p, srcfile->line_map_nums_data_idx, sizeof(RADDBG_U32),
RADDBG_DataSectionTag_LineMapNumbers,
&num_count);
RADDBGI_PROC void
raddbgi_line_map_from_source_file(RADDBGI_Parsed *p, RADDBGI_SourceFile *srcfile,
RADDBGI_ParsedLineMap *out){
RADDBGI_U64 num_count = 0;
RADDBGI_U32 *nums = (RADDBGI_U32*)
raddbgi_data_from_dsec(p, srcfile->line_map_nums_data_idx, sizeof(RADDBGI_U32),
RADDBGI_DataSectionTag_LineMapNumbers,
&num_count);
RADDBG_U64 range_count = 0;
RADDBG_U32 *ranges = (RADDBG_U32*)
raddbg_data_from_dsec(p, srcfile->line_map_range_data_idx, sizeof(RADDBG_U32),
RADDBG_DataSectionTag_LineMapRanges,
&range_count);
RADDBGI_U64 range_count = 0;
RADDBGI_U32 *ranges = (RADDBGI_U32*)
raddbgi_data_from_dsec(p, srcfile->line_map_range_data_idx, sizeof(RADDBGI_U32),
RADDBGI_DataSectionTag_LineMapRanges,
&range_count);
RADDBG_U64 voff_count = 0;
RADDBG_U64 *voffs = (RADDBG_U64*)
raddbg_data_from_dsec(p, srcfile->line_map_voff_data_idx, sizeof(RADDBG_U64),
RADDBG_DataSectionTag_LineMapVoffs,
&voff_count);
RADDBGI_U64 voff_count = 0;
RADDBGI_U64 *voffs = (RADDBGI_U64*)
raddbgi_data_from_dsec(p, srcfile->line_map_voff_data_idx, sizeof(RADDBGI_U64),
RADDBGI_DataSectionTag_LineMapVoffs,
&voff_count);
RADDBG_U32 count_a = (range_count > 0)?(range_count - 1):0;
RADDBG_U32 count_b = raddbg_parse__min(count_a, num_count);
RADDBG_U32 count = raddbg_parse__min(count_b, srcfile->line_map_count);
RADDBGI_U32 count_a = (range_count > 0)?(range_count - 1):0;
RADDBGI_U32 count_b = raddbgi_parse__min(count_a, num_count);
RADDBGI_U32 count = raddbgi_parse__min(count_b, srcfile->line_map_count);
out->nums = nums;
out->ranges = ranges;
@@ -347,20 +347,20 @@ raddbg_line_map_from_source_file(RADDBG_Parsed *p, RADDBG_SourceFile *srcfile,
out->voff_count = voff_count;
}
RADDBG_PROC RADDBG_U64*
raddbg_line_voffs_from_num(RADDBG_ParsedLineMap *map, RADDBG_U32 linenum, RADDBG_U32 *n_out){
RADDBG_U64 *result = 0;
RADDBGI_PROC RADDBGI_U64*
raddbgi_line_voffs_from_num(RADDBGI_ParsedLineMap *map, RADDBGI_U32 linenum, RADDBGI_U32 *n_out){
RADDBGI_U64 *result = 0;
*n_out = 0;
RADDBG_U32 closest_i = 0;
RADDBGI_U32 closest_i = 0;
if (map->count > 0 && map->nums[0] <= linenum){
// assuming: (i < j) -> (nums[i] < nums[j])
// find i such that: (nums[i] <= linenum) && (linenum < nums[i + 1])
RADDBG_U32 *nums = map->nums;
RADDBG_U32 first = 0;
RADDBG_U32 opl = map->count;
RADDBGI_U32 *nums = map->nums;
RADDBGI_U32 first = 0;
RADDBGI_U32 opl = map->count;
for (;;){
RADDBG_U32 mid = (first + opl)/2;
RADDBGI_U32 mid = (first + opl)/2;
if (nums[mid] < linenum){
first = mid;
}
@@ -386,8 +386,8 @@ raddbg_line_voffs_from_num(RADDBG_ParsedLineMap *map, RADDBG_U32 linenum, RADDBG
// set result if possible
if (closest_i < map->count){
RADDBG_U32 first = map->ranges[closest_i];
RADDBG_U32 opl = map->ranges[closest_i + 1];
RADDBGI_U32 first = map->ranges[closest_i];
RADDBGI_U32 opl = map->ranges[closest_i + 1];
if (opl < map->voff_count){
result = map->voffs + first;
*n_out = opl - first;
@@ -400,16 +400,16 @@ raddbg_line_voffs_from_num(RADDBG_ParsedLineMap *map, RADDBG_U32 linenum, RADDBG
//- vmaps
RADDBG_PROC RADDBG_U64
raddbg_vmap_idx_from_voff(RADDBG_VMapEntry *vmap, RADDBG_U32 vmap_count, RADDBG_U64 voff){
RADDBG_U64 result = 0;
RADDBGI_PROC RADDBGI_U64
raddbgi_vmap_idx_from_voff(RADDBGI_VMapEntry *vmap, RADDBGI_U32 vmap_count, RADDBGI_U64 voff){
RADDBGI_U64 result = 0;
if (vmap_count > 0 && vmap[0].voff <= voff && voff < vmap[vmap_count - 1].voff){
// assuming: (i < j) -> (vmap[i].voff < vmap[j].voff)
// find i such that: (vmap[i].voff <= voff) && (voff < vmap[i + 1].voff)
RADDBG_U32 first = 0;
RADDBG_U32 opl = vmap_count;
RADDBGI_U32 first = 0;
RADDBGI_U32 opl = vmap_count;
for (;;){
RADDBG_U32 mid = (first + opl)/2;
RADDBGI_U32 mid = (first + opl)/2;
if (vmap[mid].voff < voff){
first = mid;
}
@@ -424,60 +424,60 @@ raddbg_vmap_idx_from_voff(RADDBG_VMapEntry *vmap, RADDBG_U32 vmap_count, RADDBG_
break;
}
}
result = (RADDBG_U64)vmap[first].idx;
result = (RADDBGI_U64)vmap[first].idx;
}
return(result);
}
//- name maps
RADDBG_PROC RADDBG_NameMap*
raddbg_name_map_from_kind(RADDBG_Parsed *p, RADDBG_NameMapKind kind){
RADDBG_NameMap *result = 0;
if (0 < kind && kind < RADDBG_NameMapKind_COUNT){
RADDBGI_PROC RADDBGI_NameMap*
raddbgi_name_map_from_kind(RADDBGI_Parsed *p, RADDBGI_NameMapKind kind){
RADDBGI_NameMap *result = 0;
if (0 < kind && kind < RADDBGI_NameMapKind_COUNT){
result = p->name_maps_by_kind[kind];
}
return(result);
}
RADDBG_PROC void
raddbg_name_map_parse(RADDBG_Parsed *p, RADDBG_NameMap *mapptr, RADDBG_ParsedNameMap *out){
RADDBGI_PROC void
raddbgi_name_map_parse(RADDBGI_Parsed *p, RADDBGI_NameMap *mapptr, RADDBGI_ParsedNameMap *out){
out->buckets = 0;
out->bucket_count = 0;
if (mapptr != 0){
out->buckets = (RADDBG_NameMapBucket*)
raddbg_data_from_dsec(p, mapptr->bucket_data_idx, sizeof(RADDBG_NameMapBucket),
RADDBG_DataSectionTag_NameMapBuckets, &out->bucket_count);
out->nodes = (RADDBG_NameMapNode*)
raddbg_data_from_dsec(p, mapptr->node_data_idx, sizeof(RADDBG_NameMapNode),
RADDBG_DataSectionTag_NameMapNodes, &out->node_count);
out->buckets = (RADDBGI_NameMapBucket*)
raddbgi_data_from_dsec(p, mapptr->bucket_data_idx, sizeof(RADDBGI_NameMapBucket),
RADDBGI_DataSectionTag_NameMapBuckets, &out->bucket_count);
out->nodes = (RADDBGI_NameMapNode*)
raddbgi_data_from_dsec(p, mapptr->node_data_idx, sizeof(RADDBGI_NameMapNode),
RADDBGI_DataSectionTag_NameMapNodes, &out->node_count);
}
}
RADDBG_PROC RADDBG_NameMapNode*
raddbg_name_map_lookup(RADDBG_Parsed *p, RADDBG_ParsedNameMap *map,
RADDBG_U8 *str, RADDBG_U64 len){
RADDBG_NameMapNode *result = 0;
RADDBGI_PROC RADDBGI_NameMapNode*
raddbgi_name_map_lookup(RADDBGI_Parsed *p, RADDBGI_ParsedNameMap *map,
RADDBGI_U8 *str, RADDBGI_U64 len){
RADDBGI_NameMapNode *result = 0;
if (map->bucket_count > 0){
RADDBG_NameMapBucket *buckets = map->buckets;
RADDBG_U64 bucket_count = map->bucket_count;
RADDBG_U64 hash = raddbg_hash(str, len);
RADDBG_U64 bucket_index = hash%bucket_count;
RADDBG_NameMapBucket *bucket = map->buckets + bucket_index;
RADDBGI_NameMapBucket *buckets = map->buckets;
RADDBGI_U64 bucket_count = map->bucket_count;
RADDBGI_U64 hash = raddbgi_hash(str, len);
RADDBGI_U64 bucket_index = hash%bucket_count;
RADDBGI_NameMapBucket *bucket = map->buckets + bucket_index;
RADDBG_NameMapNode *node = map->nodes + bucket->first_node;
RADDBG_NameMapNode *node_opl = node + bucket->node_count;
RADDBGI_NameMapNode *node = map->nodes + bucket->first_node;
RADDBGI_NameMapNode *node_opl = node + bucket->node_count;
for (;node < node_opl; node += 1){
// extract a string from this node
RADDBG_U64 nlen = 0;
RADDBG_U8 *nstr = raddbg_string_from_idx(p, node->string_idx, &nlen);
RADDBGI_U64 nlen = 0;
RADDBGI_U8 *nstr = raddbgi_string_from_idx(p, node->string_idx, &nlen);
// compare this to the needle string
RADDBG_S32 match = 0;
RADDBGI_S32 match = 0;
if (nlen == len){
RADDBG_U8 *a = str;
RADDBG_U8 *aopl = str + len;
RADDBG_U8 *b = nstr;
RADDBGI_U8 *a = str;
RADDBGI_U8 *aopl = str + len;
RADDBGI_U8 *b = nstr;
for (;a < aopl && *a == *b; a += 1, b += 1);
match = (a == aopl);
}
@@ -493,10 +493,10 @@ raddbg_name_map_lookup(RADDBG_Parsed *p, RADDBG_ParsedNameMap *map,
return(result);
}
RADDBG_PROC RADDBG_U32*
raddbg_matches_from_map_node(RADDBG_Parsed *p, RADDBG_NameMapNode *node,
RADDBG_U32 *n_out){
RADDBG_U32 *result = 0;
RADDBGI_PROC RADDBGI_U32*
raddbgi_matches_from_map_node(RADDBGI_Parsed *p, RADDBGI_NameMapNode *node,
RADDBGI_U32 *n_out){
RADDBGI_U32 *result = 0;
*n_out = 0;
if (node != 0){
if (node->match_count == 1){
@@ -504,8 +504,8 @@ raddbg_matches_from_map_node(RADDBG_Parsed *p, RADDBG_NameMapNode *node,
*n_out = 1;
}
else{
result = raddbg_idx_run_from_first_count(p, node->match_idx_or_idx_run_first,
node->match_count, n_out);
result = raddbgi_idx_run_from_first_count(p, node->match_idx_or_idx_run_first,
node->match_count, n_out);
}
}
return(result);
@@ -513,14 +513,14 @@ raddbg_matches_from_map_node(RADDBG_Parsed *p, RADDBG_NameMapNode *node,
//- common helpers
RADDBG_PROC RADDBG_U64
raddbg_first_voff_from_proc(RADDBG_Parsed *p, RADDBG_U32 proc_id){
RADDBG_U64 result = 0;
RADDBGI_PROC RADDBGI_U64
raddbgi_first_voff_from_proc(RADDBGI_Parsed *p, RADDBGI_U32 proc_id){
RADDBGI_U64 result = 0;
if (0 < proc_id && proc_id < p->procedures_count){
RADDBG_Procedure *proc = p->procedures + proc_id;
RADDBG_U32 scope_id = proc->root_scope_idx;
RADDBGI_Procedure *proc = p->procedures + proc_id;
RADDBGI_U32 scope_id = proc->root_scope_idx;
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 &&
scope->voff_range_first < p->scope_voffs_count){
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_PROC void*
raddbg_data_from_dsec(RADDBG_Parsed *parsed, RADDBG_U32 idx, RADDBG_U32 item_size,
RADDBG_DataSectionTag expected_tag,
RADDBG_U64 *count_out){
RADDBGI_PROC void*
raddbgi_data_from_dsec(RADDBGI_Parsed *parsed, RADDBGI_U32 idx, RADDBGI_U32 item_size,
RADDBGI_DataSectionTag expected_tag,
RADDBGI_U64 *count_out){
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"
if (0 < idx && idx < parsed->dsec_count){
RADDBG_DataSection *ds = parsed->dsecs + idx;
RADDBGI_DataSection *ds = parsed->dsecs + idx;
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){
count_result = ds->encoded_size/item_size;
result = (parsed->raw_data + ds->off);
+139 -139
View File
@@ -1,105 +1,105 @@
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef RADDBG_PARSE_H
#define RADDBG_PARSE_H
#ifndef RADDBGI_PARSE_H
#define RADDBGI_PARSE_H
////////////////////////////////
//~ RADDBG Parsing Helpers
typedef struct RADDBG_Parsed{
typedef struct RADDBGI_Parsed{
// raw data & data sections (part 1)
RADDBG_U8 *raw_data;
RADDBG_U64 raw_data_size;
RADDBG_DataSection *dsecs;
RADDBG_U64 dsec_count;
RADDBG_U32 dsec_idx[RADDBG_DataSectionTag_PRIMARY_COUNT];
RADDBGI_U8 *raw_data;
RADDBGI_U64 raw_data_size;
RADDBGI_DataSection *dsecs;
RADDBGI_U64 dsec_count;
RADDBGI_U32 dsec_idx[RADDBGI_DataSectionTag_PRIMARY_COUNT];
// primary data structures (part 2)
// handled by helper APIs
RADDBG_U8* string_data;
RADDBG_U64 string_data_size;
RADDBG_U32* string_offs;
RADDBG_U64 string_count;
RADDBG_U32* idx_run_data;
RADDBG_U32 idx_run_count;
RADDBGI_U8* string_data;
RADDBGI_U64 string_data_size;
RADDBGI_U32* string_offs;
RADDBGI_U64 string_count;
RADDBGI_U32* idx_run_data;
RADDBGI_U32 idx_run_count;
// directly readable by users
// (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;
RADDBG_U64 binary_sections_count;
RADDBG_FilePathNode* file_paths;
RADDBG_U64 file_paths_count;
RADDBG_SourceFile* source_files;
RADDBG_U64 source_files_count;
RADDBG_Unit* units;
RADDBG_U64 units_count;
RADDBG_VMapEntry* unit_vmap;
RADDBG_U64 unit_vmap_count;
RADDBG_TypeNode* type_nodes;
RADDBG_U64 type_nodes_count;
RADDBG_UDT* udts;
RADDBG_U64 udts_count;
RADDBG_Member* members;
RADDBG_U64 members_count;
RADDBG_EnumMember* enum_members;
RADDBG_U64 enum_members_count;
RADDBG_GlobalVariable* global_variables;
RADDBG_U64 global_variables_count;
RADDBG_VMapEntry* global_vmap;
RADDBG_U64 global_vmap_count;
RADDBG_ThreadVariable* thread_variables;
RADDBG_U64 thread_variables_count;
RADDBG_Procedure* procedures;
RADDBG_U64 procedures_count;
RADDBG_Scope* scopes;
RADDBG_U64 scopes_count;
RADDBG_U64* scope_voffs;
RADDBG_U64 scope_voffs_count;
RADDBG_VMapEntry* scope_vmap;
RADDBG_U64 scope_vmap_count;
RADDBG_Local* locals;
RADDBG_U64 locals_count;
RADDBG_LocationBlock* location_blocks;
RADDBG_U64 location_blocks_count;
RADDBG_U8* location_data;
RADDBG_U64 location_data_size;
RADDBG_NameMap* name_maps;
RADDBG_U64 name_maps_count;
RADDBGI_BinarySection* binary_sections;
RADDBGI_U64 binary_sections_count;
RADDBGI_FilePathNode* file_paths;
RADDBGI_U64 file_paths_count;
RADDBGI_SourceFile* source_files;
RADDBGI_U64 source_files_count;
RADDBGI_Unit* units;
RADDBGI_U64 units_count;
RADDBGI_VMapEntry* unit_vmap;
RADDBGI_U64 unit_vmap_count;
RADDBGI_TypeNode* type_nodes;
RADDBGI_U64 type_nodes_count;
RADDBGI_UDT* udts;
RADDBGI_U64 udts_count;
RADDBGI_Member* members;
RADDBGI_U64 members_count;
RADDBGI_EnumMember* enum_members;
RADDBGI_U64 enum_members_count;
RADDBGI_GlobalVariable* global_variables;
RADDBGI_U64 global_variables_count;
RADDBGI_VMapEntry* global_vmap;
RADDBGI_U64 global_vmap_count;
RADDBGI_ThreadVariable* thread_variables;
RADDBGI_U64 thread_variables_count;
RADDBGI_Procedure* procedures;
RADDBGI_U64 procedures_count;
RADDBGI_Scope* scopes;
RADDBGI_U64 scopes_count;
RADDBGI_U64* scope_voffs;
RADDBGI_U64 scope_voffs_count;
RADDBGI_VMapEntry* scope_vmap;
RADDBGI_U64 scope_vmap_count;
RADDBGI_Local* locals;
RADDBGI_U64 locals_count;
RADDBGI_LocationBlock* location_blocks;
RADDBGI_U64 location_blocks_count;
RADDBGI_U8* location_data;
RADDBGI_U64 location_data_size;
RADDBGI_NameMap* name_maps;
RADDBGI_U64 name_maps_count;
// 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{
RADDBG_ParseStatus_Good = 0,
RADDBG_ParseStatus_HeaderDoesNotMatch = 1,
RADDBG_ParseStatus_UnsupportedVersionNumber = 2,
RADDBG_ParseStatus_InvalidDataSecionLayout = 3,
RADDBG_ParseStatus_MissingStringDataSection = 4,
RADDBG_ParseStatus_MissingStringTableSection = 5,
RADDBG_ParseStatus_MissingIndexRunSection = 6,
} RADDBG_ParseStatus;
RADDBGI_ParseStatus_Good = 0,
RADDBGI_ParseStatus_HeaderDoesNotMatch = 1,
RADDBGI_ParseStatus_UnsupportedVersionNumber = 2,
RADDBGI_ParseStatus_InvalidDataSecionLayout = 3,
RADDBGI_ParseStatus_MissingStringDataSection = 4,
RADDBGI_ParseStatus_MissingStringTableSection = 5,
RADDBGI_ParseStatus_MissingIndexRunSection = 6,
} RADDBGI_ParseStatus;
typedef struct RADDBG_ParsedLineInfo{
typedef struct RADDBGI_ParsedLineInfo{
// NOTE: Mapping VOFF -> LINE_INFO
//
// * [ voff[i], voff[i + 1] ) forms the voff range
// * for the line info at lines[i] (and cols[i] if i < col_count)
RADDBG_U64* voffs; // [count + 1] sorted
RADDBG_Line* lines; // [count]
RADDBG_Column* cols; // [col_count]
RADDBG_U64 count;
RADDBG_U64 col_count;
} RADDBG_ParsedLineInfo;
RADDBGI_U64* voffs; // [count + 1] sorted
RADDBGI_Line* lines; // [count]
RADDBGI_Column* cols; // [col_count]
RADDBGI_U64 count;
RADDBGI_U64 col_count;
} RADDBGI_ParsedLineInfo;
typedef struct RADDBG_ParsedLineMap{
typedef struct RADDBGI_ParsedLineMap{
// NOTE: Mapping LINE_NUMBER -> VOFFs
//
// * 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] )
// * voffs[k] gives the associated voffs
RADDBG_U32* nums; // [count] sorted
RADDBG_U32* ranges; // [count + 1]
RADDBG_U64* voffs; // [voff_count]
RADDBG_U64 count;
RADDBG_U64 voff_count;
} RADDBG_ParsedLineMap;
RADDBGI_U32* nums; // [count] sorted
RADDBGI_U32* ranges; // [count + 1]
RADDBGI_U64* voffs; // [voff_count]
RADDBGI_U64 count;
RADDBGI_U64 voff_count;
} RADDBGI_ParsedLineMap;
typedef struct RADDBG_ParsedNameMap{
RADDBG_NameMapBucket *buckets;
RADDBG_NameMapNode *nodes;
RADDBG_U64 bucket_count;
RADDBG_U64 node_count;
} RADDBG_ParsedNameMap;
typedef struct RADDBGI_ParsedNameMap{
RADDBGI_NameMapBucket *buckets;
RADDBGI_NameMapNode *nodes;
RADDBGI_U64 bucket_count;
RADDBGI_U64 node_count;
} RADDBGI_ParsedNameMap;
////////////////////////////////
//~ Global Nils
#if !defined(RADDBG_DISABLE_NILS)
static RADDBG_BinarySection raddbg_binary_section_nil = {0};
static RADDBG_FilePathNode raddbg_file_path_node_nil = {0};
static RADDBG_SourceFile raddbg_source_file_nil = {0};
static RADDBG_Unit raddbg_unit_nil = {0};
static RADDBG_VMapEntry raddbg_vmap_entry_nil = {0};
static RADDBG_TypeNode raddbg_type_node_nil = {0};
static RADDBG_UDT raddbg_udt_nil = {0};
static RADDBG_Member raddbg_member_nil = {0};
static RADDBG_EnumMember raddbg_enum_member_nil = {0};
static RADDBG_GlobalVariable raddbg_global_variable_nil = {0};
static RADDBG_ThreadVariable raddbg_thread_variable_nil = {0};
static RADDBG_Procedure raddbg_procedure_nil = {0};
static RADDBG_Scope raddbg_scope_nil = {0};
static U64 raddbg_voff_nil = 0;
static RADDBG_LocationBlock raddbg_location_block_nil = {0};
static RADDBG_Local raddbg_local_nil = {0};
#if !defined(RADDBGI_DISABLE_NILS)
static RADDBGI_BinarySection raddbgi_binary_section_nil = {0};
static RADDBGI_FilePathNode raddbgi_file_path_node_nil = {0};
static RADDBGI_SourceFile raddbgi_source_file_nil = {0};
static RADDBGI_Unit raddbgi_unit_nil = {0};
static RADDBGI_VMapEntry raddbgi_vmap_entry_nil = {0};
static RADDBGI_TypeNode raddbgi_type_node_nil = {0};
static RADDBGI_UDT raddbgi_udt_nil = {0};
static RADDBGI_Member raddbgi_member_nil = {0};
static RADDBGI_EnumMember raddbgi_enum_member_nil = {0};
static RADDBGI_GlobalVariable raddbgi_global_variable_nil = {0};
static RADDBGI_ThreadVariable raddbgi_thread_variable_nil = {0};
static RADDBGI_Procedure raddbgi_procedure_nil = {0};
static RADDBGI_Scope raddbgi_scope_nil = {0};
static U64 raddbgi_voff_nil = 0;
static RADDBGI_LocationBlock raddbgi_location_block_nil = {0};
static RADDBGI_Local raddbgi_local_nil = {0};
#endif
////////////////////////////////
//~ RADDBG Parse API
RADDBG_PROC RADDBG_ParseStatus
raddbg_parse(RADDBG_U8 *data, RADDBG_U64 size, RADDBG_Parsed *out);
RADDBGI_PROC RADDBGI_ParseStatus
raddbgi_parse(RADDBGI_U8 *data, RADDBGI_U64 size, RADDBGI_Parsed *out);
RADDBG_PROC RADDBG_U8*
raddbg_string_from_idx(RADDBG_Parsed *parsed, RADDBG_U32 idx, RADDBG_U64 *len_out);
RADDBGI_PROC RADDBGI_U8*
raddbgi_string_from_idx(RADDBGI_Parsed *parsed, RADDBGI_U32 idx, RADDBGI_U64 *len_out);
RADDBG_PROC RADDBG_U32*
raddbg_idx_run_from_first_count(RADDBG_Parsed *parsed, RADDBG_U32 first, RADDBG_U32 raw_count,
RADDBG_U32 *n_out);
RADDBGI_PROC RADDBGI_U32*
raddbgi_idx_run_from_first_count(RADDBGI_Parsed *parsed, RADDBGI_U32 first, RADDBGI_U32 raw_count,
RADDBGI_U32 *n_out);
//- 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
RADDBG_PROC void
raddbg_line_info_from_unit(RADDBG_Parsed *p, RADDBG_Unit *unit, RADDBG_ParsedLineInfo *out);
RADDBGI_PROC void
raddbgi_line_info_from_unit(RADDBGI_Parsed *p, RADDBGI_Unit *unit, RADDBGI_ParsedLineInfo *out);
RADDBG_PROC RADDBG_U64
raddbg_line_info_idx_from_voff(RADDBG_ParsedLineInfo *line_info, RADDBG_U64 voff);
RADDBGI_PROC RADDBGI_U64
raddbgi_line_info_idx_from_voff(RADDBGI_ParsedLineInfo *line_info, RADDBGI_U64 voff);
RADDBG_PROC void
raddbg_line_map_from_source_file(RADDBG_Parsed *p, RADDBG_SourceFile *srcfile,
RADDBG_ParsedLineMap *out);
RADDBGI_PROC void
raddbgi_line_map_from_source_file(RADDBGI_Parsed *p, RADDBGI_SourceFile *srcfile,
RADDBGI_ParsedLineMap *out);
RADDBG_PROC RADDBG_U64*
raddbg_line_voffs_from_num(RADDBG_ParsedLineMap *map, RADDBG_U32 linenum, RADDBG_U32 *n_out);
RADDBGI_PROC RADDBGI_U64*
raddbgi_line_voffs_from_num(RADDBGI_ParsedLineMap *map, RADDBGI_U32 linenum, RADDBGI_U32 *n_out);
//- vmaps
RADDBG_PROC RADDBG_U64
raddbg_vmap_idx_from_voff(RADDBG_VMapEntry *vmap, RADDBG_U32 vmap_count, RADDBG_U64 voff);
RADDBGI_PROC RADDBGI_U64
raddbgi_vmap_idx_from_voff(RADDBGI_VMapEntry *vmap, RADDBGI_U32 vmap_count, RADDBGI_U64 voff);
//- name maps
RADDBG_PROC RADDBG_NameMap*
raddbg_name_map_from_kind(RADDBG_Parsed *p, RADDBG_NameMapKind kind);
RADDBGI_PROC RADDBGI_NameMap*
raddbgi_name_map_from_kind(RADDBGI_Parsed *p, RADDBGI_NameMapKind kind);
RADDBG_PROC void
raddbg_name_map_parse(RADDBG_Parsed* p, RADDBG_NameMap *mapptr, RADDBG_ParsedNameMap *out);
RADDBGI_PROC void
raddbgi_name_map_parse(RADDBGI_Parsed* p, RADDBGI_NameMap *mapptr, RADDBGI_ParsedNameMap *out);
RADDBG_PROC RADDBG_NameMapNode*
raddbg_name_map_lookup(RADDBG_Parsed *p, RADDBG_ParsedNameMap *map,
RADDBG_U8 *str, RADDBG_U64 len);
RADDBGI_PROC RADDBGI_NameMapNode*
raddbgi_name_map_lookup(RADDBGI_Parsed *p, RADDBGI_ParsedNameMap *map,
RADDBGI_U8 *str, RADDBGI_U64 len);
RADDBG_PROC RADDBG_U32*
raddbg_matches_from_map_node(RADDBG_Parsed *p, RADDBG_NameMapNode *node, RADDBG_U32 *n_out);
RADDBGI_PROC RADDBGI_U32*
raddbgi_matches_from_map_node(RADDBGI_Parsed *p, RADDBGI_NameMapNode *node, RADDBGI_U32 *n_out);
//- common helpers
RADDBG_PROC RADDBG_U64
raddbg_first_voff_from_proc(RADDBG_Parsed *p, RADDBG_U32 proc_id);
RADDBGI_PROC RADDBGI_U64
raddbgi_first_voff_from_proc(RADDBGI_Parsed *p, RADDBGI_U32 proc_id);
////////////////////////////////
//~ RADDBG Parsing Helpers
#define raddbg_parse__extract_primary(p,outptr,outn,pritag) \
#define raddbgi_parse__extract_primary(p,outptr,outn,pritag) \
( (*(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*
raddbg_data_from_dsec(RADDBG_Parsed *p, RADDBG_U32 idx, RADDBG_U32 item_size,
RADDBG_DataSectionTag expected_tag, RADDBG_U64 *n_out);
RADDBGI_PROC void*
raddbgi_data_from_dsec(RADDBGI_Parsed *p, RADDBGI_U32 idx, RADDBGI_U32 item_size,
RADDBGI_DataSectionTag expected_tag, RADDBGI_U64 *n_out);
#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
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)
{
default:{}break;
@@ -14,82 +14,82 @@ 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;
case REGS_RegCodeX64_rax:{result = RADDBGI_RegisterCode_X64_rax;}break;
case REGS_RegCodeX64_rcx:{result = RADDBGI_RegisterCode_X64_rcx;}break;
case REGS_RegCodeX64_rdx:{result = RADDBGI_RegisterCode_X64_rdx;}break;
case REGS_RegCodeX64_rbx:{result = RADDBGI_RegisterCode_X64_rbx;}break;
case REGS_RegCodeX64_rsp:{result = RADDBGI_RegisterCode_X64_rsp;}break;
case REGS_RegCodeX64_rbp:{result = RADDBGI_RegisterCode_X64_rbp;}break;
case REGS_RegCodeX64_rsi:{result = RADDBGI_RegisterCode_X64_rsi;}break;
case REGS_RegCodeX64_rdi:{result = RADDBGI_RegisterCode_X64_rdi;}break;
case REGS_RegCodeX64_r8:{result = RADDBGI_RegisterCode_X64_r8;}break;
case REGS_RegCodeX64_r9:{result = RADDBGI_RegisterCode_X64_r9;}break;
case REGS_RegCodeX64_r10:{result = RADDBGI_RegisterCode_X64_r10;}break;
case REGS_RegCodeX64_r11:{result = RADDBGI_RegisterCode_X64_r11;}break;
case REGS_RegCodeX64_r12:{result = RADDBGI_RegisterCode_X64_r12;}break;
case REGS_RegCodeX64_r13:{result = RADDBGI_RegisterCode_X64_r13;}break;
case REGS_RegCodeX64_r14:{result = RADDBGI_RegisterCode_X64_r14;}break;
case REGS_RegCodeX64_r15:{result = RADDBGI_RegisterCode_X64_r15;}break;
case REGS_RegCodeX64_fsbase:{result = RADDBGI_RegisterCode_X64_fsbase;}break;
case REGS_RegCodeX64_gsbase:{result = RADDBGI_RegisterCode_X64_gsbase;}break;
case REGS_RegCodeX64_rip:{result = RADDBGI_RegisterCode_X64_rip;}break;
case REGS_RegCodeX64_rflags:{result = RADDBGI_RegisterCode_X64_rflags;}break;
case REGS_RegCodeX64_dr0:{result = RADDBGI_RegisterCode_X64_dr0;}break;
case REGS_RegCodeX64_dr1:{result = RADDBGI_RegisterCode_X64_dr1;}break;
case REGS_RegCodeX64_dr2:{result = RADDBGI_RegisterCode_X64_dr2;}break;
case REGS_RegCodeX64_dr3:{result = RADDBGI_RegisterCode_X64_dr3;}break;
case REGS_RegCodeX64_dr4:{result = RADDBGI_RegisterCode_X64_dr4;}break;
case REGS_RegCodeX64_dr5:{result = RADDBGI_RegisterCode_X64_dr5;}break;
case REGS_RegCodeX64_dr6:{result = RADDBGI_RegisterCode_X64_dr6;}break;
case REGS_RegCodeX64_dr7:{result = RADDBGI_RegisterCode_X64_dr7;}break;
case REGS_RegCodeX64_fpr0:{result = RADDBGI_RegisterCode_X64_fpr0;}break;
case REGS_RegCodeX64_fpr1:{result = RADDBGI_RegisterCode_X64_fpr1;}break;
case REGS_RegCodeX64_fpr2:{result = RADDBGI_RegisterCode_X64_fpr2;}break;
case REGS_RegCodeX64_fpr3:{result = RADDBGI_RegisterCode_X64_fpr3;}break;
case REGS_RegCodeX64_fpr4:{result = RADDBGI_RegisterCode_X64_fpr4;}break;
case REGS_RegCodeX64_fpr5:{result = RADDBGI_RegisterCode_X64_fpr5;}break;
case REGS_RegCodeX64_fpr6:{result = RADDBGI_RegisterCode_X64_fpr6;}break;
case REGS_RegCodeX64_fpr7:{result = RADDBGI_RegisterCode_X64_fpr7;}break;
case REGS_RegCodeX64_st0:{result = RADDBGI_RegisterCode_X64_st0;}break;
case REGS_RegCodeX64_st1:{result = RADDBGI_RegisterCode_X64_st1;}break;
case REGS_RegCodeX64_st2:{result = RADDBGI_RegisterCode_X64_st2;}break;
case REGS_RegCodeX64_st3:{result = RADDBGI_RegisterCode_X64_st3;}break;
case REGS_RegCodeX64_st4:{result = RADDBGI_RegisterCode_X64_st4;}break;
case REGS_RegCodeX64_st5:{result = RADDBGI_RegisterCode_X64_st5;}break;
case REGS_RegCodeX64_st6:{result = RADDBGI_RegisterCode_X64_st6;}break;
case REGS_RegCodeX64_st7:{result = RADDBGI_RegisterCode_X64_st7;}break;
case REGS_RegCodeX64_fcw:{result = RADDBGI_RegisterCode_X64_fcw;}break;
case REGS_RegCodeX64_fsw:{result = RADDBGI_RegisterCode_X64_fsw;}break;
case REGS_RegCodeX64_ftw:{result = RADDBGI_RegisterCode_X64_ftw;}break;
case REGS_RegCodeX64_fop:{result = RADDBGI_RegisterCode_X64_fop;}break;
case REGS_RegCodeX64_fcs:{result = RADDBGI_RegisterCode_X64_fcs;}break;
case REGS_RegCodeX64_fds:{result = RADDBGI_RegisterCode_X64_fds;}break;
case REGS_RegCodeX64_fip:{result = RADDBGI_RegisterCode_X64_fip;}break;
case REGS_RegCodeX64_fdp:{result = RADDBGI_RegisterCode_X64_fdp;}break;
case REGS_RegCodeX64_mxcsr:{result = RADDBGI_RegisterCode_X64_mxcsr;}break;
case REGS_RegCodeX64_mxcsr_mask:{result = RADDBGI_RegisterCode_X64_mxcsr_mask;}break;
case REGS_RegCodeX64_ss:{result = RADDBGI_RegisterCode_X64_ss;}break;
case REGS_RegCodeX64_cs:{result = RADDBGI_RegisterCode_X64_cs;}break;
case REGS_RegCodeX64_ds:{result = RADDBGI_RegisterCode_X64_ds;}break;
case REGS_RegCodeX64_es:{result = RADDBGI_RegisterCode_X64_es;}break;
case REGS_RegCodeX64_fs:{result = RADDBGI_RegisterCode_X64_fs;}break;
case REGS_RegCodeX64_gs:{result = RADDBGI_RegisterCode_X64_gs;}break;
case REGS_RegCodeX64_ymm0:{result = RADDBGI_RegisterCode_X64_ymm0;}break;
case REGS_RegCodeX64_ymm1:{result = RADDBGI_RegisterCode_X64_ymm1;}break;
case REGS_RegCodeX64_ymm2:{result = RADDBGI_RegisterCode_X64_ymm2;}break;
case REGS_RegCodeX64_ymm3:{result = RADDBGI_RegisterCode_X64_ymm3;}break;
case REGS_RegCodeX64_ymm4:{result = RADDBGI_RegisterCode_X64_ymm4;}break;
case REGS_RegCodeX64_ymm5:{result = RADDBGI_RegisterCode_X64_ymm5;}break;
case REGS_RegCodeX64_ymm6:{result = RADDBGI_RegisterCode_X64_ymm6;}break;
case REGS_RegCodeX64_ymm7:{result = RADDBGI_RegisterCode_X64_ymm7;}break;
case REGS_RegCodeX64_ymm8:{result = RADDBGI_RegisterCode_X64_ymm8;}break;
case REGS_RegCodeX64_ymm9:{result = RADDBGI_RegisterCode_X64_ymm9;}break;
case REGS_RegCodeX64_ymm10:{result = RADDBGI_RegisterCode_X64_ymm10;}break;
case REGS_RegCodeX64_ymm11:{result = RADDBGI_RegisterCode_X64_ymm11;}break;
case REGS_RegCodeX64_ymm12:{result = RADDBGI_RegisterCode_X64_ymm12;}break;
case REGS_RegCodeX64_ymm13:{result = RADDBGI_RegisterCode_X64_ymm13;}break;
case REGS_RegCodeX64_ymm14:{result = RADDBGI_RegisterCode_X64_ymm14;}break;
case REGS_RegCodeX64_ymm15:{result = RADDBGI_RegisterCode_X64_ymm15;}break;
}
}break;
case Architecture_x86:
@@ -97,72 +97,72 @@ 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;
case REGS_RegCodeX86_eax:{result = RADDBGI_RegisterCode_X86_eax;}break;
case REGS_RegCodeX86_ecx:{result = RADDBGI_RegisterCode_X86_ecx;}break;
case REGS_RegCodeX86_edx:{result = RADDBGI_RegisterCode_X86_edx;}break;
case REGS_RegCodeX86_ebx:{result = RADDBGI_RegisterCode_X86_ebx;}break;
case REGS_RegCodeX86_esp:{result = RADDBGI_RegisterCode_X86_esp;}break;
case REGS_RegCodeX86_ebp:{result = RADDBGI_RegisterCode_X86_ebp;}break;
case REGS_RegCodeX86_esi:{result = RADDBGI_RegisterCode_X86_esi;}break;
case REGS_RegCodeX86_edi:{result = RADDBGI_RegisterCode_X86_edi;}break;
case REGS_RegCodeX86_fsbase:{result = RADDBGI_RegisterCode_X86_fsbase;}break;
case REGS_RegCodeX86_gsbase:{result = RADDBGI_RegisterCode_X86_gsbase;}break;
case REGS_RegCodeX86_eflags:{result = RADDBGI_RegisterCode_X86_eflags;}break;
case REGS_RegCodeX86_eip:{result = RADDBGI_RegisterCode_X86_eip;}break;
case REGS_RegCodeX86_dr0:{result = RADDBGI_RegisterCode_X86_dr0;}break;
case REGS_RegCodeX86_dr1:{result = RADDBGI_RegisterCode_X86_dr1;}break;
case REGS_RegCodeX86_dr2:{result = RADDBGI_RegisterCode_X86_dr2;}break;
case REGS_RegCodeX86_dr3:{result = RADDBGI_RegisterCode_X86_dr3;}break;
case REGS_RegCodeX86_dr4:{result = RADDBGI_RegisterCode_X86_dr4;}break;
case REGS_RegCodeX86_dr5:{result = RADDBGI_RegisterCode_X86_dr5;}break;
case REGS_RegCodeX86_dr6:{result = RADDBGI_RegisterCode_X86_dr6;}break;
case REGS_RegCodeX86_dr7:{result = RADDBGI_RegisterCode_X86_dr7;}break;
case REGS_RegCodeX86_fpr0:{result = RADDBGI_RegisterCode_X86_fpr0;}break;
case REGS_RegCodeX86_fpr1:{result = RADDBGI_RegisterCode_X86_fpr1;}break;
case REGS_RegCodeX86_fpr2:{result = RADDBGI_RegisterCode_X86_fpr2;}break;
case REGS_RegCodeX86_fpr3:{result = RADDBGI_RegisterCode_X86_fpr3;}break;
case REGS_RegCodeX86_fpr4:{result = RADDBGI_RegisterCode_X86_fpr4;}break;
case REGS_RegCodeX86_fpr5:{result = RADDBGI_RegisterCode_X86_fpr5;}break;
case REGS_RegCodeX86_fpr6:{result = RADDBGI_RegisterCode_X86_fpr6;}break;
case REGS_RegCodeX86_fpr7:{result = RADDBGI_RegisterCode_X86_fpr7;}break;
case REGS_RegCodeX86_st0:{result = RADDBGI_RegisterCode_X86_st0;}break;
case REGS_RegCodeX86_st1:{result = RADDBGI_RegisterCode_X86_st1;}break;
case REGS_RegCodeX86_st2:{result = RADDBGI_RegisterCode_X86_st2;}break;
case REGS_RegCodeX86_st3:{result = RADDBGI_RegisterCode_X86_st3;}break;
case REGS_RegCodeX86_st4:{result = RADDBGI_RegisterCode_X86_st4;}break;
case REGS_RegCodeX86_st5:{result = RADDBGI_RegisterCode_X86_st5;}break;
case REGS_RegCodeX86_st6:{result = RADDBGI_RegisterCode_X86_st6;}break;
case REGS_RegCodeX86_st7:{result = RADDBGI_RegisterCode_X86_st7;}break;
case REGS_RegCodeX86_fcw:{result = RADDBGI_RegisterCode_X86_fcw;}break;
case REGS_RegCodeX86_fsw:{result = RADDBGI_RegisterCode_X86_fsw;}break;
case REGS_RegCodeX86_ftw:{result = RADDBGI_RegisterCode_X86_ftw;}break;
case REGS_RegCodeX86_fop:{result = RADDBGI_RegisterCode_X86_fop;}break;
case REGS_RegCodeX86_fcs:{result = RADDBGI_RegisterCode_X86_fcs;}break;
case REGS_RegCodeX86_fds:{result = RADDBGI_RegisterCode_X86_fds;}break;
case REGS_RegCodeX86_fip:{result = RADDBGI_RegisterCode_X86_fip;}break;
case REGS_RegCodeX86_fdp:{result = RADDBGI_RegisterCode_X86_fdp;}break;
case REGS_RegCodeX86_mxcsr:{result = RADDBGI_RegisterCode_X86_mxcsr;}break;
case REGS_RegCodeX86_mxcsr_mask:{result = RADDBGI_RegisterCode_X86_mxcsr_mask;}break;
case REGS_RegCodeX86_ss:{result = RADDBGI_RegisterCode_X86_ss;}break;
case REGS_RegCodeX86_cs:{result = RADDBGI_RegisterCode_X86_cs;}break;
case REGS_RegCodeX86_ds:{result = RADDBGI_RegisterCode_X86_ds;}break;
case REGS_RegCodeX86_es:{result = RADDBGI_RegisterCode_X86_es;}break;
case REGS_RegCodeX86_fs:{result = RADDBGI_RegisterCode_X86_fs;}break;
case REGS_RegCodeX86_gs:{result = RADDBGI_RegisterCode_X86_gs;}break;
case REGS_RegCodeX86_ymm0:{result = RADDBGI_RegisterCode_X86_ymm0;}break;
case REGS_RegCodeX86_ymm1:{result = RADDBGI_RegisterCode_X86_ymm1;}break;
case REGS_RegCodeX86_ymm2:{result = RADDBGI_RegisterCode_X86_ymm2;}break;
case REGS_RegCodeX86_ymm3:{result = RADDBGI_RegisterCode_X86_ymm3;}break;
case REGS_RegCodeX86_ymm4:{result = RADDBGI_RegisterCode_X86_ymm4;}break;
case REGS_RegCodeX86_ymm5:{result = RADDBGI_RegisterCode_X86_ymm5;}break;
case REGS_RegCodeX86_ymm6:{result = RADDBGI_RegisterCode_X86_ymm6;}break;
case REGS_RegCodeX86_ymm7:{result = RADDBGI_RegisterCode_X86_ymm7;}break;
}
}break;
}
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;
switch(arch)
@@ -173,82 +173,82 @@ 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;
case RADDBGI_RegisterCode_X64_rax:{result = REGS_RegCodeX64_rax;}break;
case RADDBGI_RegisterCode_X64_rcx:{result = REGS_RegCodeX64_rcx;}break;
case RADDBGI_RegisterCode_X64_rdx:{result = REGS_RegCodeX64_rdx;}break;
case RADDBGI_RegisterCode_X64_rbx:{result = REGS_RegCodeX64_rbx;}break;
case RADDBGI_RegisterCode_X64_rsp:{result = REGS_RegCodeX64_rsp;}break;
case RADDBGI_RegisterCode_X64_rbp:{result = REGS_RegCodeX64_rbp;}break;
case RADDBGI_RegisterCode_X64_rsi:{result = REGS_RegCodeX64_rsi;}break;
case RADDBGI_RegisterCode_X64_rdi:{result = REGS_RegCodeX64_rdi;}break;
case RADDBGI_RegisterCode_X64_r8:{result = REGS_RegCodeX64_r8;}break;
case RADDBGI_RegisterCode_X64_r9:{result = REGS_RegCodeX64_r9;}break;
case RADDBGI_RegisterCode_X64_r10:{result = REGS_RegCodeX64_r10;}break;
case RADDBGI_RegisterCode_X64_r11:{result = REGS_RegCodeX64_r11;}break;
case RADDBGI_RegisterCode_X64_r12:{result = REGS_RegCodeX64_r12;}break;
case RADDBGI_RegisterCode_X64_r13:{result = REGS_RegCodeX64_r13;}break;
case RADDBGI_RegisterCode_X64_r14:{result = REGS_RegCodeX64_r14;}break;
case RADDBGI_RegisterCode_X64_r15:{result = REGS_RegCodeX64_r15;}break;
case RADDBGI_RegisterCode_X64_fsbase:{result = REGS_RegCodeX64_fsbase;}break;
case RADDBGI_RegisterCode_X64_gsbase:{result = REGS_RegCodeX64_gsbase;}break;
case RADDBGI_RegisterCode_X64_rip:{result = REGS_RegCodeX64_rip;}break;
case RADDBGI_RegisterCode_X64_rflags:{result = REGS_RegCodeX64_rflags;}break;
case RADDBGI_RegisterCode_X64_dr0:{result = REGS_RegCodeX64_dr0;}break;
case RADDBGI_RegisterCode_X64_dr1:{result = REGS_RegCodeX64_dr1;}break;
case RADDBGI_RegisterCode_X64_dr2:{result = REGS_RegCodeX64_dr2;}break;
case RADDBGI_RegisterCode_X64_dr3:{result = REGS_RegCodeX64_dr3;}break;
case RADDBGI_RegisterCode_X64_dr4:{result = REGS_RegCodeX64_dr4;}break;
case RADDBGI_RegisterCode_X64_dr5:{result = REGS_RegCodeX64_dr5;}break;
case RADDBGI_RegisterCode_X64_dr6:{result = REGS_RegCodeX64_dr6;}break;
case RADDBGI_RegisterCode_X64_dr7:{result = REGS_RegCodeX64_dr7;}break;
case RADDBGI_RegisterCode_X64_fpr0:{result = REGS_RegCodeX64_fpr0;}break;
case RADDBGI_RegisterCode_X64_fpr1:{result = REGS_RegCodeX64_fpr1;}break;
case RADDBGI_RegisterCode_X64_fpr2:{result = REGS_RegCodeX64_fpr2;}break;
case RADDBGI_RegisterCode_X64_fpr3:{result = REGS_RegCodeX64_fpr3;}break;
case RADDBGI_RegisterCode_X64_fpr4:{result = REGS_RegCodeX64_fpr4;}break;
case RADDBGI_RegisterCode_X64_fpr5:{result = REGS_RegCodeX64_fpr5;}break;
case RADDBGI_RegisterCode_X64_fpr6:{result = REGS_RegCodeX64_fpr6;}break;
case RADDBGI_RegisterCode_X64_fpr7:{result = REGS_RegCodeX64_fpr7;}break;
case RADDBGI_RegisterCode_X64_st0:{result = REGS_RegCodeX64_st0;}break;
case RADDBGI_RegisterCode_X64_st1:{result = REGS_RegCodeX64_st1;}break;
case RADDBGI_RegisterCode_X64_st2:{result = REGS_RegCodeX64_st2;}break;
case RADDBGI_RegisterCode_X64_st3:{result = REGS_RegCodeX64_st3;}break;
case RADDBGI_RegisterCode_X64_st4:{result = REGS_RegCodeX64_st4;}break;
case RADDBGI_RegisterCode_X64_st5:{result = REGS_RegCodeX64_st5;}break;
case RADDBGI_RegisterCode_X64_st6:{result = REGS_RegCodeX64_st6;}break;
case RADDBGI_RegisterCode_X64_st7:{result = REGS_RegCodeX64_st7;}break;
case RADDBGI_RegisterCode_X64_fcw:{result = REGS_RegCodeX64_fcw;}break;
case RADDBGI_RegisterCode_X64_fsw:{result = REGS_RegCodeX64_fsw;}break;
case RADDBGI_RegisterCode_X64_ftw:{result = REGS_RegCodeX64_ftw;}break;
case RADDBGI_RegisterCode_X64_fop:{result = REGS_RegCodeX64_fop;}break;
case RADDBGI_RegisterCode_X64_fcs:{result = REGS_RegCodeX64_fcs;}break;
case RADDBGI_RegisterCode_X64_fds:{result = REGS_RegCodeX64_fds;}break;
case RADDBGI_RegisterCode_X64_fip:{result = REGS_RegCodeX64_fip;}break;
case RADDBGI_RegisterCode_X64_fdp:{result = REGS_RegCodeX64_fdp;}break;
case RADDBGI_RegisterCode_X64_mxcsr:{result = REGS_RegCodeX64_mxcsr;}break;
case RADDBGI_RegisterCode_X64_mxcsr_mask:{result = REGS_RegCodeX64_mxcsr_mask;}break;
case RADDBGI_RegisterCode_X64_ss:{result = REGS_RegCodeX64_ss;}break;
case RADDBGI_RegisterCode_X64_cs:{result = REGS_RegCodeX64_cs;}break;
case RADDBGI_RegisterCode_X64_ds:{result = REGS_RegCodeX64_ds;}break;
case RADDBGI_RegisterCode_X64_es:{result = REGS_RegCodeX64_es;}break;
case RADDBGI_RegisterCode_X64_fs:{result = REGS_RegCodeX64_fs;}break;
case RADDBGI_RegisterCode_X64_gs:{result = REGS_RegCodeX64_gs;}break;
case RADDBGI_RegisterCode_X64_ymm0:{result = REGS_RegCodeX64_ymm0;}break;
case RADDBGI_RegisterCode_X64_ymm1:{result = REGS_RegCodeX64_ymm1;}break;
case RADDBGI_RegisterCode_X64_ymm2:{result = REGS_RegCodeX64_ymm2;}break;
case RADDBGI_RegisterCode_X64_ymm3:{result = REGS_RegCodeX64_ymm3;}break;
case RADDBGI_RegisterCode_X64_ymm4:{result = REGS_RegCodeX64_ymm4;}break;
case RADDBGI_RegisterCode_X64_ymm5:{result = REGS_RegCodeX64_ymm5;}break;
case RADDBGI_RegisterCode_X64_ymm6:{result = REGS_RegCodeX64_ymm6;}break;
case RADDBGI_RegisterCode_X64_ymm7:{result = REGS_RegCodeX64_ymm7;}break;
case RADDBGI_RegisterCode_X64_ymm8:{result = REGS_RegCodeX64_ymm8;}break;
case RADDBGI_RegisterCode_X64_ymm9:{result = REGS_RegCodeX64_ymm9;}break;
case RADDBGI_RegisterCode_X64_ymm10:{result = REGS_RegCodeX64_ymm10;}break;
case RADDBGI_RegisterCode_X64_ymm11:{result = REGS_RegCodeX64_ymm11;}break;
case RADDBGI_RegisterCode_X64_ymm12:{result = REGS_RegCodeX64_ymm12;}break;
case RADDBGI_RegisterCode_X64_ymm13:{result = REGS_RegCodeX64_ymm13;}break;
case RADDBGI_RegisterCode_X64_ymm14:{result = REGS_RegCodeX64_ymm14;}break;
case RADDBGI_RegisterCode_X64_ymm15:{result = REGS_RegCodeX64_ymm15;}break;
}
}break;
case Architecture_x86:
@@ -256,66 +256,66 @@ 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;
case RADDBGI_RegisterCode_X86_eax:{result = REGS_RegCodeX86_eax;}break;
case RADDBGI_RegisterCode_X86_ecx:{result = REGS_RegCodeX86_ecx;}break;
case RADDBGI_RegisterCode_X86_edx:{result = REGS_RegCodeX86_edx;}break;
case RADDBGI_RegisterCode_X86_ebx:{result = REGS_RegCodeX86_ebx;}break;
case RADDBGI_RegisterCode_X86_esp:{result = REGS_RegCodeX86_esp;}break;
case RADDBGI_RegisterCode_X86_ebp:{result = REGS_RegCodeX86_ebp;}break;
case RADDBGI_RegisterCode_X86_esi:{result = REGS_RegCodeX86_esi;}break;
case RADDBGI_RegisterCode_X86_edi:{result = REGS_RegCodeX86_edi;}break;
case RADDBGI_RegisterCode_X86_fsbase:{result = REGS_RegCodeX86_fsbase;}break;
case RADDBGI_RegisterCode_X86_gsbase:{result = REGS_RegCodeX86_gsbase;}break;
case RADDBGI_RegisterCode_X86_eflags:{result = REGS_RegCodeX86_eflags;}break;
case RADDBGI_RegisterCode_X86_eip:{result = REGS_RegCodeX86_eip;}break;
case RADDBGI_RegisterCode_X86_dr0:{result = REGS_RegCodeX86_dr0;}break;
case RADDBGI_RegisterCode_X86_dr1:{result = REGS_RegCodeX86_dr1;}break;
case RADDBGI_RegisterCode_X86_dr2:{result = REGS_RegCodeX86_dr2;}break;
case RADDBGI_RegisterCode_X86_dr3:{result = REGS_RegCodeX86_dr3;}break;
case RADDBGI_RegisterCode_X86_dr4:{result = REGS_RegCodeX86_dr4;}break;
case RADDBGI_RegisterCode_X86_dr5:{result = REGS_RegCodeX86_dr5;}break;
case RADDBGI_RegisterCode_X86_dr6:{result = REGS_RegCodeX86_dr6;}break;
case RADDBGI_RegisterCode_X86_dr7:{result = REGS_RegCodeX86_dr7;}break;
case RADDBGI_RegisterCode_X86_fpr0:{result = REGS_RegCodeX86_fpr0;}break;
case RADDBGI_RegisterCode_X86_fpr1:{result = REGS_RegCodeX86_fpr1;}break;
case RADDBGI_RegisterCode_X86_fpr2:{result = REGS_RegCodeX86_fpr2;}break;
case RADDBGI_RegisterCode_X86_fpr3:{result = REGS_RegCodeX86_fpr3;}break;
case RADDBGI_RegisterCode_X86_fpr4:{result = REGS_RegCodeX86_fpr4;}break;
case RADDBGI_RegisterCode_X86_fpr5:{result = REGS_RegCodeX86_fpr5;}break;
case RADDBGI_RegisterCode_X86_fpr6:{result = REGS_RegCodeX86_fpr6;}break;
case RADDBGI_RegisterCode_X86_fpr7:{result = REGS_RegCodeX86_fpr7;}break;
case RADDBGI_RegisterCode_X86_st0:{result = REGS_RegCodeX86_st0;}break;
case RADDBGI_RegisterCode_X86_st1:{result = REGS_RegCodeX86_st1;}break;
case RADDBGI_RegisterCode_X86_st2:{result = REGS_RegCodeX86_st2;}break;
case RADDBGI_RegisterCode_X86_st3:{result = REGS_RegCodeX86_st3;}break;
case RADDBGI_RegisterCode_X86_st4:{result = REGS_RegCodeX86_st4;}break;
case RADDBGI_RegisterCode_X86_st5:{result = REGS_RegCodeX86_st5;}break;
case RADDBGI_RegisterCode_X86_st6:{result = REGS_RegCodeX86_st6;}break;
case RADDBGI_RegisterCode_X86_st7:{result = REGS_RegCodeX86_st7;}break;
case RADDBGI_RegisterCode_X86_fcw:{result = REGS_RegCodeX86_fcw;}break;
case RADDBGI_RegisterCode_X86_fsw:{result = REGS_RegCodeX86_fsw;}break;
case RADDBGI_RegisterCode_X86_ftw:{result = REGS_RegCodeX86_ftw;}break;
case RADDBGI_RegisterCode_X86_fop:{result = REGS_RegCodeX86_fop;}break;
case RADDBGI_RegisterCode_X86_fcs:{result = REGS_RegCodeX86_fcs;}break;
case RADDBGI_RegisterCode_X86_fds:{result = REGS_RegCodeX86_fds;}break;
case RADDBGI_RegisterCode_X86_fip:{result = REGS_RegCodeX86_fip;}break;
case RADDBGI_RegisterCode_X86_fdp:{result = REGS_RegCodeX86_fdp;}break;
case RADDBGI_RegisterCode_X86_mxcsr:{result = REGS_RegCodeX86_mxcsr;}break;
case RADDBGI_RegisterCode_X86_mxcsr_mask:{result = REGS_RegCodeX86_mxcsr_mask;}break;
case RADDBGI_RegisterCode_X86_ss:{result = REGS_RegCodeX86_ss;}break;
case RADDBGI_RegisterCode_X86_cs:{result = REGS_RegCodeX86_cs;}break;
case RADDBGI_RegisterCode_X86_ds:{result = REGS_RegCodeX86_ds;}break;
case RADDBGI_RegisterCode_X86_es:{result = REGS_RegCodeX86_es;}break;
case RADDBGI_RegisterCode_X86_fs:{result = REGS_RegCodeX86_fs;}break;
case RADDBGI_RegisterCode_X86_gs:{result = REGS_RegCodeX86_gs;}break;
case RADDBGI_RegisterCode_X86_ymm0:{result = REGS_RegCodeX86_ymm0;}break;
case RADDBGI_RegisterCode_X86_ymm1:{result = REGS_RegCodeX86_ymm1;}break;
case RADDBGI_RegisterCode_X86_ymm2:{result = REGS_RegCodeX86_ymm2;}break;
case RADDBGI_RegisterCode_X86_ymm3:{result = REGS_RegCodeX86_ymm3;}break;
case RADDBGI_RegisterCode_X86_ymm4:{result = REGS_RegCodeX86_ymm4;}break;
case RADDBGI_RegisterCode_X86_ymm5:{result = REGS_RegCodeX86_ymm5;}break;
case RADDBGI_RegisterCode_X86_ymm6:{result = REGS_RegCodeX86_ymm6;}break;
case RADDBGI_RegisterCode_X86_ymm7:{result = REGS_RegCodeX86_ymm7;}break;
}
}break;
}
@@ -3,8 +3,8 @@
//- GENERATED CODE
#ifndef REGS_RADDBG_META_H
#define REGS_RADDBG_META_H
#ifndef REGS_RADDBGI_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
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef REGS_RADDBG_H
#define REGS_RADDBG_H
#ifndef REGS_RADDBGI_H
#define REGS_RADDBGI_H
internal RADDBG_RegisterCode regs_raddbg_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 RADDBGI_RegisterCode regs_raddbgi_code_from_arch_reg_code(Architecture arch, REGS_RegCode code);
internal REGS_RegCode regs_reg_code_from_arch_raddbgi_code(Architecture arch, RADDBGI_RegisterCode reg);
#endif //REGS_RADDBG_H
#endif //REGS_RADDBGI_H
@@ -6,9 +6,9 @@
@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)`;
`{`;
`default:{}break;`;
@@ -17,7 +17,7 @@
`switch(code)`
`{`;
`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;`;
`case Architecture_x86:`;
@@ -25,7 +25,7 @@
`switch(code)`
`{`;
`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;`;
`}`;
@@ -35,7 +35,7 @@
@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;`;
`switch(arch)`;
@@ -46,7 +46,7 @@
`switch(code)`
`{`;
`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;`;
`case Architecture_x86:`;
@@ -54,7 +54,7 @@
`switch(code)`
`{`;
`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;`;
`}`;
+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);
// parse raw data as raddbg
RADDBG_Parsed rdbg = {0};
RADDBG_ParseStatus parse_status = raddbg_parse(data, data_size, &rdbg);
RADDBGI_Parsed rdbg = {0};
RADDBGI_ParseStatus parse_status = raddbgi_parse(data, data_size, &rdbg);
// usage example: print out all procedure symbol names
#if 1
for(uint64_t procedure_idx = 0; procedure_idx < rdbg.procedure_count; procedure_idx += 1)
{
RADDBG_Procedure *procedure = &rdbg.procedures[procedure_idx];
RADDBGI_Procedure *procedure = &rdbg.procedures[procedure_idx];
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);
}
#endif
@@ -40,15 +40,15 @@ int main(int argument_count, char **arguments)
#if 0
for(uint64_t udt_idx = 0; udt_idx < rdbg.udt_count; udt_idx += 1)
{
RADDBG_UDT *udt = &rdbg.udts[udt_idx];
RADDBG_TypeNode *type = &rdbg.type_nodes[udt->self_type_idx];
RADDBGI_UDT *udt = &rdbg.udts[udt_idx];
RADDBGI_TypeNode *type = &rdbg.type_nodes[udt->self_type_idx];
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);
}
#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
// reference other data uses indices into that other data's table. for
// example, given a `type_idx`, I will index into `rdbg.type_nodes`. given a
+151 -151
View File
@@ -54,85 +54,85 @@ tg_key_list_copy(Arena *arena, TG_KeyList *src)
//~ rjf: RADDBG <-> TG Enum Conversions
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;
switch(kind)
{
default:{}break;
case RADDBG_TypeKind_Void: {result = TG_Kind_Void;}break;
case RADDBG_TypeKind_Handle: {result = TG_Kind_Handle;}break;
case RADDBG_TypeKind_Char8: {result = TG_Kind_Char8;}break;
case RADDBG_TypeKind_Char16: {result = TG_Kind_Char16;}break;
case RADDBG_TypeKind_Char32: {result = TG_Kind_Char32;}break;
case RADDBG_TypeKind_UChar8: {result = TG_Kind_UChar8;}break;
case RADDBG_TypeKind_UChar16: {result = TG_Kind_UChar16;}break;
case RADDBG_TypeKind_UChar32: {result = TG_Kind_UChar32;}break;
case RADDBG_TypeKind_U8: {result = TG_Kind_U8;}break;
case RADDBG_TypeKind_U16: {result = TG_Kind_U16;}break;
case RADDBG_TypeKind_U32: {result = TG_Kind_U32;}break;
case RADDBG_TypeKind_U64: {result = TG_Kind_U64;}break;
case RADDBG_TypeKind_U128: {result = TG_Kind_U128;}break;
case RADDBG_TypeKind_U256: {result = TG_Kind_U256;}break;
case RADDBG_TypeKind_U512: {result = TG_Kind_U512;}break;
case RADDBG_TypeKind_S8: {result = TG_Kind_S8;}break;
case RADDBG_TypeKind_S16: {result = TG_Kind_S16;}break;
case RADDBG_TypeKind_S32: {result = TG_Kind_S32;}break;
case RADDBG_TypeKind_S64: {result = TG_Kind_S64;}break;
case RADDBG_TypeKind_S128: {result = TG_Kind_S128;}break;
case RADDBG_TypeKind_S256: {result = TG_Kind_S256;}break;
case RADDBG_TypeKind_S512: {result = TG_Kind_S512;}break;
case RADDBG_TypeKind_Bool: {result = TG_Kind_Bool;}break;
case RADDBG_TypeKind_F16: {result = TG_Kind_F16;}break;
case RADDBG_TypeKind_F32: {result = TG_Kind_F32;}break;
case RADDBG_TypeKind_F32PP: {result = TG_Kind_F32PP;}break;
case RADDBG_TypeKind_F48: {result = TG_Kind_F48;}break;
case RADDBG_TypeKind_F64: {result = TG_Kind_F64;}break;
case RADDBG_TypeKind_F80: {result = TG_Kind_F80;}break;
case RADDBG_TypeKind_F128: {result = TG_Kind_F128;}break;
case RADDBG_TypeKind_ComplexF32: {result = TG_Kind_ComplexF32;}break;
case RADDBG_TypeKind_ComplexF64: {result = TG_Kind_ComplexF64;}break;
case RADDBG_TypeKind_ComplexF80: {result = TG_Kind_ComplexF80;}break;
case RADDBG_TypeKind_ComplexF128: {result = TG_Kind_ComplexF128;}break;
case RADDBG_TypeKind_Modifier: {result = TG_Kind_Modifier;}break;
case RADDBG_TypeKind_Ptr: {result = TG_Kind_Ptr;}break;
case RADDBG_TypeKind_LRef: {result = TG_Kind_LRef;}break;
case RADDBG_TypeKind_RRef: {result = TG_Kind_RRef;}break;
case RADDBG_TypeKind_Array: {result = TG_Kind_Array;}break;
case RADDBG_TypeKind_Function: {result = TG_Kind_Function;}break;
case RADDBG_TypeKind_Method: {result = TG_Kind_Method;}break;
case RADDBG_TypeKind_MemberPtr: {result = TG_Kind_MemberPtr;}break;
case RADDBG_TypeKind_Struct: {result = TG_Kind_Struct;}break;
case RADDBG_TypeKind_Class: {result = TG_Kind_Class;}break;
case RADDBG_TypeKind_Union: {result = TG_Kind_Union;}break;
case RADDBG_TypeKind_Enum: {result = TG_Kind_Enum;}break;
case RADDBG_TypeKind_Alias: {result = TG_Kind_Alias;}break;
case RADDBG_TypeKind_IncompleteStruct: {result = TG_Kind_IncompleteStruct;}break;
case RADDBG_TypeKind_IncompleteUnion: {result = TG_Kind_IncompleteUnion;}break;
case RADDBG_TypeKind_IncompleteClass: {result = TG_Kind_IncompleteClass;}break;
case RADDBG_TypeKind_IncompleteEnum: {result = TG_Kind_IncompleteEnum;}break;
case RADDBG_TypeKind_Bitfield: {result = TG_Kind_Bitfield;}break;
case RADDBG_TypeKind_Variadic: {result = TG_Kind_Variadic;}break;
case RADDBGI_TypeKind_Void: {result = TG_Kind_Void;}break;
case RADDBGI_TypeKind_Handle: {result = TG_Kind_Handle;}break;
case RADDBGI_TypeKind_Char8: {result = TG_Kind_Char8;}break;
case RADDBGI_TypeKind_Char16: {result = TG_Kind_Char16;}break;
case RADDBGI_TypeKind_Char32: {result = TG_Kind_Char32;}break;
case RADDBGI_TypeKind_UChar8: {result = TG_Kind_UChar8;}break;
case RADDBGI_TypeKind_UChar16: {result = TG_Kind_UChar16;}break;
case RADDBGI_TypeKind_UChar32: {result = TG_Kind_UChar32;}break;
case RADDBGI_TypeKind_U8: {result = TG_Kind_U8;}break;
case RADDBGI_TypeKind_U16: {result = TG_Kind_U16;}break;
case RADDBGI_TypeKind_U32: {result = TG_Kind_U32;}break;
case RADDBGI_TypeKind_U64: {result = TG_Kind_U64;}break;
case RADDBGI_TypeKind_U128: {result = TG_Kind_U128;}break;
case RADDBGI_TypeKind_U256: {result = TG_Kind_U256;}break;
case RADDBGI_TypeKind_U512: {result = TG_Kind_U512;}break;
case RADDBGI_TypeKind_S8: {result = TG_Kind_S8;}break;
case RADDBGI_TypeKind_S16: {result = TG_Kind_S16;}break;
case RADDBGI_TypeKind_S32: {result = TG_Kind_S32;}break;
case RADDBGI_TypeKind_S64: {result = TG_Kind_S64;}break;
case RADDBGI_TypeKind_S128: {result = TG_Kind_S128;}break;
case RADDBGI_TypeKind_S256: {result = TG_Kind_S256;}break;
case RADDBGI_TypeKind_S512: {result = TG_Kind_S512;}break;
case RADDBGI_TypeKind_Bool: {result = TG_Kind_Bool;}break;
case RADDBGI_TypeKind_F16: {result = TG_Kind_F16;}break;
case RADDBGI_TypeKind_F32: {result = TG_Kind_F32;}break;
case RADDBGI_TypeKind_F32PP: {result = TG_Kind_F32PP;}break;
case RADDBGI_TypeKind_F48: {result = TG_Kind_F48;}break;
case RADDBGI_TypeKind_F64: {result = TG_Kind_F64;}break;
case RADDBGI_TypeKind_F80: {result = TG_Kind_F80;}break;
case RADDBGI_TypeKind_F128: {result = TG_Kind_F128;}break;
case RADDBGI_TypeKind_ComplexF32: {result = TG_Kind_ComplexF32;}break;
case RADDBGI_TypeKind_ComplexF64: {result = TG_Kind_ComplexF64;}break;
case RADDBGI_TypeKind_ComplexF80: {result = TG_Kind_ComplexF80;}break;
case RADDBGI_TypeKind_ComplexF128: {result = TG_Kind_ComplexF128;}break;
case RADDBGI_TypeKind_Modifier: {result = TG_Kind_Modifier;}break;
case RADDBGI_TypeKind_Ptr: {result = TG_Kind_Ptr;}break;
case RADDBGI_TypeKind_LRef: {result = TG_Kind_LRef;}break;
case RADDBGI_TypeKind_RRef: {result = TG_Kind_RRef;}break;
case RADDBGI_TypeKind_Array: {result = TG_Kind_Array;}break;
case RADDBGI_TypeKind_Function: {result = TG_Kind_Function;}break;
case RADDBGI_TypeKind_Method: {result = TG_Kind_Method;}break;
case RADDBGI_TypeKind_MemberPtr: {result = TG_Kind_MemberPtr;}break;
case RADDBGI_TypeKind_Struct: {result = TG_Kind_Struct;}break;
case RADDBGI_TypeKind_Class: {result = TG_Kind_Class;}break;
case RADDBGI_TypeKind_Union: {result = TG_Kind_Union;}break;
case RADDBGI_TypeKind_Enum: {result = TG_Kind_Enum;}break;
case RADDBGI_TypeKind_Alias: {result = TG_Kind_Alias;}break;
case RADDBGI_TypeKind_IncompleteStruct: {result = TG_Kind_IncompleteStruct;}break;
case RADDBGI_TypeKind_IncompleteUnion: {result = TG_Kind_IncompleteUnion;}break;
case RADDBGI_TypeKind_IncompleteClass: {result = TG_Kind_IncompleteClass;}break;
case RADDBGI_TypeKind_IncompleteEnum: {result = TG_Kind_IncompleteEnum;}break;
case RADDBGI_TypeKind_Bitfield: {result = TG_Kind_Bitfield;}break;
case RADDBGI_TypeKind_Variadic: {result = TG_Kind_Variadic;}break;
}
return result;
}
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;
switch(kind)
{
default:{}break;
case RADDBG_MemberKind_DataField: {result = TG_MemberKind_DataField;}break;
case RADDBG_MemberKind_StaticData: {result = TG_MemberKind_StaticData;}break;
case RADDBG_MemberKind_Method: {result = TG_MemberKind_Method;}break;
case RADDBG_MemberKind_StaticMethod: {result = TG_MemberKind_StaticMethod;}break;
case RADDBG_MemberKind_VirtualMethod: {result = TG_MemberKind_VirtualMethod;}break;
case RADDBG_MemberKind_VTablePtr: {result = TG_MemberKind_VTablePtr;}break;
case RADDBG_MemberKind_Base: {result = TG_MemberKind_Base;}break;
case RADDBG_MemberKind_VirtualBase: {result = TG_MemberKind_VirtualBase;}break;
case RADDBG_MemberKind_NestedType: {result = TG_MemberKind_NestedType;}break;
case RADDBGI_MemberKind_DataField: {result = TG_MemberKind_DataField;}break;
case RADDBGI_MemberKind_StaticData: {result = TG_MemberKind_StaticData;}break;
case RADDBGI_MemberKind_Method: {result = TG_MemberKind_Method;}break;
case RADDBGI_MemberKind_StaticMethod: {result = TG_MemberKind_StaticMethod;}break;
case RADDBGI_MemberKind_VirtualMethod: {result = TG_MemberKind_VirtualMethod;}break;
case RADDBGI_MemberKind_VTablePtr: {result = TG_MemberKind_VTablePtr;}break;
case RADDBGI_MemberKind_Base: {result = TG_MemberKind_Base;}break;
case RADDBGI_MemberKind_VirtualBase: {result = TG_MemberKind_VirtualBase;}break;
case RADDBGI_MemberKind_NestedType: {result = TG_MemberKind_NestedType;}break;
}
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
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;
U64 reg_byte_count = 0;
@@ -319,7 +319,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
}break;
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;
}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];
if(0 <= type_node_idx && type_node_idx < rdbg->type_nodes_count)
{
RADDBG_TypeNode *rdbg_type = &rdbg->type_nodes[type_node_idx];
TG_Kind kind = tg_kind_from_raddbg_type_kind(rdbg_type->kind);
RADDBGI_TypeNode *rdbg_type = &rdbg->type_nodes[type_node_idx];
TG_Kind kind = tg_kind_from_raddbgi_type_kind(rdbg_type->kind);
//- 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
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
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
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 += 1)
{
RADDBG_Member *src = &rdbg->members[member_idx];
RADDBGI_Member *src = &rdbg->members[member_idx];
TG_Kind member_type_kind = TG_Kind_Null;
if(src->type_idx < rdbg->type_nodes_count)
{
RADDBG_TypeNode *member_type = &rdbg->type_nodes[src->type_idx];
member_type_kind = tg_kind_from_raddbg_type_kind(member_type->kind);
RADDBGI_TypeNode *member_type = &rdbg->type_nodes[src->type_idx];
member_type_kind = tg_kind_from_raddbgi_type_kind(member_type->kind);
}
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->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;
}
}
@@ -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
else if(rdbg_type->kind == RADDBG_TypeKind_Enum)
else if(rdbg_type->kind == RADDBGI_TypeKind_Enum)
{
// rjf: unpack name
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
TG_Key direct_type_key = zero_struct;
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];
TG_Kind direct_type_kind = tg_kind_from_raddbg_type_kind(direct_type_node->kind);
RADDBGI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbgi_type_kind(direct_type_node->kind);
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;
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 = push_array(arena, TG_EnumVal, enum_vals_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 += 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];
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;
}
}
@@ -435,7 +435,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
}
//- 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
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;
if(rdbg_type->constructed.direct_type_idx < type_node_idx)
{
RADDBG_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);
RADDBGI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->constructed.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbgi_type_kind(direct_type_node->kind);
direct_type_key = tg_key_ext(direct_type_kind, (U64)rdbg_type->constructed.direct_type_idx);
direct_type_is_good = 1;
direct_type_byte_size = (U64)direct_type_node->byte_size;
@@ -453,14 +453,14 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
// rjf: construct based on kind
switch(rdbg_type->kind)
{
case RADDBG_TypeKind_Modifier:
case RADDBGI_TypeKind_Modifier:
{
TG_Flags flags = 0;
if(rdbg_type->flags & RADDBG_TypeModifierFlag_Const)
if(rdbg_type->flags & RADDBGI_TypeModifierFlag_Const)
{
flags |= TG_Flag_Const;
}
if(rdbg_type->flags & RADDBG_TypeModifierFlag_Volatile)
if(rdbg_type->flags & RADDBGI_TypeModifierFlag_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->flags = flags;
}break;
case RADDBG_TypeKind_Ptr:
case RADDBG_TypeKind_LRef:
case RADDBG_TypeKind_RRef:
case RADDBGI_TypeKind_Ptr:
case RADDBGI_TypeKind_LRef:
case RADDBGI_TypeKind_RRef:
{
type = push_array(arena, TG_Type, 1);
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;
}break;
case RADDBG_TypeKind_Array:
case RADDBGI_TypeKind_Array:
{
type = push_array(arena, TG_Type, 1);
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->byte_size = direct_type_byte_size * type->count;
}break;
case RADDBG_TypeKind_Function:
case RADDBGI_TypeKind_Function:
{
U32 count = rdbg_type->constructed.count;
U32 idx_run_first = rdbg_type->constructed.param_idx_run_first;
U32 check_count = 0;
U32 *idx_run = 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)
{
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];
if(param_type_idx < type_node_idx)
{
RADDBG_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx];
TG_Kind param_kind = tg_kind_from_raddbg_type_kind(param_type_node->kind);
RADDBGI_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx];
TG_Kind param_kind = tg_kind_from_raddbgi_type_kind(param_type_node->kind);
type->param_type_keys[idx] = tg_key_ext(param_kind, (U64)param_type_idx);
}
else
@@ -518,7 +518,7 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
}
}
}break;
case RADDBG_TypeKind_Method:
case RADDBGI_TypeKind_Method:
{
// NOTE(rjf): for methods, the `direct` type points at the owner type.
// the return type, instead of being encoded via the `direct` type, is
@@ -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 idx_run_first = rdbg_type->constructed.param_idx_run_first;
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)
{
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];
if(param_type_idx < type_node_idx)
{
RADDBG_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx];
TG_Kind param_kind = tg_kind_from_raddbg_type_kind(param_type_node->kind);
RADDBGI_TypeNode *param_type_node = &rdbg->type_nodes[param_type_idx];
TG_Kind param_kind = tg_kind_from_raddbgi_type_kind(param_type_node->kind);
type->param_type_keys[idx] = tg_key_ext(param_kind, (U64)param_type_idx);
}
else
@@ -557,14 +557,14 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
}
}
}break;
case RADDBG_TypeKind_MemberPtr:
case RADDBGI_TypeKind_MemberPtr:
{
// rjf: unpack owner type
TG_Key owner_type_key = zero_struct;
if(rdbg_type->constructed.owner_type_idx < type_node_idx)
{
RADDBG_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);
RADDBGI_TypeNode *owner_type_node = &rdbg->type_nodes[rdbg_type->constructed.owner_type_idx];
TG_Kind owner_type_kind = tg_kind_from_raddbgi_type_kind(owner_type_node->kind);
owner_type_key = tg_key_ext(owner_type_kind, (U64)rdbg_type->constructed.owner_type_idx);
}
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
else if(rdbg_type->kind == RADDBG_TypeKind_Alias)
else if(rdbg_type->kind == RADDBGI_TypeKind_Alias)
{
// rjf: unpack name
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
TG_Key direct_type_key = zero_struct;
U64 direct_type_byte_size = 0;
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];
TG_Kind direct_type_kind = tg_kind_from_raddbg_type_kind(direct_type_node->kind);
RADDBGI_TypeNode *direct_type_node = &rdbg->type_nodes[rdbg_type->user_defined.direct_type_idx];
TG_Kind direct_type_kind = tg_kind_from_raddbgi_type_kind(direct_type_node->kind);
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;
}
@@ -603,11 +603,11 @@ tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg
}
//- 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
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
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
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;
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:
{
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;
scratch_end(scratch);
}break;
@@ -809,16 +809,16 @@ tg_direct_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key 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_direct_from_graph_raddbg_key(graph, rdbg, 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_raddbgi_key(graph, rdbg, key);
key = tg_unwrapped_from_graph_raddbgi_key(graph, rdbg, key);
return 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;
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:
{
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;
scratch_end(scratch);
}break;
@@ -837,14 +837,14 @@ tg_owner_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key 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;
B32 passed_ptr = 0;
for(;;)
{
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)
{
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
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;
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_Alias)
{
result = tg_direct_from_graph_raddbg_key(graph, rdbg, result);
result = tg_direct_from_graph_raddbgi_key(graph, rdbg, result);
}
else
{
@@ -890,7 +890,7 @@ tg_unwrapped_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key
}
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;
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:
{
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;
scratch_end(scratch);
}break;
@@ -940,12 +940,12 @@ 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)
tg_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key)
{
TG_MemberArray result = {0};
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)
{
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
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);
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};
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;
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);
tg_key_list_push(scratch.arena, &t->inheritance_chain, type->members[member_idx].type_key);
t->type_key = type->members[member_idx].type_key;
t->type = tg_type_from_graph_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);
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];
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);
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
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};
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:
{
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, str8_lit(" "));
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:
{
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);
}break;
case TG_Kind_Modifier:
{
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_lhs_string_from_key(arena, graph, rdbg, direct, out, 1, skip_return);
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:
{
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, str8_lit(" "));
scratch_end(scratch);
@@ -1169,7 +1169,7 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
fwd_udt:;
{
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, str8_lit(" "));
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:
{
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);
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)
{
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);
}
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:
{
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);
str8_list_push(arena, out, str8_lit("*"));
}break;
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);
str8_list_push(arena, out, str8_lit("&"));
}break;
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);
str8_list_push(arena, out, str8_lit("&&"));
}break;
@@ -1224,10 +1224,10 @@ tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_MemberPtr:
{
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_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)
{
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
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);
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:
{
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);
}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_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);
}break;
case TG_Kind_Array:
{
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)
{
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, count_str);
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);
scratch_end(scratch);
}break;
@@ -1286,7 +1286,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
case TG_Kind_Function:
{
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)
{
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(")"));
}
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);
scratch_end(scratch);
}break;
@@ -1323,7 +1323,7 @@ tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Ke
}
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);
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
internal TG_Kind tg_kind_from_raddbg_type_kind(RADDBG_TypeKind kind);
internal TG_MemberKind tg_member_kind_from_raddbg_member_kind(RADDBG_MemberKind kind);
internal TG_Kind tg_kind_from_raddbgi_type_kind(RADDBGI_TypeKind kind);
internal TG_MemberKind tg_member_kind_from_raddbgi_member_kind(RADDBGI_MemberKind kind);
////////////////////////////////
//~ rjf: Key Type Functions
@@ -225,19 +225,19 @@ internal TG_Key tg_cons_type_make(TG_Graph *graph, TG_Kind kind, TG_Key direct_t
////////////////////////////////
//~ rjf: Graph Introspection API
internal TG_Type *tg_type_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_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_unwrapped_direct_from_graph_raddbg_key(TG_Graph *graph, RADDBG_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_ptee_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key);
internal TG_Key tg_unwrapped_from_graph_raddbg_key(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key);
internal U64 tg_byte_size_from_graph_raddbg_key(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_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_unwrapped_direct_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_owner_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_ptee_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Key tg_unwrapped_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal U64 tg_byte_size_from_graph_raddbgi_key(TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_Kind tg_kind_from_key(TG_Key key);
internal TG_Member *tg_member_copy(Arena *arena, TG_Member *src);
internal TG_MemberArray tg_members_from_graph_raddbg_key(Arena *arena, TG_Graph *graph, RADDBG_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 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_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBG_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 TG_MemberArray tg_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal TG_MemberArray tg_data_members_from_graph_raddbgi_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
internal void tg_lhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec, B32 skip_return);
internal void tg_rhs_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key, String8List *out, U32 prec);
internal String8 tg_string_from_key(Arena *arena, TG_Graph *graph, RADDBGI_Parsed *rdbg, TG_Key key);
#endif // TYPE_GRAPH_NEW_H