mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-10-09 17:35:41 +00:00
run-to-name, use to 'seed' test binary cases'
This commit is contained in:
@@ -27,6 +27,7 @@ D_CmdTable: // | | | |
|
||||
|
||||
//- rjf: high-level composite target control operations
|
||||
{RunToLine 1 1 1 0 "" Null null Nil Null 0 0 0 0 0 0 0 Play "run_to_line" "Run To Line" "Runs until a particular source line is hit." "" "$text_pt," }
|
||||
{RunToName 1 1 1 0 "query:procedures" String null Nil Null 0 0 0 0 0 1 1 Play "run_to_name" "Run To Name" "Runs until a particular symbol name is hit." "" "" }
|
||||
{Run 1 1 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Play "run" "Run" "Runs all targets after starting them if they have not been started yet." "play" "" }
|
||||
{Restart 1 1 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Redo "restart" "Restart" "Kills all attached processes, then launches all active targets." "restart,retry" "" }
|
||||
{StepInto 1 1 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 StepInto "step_into" "Step Into" "Steps once, possibly into function calls, for either source lines or instructions (whichever is selected)." "" "" }
|
||||
|
||||
@@ -4830,9 +4830,13 @@ d_ctrl_thread__eval_scope_begin(Arena *arena, D_BreakpointList *user_bps, D_Enti
|
||||
U64 eval_modules_count = Max(1, entity_ctx->entity_kind_counts[D_EntityKind_Module]);
|
||||
E_Module *eval_modules = push_array(arena, E_Module, eval_modules_count);
|
||||
E_Module *eval_modules_primary = &e_module_nil;
|
||||
E_String2NumMap *eval_module_from_name_map = push_array(arena, E_String2NumMap, 1);
|
||||
eval_module_from_name_map[0] = e_string2num_map_make(arena, eval_modules_count*2);
|
||||
U64 eval_dbg_infos_count = Max(1, entity_ctx->entity_kind_counts[D_EntityKind_Module]);
|
||||
E_DbgInfo *eval_dbg_infos = push_array(arena, E_DbgInfo, eval_dbg_infos_count);
|
||||
E_DbgInfo *eval_dbg_infos_primary = &e_dbg_info_nil;
|
||||
E_String2NumMap *eval_dbg_info_from_name_map = push_array(arena, E_String2NumMap, 1);
|
||||
eval_dbg_info_from_name_map[0] = e_string2num_map_make(arena, eval_dbg_infos_count*2);
|
||||
{
|
||||
U64 eval_module_idx = 0;
|
||||
U64 eval_dbg_info_idx = 0;
|
||||
@@ -4946,12 +4950,16 @@ d_ctrl_thread__eval_scope_begin(Arena *arena, D_BreakpointList *user_bps, D_Enti
|
||||
}
|
||||
|
||||
//- rjf: fill debug info
|
||||
String8 debug_info_path = d_entity_child_from_kind(mod, D_EntityKind_DebugInfoPath)->string;
|
||||
eval_dbg_infos[eval_dbg_info_idx].dbgi_key = dbgi_key;
|
||||
eval_dbg_infos[eval_dbg_info_idx].rdi = rdi;
|
||||
eval_dbg_infos[eval_dbg_info_idx].name = debug_info_path;
|
||||
if(mod == module)
|
||||
{
|
||||
eval_dbg_infos_primary = &eval_dbg_infos[eval_dbg_info_idx];
|
||||
}
|
||||
e_string2num_map_insert(arena, eval_dbg_info_from_name_map, debug_info_path, eval_dbg_info_idx+1);
|
||||
e_string2num_map_insert(arena, eval_dbg_info_from_name_map, str8_skip_last_slash(debug_info_path), eval_dbg_info_idx+1);
|
||||
eval_dbg_info_idx += 1;
|
||||
|
||||
//- rjf: fill evaluation module info
|
||||
@@ -4960,10 +4968,13 @@ d_ctrl_thread__eval_scope_begin(Arena *arena, D_BreakpointList *user_bps, D_Enti
|
||||
eval_modules[eval_module_idx].vaddr_range = mod->vaddr_range;
|
||||
eval_modules[eval_module_idx].space = e_space_make(D_EvalSpaceKind_Entity);
|
||||
eval_modules[eval_module_idx].space.u64_0 = (U64)process;
|
||||
eval_modules[eval_module_idx].name = mod->string;
|
||||
if(mod == module)
|
||||
{
|
||||
eval_modules_primary = &eval_modules[eval_module_idx];
|
||||
}
|
||||
e_string2num_map_insert(arena, eval_module_from_name_map, mod->string, eval_module_idx+1);
|
||||
e_string2num_map_insert(arena, eval_module_from_name_map, str8_skip_last_slash(mod->string), eval_module_idx+1);
|
||||
eval_module_idx += 1;
|
||||
}
|
||||
}
|
||||
@@ -4994,11 +5005,13 @@ d_ctrl_thread__eval_scope_begin(Arena *arena, D_BreakpointList *user_bps, D_Enti
|
||||
ctx->dbg_infos = eval_dbg_infos;
|
||||
ctx->dbg_infos_count = eval_dbg_infos_count;
|
||||
ctx->primary_dbg_info = eval_dbg_infos_primary;
|
||||
ctx->dbg_info_from_name_map = eval_dbg_info_from_name_map;
|
||||
|
||||
//- rjf: fill modules
|
||||
ctx->modules = eval_modules;
|
||||
ctx->modules_count = eval_modules_count;
|
||||
ctx->primary_module = eval_modules_primary;
|
||||
ctx->module_from_name_map = eval_module_from_name_map;
|
||||
|
||||
//- rjf: fill space hooks
|
||||
ctx->space_gen = d_ctrl_eval_space_gen;
|
||||
|
||||
@@ -2002,6 +2002,13 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
}
|
||||
d_cmd(D_CmdKind_Run);
|
||||
}break;
|
||||
case D_CmdKind_RunToName:
|
||||
{
|
||||
run_extra_bps.count = 1;
|
||||
run_extra_bps.v = push_array(scratch.arena, D_Breakpoint, 1);
|
||||
run_extra_bps.v[0].vaddr_expr = str8_copy(scratch.arena, params->string);
|
||||
d_cmd(D_CmdKind_Run);
|
||||
}break;
|
||||
case D_CmdKind_Run:
|
||||
{
|
||||
D_EntityArray processes = d_entity_array_from_kind(D_EntityKind_Process);
|
||||
|
||||
@@ -24,6 +24,7 @@ D_CmdKind_Halt,
|
||||
D_CmdKind_SoftHaltRefresh,
|
||||
D_CmdKind_SetThreadIP,
|
||||
D_CmdKind_RunToLine,
|
||||
D_CmdKind_RunToName,
|
||||
D_CmdKind_Run,
|
||||
D_CmdKind_Restart,
|
||||
D_CmdKind_StepInto,
|
||||
|
||||
Reference in New Issue
Block a user