From 0d8a6a4d3a9546aca91073ab59fb8e6f2707edfe Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Wed, 22 Apr 2026 13:37:00 -0700 Subject: [PATCH] ctrl -> d type pass --- src/base/base_entry_point.c | 2 +- src/dbg_engine/dbg_engine.mdesk | 26 +- src/dbg_engine/dbg_engine_core.c | 10 +- src/dbg_engine/dbg_engine_core.h | 250 ++-- src/dbg_engine/dbg_engine_ctrl.c | 1482 ++++++++++---------- src/dbg_engine/dbg_engine_ctrl.h | 439 +++--- src/dbg_engine/dbg_engine_user.c | 290 ++-- src/dbg_engine/dbg_engine_user.h | 236 ++-- src/dbg_engine/generated/dbg_engine.meta.h | 112 +- src/eval/eval_types.c | 4 +- src/raddbg/generated/raddbg.meta.c | 456 +++--- src/raddbg/generated/raddbg.meta.h | 12 +- src/raddbg/raddbg.mdesk | 20 +- src/raddbg/raddbg_core.c | 387 ++--- src/raddbg/raddbg_core.h | 12 +- src/raddbg/raddbg_eval.c | 110 +- src/raddbg/raddbg_main.c | 2 +- src/raddbg/raddbg_views.c | 146 +- src/raddbg/raddbg_views.h | 8 +- src/raddbg/raddbg_widgets.c | 120 +- src/raddbg/raddbg_widgets.h | 4 +- 21 files changed, 1996 insertions(+), 2132 deletions(-) diff --git a/src/base/base_entry_point.c b/src/base/base_entry_point.c index a466e65d..5869281a 100644 --- a/src/base/base_entry_point.c +++ b/src/base/base_entry_point.c @@ -97,7 +97,7 @@ main_thread_base_entry_point(int arguments_count, char **arguments) U64 lane_broadcast_val = 0; { U64 num_main_threads = 1; -#if defined(CTRL_CORE_H) +#if defined(DBG_ENGINE_CORE_H) num_main_threads += 1; #endif U64 num_async_threads = os_get_system_info()->logical_processor_count; diff --git a/src/dbg_engine/dbg_engine.mdesk b/src/dbg_engine/dbg_engine.mdesk index 225af11b..1e8491d0 100644 --- a/src/dbg_engine/dbg_engine.mdesk +++ b/src/dbg_engine/dbg_engine.mdesk @@ -93,7 +93,7 @@ D_DevToggleTable: //~ rjf: Entity Kinds @table(name code_name display_string) -CTRL_EntityKindTable: +D_EntityKindTable: { {Root root "Root" } {Machine machine "Machine" } @@ -108,30 +108,30 @@ CTRL_EntityKindTable: {AddressRangeAnnotation address_range_annotation "Address Range Annotation" } } -@enum CTRL_EntityKind: +@enum D_EntityKind: { Null, - @expand(CTRL_EntityKindTable a) `$(a.name)`, + @expand(D_EntityKindTable a) `$(a.name)`, COUNT, } @data(String8) ctrl_entity_kind_code_name_table: { `{0}`, - @expand(CTRL_EntityKindTable a) `str8_lit_comp("$(a.code_name)")` + @expand(D_EntityKindTable a) `str8_lit_comp("$(a.code_name)")` } @data(String8) ctrl_entity_kind_display_string_table: { `{0}`, - @expand(CTRL_EntityKindTable a) `str8_lit_comp("$(a.display_name)")` + @expand(D_EntityKindTable a) `str8_lit_comp("$(a.display_name)")` } //////////////////////////////// //~ rjf: Exception Codes @table(name lower_name code default display_string) -CTRL_ExceptionCodeKindTable: +D_ExceptionCodeKindTable: { {Win32CtrlC win32_ctrl_c 0x40010005 1 "(Win32) Control-C" } {Win32CtrlBreak win32_ctrl_break 0x40010008 1 "(Win32) Control-Break" } @@ -172,42 +172,42 @@ CTRL_ExceptionCodeKindTable: {Win32DirectXDebugLayer win32_directx_debug_layer 0x0000087a 1 "(Win32) DirectX Debug Layer" } } -@enum CTRL_ExceptionCodeKind: +@enum D_ExceptionCodeKind: { Null, - @expand(CTRL_ExceptionCodeKindTable a) `$(a.name)`, + @expand(D_ExceptionCodeKindTable a) `$(a.name)`, COUNT, } @data(U32) ctrl_exception_code_kind_code_table: { `0`; - @expand(CTRL_ExceptionCodeKindTable a) `$(a.code)`; + @expand(D_ExceptionCodeKindTable a) `$(a.code)`; } @data(String8) ctrl_exception_code_kind_display_string_table: { `{0}`; - @expand(CTRL_ExceptionCodeKindTable a) `str8_lit_comp("$(a.display_string)")`; + @expand(D_ExceptionCodeKindTable a) `str8_lit_comp("$(a.display_string)")`; } @data(String8) ctrl_exception_code_kind_lowercase_code_string_table: { `{0}`; - @expand(CTRL_ExceptionCodeKindTable a) `str8_lit_comp("$(a.lower_name)")`; + @expand(D_ExceptionCodeKindTable a) `str8_lit_comp("$(a.lower_name)")`; } @data(B8) ctrl_exception_code_kind_default_enable_table: { `0`; - @expand(CTRL_ExceptionCodeKindTable a) `$(a.default)`; + @expand(D_ExceptionCodeKindTable a) `$(a.default)`; } //////////////////////////////// //~ rjf: Exception Sub-Codes @table(name, value) -CTRL_ExceptionSubCodeKindTable: +DL_ExceptionSubCodeKindTable: { { W32_FAST_FAIL_LEGACY_GS_VIOLATION 0 } { W32_FAST_FAIL_VTGUARD_CHECK_FAILURE 1 } diff --git a/src/dbg_engine/dbg_engine_core.c b/src/dbg_engine/dbg_engine_core.c index f61aaff8..fd61937d 100644 --- a/src/dbg_engine/dbg_engine_core.c +++ b/src/dbg_engine/dbg_engine_core.c @@ -35,18 +35,18 @@ d_init(void) } } d_ctrl_state->thread_reg_cache.slots_count = 1024; - d_ctrl_state->thread_reg_cache.slots = push_array(arena, CTRL_ThreadRegCacheSlot, d_ctrl_state->thread_reg_cache.slots_count); + d_ctrl_state->thread_reg_cache.slots = push_array(arena, D_ThreadRegCacheSlot, d_ctrl_state->thread_reg_cache.slots_count); d_ctrl_state->thread_reg_cache.stripes_count = os_get_system_info()->logical_processor_count; - d_ctrl_state->thread_reg_cache.stripes = push_array(arena, CTRL_ThreadRegCacheStripe, d_ctrl_state->thread_reg_cache.stripes_count); + d_ctrl_state->thread_reg_cache.stripes = push_array(arena, D_ThreadRegCacheStripe, d_ctrl_state->thread_reg_cache.stripes_count); for(U64 idx = 0; idx < d_ctrl_state->thread_reg_cache.stripes_count; idx += 1) { d_ctrl_state->thread_reg_cache.stripes[idx].arena = arena_alloc(); d_ctrl_state->thread_reg_cache.stripes[idx].rw_mutex = rw_mutex_alloc(); } d_ctrl_state->module_image_info_cache.slots_count = 1024; - d_ctrl_state->module_image_info_cache.slots = push_array(arena, CTRL_ModuleImageInfoCacheSlot, d_ctrl_state->module_image_info_cache.slots_count); + d_ctrl_state->module_image_info_cache.slots = push_array(arena, D_ModuleImageInfoCacheSlot, d_ctrl_state->module_image_info_cache.slots_count); d_ctrl_state->module_image_info_cache.stripes_count = os_get_system_info()->logical_processor_count; - d_ctrl_state->module_image_info_cache.stripes = push_array(arena, CTRL_ModuleImageInfoCacheStripe, d_ctrl_state->module_image_info_cache.stripes_count); + d_ctrl_state->module_image_info_cache.stripes = push_array(arena, D_ModuleImageInfoCacheStripe, d_ctrl_state->module_image_info_cache.stripes_count); for(U64 idx = 0; idx < d_ctrl_state->module_image_info_cache.stripes_count; idx += 1) { d_ctrl_state->module_image_info_cache.stripes[idx].arena = arena_alloc(); @@ -77,7 +77,7 @@ d_init(void) d_ctrl_state->dmn_event_arena = arena_alloc(); d_ctrl_state->user_entry_point_arena = arena_alloc(); d_ctrl_state->dbg_dir_arena = arena_alloc(); - for(CTRL_ExceptionCodeKind k = (CTRL_ExceptionCodeKind)0; k < CTRL_ExceptionCodeKind_COUNT; k = (CTRL_ExceptionCodeKind)(k+1)) + for(D_ExceptionCodeKind k = (D_ExceptionCodeKind)0; k < D_ExceptionCodeKind_COUNT; k = (D_ExceptionCodeKind)(k+1)) { if(ctrl_exception_code_kind_default_enable_table[k]) { diff --git a/src/dbg_engine/dbg_engine_core.h b/src/dbg_engine/dbg_engine_core.h index c133cf57..f64f6e50 100644 --- a/src/dbg_engine/dbg_engine_core.h +++ b/src/dbg_engine/dbg_engine_core.h @@ -7,40 +7,40 @@ //////////////////////////////// //~ rjf: ID Types -typedef U64 CTRL_MsgID; -typedef U64 CTRL_MachineID; +typedef U64 D_MsgID; +typedef U64 D_MachineID; -#define CTRL_MachineID_Local (1) +#define D_MachineID_Local (1) //////////////////////////////// //~ rjf: Entity Handle Types -typedef struct CTRL_Handle CTRL_Handle; -struct CTRL_Handle +typedef struct D_Handle D_Handle; +struct D_Handle { - CTRL_MachineID machine_id; + D_MachineID machine_id; DMN_Handle dmn_handle; }; -typedef struct CTRL_HandleNode CTRL_HandleNode; -struct CTRL_HandleNode +typedef struct D_HandleNode D_HandleNode; +struct D_HandleNode { - CTRL_HandleNode *next; - CTRL_Handle v; + D_HandleNode *next; + D_Handle v; }; -typedef struct CTRL_HandleList CTRL_HandleList; -struct CTRL_HandleList +typedef struct D_HandleList D_HandleList; +struct D_HandleList { - CTRL_HandleNode *first; - CTRL_HandleNode *last; + D_HandleNode *first; + D_HandleNode *last; U64 count; }; -typedef struct CTRL_HandleArray CTRL_HandleArray; -struct CTRL_HandleArray +typedef struct D_HandleArray D_HandleArray; +struct D_HandleArray { - CTRL_Handle *v; + D_Handle *v; U64 count; }; @@ -52,12 +52,12 @@ struct CTRL_HandleArray //////////////////////////////// //~ rjf: User Breakpoint Types -typedef U32 CTRL_UserBreakpointFlags; +typedef U32 D_BreakpointFlags; enum { - CTRL_UserBreakpointFlag_BreakOnWrite = (1<<0), - CTRL_UserBreakpointFlag_BreakOnRead = (1<<1), - CTRL_UserBreakpointFlag_BreakOnExecute = (1<<2), + D_BreakpointFlag_BreakOnWrite = (1<<0), + D_BreakpointFlag_BreakOnRead = (1<<1), + D_BreakpointFlag_BreakOnExecute = (1<<2), }; typedef enum CTRL_UserBreakpointKind @@ -73,7 +73,7 @@ typedef struct CTRL_UserBreakpoint CTRL_UserBreakpoint; struct CTRL_UserBreakpoint { CTRL_UserBreakpointKind kind; - CTRL_UserBreakpointFlags flags; + D_BreakpointFlags flags; U64 id; String8 string; TxtPt pt; @@ -99,86 +99,86 @@ struct CTRL_UserBreakpointList //////////////////////////////// //~ Dynamic Linker Types -typedef U32 CTRL_TlsModel; +typedef U32 D_TlsModel; enum { - CTRL_TlsModel_Null, - CTRL_TlsModel_WinodwsNt, - CTRL_TlsModel_Gnu + D_TlsModel_Null, + D_TlsModel_WinodwsNt, + D_TlsModel_Gnu }; //////////////////////////////// //~ rjf: Entity Types -typedef struct CTRL_Entity CTRL_Entity; -struct CTRL_Entity +typedef struct D_Entity D_Entity; +struct D_Entity { - CTRL_Entity *first; - CTRL_Entity *last; - CTRL_Entity *next; - CTRL_Entity *prev; - CTRL_Entity *parent; - CTRL_EntityKind kind; + D_Entity *first; + D_Entity *last; + D_Entity *next; + D_Entity *prev; + D_Entity *parent; + D_EntityKind kind; Arch arch; B32 is_frozen; B32 is_soloed; U32 rgba; - CTRL_Handle handle; + D_Handle handle; U64 id; Rng1U64 vaddr_range; U64 stack_base; U64 timestamp; - CTRL_UserBreakpointFlags bp_flags; + D_BreakpointFlags bp_flags; String8 string; - CTRL_TlsModel tls_model; + D_TlsModel tls_model; U64 tls_index; U64 tls_offset; OperatingSystem target_os; }; -typedef struct CTRL_EntityNode CTRL_EntityNode; -struct CTRL_EntityNode +typedef struct D_EntityNode D_EntityNode; +struct D_EntityNode { - CTRL_EntityNode *next; - CTRL_Entity *v; + D_EntityNode *next; + D_Entity *v; }; -typedef struct CTRL_EntityList CTRL_EntityList; -struct CTRL_EntityList +typedef struct D_EntityList D_EntityList; +struct D_EntityList { - CTRL_EntityNode *first; - CTRL_EntityNode *last; + D_EntityNode *first; + D_EntityNode *last; U64 count; }; -typedef struct CTRL_EntityArray CTRL_EntityArray; -struct CTRL_EntityArray +typedef struct D_EntityArray D_EntityArray; +struct D_EntityArray { - CTRL_Entity **v; + D_Entity **v; U64 count; }; -typedef struct CTRL_EntityRec CTRL_EntityRec; -struct CTRL_EntityRec +typedef struct D_EntityRec D_EntityRec; +struct D_EntityRec { - CTRL_Entity *next; + D_Entity *next; S32 push_count; S64 pop_count; }; -typedef struct CTRL_EntityHashNode CTRL_EntityHashNode; -struct CTRL_EntityHashNode +typedef struct D_EntityHashNode D_EntityHashNode; +struct D_EntityHashNode { - CTRL_EntityHashNode *next; - CTRL_EntityHashNode *prev; - CTRL_Entity *entity; + D_EntityHashNode *next; + D_EntityHashNode *prev; + D_Entity *entity; }; -typedef struct CTRL_EntityHashSlot CTRL_EntityHashSlot; -struct CTRL_EntityHashSlot +typedef struct D_EntityHashSlot D_EntityHashSlot; +struct D_EntityHashSlot { - CTRL_EntityHashNode *first; - CTRL_EntityHashNode *last; + D_EntityHashNode *first; + D_EntityHashNode *last; }; typedef struct CTRL_EntityStringChunkNode CTRL_EntityStringChunkNode; @@ -200,33 +200,33 @@ read_only global U64 ctrl_entity_string_bucket_chunk_sizes[] = 0xffffffffffffffffull, }; -typedef struct CTRL_EntityCtx CTRL_EntityCtx; -struct CTRL_EntityCtx +typedef struct D_EntityCtx D_EntityCtx; +struct D_EntityCtx { - CTRL_Entity *root; + D_Entity *root; U64 hash_slots_count; - CTRL_EntityHashSlot *hash_slots; - U64 entity_kind_counts[CTRL_EntityKind_COUNT]; - U64 entity_kind_alloc_gens[CTRL_EntityKind_COUNT]; + D_EntityHashSlot *hash_slots; + U64 entity_kind_counts[D_EntityKind_COUNT]; + U64 entity_kind_alloc_gens[D_EntityKind_COUNT]; }; -typedef struct CTRL_EntityCtxRWStore CTRL_EntityCtxRWStore; -struct CTRL_EntityCtxRWStore +typedef struct D_EntityCtxRWStore D_EntityCtxRWStore; +struct D_EntityCtxRWStore { Arena *arena; - CTRL_EntityCtx ctx; - CTRL_Entity *free; - CTRL_EntityHashNode *hash_node_free; + D_EntityCtx ctx; + D_Entity *free; + D_EntityHashNode *hash_node_free; CTRL_EntityStringChunkNode *free_string_chunks[ArrayCount(ctrl_entity_string_bucket_chunk_sizes)]; }; -typedef struct CTRL_EntityCtxLookupAccel CTRL_EntityCtxLookupAccel; -struct CTRL_EntityCtxLookupAccel +typedef struct D_EntityCtxLookupAccel D_EntityCtxLookupAccel; +struct D_EntityCtxLookupAccel { Arena *arena; - Arena *entity_kind_arrays_arenas[CTRL_EntityKind_COUNT]; - CTRL_EntityArray entity_kind_arrays[CTRL_EntityKind_COUNT]; - U64 entity_kind_arrays_gens[CTRL_EntityKind_COUNT]; + Arena *entity_kind_arrays_arenas[D_EntityKind_COUNT]; + D_EntityArray entity_kind_arrays[D_EntityKind_COUNT]; + U64 entity_kind_arrays_gens[D_EntityKind_COUNT]; }; //////////////////////////////// @@ -253,14 +253,6 @@ struct D_TargetArray U64 count; }; -typedef U32 D_BreakpointFlags; -enum -{ - D_BreakpointFlag_BreakOnWrite = (1<<0), - D_BreakpointFlag_BreakOnRead = (1<<1), - D_BreakpointFlag_BreakOnExecute = (1<<2), -}; - typedef struct D_Breakpoint D_Breakpoint; struct D_Breakpoint { @@ -294,93 +286,43 @@ struct D_PathMapArray U64 count; }; -//////////////////////////////// -//~ rjf: Tick Output Types - -typedef enum D_EventKind -{ - D_EventKind_Null, - D_EventKind_ModuleLoad, - D_EventKind_ProcessEnd, - D_EventKind_Stop, - D_EventKind_COUNT -} -D_EventKind; - -typedef enum D_EventCause -{ - D_EventCause_Null, - D_EventCause_UserBreakpoint, - D_EventCause_Halt, - D_EventCause_SoftHalt, - D_EventCause_COUNT -} -D_EventCause; - -typedef struct D_Event D_Event; -struct D_Event -{ - D_EventKind kind; - D_EventCause cause; - CTRL_Handle module; - CTRL_Handle thread; - U64 vaddr; - U64 code; - U64 id; -}; - -typedef struct D_EventNode D_EventNode; -struct D_EventNode -{ - D_EventNode *next; - D_Event v; -}; - -typedef struct D_EventList D_EventList; -struct D_EventList -{ - D_EventNode *first; - D_EventNode *last; - U64 count; -}; - //////////////////////////////// //~ rjf: Trap Types -typedef U32 CTRL_TrapFlags; +typedef U32 D_TrapFlags; enum { - CTRL_TrapFlag_IgnoreStackPointerCheck = (1<<0), - CTRL_TrapFlag_SingleStepAfterHit = (1<<1), - CTRL_TrapFlag_SaveStackPointer = (1<<2), - CTRL_TrapFlag_BeginSpoofMode = (1<<3), - CTRL_TrapFlag_EndStepping = (1<<4), + D_TrapFlag_IgnoreStackPointerCheck = (1<<0), + D_TrapFlag_SingleStepAfterHit = (1<<1), + D_TrapFlag_SaveStackPointer = (1<<2), + D_TrapFlag_BeginSpoofMode = (1<<3), + D_TrapFlag_EndStepping = (1<<4), }; -typedef struct CTRL_Trap CTRL_Trap; -struct CTRL_Trap +typedef struct D_Trap D_Trap; +struct D_Trap { - CTRL_TrapFlags flags; + D_TrapFlags flags; U64 vaddr; }; -typedef struct CTRL_TrapNode CTRL_TrapNode; -struct CTRL_TrapNode +typedef struct D_TrapNode D_TrapNode; +struct D_TrapNode { - CTRL_TrapNode *next; - CTRL_Trap v; + D_TrapNode *next; + D_Trap v; }; -typedef struct CTRL_TrapList CTRL_TrapList; -struct CTRL_TrapList +typedef struct D_TrapList D_TrapList; +struct D_TrapList { - CTRL_TrapNode *first; - CTRL_TrapNode *last; + D_TrapNode *first; + D_TrapNode *last; U64 count; }; -typedef struct CTRL_Spoof CTRL_Spoof; -struct CTRL_Spoof +typedef struct D_Spoof D_Spoof; +struct D_Spoof { DMN_Handle process; DMN_Handle thread; @@ -394,7 +336,7 @@ struct CTRL_Spoof typedef struct D_TrapNet D_TrapNet; struct D_TrapNet { - CTRL_TrapList traps; + D_TrapList traps; B32 good_line_info; B32 good_read; }; diff --git a/src/dbg_engine/dbg_engine_ctrl.c b/src/dbg_engine/dbg_engine_ctrl.c index 1f046cb2..c6608ec3 100644 --- a/src/dbg_engine/dbg_engine_ctrl.c +++ b/src/dbg_engine/dbg_engine_ctrl.c @@ -18,110 +18,110 @@ ctrl_hash_from_string(String8 string) } internal U64 -ctrl_hash_from_handle(CTRL_Handle handle) +ctrl_hash_from_handle(D_Handle handle) { U64 buf[] = {handle.machine_id, handle.dmn_handle.u64[0]}; U64 hash = ctrl_hash_from_string(str8((U8 *)buf, sizeof(buf))); return hash; } -internal CTRL_EventCause +internal D_EventCause ctrl_event_cause_from_dmn_event_kind(DMN_EventKind event_kind) { - CTRL_EventCause cause = CTRL_EventCause_Null; + D_EventCause cause = D_EventCause_Null; switch(event_kind) { default:{}break; - case DMN_EventKind_Error: {cause = CTRL_EventCause_Error;}break; - case DMN_EventKind_Exception:{cause = CTRL_EventCause_InterruptedByException;}break; - case DMN_EventKind_Trap: {cause = CTRL_EventCause_InterruptedByTrap;}break; - case DMN_EventKind_Halt: {cause = CTRL_EventCause_InterruptedByHalt;}break; + case DMN_EventKind_Error: {cause = D_EventCause_Error;}break; + case DMN_EventKind_Exception:{cause = D_EventCause_InterruptedByException;}break; + case DMN_EventKind_Trap: {cause = D_EventCause_InterruptedByTrap;}break; + case DMN_EventKind_Halt: {cause = D_EventCause_InterruptedByHalt;}break; } return cause; } -internal CTRL_ExceptionKind +internal D_ExceptionKind ctrl_exception_kind_from_dmn(DMN_ExceptionKind kind) { - CTRL_ExceptionKind result = CTRL_ExceptionKind_Null; + D_ExceptionKind result = D_ExceptionKind_Null; switch(kind) { default:{}break; - case DMN_ExceptionKind_MemoryRead: {result = CTRL_ExceptionKind_MemoryRead;}break; - case DMN_ExceptionKind_MemoryWrite: {result = CTRL_ExceptionKind_MemoryWrite;}break; - case DMN_ExceptionKind_MemoryExecute: {result = CTRL_ExceptionKind_MemoryExecute;}break; - case DMN_ExceptionKind_CppThrow: {result = CTRL_ExceptionKind_CppThrow;}break; + case DMN_ExceptionKind_MemoryRead: {result = D_ExceptionKind_MemoryRead;}break; + case DMN_ExceptionKind_MemoryWrite: {result = D_ExceptionKind_MemoryWrite;}break; + case DMN_ExceptionKind_MemoryExecute: {result = D_ExceptionKind_MemoryExecute;}break; + case DMN_ExceptionKind_CppThrow: {result = D_ExceptionKind_CppThrow;}break; } return result; } -internal CTRL_TlsModel +internal D_TlsModel ctrl_dynamic_linker_type_from_dmn(DMN_TlsModel type) { - CTRL_TlsModel result = CTRL_TlsModel_Null; + D_TlsModel result = D_TlsModel_Null; switch(type) { default:{}break; - case DMN_TlsModel_Null: {result = CTRL_TlsModel_Null;}break; - case DMN_TlsModel_WinodwsNt: {result = CTRL_TlsModel_WinodwsNt;}break; - case DMN_TlsModel_Gnu: {result = CTRL_TlsModel_Gnu;}break; + case DMN_TlsModel_Null: {result = D_TlsModel_Null;}break; + case DMN_TlsModel_WinodwsNt: {result = D_TlsModel_WinodwsNt;}break; + case DMN_TlsModel_Gnu: {result = D_TlsModel_Gnu;}break; } return result; } internal String8 -ctrl_string_from_event_kind(CTRL_EventKind kind) +ctrl_string_from_event_kind(D_EventKind kind) { String8 result = {0}; switch(kind) { default:{}break; - case CTRL_EventKind_Null: { result = str8_lit("Null");}break; - case CTRL_EventKind_Error: { result = str8_lit("Error");}break; - case CTRL_EventKind_Started: { result = str8_lit("Started");}break; - case CTRL_EventKind_Stopped: { result = str8_lit("Stopped");}break; - case CTRL_EventKind_NewProc: { result = str8_lit("NewProc");}break; - case CTRL_EventKind_NewThread: { result = str8_lit("NewThread");}break; - case CTRL_EventKind_NewModule: { result = str8_lit("NewModule");}break; - case CTRL_EventKind_EndProc: { result = str8_lit("EndProc");}break; - case CTRL_EventKind_EndThread: { result = str8_lit("EndThread");}break; - case CTRL_EventKind_EndModule: { result = str8_lit("EndModule");}break; - case CTRL_EventKind_ModuleDebugInfoPathChange: { result = str8_lit("ModuleDebugInfoPathChange");}break; - case CTRL_EventKind_DebugString: { result = str8_lit("DebugString");}break; - case CTRL_EventKind_ThreadName: { result = str8_lit("ThreadName");}break; - case CTRL_EventKind_MemReserve: { result = str8_lit("MemReserve");}break; - case CTRL_EventKind_MemCommit: { result = str8_lit("MemCommit");}break; - case CTRL_EventKind_MemDecommit: { result = str8_lit("MemDecommit");}break; - case CTRL_EventKind_MemRelease: { result = str8_lit("MemRelease");}break; + case D_EventKind_Null: { result = str8_lit("Null");}break; + case D_EventKind_Error: { result = str8_lit("Error");}break; + case D_EventKind_Started: { result = str8_lit("Started");}break; + case D_EventKind_Stopped: { result = str8_lit("Stopped");}break; + case D_EventKind_NewProc: { result = str8_lit("NewProc");}break; + case D_EventKind_NewThread: { result = str8_lit("NewThread");}break; + case D_EventKind_NewModule: { result = str8_lit("NewModule");}break; + case D_EventKind_EndProc: { result = str8_lit("EndProc");}break; + case D_EventKind_EndThread: { result = str8_lit("EndThread");}break; + case D_EventKind_EndModule: { result = str8_lit("EndModule");}break; + case D_EventKind_ModuleDebugInfoPathChange: { result = str8_lit("ModuleDebugInfoPathChange");}break; + case D_EventKind_DebugString: { result = str8_lit("DebugString");}break; + case D_EventKind_ThreadName: { result = str8_lit("ThreadName");}break; + case D_EventKind_MemReserve: { result = str8_lit("MemReserve");}break; + case D_EventKind_MemCommit: { result = str8_lit("MemCommit");}break; + case D_EventKind_MemDecommit: { result = str8_lit("MemDecommit");}break; + case D_EventKind_MemRelease: { result = str8_lit("MemRelease");}break; } return result; } internal String8 -ctrl_string_from_msg_kind(CTRL_MsgKind kind) +ctrl_string_from_msg_kind(D_MsgKind kind) { String8 result = {0}; switch(kind) { default:{}break; - case CTRL_MsgKind_Launch: {result = str8_lit("Launch");}break; - case CTRL_MsgKind_Attach: {result = str8_lit("Attach");}break; - case CTRL_MsgKind_Kill: {result = str8_lit("Kill");}break; - case CTRL_MsgKind_KillAll: {result = str8_lit("KillAll");}break; - case CTRL_MsgKind_Detach: {result = str8_lit("Detach");}break; - case CTRL_MsgKind_Run: {result = str8_lit("Run");}break; - case CTRL_MsgKind_SingleStep: {result = str8_lit("SingleStep");}break; - case CTRL_MsgKind_SetUserEntryPoints: {result = str8_lit("SetUserEntryPoints");}break; - case CTRL_MsgKind_SetModuleDebugInfoPath: {result = str8_lit("SetModuleDebugInfoPath");}break; + case D_MsgKind_Launch: {result = str8_lit("Launch");}break; + case D_MsgKind_Attach: {result = str8_lit("Attach");}break; + case D_MsgKind_Kill: {result = str8_lit("Kill");}break; + case D_MsgKind_KillAll: {result = str8_lit("KillAll");}break; + case D_MsgKind_Detach: {result = str8_lit("Detach");}break; + case D_MsgKind_Run: {result = str8_lit("Run");}break; + case D_MsgKind_SingleStep: {result = str8_lit("SingleStep");}break; + case D_MsgKind_SetUserEntryPoints: {result = str8_lit("SetUserEntryPoints");}break; + case D_MsgKind_SetModuleDebugInfoPath: {result = str8_lit("SetModuleDebugInfoPath");}break; } return result; } -internal CTRL_EntityKind +internal D_EntityKind ctrl_entity_kind_from_string(String8 string) { - CTRL_EntityKind result = CTRL_EntityKind_Null; - for EachNonZeroEnumVal(CTRL_EntityKind, k) + D_EntityKind result = D_EntityKind_Null; + for EachNonZeroEnumVal(D_EntityKind, k) { if(str8_match(ctrl_entity_kind_code_name_table[k], string, 0)) { @@ -133,44 +133,44 @@ ctrl_entity_kind_from_string(String8 string) } internal DMN_TrapFlags -ctrl_dmn_trap_flags_from_user_breakpoint_flags(CTRL_UserBreakpointFlags flags) +ctrl_dmn_trap_flags_from_user_breakpoint_flags(D_BreakpointFlags flags) { DMN_TrapFlags result = 0; - if(flags & CTRL_UserBreakpointFlag_BreakOnWrite) { result |= DMN_TrapFlag_BreakOnWrite; } - if(flags & CTRL_UserBreakpointFlag_BreakOnRead) { result |= DMN_TrapFlag_BreakOnRead; } - if(flags & CTRL_UserBreakpointFlag_BreakOnExecute) { result |= DMN_TrapFlag_BreakOnExecute; } + if(flags & D_BreakpointFlag_BreakOnWrite) { result |= DMN_TrapFlag_BreakOnWrite; } + if(flags & D_BreakpointFlag_BreakOnRead) { result |= DMN_TrapFlag_BreakOnRead; } + if(flags & D_BreakpointFlag_BreakOnExecute) { result |= DMN_TrapFlag_BreakOnExecute; } return result; } -internal CTRL_UserBreakpointFlags +internal D_BreakpointFlags ctrl_user_breakpoint_flags_from_dmn_trap_flags(DMN_TrapFlags flags) { - CTRL_UserBreakpointFlags result = 0; - if(flags & DMN_TrapFlag_BreakOnWrite) { result |= CTRL_UserBreakpointFlag_BreakOnWrite; } - if(flags & DMN_TrapFlag_BreakOnRead) { result |= CTRL_UserBreakpointFlag_BreakOnRead; } - if(flags & DMN_TrapFlag_BreakOnExecute) { result |= CTRL_UserBreakpointFlag_BreakOnExecute; } + D_BreakpointFlags result = 0; + if(flags & DMN_TrapFlag_BreakOnWrite) { result |= D_BreakpointFlag_BreakOnWrite; } + if(flags & DMN_TrapFlag_BreakOnRead) { result |= D_BreakpointFlag_BreakOnRead; } + if(flags & DMN_TrapFlag_BreakOnExecute) { result |= D_BreakpointFlag_BreakOnExecute; } return result; } //////////////////////////////// //~ rjf: Machine/Handle Pair Type Functions -internal CTRL_Handle +internal D_Handle ctrl_handle_zero(void) { - CTRL_Handle handle = {0}; + D_Handle handle = {0}; return handle; } -internal CTRL_Handle -ctrl_handle_make(CTRL_MachineID machine_id, DMN_Handle dmn_handle) +internal D_Handle +ctrl_handle_make(D_MachineID machine_id, DMN_Handle dmn_handle) { - CTRL_Handle handle = {machine_id, dmn_handle}; + D_Handle handle = {machine_id, dmn_handle}; return handle; } internal B32 -ctrl_handle_match(CTRL_Handle a, CTRL_Handle b) +ctrl_handle_match(D_Handle a, D_Handle b) { B32 result = (a.machine_id == b.machine_id && dmn_handle_match(a.dmn_handle, b.dmn_handle)); @@ -178,34 +178,34 @@ ctrl_handle_match(CTRL_Handle a, CTRL_Handle b) } internal void -ctrl_handle_list_push(Arena *arena, CTRL_HandleList *list, CTRL_Handle *pair) +ctrl_handle_list_push(Arena *arena, D_HandleList *list, D_Handle *pair) { - CTRL_HandleNode *n = push_array(arena, CTRL_HandleNode, 1); + D_HandleNode *n = push_array(arena, D_HandleNode, 1); MemoryCopyStruct(&n->v, pair); SLLQueuePush(list->first, list->last, n); list->count += 1; } -internal CTRL_HandleList -ctrl_handle_list_copy(Arena *arena, CTRL_HandleList *src) +internal D_HandleList +ctrl_handle_list_copy(Arena *arena, D_HandleList *src) { - CTRL_HandleList dst = {0}; - for(CTRL_HandleNode *n = src->first; n != 0; n = n->next) + D_HandleList dst = {0}; + for(D_HandleNode *n = src->first; n != 0; n = n->next) { ctrl_handle_list_push(arena, &dst, &n->v); } return dst; } -internal CTRL_HandleArray -ctrl_handle_array_from_list(Arena *arena, CTRL_HandleList *src) +internal D_HandleArray +ctrl_handle_array_from_list(Arena *arena, D_HandleList *src) { - CTRL_HandleArray array = {0}; + D_HandleArray array = {0}; array.count = src->count; - array.v = push_array_no_zero(arena, CTRL_Handle, array.count); + array.v = push_array_no_zero(arena, D_Handle, array.count); { U64 idx = 0; - for(CTRL_HandleNode *n = src->first; n != 0; n = n->next, idx += 1) + for(D_HandleNode *n = src->first; n != 0; n = n->next, idx += 1) { array.v[idx] = n->v; } @@ -214,23 +214,23 @@ ctrl_handle_array_from_list(Arena *arena, CTRL_HandleList *src) } internal String8 -ctrl_string_from_handle(Arena *arena, CTRL_Handle handle) +ctrl_string_from_handle(Arena *arena, D_Handle handle) { String8 result = push_str8f(arena, "$%I64x$%I64x", handle.machine_id, handle.dmn_handle.u64[0]); return result; } -internal CTRL_Handle +internal D_Handle ctrl_handle_from_string(String8 string) { - CTRL_Handle handle = {0}; + D_Handle handle = {0}; { Temp scratch = scratch_begin(0, 0); U8 split = '$'; String8List parts = str8_split(scratch.arena, string, &split, 1, 0); if(parts.first && parts.first->next) { - CTRL_MachineID machine_id = u64_from_str8(parts.first->string, 16); + D_MachineID machine_id = u64_from_str8(parts.first->string, 16); DMN_Handle dmn_handle = {0}; dmn_handle.u64[0] = u64_from_str8(parts.first->next->string, 16); handle.machine_id = machine_id; @@ -245,19 +245,19 @@ ctrl_handle_from_string(String8 string) //~ rjf: Trap Type Functions internal void -ctrl_trap_list_push(Arena *arena, CTRL_TrapList *list, CTRL_Trap *trap) +ctrl_trap_list_push(Arena *arena, D_TrapList *list, D_Trap *trap) { - CTRL_TrapNode *node = push_array(arena, CTRL_TrapNode, 1); + D_TrapNode *node = push_array(arena, D_TrapNode, 1); MemoryCopyStruct(&node->v, trap); SLLQueuePush(list->first, list->last, node); list->count += 1; } -internal CTRL_TrapList -ctrl_trap_list_copy(Arena *arena, CTRL_TrapList *src) +internal D_TrapList +ctrl_trap_list_copy(Arena *arena, D_TrapList *src) { - CTRL_TrapList dst = {0}; - for(CTRL_TrapNode *src_n = src->first; src_n != 0; src_n = src_n->next) + D_TrapList dst = {0}; + for(D_TrapNode *src_n = src->first; src_n != 0; src_n = src_n->next) { ctrl_trap_list_push(arena, &dst, &src_n->v); } @@ -297,7 +297,7 @@ ctrl_user_breakpoint_list_copy(Arena *arena, CTRL_UserBreakpointList *src) //- rjf: deep copying internal void -ctrl_msg_deep_copy(Arena *arena, CTRL_Msg *dst, CTRL_Msg *src) +ctrl_msg_deep_copy(Arena *arena, D_Msg *dst, D_Msg *src) { MemoryCopyStruct(dst, src); dst->path = push_str8_copy(arena, src->path); @@ -310,31 +310,31 @@ ctrl_msg_deep_copy(Arena *arena, CTRL_Msg *dst, CTRL_Msg *src) //- rjf: list building -internal CTRL_Msg * -ctrl_msg_list_push(Arena *arena, CTRL_MsgList *list) +internal D_Msg * +ctrl_msg_list_push(Arena *arena, D_MsgList *list) { - CTRL_MsgNode *n = push_array(arena, CTRL_MsgNode, 1); + D_MsgNode *n = push_array(arena, D_MsgNode, 1); SLLQueuePush(list->first, list->last, n); list->count += 1; - CTRL_Msg *msg = &n->v; + D_Msg *msg = &n->v; return msg; } -internal CTRL_MsgList -ctrl_msg_list_deep_copy(Arena *arena, CTRL_MsgList *src) +internal D_MsgList +ctrl_msg_list_deep_copy(Arena *arena, D_MsgList *src) { - CTRL_MsgList dst = {0}; - for(CTRL_MsgNode *n = src->first; n != 0; n = n->next) + D_MsgList dst = {0}; + for(D_MsgNode *n = src->first; n != 0; n = n->next) { - CTRL_Msg *src_msg = &n->v; - CTRL_Msg *dst_msg = ctrl_msg_list_push(arena, &dst); + D_Msg *src_msg = &n->v; + D_Msg *dst_msg = ctrl_msg_list_push(arena, &dst); ctrl_msg_deep_copy(arena, dst_msg, src_msg); } return dst; } internal void -ctrl_msg_list_concat_in_place(CTRL_MsgList *dst, CTRL_MsgList *src) +ctrl_msg_list_concat_in_place(D_MsgList *dst, D_MsgList *src) { if(dst->last && src->first) { @@ -352,7 +352,7 @@ ctrl_msg_list_concat_in_place(CTRL_MsgList *dst, CTRL_MsgList *src) //- rjf: serialization internal String8 -ctrl_serialized_string_from_msg_list(Arena *arena, CTRL_MsgList *msgs) +ctrl_serialized_string_from_msg_list(Arena *arena, D_MsgList *msgs) { Temp scratch = scratch_begin(&arena, 1); String8List msgs_srlzed = {0}; @@ -362,9 +362,9 @@ ctrl_serialized_string_from_msg_list(Arena *arena, CTRL_MsgList *msgs) str8_serial_push_struct(scratch.arena, &msgs_srlzed, &msgs->count); // rjf: write all message data - for(CTRL_MsgNode *msg_n = msgs->first; msg_n != 0; msg_n = msg_n->next) + for(D_MsgNode *msg_n = msgs->first; msg_n != 0; msg_n = msg_n->next) { - CTRL_Msg *msg = &msg_n->v; + D_Msg *msg = &msg_n->v; // rjf: write flat parts str8_serial_push_struct(scratch.arena, &msgs_srlzed, &msg->kind); @@ -416,9 +416,9 @@ ctrl_serialized_string_from_msg_list(Arena *arena, CTRL_MsgList *msgs) // rjf: write trap list str8_serial_push_struct(scratch.arena, &msgs_srlzed, &msg->traps.count); - for(CTRL_TrapNode *n = msg->traps.first; n != 0; n = n->next) + for(D_TrapNode *n = msg->traps.first; n != 0; n = n->next) { - CTRL_Trap *trap = &n->v; + D_Trap *trap = &n->v; str8_serial_push_struct(scratch.arena, &msgs_srlzed, &trap->flags); str8_serial_push_struct(scratch.arena, &msgs_srlzed, &trap->vaddr); } @@ -445,10 +445,10 @@ ctrl_serialized_string_from_msg_list(Arena *arena, CTRL_MsgList *msgs) return string; } -internal CTRL_MsgList +internal D_MsgList ctrl_msg_list_from_serialized_string(Arena *arena, String8 string) { - CTRL_MsgList msgs = {0}; + D_MsgList msgs = {0}; { U64 read_off = 0; @@ -460,10 +460,10 @@ ctrl_msg_list_from_serialized_string(Arena *arena, String8 string) for(U64 msg_idx = 0; msg_idx < msg_count; msg_idx += 1) { // rjf: construct message - CTRL_MsgNode *msg_node = push_array(arena, CTRL_MsgNode, 1); + D_MsgNode *msg_node = push_array(arena, D_MsgNode, 1); SLLQueuePush(msgs.first, msgs.last, msg_node); msgs.count += 1; - CTRL_Msg *msg = &msg_node->v; + D_Msg *msg = &msg_node->v; // rjf: read flat data read_off += str8_deserial_read_struct(string, read_off, &msg->kind); @@ -534,10 +534,10 @@ ctrl_msg_list_from_serialized_string(Arena *arena, String8 string) read_off += str8_deserial_read_struct(string, read_off, &trap_count); for(U64 idx = 0; idx < trap_count; idx += 1) { - CTRL_TrapNode *n = push_array(arena, CTRL_TrapNode, 1); + D_TrapNode *n = push_array(arena, D_TrapNode, 1); SLLQueuePush(msg->traps.first, msg->traps.last, n); msg->traps.count += 1; - CTRL_Trap *trap = &n->v; + D_Trap *trap = &n->v; read_off += str8_deserial_read_struct(string, read_off, &trap->flags); read_off += str8_deserial_read_struct(string, read_off, &trap->vaddr); } @@ -573,18 +573,18 @@ ctrl_msg_list_from_serialized_string(Arena *arena, String8 string) //- rjf: list building -internal CTRL_Event * -ctrl_event_list_push(Arena *arena, CTRL_EventList *list) +internal D_Event * +ctrl_event_list_push(Arena *arena, D_EventList *list) { - CTRL_EventNode *n = push_array(arena, CTRL_EventNode, 1); + D_EventNode *n = push_array(arena, D_EventNode, 1); SLLQueuePush(list->first, list->last, n); list->count += 1; - CTRL_Event *event = &n->v; + D_Event *event = &n->v; return event; } internal void -ctrl_event_list_concat_in_place(CTRL_EventList *dst, CTRL_EventList *to_push) +ctrl_event_list_concat_in_place(D_EventList *dst, D_EventList *to_push) { if(dst->last == 0) { @@ -602,7 +602,7 @@ ctrl_event_list_concat_in_place(CTRL_EventList *dst, CTRL_EventList *to_push) //- rjf: serialization internal String8 -ctrl_serialized_string_from_event(Arena *arena, CTRL_Event *event, U64 max) +ctrl_serialized_string_from_event(Arena *arena, D_Event *event, U64 max) { Temp scratch = scratch_begin(&arena, 1); String8List srl = {0}; @@ -639,10 +639,10 @@ ctrl_serialized_string_from_event(Arena *arena, CTRL_Event *event, U64 max) return string; } -internal CTRL_Event +internal D_Event ctrl_event_from_serialized_string(Arena *arena, String8 string) { - CTRL_Event event = zero_struct; + D_Event event = zero_struct; { U64 read_off = 0; read_off += str8_deserial_read_struct(string, read_off, &event.kind); @@ -679,21 +679,21 @@ ctrl_event_from_serialized_string(Arena *arena, String8 string) //- rjf: entity list data structures internal void -ctrl_entity_list_push(Arena *arena, CTRL_EntityList *list, CTRL_Entity *entity) +ctrl_entity_list_push(Arena *arena, D_EntityList *list, D_Entity *entity) { - CTRL_EntityNode *n = push_array(arena, CTRL_EntityNode, 1); + D_EntityNode *n = push_array(arena, D_EntityNode, 1); n->v = entity; SLLQueuePush(list->first, list->last, n); list->count += 1; } -internal CTRL_EntityList -ctrl_entity_list_from_handle_list(Arena *arena, CTRL_EntityCtx *ctx, CTRL_HandleList *list) +internal D_EntityList +ctrl_entity_list_from_handle_list(Arena *arena, D_EntityCtx *ctx, D_HandleList *list) { - CTRL_EntityList result = {0}; - for(CTRL_HandleNode *n = list->first; n != 0; n = n->next) + D_EntityList result = {0}; + for(D_HandleNode *n = list->first; n != 0; n = n->next) { - CTRL_Entity *entity = ctrl_entity_from_handle(ctx, n->v); + D_Entity *entity = ctrl_entity_from_handle(ctx, n->v); ctrl_entity_list_push(arena, &result, entity); } return result; @@ -701,14 +701,14 @@ ctrl_entity_list_from_handle_list(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle //- rjf: entity array data structure -internal CTRL_EntityArray -ctrl_entity_array_from_list(Arena *arena, CTRL_EntityList *list) +internal D_EntityArray +ctrl_entity_array_from_list(Arena *arena, D_EntityList *list) { - CTRL_EntityArray result = {0}; + D_EntityArray result = {0}; result.count = list->count; - result.v = push_array_no_zero(arena, CTRL_Entity *, result.count); + result.v = push_array_no_zero(arena, D_Entity *, result.count); U64 idx = 0; - for(CTRL_EntityNode *n = list->first; n != 0; n = n->next, idx += 1) + for(D_EntityNode *n = list->first; n != 0; n = n->next, idx += 1) { result.v[idx] = n->v; } @@ -717,17 +717,17 @@ ctrl_entity_array_from_list(Arena *arena, CTRL_EntityList *list) //- rjf: entity context (entity group read-only) functions -internal CTRL_Entity * -ctrl_entity_from_handle(CTRL_EntityCtx *ctx, CTRL_Handle handle) +internal D_Entity * +ctrl_entity_from_handle(D_EntityCtx *ctx, D_Handle handle) { - CTRL_Entity *entity = &ctrl_entity_nil; + D_Entity *entity = &d_entity_nil; if(!ctrl_handle_match(handle, ctrl_handle_zero())) { U64 hash = ctrl_hash_from_handle(handle); U64 slot_idx = hash%ctx->hash_slots_count; - CTRL_EntityHashSlot *slot = &ctx->hash_slots[slot_idx]; - CTRL_EntityHashNode *node = 0; - for(CTRL_EntityHashNode *n = slot->first; n != 0; n = n->next) + D_EntityHashSlot *slot = &ctx->hash_slots[slot_idx]; + D_EntityHashNode *node = 0; + for(D_EntityHashNode *n = slot->first; n != 0; n = n->next) { if(ctrl_handle_match(n->entity->handle, handle)) { @@ -739,12 +739,12 @@ ctrl_entity_from_handle(CTRL_EntityCtx *ctx, CTRL_Handle handle) return entity; } -internal CTRL_Entity * -ctrl_entity_child_from_kind(CTRL_Entity *parent, CTRL_EntityKind kind) +internal D_Entity * +ctrl_entity_child_from_kind(D_Entity *parent, D_EntityKind kind) { - CTRL_Entity *result = &ctrl_entity_nil; - for(CTRL_Entity *child = parent->first; - child != &ctrl_entity_nil; + D_Entity *result = &d_entity_nil; + for(D_Entity *child = parent->first; + child != &d_entity_nil; child = child->next) { if(child->kind == kind) @@ -756,11 +756,11 @@ ctrl_entity_child_from_kind(CTRL_Entity *parent, CTRL_EntityKind kind) return result; } -internal CTRL_Entity * -ctrl_entity_ancestor_from_kind(CTRL_Entity *entity, CTRL_EntityKind kind) +internal D_Entity * +ctrl_entity_ancestor_from_kind(D_Entity *entity, D_EntityKind kind) { - CTRL_Entity *result = &ctrl_entity_nil; - for(CTRL_Entity *p = entity->parent; p != &ctrl_entity_nil; p = p->parent) + D_Entity *result = &d_entity_nil; + for(D_Entity *p = entity->parent; p != &d_entity_nil; p = p->parent) { if(p->kind == kind) { @@ -771,30 +771,30 @@ ctrl_entity_ancestor_from_kind(CTRL_Entity *entity, CTRL_EntityKind kind) return result; } -internal CTRL_Entity * -ctrl_process_from_entity(CTRL_Entity *entity) +internal D_Entity * +ctrl_process_from_entity(D_Entity *entity) { - CTRL_Entity *result = &ctrl_entity_nil; - if(entity->kind == CTRL_EntityKind_Process) + D_Entity *result = &d_entity_nil; + if(entity->kind == D_EntityKind_Process) { result = entity; } else { - result = ctrl_entity_ancestor_from_kind(entity, CTRL_EntityKind_Process); + result = ctrl_entity_ancestor_from_kind(entity, D_EntityKind_Process); } return result; } -internal CTRL_Entity * -ctrl_module_from_process_vaddr(CTRL_Entity *process, U64 vaddr) +internal D_Entity * +ctrl_module_from_process_vaddr(D_Entity *process, U64 vaddr) { - CTRL_Entity *result = &ctrl_entity_nil; - for(CTRL_Entity *child = process->first; - child != &ctrl_entity_nil; + D_Entity *result = &d_entity_nil; + for(D_Entity *child = process->first; + child != &d_entity_nil; child = child->next) { - if(child->kind == CTRL_EntityKind_Module && contains_1u64(child->vaddr_range, vaddr)) + if(child->kind == D_EntityKind_Module && contains_1u64(child->vaddr_range, vaddr)) { result = child; break; @@ -804,24 +804,24 @@ ctrl_module_from_process_vaddr(CTRL_Entity *process, U64 vaddr) } internal DI_Key -ctrl_dbgi_key_from_module(CTRL_Entity *module) +ctrl_dbgi_key_from_module(D_Entity *module) { - CTRL_Entity *debug_info_path = ctrl_entity_child_from_kind(module, CTRL_EntityKind_DebugInfoPath); + D_Entity *debug_info_path = ctrl_entity_child_from_kind(module, D_EntityKind_DebugInfoPath); DI_Key dbgi_key = di_key_from_path_timestamp(debug_info_path->string, debug_info_path->timestamp); return dbgi_key; } -internal CTRL_Entity * -ctrl_module_from_thread_candidates(CTRL_EntityCtx *ctx, CTRL_Entity *thread, CTRL_EntityList *candidates) +internal D_Entity * +ctrl_module_from_thread_candidates(D_EntityCtx *ctx, D_Entity *thread, D_EntityList *candidates) { - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process); + D_Entity *process = ctrl_entity_ancestor_from_kind(thread, D_EntityKind_Process); U64 thread_rip_vaddr = ctrl_rip_from_thread(ctx, thread->handle); - CTRL_Entity *src_module = ctrl_module_from_process_vaddr(process, thread_rip_vaddr); - CTRL_Entity *module = &ctrl_entity_nil; - for(CTRL_EntityNode *n = candidates->first; n != 0; n = n->next) + D_Entity *src_module = ctrl_module_from_process_vaddr(process, thread_rip_vaddr); + D_Entity *module = &d_entity_nil; + for(D_EntityNode *n = candidates->first; n != 0; n = n->next) { - CTRL_Entity *candidate_module = n->v; - CTRL_Entity *candidate_process = ctrl_entity_ancestor_from_kind(candidate_module, CTRL_EntityKind_Process); + D_Entity *candidate_module = n->v; + D_Entity *candidate_process = ctrl_entity_ancestor_from_kind(candidate_module, D_EntityKind_Process); if(candidate_process == process) { module = candidate_module; @@ -835,21 +835,21 @@ ctrl_module_from_thread_candidates(CTRL_EntityCtx *ctx, CTRL_Entity *thread, CTR } internal U64 -ctrl_vaddr_from_voff(CTRL_Entity *module, U64 voff) +ctrl_vaddr_from_voff(D_Entity *module, U64 voff) { U64 result = voff + module->vaddr_range.min; return result; } internal U64 -ctrl_voff_from_vaddr(CTRL_Entity *module, U64 vaddr) +ctrl_voff_from_vaddr(D_Entity *module, U64 vaddr) { U64 result = vaddr - module->vaddr_range.min; return result; } internal Rng1U64 -ctrl_vaddr_range_from_voff_range(CTRL_Entity *module, Rng1U64 voff_range) +ctrl_vaddr_range_from_voff_range(D_Entity *module, Rng1U64 voff_range) { U64 dim = dim_1u64(voff_range); U64 min = ctrl_vaddr_from_voff(module, voff_range.min); @@ -858,7 +858,7 @@ ctrl_vaddr_range_from_voff_range(CTRL_Entity *module, Rng1U64 voff_range) } internal Rng1U64 -ctrl_voff_range_from_vaddr_range(CTRL_Entity *module, Rng1U64 vaddr_range) +ctrl_voff_range_from_vaddr_range(D_Entity *module, Rng1U64 vaddr_range) { U64 dim = dim_1u64(vaddr_range); U64 min = ctrl_voff_from_vaddr(module, vaddr_range.min); @@ -867,12 +867,12 @@ ctrl_voff_range_from_vaddr_range(CTRL_Entity *module, Rng1U64 vaddr_range) } internal B32 -ctrl_entity_tree_is_frozen(CTRL_Entity *root) +ctrl_entity_tree_is_frozen(D_Entity *root) { B32 is_frozen = 1; - for(CTRL_Entity *e = root; e != &ctrl_entity_nil; e = ctrl_entity_rec_depth_first_pre(e, root).next) + for(D_Entity *e = root; e != &d_entity_nil; e = ctrl_entity_rec_depth_first_pre(e, root).next) { - if(e->kind == CTRL_EntityKind_Thread && !e->is_frozen) + if(e->kind == D_EntityKind_Thread && !e->is_frozen) { is_frozen = 0; break; @@ -883,16 +883,16 @@ ctrl_entity_tree_is_frozen(CTRL_Entity *root) //- rjf: entity ctx r/w store state functions -internal CTRL_EntityCtxRWStore * +internal D_EntityCtxRWStore * ctrl_entity_ctx_rw_store_alloc(void) { Arena *arena = arena_alloc(); - CTRL_EntityCtxRWStore *store = push_array(arena, CTRL_EntityCtxRWStore, 1); + D_EntityCtxRWStore *store = push_array(arena, D_EntityCtxRWStore, 1); store->arena = arena; store->ctx.hash_slots_count = 1024; - store->ctx.hash_slots = push_array(arena, CTRL_EntityHashSlot, store->ctx.hash_slots_count); - CTRL_Entity *root = store->ctx.root = ctrl_entity_alloc(store, &ctrl_entity_nil, CTRL_EntityKind_Root, Arch_Null, ctrl_handle_zero(), 0); - CTRL_Entity *local_machine = ctrl_entity_alloc(store, root, CTRL_EntityKind_Machine, Arch_CURRENT, ctrl_handle_make(CTRL_MachineID_Local, dmn_handle_zero()), 0); + store->ctx.hash_slots = push_array(arena, D_EntityHashSlot, store->ctx.hash_slots_count); + D_Entity *root = store->ctx.root = ctrl_entity_alloc(store, &d_entity_nil, D_EntityKind_Root, Arch_Null, ctrl_handle_zero(), 0); + D_Entity *local_machine = ctrl_entity_alloc(store, root, D_EntityKind_Machine, Arch_CURRENT, ctrl_handle_make(D_MachineID_Local, dmn_handle_zero()), 0); Temp scratch = scratch_begin(0, 0); String8 local_machine_name = push_str8f(scratch.arena, "This PC (%S)", os_get_system_info()->machine_name); ctrl_entity_equip_string(store, local_machine, local_machine_name); @@ -901,7 +901,7 @@ ctrl_entity_ctx_rw_store_alloc(void) } internal void -ctrl_entity_ctx_rw_store_release(CTRL_EntityCtxRWStore *store) +ctrl_entity_ctx_rw_store_release(D_EntityCtxRWStore *store) { arena_release(store->arena); } @@ -927,7 +927,7 @@ ctrl_name_bucket_num_from_string_size(U64 size) } internal String8 -ctrl_entity_string_alloc(CTRL_EntityCtxRWStore *store, String8 string) +ctrl_entity_string_alloc(D_EntityCtxRWStore *store, String8 string) { //- rjf: allocate node CTRL_EntityStringChunkNode *node = 0; @@ -993,7 +993,7 @@ ctrl_entity_string_alloc(CTRL_EntityCtxRWStore *store, String8 string) } internal void -ctrl_entity_string_release(CTRL_EntityCtxRWStore *store, String8 string) +ctrl_entity_string_release(D_EntityCtxRWStore *store, String8 string) { U64 bucket_num = ctrl_name_bucket_num_from_string_size(string.size); if(1 <= bucket_num && bucket_num <= ArrayCount(ctrl_entity_string_bucket_chunk_sizes)) @@ -1007,10 +1007,10 @@ ctrl_entity_string_release(CTRL_EntityCtxRWStore *store, String8 string) //- rjf: entity construction/deletion -internal CTRL_Entity * -ctrl_entity_alloc(CTRL_EntityCtxRWStore *store, CTRL_Entity *parent, CTRL_EntityKind kind, Arch arch, CTRL_Handle handle, U64 id) +internal D_Entity * +ctrl_entity_alloc(D_EntityCtxRWStore *store, D_Entity *parent, D_EntityKind kind, Arch arch, D_Handle handle, U64 id) { - CTRL_Entity *entity = &ctrl_entity_nil; + D_Entity *entity = &d_entity_nil; { // rjf: allocate entity = store->free; @@ -1021,7 +1021,7 @@ ctrl_entity_alloc(CTRL_EntityCtxRWStore *store, CTRL_Entity *parent, CTRL_Entity } else { - entity = push_array_no_zero(store->arena, CTRL_Entity, 1); + entity = push_array_no_zero(store->arena, D_Entity, 1); } MemoryZeroStruct(entity); } @@ -1033,10 +1033,10 @@ ctrl_entity_alloc(CTRL_EntityCtxRWStore *store, CTRL_Entity *parent, CTRL_Entity entity->handle = handle; entity->id = id; entity->parent = parent; - entity->next = entity->prev = entity->first = entity->last = &ctrl_entity_nil; - if(parent != &ctrl_entity_nil) + entity->next = entity->prev = entity->first = entity->last = &d_entity_nil; + if(parent != &d_entity_nil) { - DLLPushBack_NPZ(&ctrl_entity_nil, parent->first, parent->last, entity, next, prev); + DLLPushBack_NPZ(&d_entity_nil, parent->first, parent->last, entity, next, prev); } } @@ -1044,9 +1044,9 @@ ctrl_entity_alloc(CTRL_EntityCtxRWStore *store, CTRL_Entity *parent, CTRL_Entity { U64 hash = ctrl_hash_from_handle(handle); U64 slot_idx = hash%store->ctx.hash_slots_count; - CTRL_EntityHashSlot *slot = &store->ctx.hash_slots[slot_idx]; - CTRL_EntityHashNode *node = 0; - for(CTRL_EntityHashNode *n = slot->first; n != 0; n = n->next) + D_EntityHashSlot *slot = &store->ctx.hash_slots[slot_idx]; + D_EntityHashNode *node = 0; + for(D_EntityHashNode *n = slot->first; n != 0; n = n->next) { if(ctrl_handle_match(n->entity->handle, handle)) { @@ -1063,7 +1063,7 @@ ctrl_entity_alloc(CTRL_EntityCtxRWStore *store, CTRL_Entity *parent, CTRL_Entity } else { - node = push_array_no_zero(store->arena, CTRL_EntityHashNode, 1); + node = push_array_no_zero(store->arena, D_EntityHashNode, 1); } MemoryZeroStruct(node); DLLPushBack(slot->first, slot->last, node); @@ -1079,30 +1079,30 @@ ctrl_entity_alloc(CTRL_EntityCtxRWStore *store, CTRL_Entity *parent, CTRL_Entity } internal void -ctrl_entity_release(CTRL_EntityCtxRWStore *store, CTRL_Entity *entity) +ctrl_entity_release(D_EntityCtxRWStore *store, D_Entity *entity) { // rjf: unhook root - if(entity->parent != &ctrl_entity_nil) + if(entity->parent != &d_entity_nil) { - DLLRemove_NPZ(&ctrl_entity_nil, entity->parent->first, entity->parent->last, entity, next, prev); + DLLRemove_NPZ(&d_entity_nil, entity->parent->first, entity->parent->last, entity, next, prev); } // rjf: walk every entity in this tree, free each - if(entity != &ctrl_entity_nil) + if(entity != &d_entity_nil) { Temp scratch = scratch_begin(0, 0); typedef struct Task Task; struct Task { Task *next; - CTRL_Entity *e; + D_Entity *e; }; Task start_task = {0, entity}; Task *first_task = &start_task; Task *last_task = &start_task; for(Task *t = first_task; t != 0; t = t->next) { - for(CTRL_Entity *child = t->e->first; child != &ctrl_entity_nil; child = child->next) + for(D_Entity *child = t->e->first; child != &d_entity_nil; child = child->next) { Task *t = push_array(scratch.arena, Task, 1); t->e = child; @@ -1116,9 +1116,9 @@ ctrl_entity_release(CTRL_EntityCtxRWStore *store, CTRL_Entity *entity) { U64 hash = ctrl_hash_from_handle(t->e->handle); U64 slot_idx = hash%store->ctx.hash_slots_count; - CTRL_EntityHashSlot *slot = &store->ctx.hash_slots[slot_idx]; - CTRL_EntityHashNode *node = 0; - for(CTRL_EntityHashNode *n = slot->first; n != 0; n = n->next) + D_EntityHashSlot *slot = &store->ctx.hash_slots[slot_idx]; + D_EntityHashNode *node = 0; + for(D_EntityHashNode *n = slot->first; n != 0; n = n->next) { if(ctrl_handle_match(n->entity->handle, t->e->handle)) { @@ -1140,7 +1140,7 @@ ctrl_entity_release(CTRL_EntityCtxRWStore *store, CTRL_Entity *entity) //- rjf: entity equipment internal void -ctrl_entity_equip_string(CTRL_EntityCtxRWStore *store, CTRL_Entity *entity, String8 string) +ctrl_entity_equip_string(D_EntityCtxRWStore *store, D_Entity *entity, String8 string) { if(entity->string.size != 0) { @@ -1151,32 +1151,32 @@ ctrl_entity_equip_string(CTRL_EntityCtxRWStore *store, CTRL_Entity *entity, Stri //- rjf: accelerated entity context lookups -internal CTRL_EntityCtxLookupAccel * +internal D_EntityCtxLookupAccel * ctrl_thread_entity_ctx_lookup_accel(void) { - if(ctrl_entity_ctx_lookup_accel == 0) + if(d_entity_ctx_lookup_accel == 0) { Arena *arena = arena_alloc(); - ctrl_entity_ctx_lookup_accel = push_array(arena, CTRL_EntityCtxLookupAccel, 1); - ctrl_entity_ctx_lookup_accel->arena = arena; - for EachEnumVal(CTRL_EntityKind, k) + d_entity_ctx_lookup_accel = push_array(arena, D_EntityCtxLookupAccel, 1); + d_entity_ctx_lookup_accel->arena = arena; + for EachEnumVal(D_EntityKind, k) { - ctrl_entity_ctx_lookup_accel->entity_kind_arrays_arenas[k] = arena_alloc(); + d_entity_ctx_lookup_accel->entity_kind_arrays_arenas[k] = arena_alloc(); } } - return ctrl_entity_ctx_lookup_accel; + return d_entity_ctx_lookup_accel; } -internal CTRL_EntityArray -ctrl_entity_array_from_kind(CTRL_EntityCtx *ctx, CTRL_EntityKind kind) +internal D_EntityArray +ctrl_entity_array_from_kind(D_EntityCtx *ctx, D_EntityKind kind) { - CTRL_EntityCtxLookupAccel *accel = ctrl_thread_entity_ctx_lookup_accel(); + D_EntityCtxLookupAccel *accel = ctrl_thread_entity_ctx_lookup_accel(); if(accel->entity_kind_arrays_gens[kind] != ctx->entity_kind_alloc_gens[kind]) { Temp scratch = scratch_begin(0, 0); - CTRL_EntityList entities = {0}; - for(CTRL_Entity *e = ctx->root; - e != &ctrl_entity_nil; + D_EntityList entities = {0}; + for(D_Entity *e = ctx->root; + e != &d_entity_nil; e = ctrl_entity_rec_depth_first_pre(e, ctx->root).next) { if(e->kind == kind) @@ -1192,14 +1192,14 @@ ctrl_entity_array_from_kind(CTRL_EntityCtx *ctx, CTRL_EntityKind kind) return accel->entity_kind_arrays[kind]; } -internal CTRL_EntityList -ctrl_modules_from_dbgi_key(Arena *arena, CTRL_EntityCtx *ctx, DI_Key dbgi_key) +internal D_EntityList +ctrl_modules_from_dbgi_key(Arena *arena, D_EntityCtx *ctx, DI_Key dbgi_key) { - CTRL_EntityList list = {0}; - CTRL_EntityArray all_modules = ctrl_entity_array_from_kind(ctx, CTRL_EntityKind_Module); + D_EntityList list = {0}; + D_EntityArray all_modules = ctrl_entity_array_from_kind(ctx, D_EntityKind_Module); for EachIndex(idx, all_modules.count) { - CTRL_Entity *module = all_modules.v[idx]; + D_Entity *module = all_modules.v[idx]; DI_Key module_dbgi_key = ctrl_dbgi_key_from_module(module); if(di_key_match(module_dbgi_key, dbgi_key)) { @@ -1209,11 +1209,11 @@ ctrl_modules_from_dbgi_key(Arena *arena, CTRL_EntityCtx *ctx, DI_Key dbgi_key) return list; } -internal CTRL_Entity * -ctrl_thread_from_id(CTRL_EntityCtx *ctx, U64 id) +internal D_Entity * +ctrl_thread_from_id(D_EntityCtx *ctx, U64 id) { - CTRL_Entity *thread = &ctrl_entity_nil; - CTRL_EntityArray threads = ctrl_entity_array_from_kind(ctx, CTRL_EntityKind_Thread); + D_Entity *thread = &d_entity_nil; + D_EntityArray threads = ctrl_entity_array_from_kind(ctx, D_EntityKind_Thread); for EachIndex(idx, threads.count) { if(threads.v[idx]->id == id) @@ -1226,21 +1226,21 @@ ctrl_thread_from_id(CTRL_EntityCtx *ctx, U64 id) //- rjf: entity tree iteration -internal CTRL_EntityRec -ctrl_entity_rec_depth_first(CTRL_Entity *entity, CTRL_Entity *subtree_root, U64 sib_off, U64 child_off) +internal D_EntityRec +ctrl_entity_rec_depth_first(D_Entity *entity, D_Entity *subtree_root, U64 sib_off, U64 child_off) { - CTRL_EntityRec result = {0}; - result.next = &ctrl_entity_nil; - if((*MemberFromOffset(CTRL_Entity **, entity, child_off)) != &ctrl_entity_nil) + D_EntityRec result = {0}; + result.next = &d_entity_nil; + if((*MemberFromOffset(D_Entity **, entity, child_off)) != &d_entity_nil) { - result.next = *MemberFromOffset(CTRL_Entity **, entity, child_off); + result.next = *MemberFromOffset(D_Entity **, entity, child_off); result.push_count = 1; } - else for(CTRL_Entity *parent = entity; parent != subtree_root && parent != &ctrl_entity_nil; parent = parent->parent) + else for(D_Entity *parent = entity; parent != subtree_root && parent != &d_entity_nil; parent = parent->parent) { - if(parent != subtree_root && (*MemberFromOffset(CTRL_Entity **, parent, sib_off)) != &ctrl_entity_nil) + if(parent != subtree_root && (*MemberFromOffset(D_Entity **, parent, sib_off)) != &d_entity_nil) { - result.next = *MemberFromOffset(CTRL_Entity **, parent, sib_off); + result.next = *MemberFromOffset(D_Entity **, parent, sib_off); break; } result.pop_count += 1; @@ -1251,37 +1251,37 @@ ctrl_entity_rec_depth_first(CTRL_Entity *entity, CTRL_Entity *subtree_root, U64 //- rjf: applying events to entity caches internal void -ctrl_entity_store_apply_events(CTRL_EntityCtxRWStore *store, CTRL_EventList *list) +ctrl_entity_store_apply_events(D_EntityCtxRWStore *store, D_EventList *list) { //- rjf: scan events & construct entities - for(CTRL_EventNode *n = list->first; n != 0; n = n->next) + for(D_EventNode *n = list->first; n != 0; n = n->next) { - CTRL_Event *event = &n->v; + D_Event *event = &n->v; switch(event->kind) { default:{}break; //- rjf: processes - case CTRL_EventKind_NewProc: + case D_EventKind_NewProc: { - CTRL_Entity *machine = ctrl_entity_from_handle(&store->ctx, ctrl_handle_make(event->entity.machine_id, dmn_handle_zero())); - if(machine != &ctrl_entity_nil) + D_Entity *machine = ctrl_entity_from_handle(&store->ctx, ctrl_handle_make(event->entity.machine_id, dmn_handle_zero())); + if(machine != &d_entity_nil) { - CTRL_Entity *process = ctrl_entity_alloc(store, machine, CTRL_EntityKind_Process, event->arch, event->entity, (U64)event->entity_id); + D_Entity *process = ctrl_entity_alloc(store, machine, D_EntityKind_Process, event->arch, event->entity, (U64)event->entity_id); process->tls_model = event->tls_model; process->target_os = event->target_os; } }break; - case CTRL_EventKind_EndProc: + case D_EventKind_EndProc: { - CTRL_Entity *process = ctrl_entity_from_handle(&store->ctx, event->entity); + D_Entity *process = ctrl_entity_from_handle(&store->ctx, event->entity); ctrl_entity_release(store, process); - for(CTRL_Entity *entry = store->ctx.root->first, *next = &ctrl_entity_nil; - entry != &ctrl_entity_nil; + for(D_Entity *entry = store->ctx.root->first, *next = &d_entity_nil; + entry != &d_entity_nil; entry = next) { next = entry->next; - if(entry->kind == CTRL_EntityKind_EntryPoint && entry->id == process->id) + if(entry->kind == D_EntityKind_EntryPoint && entry->id == process->id) { ctrl_entity_release(store, entry); } @@ -1289,21 +1289,21 @@ ctrl_entity_store_apply_events(CTRL_EntityCtxRWStore *store, CTRL_EventList *lis }break; //- rjf: threads - case CTRL_EventKind_NewThread: + case D_EventKind_NewThread: { - CTRL_Entity *process = ctrl_entity_from_handle(&store->ctx, event->parent); - if(process != &ctrl_entity_nil) + D_Entity *process = ctrl_entity_from_handle(&store->ctx, event->parent); + if(process != &d_entity_nil) { - CTRL_Entity *thread = ctrl_entity_alloc(store, process, CTRL_EntityKind_Thread, event->arch, event->entity, (U64)event->entity_id); - CTRL_Entity *first_thread = ctrl_entity_child_from_kind(process, CTRL_EntityKind_Thread); + D_Entity *thread = ctrl_entity_alloc(store, process, D_EntityKind_Thread, event->arch, event->entity, (U64)event->entity_id); + D_Entity *first_thread = ctrl_entity_child_from_kind(process, D_EntityKind_Thread); if(first_thread == thread) { ctrl_entity_equip_string(store, thread, str8_lit("main_thread")); } - CTRL_EntityArray pending_thread_names = ctrl_entity_array_from_kind(&store->ctx, CTRL_EntityKind_PendingThreadName); + D_EntityArray pending_thread_names = ctrl_entity_array_from_kind(&store->ctx, D_EntityKind_PendingThreadName); for EachIndex(idx, pending_thread_names.count) { - CTRL_Entity *entity = pending_thread_names.v[idx]; + D_Entity *entity = pending_thread_names.v[idx]; if(entity->id == event->entity_id) { ctrl_entity_equip_string(store, thread, entity->string); @@ -1311,10 +1311,10 @@ ctrl_entity_store_apply_events(CTRL_EntityCtxRWStore *store, CTRL_EventList *lis break; } } - CTRL_EntityArray pending_thread_colors = ctrl_entity_array_from_kind(&store->ctx, CTRL_EntityKind_PendingThreadColor); + D_EntityArray pending_thread_colors = ctrl_entity_array_from_kind(&store->ctx, D_EntityKind_PendingThreadColor); for EachIndex(idx, pending_thread_colors.count) { - CTRL_Entity *entity = pending_thread_colors.v[idx]; + D_Entity *entity = pending_thread_colors.v[idx]; if(entity->id == event->entity_id) { thread->rgba = entity->rgba; @@ -1326,15 +1326,15 @@ ctrl_entity_store_apply_events(CTRL_EntityCtxRWStore *store, CTRL_EventList *lis } //ctrl_rip_from_thread(&store->ctx, event->entity); }break; - case CTRL_EventKind_EndThread: + case D_EventKind_EndThread: { - CTRL_Entity *thread = ctrl_entity_from_handle(&store->ctx, event->entity); + D_Entity *thread = ctrl_entity_from_handle(&store->ctx, event->entity); ctrl_entity_release(store, thread); }break; - case CTRL_EventKind_ThreadName: + case D_EventKind_ThreadName: { - CTRL_Entity *process = ctrl_entity_from_handle(&store->ctx, event->parent); - CTRL_Entity *thread = &ctrl_entity_nil; + D_Entity *process = ctrl_entity_from_handle(&store->ctx, event->parent); + D_Entity *thread = &d_entity_nil; if(event->entity_id == 0) { thread = ctrl_entity_from_handle(&store->ctx, event->entity); @@ -1343,20 +1343,20 @@ ctrl_entity_store_apply_events(CTRL_EntityCtxRWStore *store, CTRL_EventList *lis { thread = ctrl_thread_from_id(&store->ctx, event->entity_id); } - if(thread != &ctrl_entity_nil) + if(thread != &d_entity_nil) { ctrl_entity_equip_string(store, thread, event->string); } - else if(process != &ctrl_entity_nil) + else if(process != &d_entity_nil) { - CTRL_Entity *pending_name = ctrl_entity_alloc(store, process, CTRL_EntityKind_PendingThreadName, Arch_Null, ctrl_handle_zero(), event->entity_id); + D_Entity *pending_name = ctrl_entity_alloc(store, process, D_EntityKind_PendingThreadName, Arch_Null, ctrl_handle_zero(), event->entity_id); ctrl_entity_equip_string(store, pending_name, event->string); } }break; - case CTRL_EventKind_ThreadColor: + case D_EventKind_ThreadColor: { - CTRL_Entity *process = ctrl_entity_from_handle(&store->ctx, event->parent); - CTRL_Entity *thread = &ctrl_entity_nil; + D_Entity *process = ctrl_entity_from_handle(&store->ctx, event->parent); + D_Entity *thread = &d_entity_nil; if(event->entity_id == 0) { thread = ctrl_entity_from_handle(&store->ctx, event->entity); @@ -1365,64 +1365,64 @@ ctrl_entity_store_apply_events(CTRL_EntityCtxRWStore *store, CTRL_EventList *lis { thread = ctrl_thread_from_id(&store->ctx, event->entity_id); } - if(thread != &ctrl_entity_nil) + if(thread != &d_entity_nil) { thread->rgba = event->rgba; } - else if(process != &ctrl_entity_nil) + else if(process != &d_entity_nil) { - CTRL_Entity *pending = ctrl_entity_alloc(store, process, CTRL_EntityKind_PendingThreadColor, Arch_Null, ctrl_handle_zero(), event->entity_id); + D_Entity *pending = ctrl_entity_alloc(store, process, D_EntityKind_PendingThreadColor, Arch_Null, ctrl_handle_zero(), event->entity_id); pending->rgba = event->rgba; } }break; - case CTRL_EventKind_ThreadFrozen: + case D_EventKind_ThreadFrozen: { - CTRL_Entity *thread = ctrl_entity_from_handle(&store->ctx, event->entity); - if(thread != &ctrl_entity_nil) + D_Entity *thread = ctrl_entity_from_handle(&store->ctx, event->entity); + if(thread != &d_entity_nil) { thread->is_frozen = 1; } }break; - case CTRL_EventKind_ThreadThawed: + case D_EventKind_ThreadThawed: { - CTRL_Entity *thread = ctrl_entity_from_handle(&store->ctx, event->entity); - if(thread != &ctrl_entity_nil) + D_Entity *thread = ctrl_entity_from_handle(&store->ctx, event->entity); + if(thread != &d_entity_nil) { thread->is_frozen = 0; } }break; //- rjf: modules - case CTRL_EventKind_NewModule: + case D_EventKind_NewModule: { Temp scratch = scratch_begin(0, 0); - CTRL_Entity *process = ctrl_entity_from_handle(&store->ctx, event->parent); - CTRL_Entity *module = ctrl_entity_alloc(store, process, CTRL_EntityKind_Module, event->arch, event->entity, event->vaddr_rng.min); + D_Entity *process = ctrl_entity_from_handle(&store->ctx, event->parent); + D_Entity *module = ctrl_entity_alloc(store, process, D_EntityKind_Module, event->arch, event->entity, event->vaddr_rng.min); ctrl_entity_equip_string(store, module, event->string); module->timestamp = event->timestamp; module->vaddr_range = event->vaddr_rng; module->tls_index = event->tls_index; module->tls_offset = event->tls_offset; - CTRL_Entity *first_module = ctrl_entity_child_from_kind(process, CTRL_EntityKind_Module); + D_Entity *first_module = ctrl_entity_child_from_kind(process, D_EntityKind_Module); if(first_module == module) { ctrl_entity_equip_string(store, process, str8_skip_last_slash(event->string)); } scratch_end(scratch); }break; - case CTRL_EventKind_EndModule: + case D_EventKind_EndModule: { - CTRL_Entity *module = ctrl_entity_from_handle(&store->ctx, event->entity); + D_Entity *module = ctrl_entity_from_handle(&store->ctx, event->entity); ctrl_entity_release(store, module); }break; - case CTRL_EventKind_ModuleDebugInfoPathChange: + case D_EventKind_ModuleDebugInfoPathChange: { Temp scratch = scratch_begin(0, 0); - CTRL_Entity *module = ctrl_entity_from_handle(&store->ctx, event->entity); - CTRL_Entity *debug_info_path = ctrl_entity_child_from_kind(module, CTRL_EntityKind_DebugInfoPath); - if(debug_info_path == &ctrl_entity_nil) + D_Entity *module = ctrl_entity_from_handle(&store->ctx, event->entity); + D_Entity *debug_info_path = ctrl_entity_child_from_kind(module, D_EntityKind_DebugInfoPath); + if(debug_info_path == &d_entity_nil) { - debug_info_path = ctrl_entity_alloc(store, module, CTRL_EntityKind_DebugInfoPath, Arch_Null, ctrl_handle_zero(), 0); + debug_info_path = ctrl_entity_alloc(store, module, D_EntityKind_DebugInfoPath, Arch_Null, ctrl_handle_zero(), 0); } ctrl_entity_equip_string(store, debug_info_path, path_normalized_from_string(scratch.arena, event->string)); debug_info_path->timestamp = event->timestamp; @@ -1430,19 +1430,19 @@ ctrl_entity_store_apply_events(CTRL_EntityCtxRWStore *store, CTRL_EventList *lis }break; //- rjf: dynamic, program-created breakpoints - case CTRL_EventKind_SetBreakpoint: + case D_EventKind_SetBreakpoint: { - CTRL_Entity *process = ctrl_entity_from_handle(&store->ctx, event->parent); - CTRL_Entity *bp = ctrl_entity_alloc(store, process, CTRL_EntityKind_Breakpoint, Arch_Null, ctrl_handle_zero(), 0); + D_Entity *process = ctrl_entity_from_handle(&store->ctx, event->parent); + D_Entity *bp = ctrl_entity_alloc(store, process, D_EntityKind_Breakpoint, Arch_Null, ctrl_handle_zero(), 0); bp->vaddr_range = event->vaddr_rng; bp->bp_flags = event->bp_flags; }break; - case CTRL_EventKind_UnsetBreakpoint: + case D_EventKind_UnsetBreakpoint: { - CTRL_Entity *process = ctrl_entity_from_handle(&store->ctx, event->parent); - for(CTRL_Entity *child = process->first; child != &ctrl_entity_nil; child = child->next) + D_Entity *process = ctrl_entity_from_handle(&store->ctx, event->parent); + for(D_Entity *child = process->first; child != &d_entity_nil; child = child->next) { - if(child->kind == CTRL_EntityKind_Breakpoint && + if(child->kind == D_EntityKind_Breakpoint && child->vaddr_range.min == event->vaddr_rng.min && child->vaddr_range.max == event->vaddr_rng.max && child->bp_flags == event->bp_flags) @@ -1454,10 +1454,10 @@ ctrl_entity_store_apply_events(CTRL_EntityCtxRWStore *store, CTRL_EventList *lis }break; //- rjf: address range annotations - case CTRL_EventKind_SetVAddrRangeNote: + case D_EventKind_SetVAddrRangeNote: { - CTRL_Entity *process = ctrl_entity_from_handle(&store->ctx, event->parent); - CTRL_Entity *annotation = ctrl_entity_alloc(store, process, CTRL_EntityKind_AddressRangeAnnotation, Arch_Null, ctrl_handle_zero(), 0); + D_Entity *process = ctrl_entity_from_handle(&store->ctx, event->parent); + D_Entity *annotation = ctrl_entity_alloc(store, process, D_EntityKind_AddressRangeAnnotation, Arch_Null, ctrl_handle_zero(), 0); annotation->vaddr_range = event->vaddr_rng; ctrl_entity_equip_string(store, annotation, event->string); }break; @@ -1469,7 +1469,7 @@ ctrl_entity_store_apply_events(CTRL_EntityCtxRWStore *store, CTRL_EventList *lis //~ rjf: Wakeup Callback Registration internal void -ctrl_set_wakeup_hook(CTRL_WakeupFunctionType *wakeup_hook) +ctrl_set_wakeup_hook(D_WakeupFunctionType *wakeup_hook) { d_ctrl_state->wakeup_hook = wakeup_hook; } @@ -1480,23 +1480,23 @@ ctrl_set_wakeup_hook(CTRL_WakeupFunctionType *wakeup_hook) //- rjf: thread register cache reading internal void * -ctrl_reg_block_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle handle) +ctrl_reg_block_from_thread(Arena *arena, D_EntityCtx *ctx, D_Handle handle) { - CTRL_ThreadRegCache *cache = &d_ctrl_state->thread_reg_cache; - CTRL_Entity *thread_entity = ctrl_entity_from_handle(ctx, handle); + D_ThreadRegCache *cache = &d_ctrl_state->thread_reg_cache; + D_Entity *thread_entity = ctrl_entity_from_handle(ctx, handle); Arch arch = thread_entity->arch; U64 reg_block_size = regs_block_size_from_arch(arch); U64 hash = ctrl_hash_from_handle(handle); U64 slot_idx = hash%cache->slots_count; U64 stripe_idx = slot_idx%cache->stripes_count; - CTRL_ThreadRegCacheSlot *slot = &cache->slots[slot_idx]; - CTRL_ThreadRegCacheStripe *stripe = &cache->stripes[stripe_idx]; + D_ThreadRegCacheSlot *slot = &cache->slots[slot_idx]; + D_ThreadRegCacheStripe *stripe = &cache->stripes[stripe_idx]; void *result = push_array(arena, U8, reg_block_size); MutexScopeW(stripe->rw_mutex) { // rjf: find existing node - CTRL_ThreadRegCacheNode *node = 0; - for(CTRL_ThreadRegCacheNode *n = slot->first; n != 0; n = n->next) + D_ThreadRegCacheNode *node = 0; + for(D_ThreadRegCacheNode *n = slot->first; n != 0; n = n->next) { if(ctrl_handle_match(n->handle, handle)) { @@ -1508,7 +1508,7 @@ ctrl_reg_block_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle handle // rjf: allocate existing node if(!node) { - node = push_array(stripe->arena, CTRL_ThreadRegCacheNode, 1); + node = push_array(stripe->arena, D_ThreadRegCacheNode, 1); DLLPushBack(slot->first, slot->last, node); node->handle = handle; node->block_size = reg_block_size; @@ -1540,17 +1540,17 @@ ctrl_reg_block_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle handle } internal U64 -ctrl_tls_root_vaddr_from_thread(CTRL_EntityCtx *ctx, CTRL_Handle handle) +ctrl_tls_root_vaddr_from_thread(D_EntityCtx *ctx, D_Handle handle) { U64 result = dmn_tls_root_vaddr_from_thread(handle.dmn_handle); return result; } internal U64 -ctrl_rip_from_thread(CTRL_EntityCtx *ctx, CTRL_Handle handle) +ctrl_rip_from_thread(D_EntityCtx *ctx, D_Handle handle) { Temp scratch = scratch_begin(0, 0); - CTRL_Entity *thread_entity = ctrl_entity_from_handle(ctx, handle); + D_Entity *thread_entity = ctrl_entity_from_handle(ctx, handle); Arch arch = thread_entity->arch; void *block = ctrl_reg_block_from_thread(scratch.arena, ctx, handle); U64 result = regs_rip_from_arch_block(arch, block); @@ -1559,10 +1559,10 @@ ctrl_rip_from_thread(CTRL_EntityCtx *ctx, CTRL_Handle handle) } internal U64 -ctrl_rsp_from_thread(CTRL_EntityCtx *ctx, CTRL_Handle handle) +ctrl_rsp_from_thread(D_EntityCtx *ctx, D_Handle handle) { Temp scratch = scratch_begin(0, 0); - CTRL_Entity *thread_entity = ctrl_entity_from_handle(ctx, handle); + D_Entity *thread_entity = ctrl_entity_from_handle(ctx, handle); Arch arch = thread_entity->arch; void *block = ctrl_reg_block_from_thread(scratch.arena, ctx, handle); U64 result = regs_rsp_from_arch_block(arch, block); @@ -1573,7 +1573,7 @@ ctrl_rsp_from_thread(CTRL_EntityCtx *ctx, CTRL_Handle handle) //- rjf: thread register writing internal B32 -ctrl_thread_write_reg_block(CTRL_Handle thread, void *block) +ctrl_thread_write_reg_block(D_Handle thread, void *block) { // TODO(rjf): @callstacks immediately reflect this in the call stack cache B32 good = dmn_thread_write_reg_block(thread.dmn_handle, block); @@ -1590,16 +1590,16 @@ ctrl_thread_write_reg_block(CTRL_Handle thread, void *block) //- rjf: cache lookups internal PE_IntelPdata * -ctrl_intel_pdata_from_module_voff(Arena *arena, CTRL_Handle module_handle, U64 voff) +ctrl_intel_pdata_from_module_voff(Arena *arena, D_Handle module_handle, U64 voff) { PE_IntelPdata *first_pdata = 0; { U64 hash = ctrl_hash_from_handle(module_handle); U64 slot_idx = hash%d_ctrl_state->module_image_info_cache.slots_count; U64 stripe_idx = slot_idx%d_ctrl_state->module_image_info_cache.stripes_count; - CTRL_ModuleImageInfoCacheSlot *slot = &d_ctrl_state->module_image_info_cache.slots[slot_idx]; - CTRL_ModuleImageInfoCacheStripe *stripe = &d_ctrl_state->module_image_info_cache.stripes[stripe_idx]; - MutexScopeR(stripe->rw_mutex) for(CTRL_ModuleImageInfoCacheNode *n = slot->first; n != 0; n = n->next) + D_ModuleImageInfoCacheSlot *slot = &d_ctrl_state->module_image_info_cache.slots[slot_idx]; + D_ModuleImageInfoCacheStripe *stripe = &d_ctrl_state->module_image_info_cache.stripes[stripe_idx]; + MutexScopeR(stripe->rw_mutex) for(D_ModuleImageInfoCacheNode *n = slot->first; n != 0; n = n->next) { if(ctrl_handle_match(n->module, module_handle)) { @@ -1657,15 +1657,15 @@ ctrl_intel_pdata_from_module_voff(Arena *arena, CTRL_Handle module_handle, U64 v } internal U64 -ctrl_entry_point_voff_from_module(CTRL_Handle module_handle) +ctrl_entry_point_voff_from_module(D_Handle module_handle) { U64 result = 0; U64 hash = ctrl_hash_from_handle(module_handle); U64 slot_idx = hash%d_ctrl_state->module_image_info_cache.slots_count; U64 stripe_idx = slot_idx%d_ctrl_state->module_image_info_cache.stripes_count; - CTRL_ModuleImageInfoCacheSlot *slot = &d_ctrl_state->module_image_info_cache.slots[slot_idx]; - CTRL_ModuleImageInfoCacheStripe *stripe = &d_ctrl_state->module_image_info_cache.stripes[stripe_idx]; - MutexScopeR(stripe->rw_mutex) for(CTRL_ModuleImageInfoCacheNode *n = slot->first; n != 0; n = n->next) + D_ModuleImageInfoCacheSlot *slot = &d_ctrl_state->module_image_info_cache.slots[slot_idx]; + D_ModuleImageInfoCacheStripe *stripe = &d_ctrl_state->module_image_info_cache.stripes[stripe_idx]; + MutexScopeR(stripe->rw_mutex) for(D_ModuleImageInfoCacheNode *n = slot->first; n != 0; n = n->next) { if(ctrl_handle_match(n->module, module_handle)) { @@ -1677,15 +1677,15 @@ ctrl_entry_point_voff_from_module(CTRL_Handle module_handle) } internal String8 -ctrl_initial_debug_info_path_from_module(Arena *arena, CTRL_Handle module_handle) +ctrl_initial_debug_info_path_from_module(Arena *arena, D_Handle module_handle) { String8 result = {0}; U64 hash = ctrl_hash_from_handle(module_handle); U64 slot_idx = hash%d_ctrl_state->module_image_info_cache.slots_count; U64 stripe_idx = slot_idx%d_ctrl_state->module_image_info_cache.stripes_count; - CTRL_ModuleImageInfoCacheSlot *slot = &d_ctrl_state->module_image_info_cache.slots[slot_idx]; - CTRL_ModuleImageInfoCacheStripe *stripe = &d_ctrl_state->module_image_info_cache.stripes[stripe_idx]; - MutexScopeR(stripe->rw_mutex) for(CTRL_ModuleImageInfoCacheNode *n = slot->first; n != 0; n = n->next) + D_ModuleImageInfoCacheSlot *slot = &d_ctrl_state->module_image_info_cache.slots[slot_idx]; + D_ModuleImageInfoCacheStripe *stripe = &d_ctrl_state->module_image_info_cache.stripes[stripe_idx]; + MutexScopeR(stripe->rw_mutex) for(D_ModuleImageInfoCacheNode *n = slot->first; n != 0; n = n->next) { if(ctrl_handle_match(n->module, module_handle)) { @@ -1697,15 +1697,15 @@ ctrl_initial_debug_info_path_from_module(Arena *arena, CTRL_Handle module_handle } internal String8 -ctrl_raddbg_data_from_module(Arena *arena, CTRL_Handle module_handle) +ctrl_raddbg_data_from_module(Arena *arena, D_Handle module_handle) { String8 result = {0}; U64 hash = ctrl_hash_from_handle(module_handle); U64 slot_idx = hash%d_ctrl_state->module_image_info_cache.slots_count; U64 stripe_idx = slot_idx%d_ctrl_state->module_image_info_cache.stripes_count; - CTRL_ModuleImageInfoCacheSlot *slot = &d_ctrl_state->module_image_info_cache.slots[slot_idx]; - CTRL_ModuleImageInfoCacheStripe *stripe = &d_ctrl_state->module_image_info_cache.stripes[stripe_idx]; - MutexScopeR(stripe->rw_mutex) for(CTRL_ModuleImageInfoCacheNode *n = slot->first; n != 0; n = n->next) + D_ModuleImageInfoCacheSlot *slot = &d_ctrl_state->module_image_info_cache.slots[slot_idx]; + D_ModuleImageInfoCacheStripe *stripe = &d_ctrl_state->module_image_info_cache.stripes[stripe_idx]; + MutexScopeR(stripe->rw_mutex) for(D_ModuleImageInfoCacheNode *n = slot->first; n != 0; n = n->next) { if(ctrl_handle_match(n->module, module_handle)) { @@ -1720,10 +1720,10 @@ ctrl_raddbg_data_from_module(Arena *arena, CTRL_Handle module_handle) //~ Process Info Functions internal Arch -ctrl_arch_from_process_handle(CTRL_Handle process_handle) +ctrl_arch_from_process_handle(D_Handle process_handle) { - CTRL_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; - CTRL_Entity *process_entity = ctrl_entity_from_handle(entity_ctx, process_handle); + D_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; + D_Entity *process_entity = ctrl_entity_from_handle(entity_ctx, process_handle); return process_entity->arch; } @@ -1732,14 +1732,14 @@ ctrl_arch_from_process_handle(CTRL_Handle process_handle) //- rjf: unwind deep copier -internal CTRL_Unwind -ctrl_unwind_deep_copy(Arena *arena, Arch arch, CTRL_Unwind *src) +internal D_Unwind +ctrl_unwind_deep_copy(Arena *arena, Arch arch, D_Unwind *src) { - CTRL_Unwind dst = {0}; + D_Unwind dst = {0}; { dst.flags = src->flags; dst.frames.count = src->frames.count; - dst.frames.v = push_array(arena, CTRL_UnwindFrame, dst.frames.count); + dst.frames.v = push_array(arena, D_UnwindFrame, dst.frames.count); MemoryCopy(dst.frames.v, src->frames.v, sizeof(dst.frames.v[0])*dst.frames.count); U64 block_size = regs_block_size_from_arch(arch); for(U64 idx = 0; idx < dst.frames.count; idx += 1) @@ -1755,7 +1755,7 @@ ctrl_unwind_deep_copy(Arena *arena, Arch arch, CTRL_Unwind *src) typedef struct { - CTRL_Handle process_handle; + D_Handle process_handle; U64 endt_us; } CTRL_MemoryReadContextDwarfX64; @@ -1780,36 +1780,36 @@ MACHINE_OP_MEM_READ(ctrl_machine_mem_read) return status; } -internal CTRL_UnwindStepResult +internal D_UnwindStepResult ctrl_unwind_step_result_from_machine_op_result(MachineOpResult s) { - CTRL_UnwindStepResult result = {0}; + D_UnwindStepResult result = {0}; switch(s) { case MachineOpResult_Null: {} break; case MachineOpResult_Ok: { - result.flags &= ~(CTRL_UnwindFlag_Error|CTRL_UnwindFlag_Stale); + result.flags &= ~(D_UnwindFlag_Error|D_UnwindFlag_Stale); }break; case MachineOpResult_Fail: { - result.flags |= CTRL_UnwindFlag_Error; + result.flags |= D_UnwindFlag_Error; }break; case MachineOpResult_Maybe: { - result.flags &= ~CTRL_UnwindFlag_Error; - result.flags |= CTRL_UnwindFlag_Stale; + result.flags &= ~D_UnwindFlag_Error; + result.flags |= D_UnwindFlag_Stale; }break; default: { InvalidPath; } break; } return result; } -internal CTRL_UnwindStepResult -ctrl_establish_frame_unwind_context__dwarf(Arena *arena, CTRL_Handle process_handle, CTRL_Handle module_handle, Arch arch, void *regs, U64 endt_us, CTRL_FrameUnwindContext *ctx_out) +internal D_UnwindStepResult +ctrl_establish_frame_unwind_context__dwarf(Arena *arena, D_Handle process_handle, D_Handle module_handle, Arch arch, void *regs, U64 endt_us, D_FrameUnwindContext *ctx_out) { Temp scratch = scratch_begin(&arena, 1); - CTRL_UnwindStepResult result = { .flags = CTRL_UnwindFlag_Error }; + D_UnwindStepResult result = { .flags = D_UnwindFlag_Error }; // gather context for virtual stack unwinder U64 cfi_rebase = 0; @@ -1821,9 +1821,9 @@ ctrl_establish_frame_unwind_context__dwarf(Arena *arena, CTRL_Handle process_han U64 hash = ctrl_hash_from_handle(module_handle); U64 slot_idx = hash % d_ctrl_state->module_image_info_cache.slots_count; U64 stripe_idx = slot_idx % d_ctrl_state->module_image_info_cache.stripes_count; - CTRL_ModuleImageInfoCacheSlot *slot = &d_ctrl_state->module_image_info_cache.slots[slot_idx]; - CTRL_ModuleImageInfoCacheStripe *stripe = &d_ctrl_state->module_image_info_cache.stripes[stripe_idx]; - MutexScopeR(stripe->rw_mutex) for EachNode(n, CTRL_ModuleImageInfoCacheNode, slot->first) + D_ModuleImageInfoCacheSlot *slot = &d_ctrl_state->module_image_info_cache.slots[slot_idx]; + D_ModuleImageInfoCacheStripe *stripe = &d_ctrl_state->module_image_info_cache.stripes[stripe_idx]; + MutexScopeR(stripe->rw_mutex) for EachNode(n, D_ModuleImageInfoCacheNode, slot->first) { if(ctrl_handle_match(n->module, module_handle)) { @@ -1924,7 +1924,7 @@ ctrl_establish_frame_unwind_context__dwarf(Arena *arena, CTRL_Handle process_han eh_parse_exit:; if(is_stale) { - result.flags = CTRL_UnwindFlag_Stale; + result.flags = D_UnwindFlag_Stale; } } else @@ -2007,12 +2007,12 @@ ctrl_establish_frame_unwind_context__dwarf(Arena *arena, CTRL_Handle process_han return result; } -internal CTRL_UnwindStepResult -ctrl_unwind_step__dwarf(CTRL_Handle process_handle, Arch arch, void *regs, CTRL_FrameUnwindContext *frame_ctx, U64 endt_us) +internal D_UnwindStepResult +ctrl_unwind_step__dwarf(D_Handle process_handle, Arch arch, void *regs, D_FrameUnwindContext *frame_ctx, U64 endt_us) { Temp scratch = scratch_begin(0, 0); - CTRL_UnwindStepResult result = { .flags = CTRL_UnwindFlag_Error }; + D_UnwindStepResult result = { .flags = D_UnwindFlag_Error }; // setup machine ops void *mem_read_ctx = 0; @@ -2100,8 +2100,8 @@ ctrl_unwind_reg_from_pe_gpr_reg__pe_x64(REGS_RegBlockX64 *regs, PE_UnwindGprRegX return result; } -internal CTRL_UnwindStepResult -ctrl_unwind_step__pe_x64(CTRL_Handle process_handle, CTRL_Handle module_handle, U64 module_base_vaddr, REGS_RegBlockX64 *regs, U64 endt_us) +internal D_UnwindStepResult +ctrl_unwind_step__pe_x64(D_Handle process_handle, D_Handle module_handle, U64 module_base_vaddr, REGS_RegBlockX64 *regs, U64 endt_us) { B32 is_stale = 0; B32 is_good = 1; @@ -2905,24 +2905,24 @@ ctrl_unwind_step__pe_x64(CTRL_Handle process_handle, CTRL_Handle module_handle, //- rjf: fill & return // scratch_end(scratch); - CTRL_UnwindStepResult result = {0}; - if(!is_good) {result.flags |= CTRL_UnwindFlag_Error;} - if(is_stale) {result.flags |= CTRL_UnwindFlag_Stale;} + D_UnwindStepResult result = {0}; + if(!is_good) {result.flags |= D_UnwindFlag_Error;} + if(is_stale) {result.flags |= D_UnwindFlag_Stale;} return result; } //- rjf: abstracted full unwind -internal CTRL_Unwind -ctrl_unwind_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle thread, U64 endt_us) +internal D_Unwind +ctrl_unwind_from_thread(Arena *arena, D_EntityCtx *ctx, D_Handle thread, U64 endt_us) { ProfBeginFunction(); Temp scratch = scratch_begin(&arena, 1); - CTRL_Unwind unwind = { .flags = CTRL_UnwindFlag_Error }; + D_Unwind unwind = { .flags = D_UnwindFlag_Error }; //- rjf: unpack args - CTRL_Entity *thread_entity = ctrl_entity_from_handle(ctx, thread); - CTRL_Entity *process_entity = thread_entity->parent; + D_Entity *thread_entity = ctrl_entity_from_handle(ctx, thread); + D_Entity *process_entity = thread_entity->parent; Arch arch = thread_entity->arch; U64 arch_reg_block_size = regs_block_size_from_arch(arch); @@ -2931,8 +2931,8 @@ ctrl_unwind_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle thread, U B32 regs_block_good = (arch != Arch_Null && regs_block != 0); //- rjf: loop & unwind - CTRL_UnwindFrameNode *first_frame_node = 0; - CTRL_UnwindFrameNode *last_frame_node = 0; + D_UnwindFrameNode *first_frame_node = 0; + D_UnwindFrameNode *last_frame_node = 0; U64 frame_node_count = 0; if(regs_block_good) { @@ -2948,11 +2948,11 @@ ctrl_unwind_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle thread, U } // rip -> module - CTRL_Entity *module_entity = ctrl_module_from_process_vaddr(process_entity, rip); + D_Entity *module_entity = ctrl_module_from_process_vaddr(process_entity, rip); // establish frame context - CTRL_FrameUnwindContext frame_ctx = {0}; - CTRL_UnwindStepResult frame_ctx_result = {0}; + D_FrameUnwindContext frame_ctx = {0}; + D_UnwindStepResult frame_ctx_result = {0}; switch(process_entity->target_os) { case OperatingSystem_Null:{}break; @@ -2971,14 +2971,14 @@ ctrl_unwind_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle thread, U default: { InvalidPath; }break; } unwind.flags |= frame_ctx_result.flags; - if(unwind.flags & (CTRL_UnwindFlag_Stale|CTRL_UnwindFlag_Error)) + if(unwind.flags & (D_UnwindFlag_Stale|D_UnwindFlag_Error)) { break; } // rjf: valid step -> push frame - CTRL_UnwindFrameNode *frame_node = push_array(scratch.arena, CTRL_UnwindFrameNode, 1); - CTRL_UnwindFrame *frame = &frame_node->v; + D_UnwindFrameNode *frame_node = push_array(scratch.arena, D_UnwindFrameNode, 1); + D_UnwindFrame *frame = &frame_node->v; frame->cfa = frame_ctx.cfa; frame->regs = push_array_no_zero(arena, U8, arch_reg_block_size); MemoryCopy(frame->regs, regs_block, arch_reg_block_size); @@ -2986,7 +2986,7 @@ ctrl_unwind_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle thread, U frame_node_count += 1; // rjf: unwind one step - CTRL_UnwindStepResult step_result = {0}; + D_UnwindStepResult step_result = {0}; switch(process_entity->target_os) { default:{}break; @@ -3009,7 +3009,7 @@ ctrl_unwind_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle thread, U // stop unwinding on errors or stale data unwind.flags |= step_result.flags; - if(unwind.flags & (CTRL_UnwindFlag_Stale|CTRL_UnwindFlag_Error) || + if(unwind.flags & (D_UnwindFlag_Stale|D_UnwindFlag_Error) || (regs_rsp_from_arch_block(arch, regs_block) == rsp && regs_rip_from_arch_block(arch, regs_block) == rip)) { break; @@ -3020,9 +3020,9 @@ ctrl_unwind_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle thread, U //- rjf: bake frames list into result array { unwind.frames.count = frame_node_count; - unwind.frames.v = push_array(arena, CTRL_UnwindFrame, unwind.frames.count); + unwind.frames.v = push_array(arena, D_UnwindFrame, unwind.frames.count); U64 idx = 0; - for(CTRL_UnwindFrameNode *n = first_frame_node; n != 0; n = n->next, idx += 1) + for(D_UnwindFrameNode *n = first_frame_node; n != 0; n = n->next, idx += 1) { unwind.frames.v[idx] = n->v; } @@ -3036,19 +3036,19 @@ ctrl_unwind_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle thread, U //////////////////////////////// //~ rjf: Call Stack Building Functions -internal CTRL_CallStack -ctrl_call_stack_from_unwind(Arena *arena, CTRL_Entity *process, CTRL_Unwind *base_unwind) +internal D_CallStack +ctrl_call_stack_from_unwind(Arena *arena, D_Entity *process, D_Unwind *base_unwind) { Temp scratch = scratch_begin(&arena, 1); Access *access = access_open(); Arch arch = process->arch; - CTRL_CallStack result = {0}; + D_CallStack result = {0}; { typedef struct FrameNode FrameNode; struct FrameNode { FrameNode *next; - CTRL_CallStackFrame v; + D_CallStackFrame v; }; //- rjf: gather all frames @@ -3058,9 +3058,9 @@ ctrl_call_stack_from_unwind(Arena *arena, CTRL_Entity *process, CTRL_Unwind *bas for(U64 base_frame_idx = 0; base_frame_idx < base_unwind->frames.count; base_frame_idx += 1) { // rjf: unpack - CTRL_UnwindFrame *src = &base_unwind->frames.v[base_frame_idx]; + D_UnwindFrame *src = &base_unwind->frames.v[base_frame_idx]; U64 rip_vaddr = regs_rip_from_arch_block(arch, src->regs); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, rip_vaddr); + D_Entity *module = ctrl_module_from_process_vaddr(process, rip_vaddr); U64 rip_voff = ctrl_voff_from_vaddr(module, rip_vaddr); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); RDI_Parsed *rdi = di_rdi_from_key(access, dbgi_key, 0, 0); @@ -3110,9 +3110,9 @@ ctrl_call_stack_from_unwind(Arena *arena, CTRL_Entity *process, CTRL_Unwind *bas //- rjf: package result.frames_count = frame_count; - result.frames = push_array(arena, CTRL_CallStackFrame, result.frames_count); + result.frames = push_array(arena, D_CallStackFrame, result.frames_count); result.concrete_frames_count = base_unwind->frames.count; - result.concrete_frames = push_array(arena, CTRL_CallStackFrame *, result.concrete_frames_count); + result.concrete_frames = push_array(arena, D_CallStackFrame *, result.concrete_frames_count); { U64 idx = 0; U64 concrete_idx = 0; @@ -3132,10 +3132,10 @@ ctrl_call_stack_from_unwind(Arena *arena, CTRL_Entity *process, CTRL_Unwind *bas return result; } -internal CTRL_CallStackFrame * -ctrl_call_stack_frame_from_unwind_and_inline_depth(CTRL_CallStack *call_stack, U64 unwind_count, U64 inline_depth) +internal D_CallStackFrame * +ctrl_call_stack_frame_from_unwind_and_inline_depth(D_CallStack *call_stack, U64 unwind_count, U64 inline_depth) { - CTRL_CallStackFrame *f = 0; + D_CallStackFrame *f = 0; { U64 base_frame_idx = 0; for(U64 idx = 0; idx < call_stack->frames_count; idx += 1) @@ -3213,7 +3213,7 @@ ctrl_string2alias_from_arch(Arch arch) //- rjf: user -> control thread communication internal B32 -ctrl_u2c_push_msgs(CTRL_MsgList *msgs, U64 endt_us) +ctrl_u2c_push_msgs(D_MsgList *msgs, U64 endt_us) { Temp scratch = scratch_begin(0, 0); String8 msgs_srlzed_baked = ctrl_serialized_string_from_msg_list(scratch.arena, msgs); @@ -3244,7 +3244,7 @@ ctrl_u2c_push_msgs(CTRL_MsgList *msgs, U64 endt_us) return good; } -internal CTRL_MsgList +internal D_MsgList ctrl_u2c_pop_msgs(Arena *arena) { Temp scratch = scratch_begin(&arena, 1); @@ -3264,7 +3264,7 @@ ctrl_u2c_pop_msgs(Arena *arena) cond_var_wait(d_ctrl_state->u2c_ring_cv, d_ctrl_state->u2c_ring_mutex, max_U64); } cond_var_broadcast(d_ctrl_state->u2c_ring_cv); - CTRL_MsgList msgs = ctrl_msg_list_from_serialized_string(arena, msgs_srlzed_baked); + D_MsgList msgs = ctrl_msg_list_from_serialized_string(arena, msgs_srlzed_baked); scratch_end(scratch); return msgs; } @@ -3272,7 +3272,7 @@ ctrl_u2c_pop_msgs(Arena *arena) //- rjf: control -> user thread communication internal void -ctrl_c2u_push_events(CTRL_EventList *events) +ctrl_c2u_push_events(D_EventList *events) { if(events->count != 0) ProfScope("ctrl_c2u_push_events") { @@ -3280,7 +3280,7 @@ ctrl_c2u_push_events(CTRL_EventList *events) { ctrl_entity_store_apply_events(d_ctrl_state->ctrl_thread_entity_store, events); } - for(CTRL_EventNode *n = events->first; n != 0; n = n ->next) + for(D_EventNode *n = events->first; n != 0; n = n ->next) { Temp scratch = scratch_begin(0, 0); String8 event_srlzed = ctrl_serialized_string_from_event(scratch.arena, &n->v, d_ctrl_state->c2u_ring_size-sizeof(U64)); @@ -3307,12 +3307,12 @@ ctrl_c2u_push_events(CTRL_EventList *events) } } -internal CTRL_EventList +internal D_EventList ctrl_c2u_pop_events(Arena *arena) { ProfBeginFunction(); Temp scratch = scratch_begin(&arena, 1); - CTRL_EventList events = {0}; + D_EventList events = {0}; MutexScope(d_ctrl_state->c2u_ring_mutex) for(;;) { U64 unconsumed_size = (d_ctrl_state->c2u_ring_write_pos-d_ctrl_state->c2u_ring_read_pos); @@ -3324,7 +3324,7 @@ ctrl_c2u_pop_events(Arena *arena) event_srlzed.size = size_to_decode; event_srlzed.str = push_array_no_zero(scratch.arena, U8, event_srlzed.size); d_ctrl_state->c2u_ring_read_pos += ring_read(d_ctrl_state->c2u_ring_base, d_ctrl_state->c2u_ring_size, d_ctrl_state->c2u_ring_read_pos, event_srlzed.str, event_srlzed.size); - CTRL_Event *new_event = ctrl_event_list_push(arena, &events); + D_Event *new_event = ctrl_event_list_push(arena, &events); *new_event = ctrl_event_from_serialized_string(arena, event_srlzed); } else @@ -3356,15 +3356,15 @@ ctrl_thread__entry_point(void *p) log_scope_begin(); //- rjf: get next messages - CTRL_MsgList msgs = ctrl_u2c_pop_msgs(scratch.arena); + D_MsgList msgs = ctrl_u2c_pop_msgs(scratch.arena); //- rjf: process messages DMN_CtrlExclusiveAccessScope { ins_atomic_u64_eval_assign(&d_ctrl_state->ctrl_thread_run_state, 1); - for(CTRL_MsgNode *msg_n = msgs.first; msg_n != 0; msg_n = msg_n->next) + for(D_MsgNode *msg_n = msgs.first; msg_n != 0; msg_n = msg_n->next) { - CTRL_Msg *msg = &msg_n->v; + D_Msg *msg = &msg_n->v; { log_infof("user2ctrl_msg:{kind:\"%S\"}\n", ctrl_string_from_msg_kind(msg->kind)); } @@ -3374,7 +3374,7 @@ ctrl_thread__entry_point(void *p) { arena_clear(d_ctrl_state->ctrl_thread_msg_process_arena); d_ctrl_state->module_req_cache_slots_count = 4096; - d_ctrl_state->module_req_cache_slots = push_array(d_ctrl_state->ctrl_thread_msg_process_arena, CTRL_ModuleReqCacheNode *, d_ctrl_state->module_req_cache_slots_count); + d_ctrl_state->module_req_cache_slots = push_array(d_ctrl_state->ctrl_thread_msg_process_arena, D_ModuleReqCacheNode *, d_ctrl_state->module_req_cache_slots_count); MemoryZeroStruct(&d_ctrl_state->msg_user_bp_touched_files); MemoryZeroStruct(&d_ctrl_state->msg_user_bp_touched_symbols); MemoryCopyArray(d_ctrl_state->exception_code_filters, msg->exception_code_filters); @@ -3450,20 +3450,20 @@ ctrl_thread__entry_point(void *p) //- rjf: process message switch(msg->kind) { - case CTRL_MsgKind_Null: - case CTRL_MsgKind_COUNT:{}break; + case D_MsgKind_Null: + case D_MsgKind_COUNT:{}break; //- rjf: target operations - case CTRL_MsgKind_Launch: {ctrl_thread__launch (ctrl_ctx, msg);}break; - case CTRL_MsgKind_Attach: {ctrl_thread__attach (ctrl_ctx, msg);}break; - case CTRL_MsgKind_Kill: {ctrl_thread__kill (ctrl_ctx, msg);}break; - case CTRL_MsgKind_KillAll: {ctrl_thread__kill_all (ctrl_ctx, msg);}break; - case CTRL_MsgKind_Detach: {ctrl_thread__detach (ctrl_ctx, msg);}break; - case CTRL_MsgKind_Run: {ctrl_thread__run (ctrl_ctx, msg);}break; - case CTRL_MsgKind_SingleStep: {ctrl_thread__single_step (ctrl_ctx, msg);}break; + case D_MsgKind_Launch: {ctrl_thread__launch (ctrl_ctx, msg);}break; + case D_MsgKind_Attach: {ctrl_thread__attach (ctrl_ctx, msg);}break; + case D_MsgKind_Kill: {ctrl_thread__kill (ctrl_ctx, msg);}break; + case D_MsgKind_KillAll: {ctrl_thread__kill_all (ctrl_ctx, msg);}break; + case D_MsgKind_Detach: {ctrl_thread__detach (ctrl_ctx, msg);}break; + case D_MsgKind_Run: {ctrl_thread__run (ctrl_ctx, msg);}break; + case D_MsgKind_SingleStep: {ctrl_thread__single_step (ctrl_ctx, msg);}break; //- rjf: configuration - case CTRL_MsgKind_SetUserEntryPoints: + case D_MsgKind_SetUserEntryPoints: { arena_clear(d_ctrl_state->user_entry_point_arena); MemoryZeroStruct(&d_ctrl_state->user_entry_points); @@ -3472,12 +3472,12 @@ ctrl_thread__entry_point(void *p) str8_list_push(d_ctrl_state->user_entry_point_arena, &d_ctrl_state->user_entry_points, n->string); } }break; - case CTRL_MsgKind_SetModuleDebugInfoPath: + case D_MsgKind_SetModuleDebugInfoPath: { - CTRL_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; + D_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; String8 path = msg->path; - CTRL_Entity *module = ctrl_entity_from_handle(entity_ctx, msg->entity); - CTRL_Entity *debug_info_path = ctrl_entity_child_from_kind(module, CTRL_EntityKind_DebugInfoPath); + D_Entity *module = ctrl_entity_from_handle(entity_ctx, msg->entity); + D_Entity *debug_info_path = ctrl_entity_child_from_kind(module, D_EntityKind_DebugInfoPath); DI_Key old_dbgi_key = di_key_from_path_timestamp(debug_info_path->string, debug_info_path->timestamp); di_close(old_dbgi_key, 0); MutexScopeW(d_ctrl_state->ctrl_thread_entity_ctx_rw_mutex) @@ -3488,27 +3488,27 @@ ctrl_thread__entry_point(void *p) debug_info_path->timestamp = new_dbgi_timestamp; DI_Key new_dbgi_key = di_key_from_path_timestamp(debug_info_path->string, new_dbgi_timestamp); di_open(new_dbgi_key); - CTRL_EventList evts = {0}; - CTRL_Event *evt = ctrl_event_list_push(scratch.arena, &evts); - evt->kind = CTRL_EventKind_ModuleDebugInfoPathChange; + D_EventList evts = {0}; + D_Event *evt = ctrl_event_list_push(scratch.arena, &evts); + evt->kind = D_EventKind_ModuleDebugInfoPathChange; evt->entity = msg->entity; evt->string = path; evt->timestamp = new_dbgi_timestamp; ctrl_c2u_push_events(&evts); }break; - case CTRL_MsgKind_FreezeThread: + case D_MsgKind_FreezeThread: { - CTRL_EventList evts = {0}; - CTRL_Event *evt = ctrl_event_list_push(scratch.arena, &evts); - evt->kind = CTRL_EventKind_ThreadFrozen; + D_EventList evts = {0}; + D_Event *evt = ctrl_event_list_push(scratch.arena, &evts); + evt->kind = D_EventKind_ThreadFrozen; evt->entity = msg->entity; ctrl_c2u_push_events(&evts); }break; - case CTRL_MsgKind_ThawThread: + case D_MsgKind_ThawThread: { - CTRL_EventList evts = {0}; - CTRL_Event *evt = ctrl_event_list_push(scratch.arena, &evts); - evt->kind = CTRL_EventKind_ThreadThawed; + D_EventList evts = {0}; + D_Event *evt = ctrl_event_list_push(scratch.arena, &evts); + evt->kind = D_EventKind_ThreadThawed; evt->entity = msg->entity; ctrl_c2u_push_events(&evts); }break; @@ -3523,8 +3523,8 @@ ctrl_thread__entry_point(void *p) //- rjf: update thread register cache ProfScope("update thread register cache") { - CTRL_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; - CTRL_EntityArray threads = ctrl_entity_array_from_kind(entity_ctx, CTRL_EntityKind_Thread); + D_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; + D_EntityArray threads = ctrl_entity_array_from_kind(entity_ctx, D_EntityKind_Thread); REGS_RegBlockX64 *blocks = push_array(scratch.arena, REGS_RegBlockX64, threads.count); { for EachIndex(idx, threads.count) @@ -3547,15 +3547,15 @@ ctrl_thread__entry_point(void *p) //- rjf: breakpoint resolution internal void -ctrl_thread__append_resolved_module_user_bp_traps(Arena *arena, CTRL_EvalScope *eval_scope, CTRL_Handle process, CTRL_Handle module, CTRL_UserBreakpointList *user_bps, DMN_TrapChunkList *traps_out) +ctrl_thread__append_resolved_module_user_bp_traps(Arena *arena, D_EvalScope *eval_scope, D_Handle process, D_Handle module, CTRL_UserBreakpointList *user_bps, DMN_TrapChunkList *traps_out) { if(user_bps->first == 0) { return; } ProfBeginFunction(); Temp scratch = scratch_begin(&arena, 1); Access *access = eval_scope->access; - CTRL_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; - CTRL_Entity *module_entity = ctrl_entity_from_handle(entity_ctx, module); - CTRL_Entity *debug_info_path_entity = ctrl_entity_child_from_kind(module_entity, CTRL_EntityKind_DebugInfoPath); + D_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; + D_Entity *module_entity = ctrl_entity_from_handle(entity_ctx, module); + D_Entity *debug_info_path_entity = ctrl_entity_child_from_kind(module_entity, D_EntityKind_DebugInfoPath); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module_entity); RDI_Parsed *rdi = di_rdi_from_key(access, dbgi_key, 0, 0); U64 base_vaddr = module_entity->vaddr_range.min; @@ -3638,7 +3638,7 @@ ctrl_thread__append_resolved_module_user_bp_traps(Arena *arena, CTRL_EvalScope * } internal void -ctrl_thread__append_resolved_process_user_bp_traps(Arena *arena, CTRL_EvalScope *eval_scope, CTRL_Handle process, CTRL_UserBreakpointList *user_bps, DMN_TrapChunkList *traps_out) +ctrl_thread__append_resolved_process_user_bp_traps(Arena *arena, D_EvalScope *eval_scope, D_Handle process, CTRL_UserBreakpointList *user_bps, DMN_TrapChunkList *traps_out) { for(CTRL_UserBreakpointNode *n = user_bps->first; n != 0; n = n->next) { @@ -3659,9 +3659,9 @@ ctrl_thread__append_resolved_process_user_bp_traps(Arena *arena, CTRL_EvalScope } internal void -ctrl_thread__append_program_defined_bp_traps(Arena *arena, CTRL_Entity *bp, DMN_TrapChunkList *traps_out) +ctrl_thread__append_program_defined_bp_traps(Arena *arena, D_Entity *bp, DMN_TrapChunkList *traps_out) { - CTRL_Entity *process = bp->parent; + D_Entity *process = bp->parent; DMN_Trap trap = { .process = process->handle.dmn_handle, @@ -3678,12 +3678,12 @@ ctrl_thread__append_program_defined_bp_traps(Arena *arena, CTRL_Entity *bp, DMN_ internal MACHINE_OP_MEM_READ(ctrl_dmn_mem_read) { - U64 read = dmn_process_read(((CTRL_Handle *)ud)->dmn_handle, r1u64(addr, addr + buffer_size), buffer); + U64 read = dmn_process_read(((D_Handle *)ud)->dmn_handle, r1u64(addr, addr + buffer_size), buffer); return read == buffer_size ? MachineOpResult_Ok : MachineOpResult_Fail; } internal void -ctrl_thread__module_open(CTRL_Handle process, CTRL_Handle module, Rng1U64 vaddr_range, String8 path, Rng1U64 elf_phdr_vrange, U64 elf_phdr_entsize) +ctrl_thread__module_open(D_Handle process, D_Handle module, Rng1U64 vaddr_range, String8 path, Rng1U64 elf_phdr_vrange, U64 elf_phdr_entsize) { Temp scratch = scratch_begin(0,0); @@ -4055,12 +4055,12 @@ ctrl_thread__module_open(CTRL_Handle process, CTRL_Handle module, Rng1U64 vaddr_ U64 hash = ctrl_hash_from_handle(module); U64 slot_idx = hash%d_ctrl_state->module_image_info_cache.slots_count; U64 stripe_idx = slot_idx%d_ctrl_state->module_image_info_cache.stripes_count; - CTRL_ModuleImageInfoCacheSlot *slot = &d_ctrl_state->module_image_info_cache.slots[slot_idx]; - CTRL_ModuleImageInfoCacheStripe *stripe = &d_ctrl_state->module_image_info_cache.stripes[stripe_idx]; + D_ModuleImageInfoCacheSlot *slot = &d_ctrl_state->module_image_info_cache.slots[slot_idx]; + D_ModuleImageInfoCacheStripe *stripe = &d_ctrl_state->module_image_info_cache.stripes[stripe_idx]; MutexScopeW(stripe->rw_mutex) { - CTRL_ModuleImageInfoCacheNode *node = 0; - for EachNode(n, CTRL_ModuleImageInfoCacheNode, slot->first) + D_ModuleImageInfoCacheNode *node = 0; + for EachNode(n, D_ModuleImageInfoCacheNode, slot->first) { if(ctrl_handle_match(n->module, module)) { @@ -4070,7 +4070,7 @@ ctrl_thread__module_open(CTRL_Handle process, CTRL_Handle module, Rng1U64 vaddr_ } if(!node) { - node = push_array(arena, CTRL_ModuleImageInfoCacheNode, 1); + node = push_array(arena, D_ModuleImageInfoCacheNode, 1); DLLPushBack(slot->first, slot->last, node); node->module = module; node->arena = arena; @@ -4092,7 +4092,7 @@ ctrl_thread__module_open(CTRL_Handle process, CTRL_Handle module, Rng1U64 vaddr_ } internal void -ctrl_thread__module_close(CTRL_Handle process, CTRL_Handle module, Rng1U64 vaddr_range) +ctrl_thread__module_close(D_Handle process, D_Handle module, Rng1U64 vaddr_range) { ////////////////////////////// //- rjf: evict module image info from cache @@ -4102,12 +4102,12 @@ ctrl_thread__module_close(CTRL_Handle process, CTRL_Handle module, Rng1U64 vaddr U64 hash = ctrl_hash_from_handle(module); U64 slot_idx = hash%d_ctrl_state->module_image_info_cache.slots_count; U64 stripe_idx = slot_idx%d_ctrl_state->module_image_info_cache.stripes_count; - CTRL_ModuleImageInfoCacheSlot *slot = &d_ctrl_state->module_image_info_cache.slots[slot_idx]; - CTRL_ModuleImageInfoCacheStripe *stripe = &d_ctrl_state->module_image_info_cache.stripes[stripe_idx]; + D_ModuleImageInfoCacheSlot *slot = &d_ctrl_state->module_image_info_cache.slots[slot_idx]; + D_ModuleImageInfoCacheStripe *stripe = &d_ctrl_state->module_image_info_cache.stripes[stripe_idx]; MutexScopeW(stripe->rw_mutex) { - CTRL_ModuleImageInfoCacheNode *node = 0; - for(CTRL_ModuleImageInfoCacheNode *n = slot->first; n != 0; n = n->next) + D_ModuleImageInfoCacheNode *node = 0; + for(D_ModuleImageInfoCacheNode *n = slot->first; n != 0; n = n->next) { if(ctrl_handle_match(n->module, module)) { @@ -4137,12 +4137,12 @@ ctrl_thread__module_close(CTRL_Handle process, CTRL_Handle module, Rng1U64 vaddr //- rjf: attached process running/event gathering internal DMN_Event * -ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg, DMN_RunCtrls *run_ctrls, CTRL_Spoof *spoof) +ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, D_Msg *msg, DMN_RunCtrls *run_ctrls, D_Spoof *spoof) { ProfBeginFunction(); DMN_Event *event = push_array(arena, DMN_Event, 1); Temp scratch = scratch_begin(&arena, 1); - CTRL_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; + D_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; //- rjf: loop -> try to get event, run, repeat U64 spoof_old_ip_value = 0; @@ -4186,10 +4186,10 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg, should_filter_event = (ev->exception_repeated == 0 && (spoof == 0 || ev->instruction_pointer != spoof->new_ip_value)); // rjf: exception code -> kind - CTRL_ExceptionCodeKind code_kind = CTRL_ExceptionCodeKind_Null; + D_ExceptionCodeKind code_kind = D_ExceptionCodeKind_Null; if(should_filter_event) { - for(CTRL_ExceptionCodeKind k = (CTRL_ExceptionCodeKind)0; k < CTRL_ExceptionCodeKind_COUNT; k = (CTRL_ExceptionCodeKind)(k+1)) + for(D_ExceptionCodeKind k = (D_ExceptionCodeKind)0; k < D_ExceptionCodeKind_COUNT; k = (D_ExceptionCodeKind)(k+1)) { if(ctrl_exception_code_kind_code_table[k] == ev->code) { @@ -4215,17 +4215,17 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg, (spoof == 0 || ev->instruction_pointer != spoof->new_ip_value)) { Access *access = access_open(); - CTRL_Entity *process = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(CTRL_MachineID_Local, ev->process)); - CTRL_Entity *module = &ctrl_entity_nil; - for(CTRL_Entity *child = process->first; child != &ctrl_entity_nil; child = child->next) + D_Entity *process = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(D_MachineID_Local, ev->process)); + D_Entity *module = &d_entity_nil; + for(D_Entity *child = process->first; child != &d_entity_nil; child = child->next) { - if(child->kind == CTRL_EntityKind_Module) + if(child->kind == D_EntityKind_Module) { module = child; break; } } - if(module != &ctrl_entity_nil) + if(module != &d_entity_nil) { // rjf: determine base address of asan shadow space U64 asan_shadow_base_vaddr = 0; @@ -4305,7 +4305,7 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg, U64 size_of_spoof = 0; if(do_spoof) ProfScope("prep spoof") { - CTRL_Entity *spoof_process = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(CTRL_MachineID_Local, spoof->process)); + D_Entity *spoof_process = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(D_MachineID_Local, spoof->process)); Arch arch = spoof_process->arch; size_of_spoof = bit_size_from_arch(arch)/8; dmn_process_read(spoof_process->handle.dmn_handle, r1u64(spoof->vaddr, spoof->vaddr+size_of_spoof), &spoof_old_ip_value); @@ -4375,7 +4375,7 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg, // simply been sent other debug events first if(spoof != 0) { - CTRL_Entity *thread = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(CTRL_MachineID_Local, spoof->thread)); + D_Entity *thread = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(D_MachineID_Local, spoof->thread)); Arch arch = thread->arch; void *regs_block = push_array(scratch.arena, U8, regs_block_size_from_arch(arch)); dmn_thread_read_reg_block(spoof->thread, regs_block); @@ -4383,21 +4383,21 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg, if(spoof_thread_rip == spoof->new_ip_value) { regs_arch_block_write_rip(arch, regs_block, spoof_old_ip_value); - ctrl_thread_write_reg_block(ctrl_handle_make(CTRL_MachineID_Local, spoof->thread), regs_block); + ctrl_thread_write_reg_block(ctrl_handle_make(D_MachineID_Local, spoof->thread), regs_block); } } //- rjf: push ctrl events associated with this demon event - CTRL_EventList evts = {0}; + D_EventList evts = {0}; ProfScope("push ctrl events associated with this demon event") switch(event->kind) { default:{}break; case DMN_EventKind_CreateProcess: { - CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); - out_evt->kind = CTRL_EventKind_NewProc; + D_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); + out_evt->kind = D_EventKind_NewProc; out_evt->msg_id = msg->msg_id; - out_evt->entity = ctrl_handle_make(CTRL_MachineID_Local, event->process); + out_evt->entity = ctrl_handle_make(D_MachineID_Local, event->process); out_evt->arch = event->arch; out_evt->entity_id = event->code; out_evt->tls_model = ctrl_dynamic_linker_type_from_dmn(event->tls_model); @@ -4406,11 +4406,11 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg, }break; case DMN_EventKind_CreateThread: { - CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); - out_evt->kind = CTRL_EventKind_NewThread; + D_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); + out_evt->kind = D_EventKind_NewThread; out_evt->msg_id = msg->msg_id; - out_evt->entity = ctrl_handle_make(CTRL_MachineID_Local, event->thread); - out_evt->parent = ctrl_handle_make(CTRL_MachineID_Local, event->process); + out_evt->entity = ctrl_handle_make(D_MachineID_Local, event->thread); + out_evt->parent = ctrl_handle_make(D_MachineID_Local, event->process); out_evt->arch = event->arch; out_evt->entity_id = event->code; out_evt->stack_base = dmn_stack_base_vaddr_from_thread(event->thread); @@ -4420,13 +4420,13 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg, }break; case DMN_EventKind_LoadModule: { - CTRL_Handle process_handle = ctrl_handle_make(CTRL_MachineID_Local, event->process); - CTRL_Handle module_handle = ctrl_handle_make(CTRL_MachineID_Local, event->module); - CTRL_Event *out_evt1 = ctrl_event_list_push(scratch.arena, &evts); + D_Handle process_handle = ctrl_handle_make(D_MachineID_Local, event->process); + D_Handle module_handle = ctrl_handle_make(D_MachineID_Local, event->module); + D_Event *out_evt1 = ctrl_event_list_push(scratch.arena, &evts); String8 module_path = path_normalized_from_string(scratch.arena, event->string); U64 exe_timestamp = os_properties_from_file_path(module_path).modified; ctrl_thread__module_open(process_handle, module_handle, r1u64(event->address, event->address+event->size), module_path, event->elf_phdr_vrange, event->elf_phdr_entsize); - out_evt1->kind = CTRL_EventKind_NewModule; + out_evt1->kind = D_EventKind_NewModule; out_evt1->msg_id = msg->msg_id; out_evt1->entity = module_handle; out_evt1->parent = process_handle; @@ -4438,10 +4438,10 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg, out_evt1->string = module_path; out_evt1->tls_index = event->tls_index; out_evt1->tls_offset = event->tls_offset; - CTRL_Event *out_evt2 = ctrl_event_list_push(scratch.arena, &evts); + D_Event *out_evt2 = ctrl_event_list_push(scratch.arena, &evts); String8 initial_debug_info_path = ctrl_initial_debug_info_path_from_module(scratch.arena, module_handle); U64 debug_info_timestamp = os_properties_from_file_path(initial_debug_info_path).modified; - out_evt2->kind = CTRL_EventKind_ModuleDebugInfoPathChange; + out_evt2->kind = D_EventKind_ModuleDebugInfoPathChange; out_evt2->msg_id = msg->msg_id; out_evt2->entity = module_handle; out_evt2->parent = process_handle; @@ -4452,31 +4452,31 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg, }break; case DMN_EventKind_ExitProcess: { - CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); - out_evt->kind = CTRL_EventKind_EndProc; + D_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); + out_evt->kind = D_EventKind_EndProc; out_evt->msg_id = msg->msg_id; - out_evt->entity = ctrl_handle_make(CTRL_MachineID_Local, event->process); + out_evt->entity = ctrl_handle_make(D_MachineID_Local, event->process); out_evt->u64_code = event->code; d_ctrl_state->process_counter -= 1; }break; case DMN_EventKind_ExitThread: { - CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); - out_evt->kind = CTRL_EventKind_EndThread; + D_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); + out_evt->kind = D_EventKind_EndThread; out_evt->msg_id = msg->msg_id; - out_evt->entity = ctrl_handle_make(CTRL_MachineID_Local, event->thread); + out_evt->entity = ctrl_handle_make(D_MachineID_Local, event->thread); out_evt->entity_id = event->code; }break; case DMN_EventKind_UnloadModule: ProfScope("unload module %.*s", str8_varg(event->string)) { - CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); - CTRL_Handle module_handle = ctrl_handle_make(CTRL_MachineID_Local, event->module); - CTRL_Entity *module_ent = ctrl_entity_from_handle(entity_ctx, module_handle); - CTRL_Entity *process_ent = ctrl_process_from_entity(module_ent); + D_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); + D_Handle module_handle = ctrl_handle_make(D_MachineID_Local, event->module); + D_Entity *module_ent = ctrl_entity_from_handle(entity_ctx, module_handle); + D_Entity *process_ent = ctrl_process_from_entity(module_ent); String8 module_path = event->string; ctrl_thread__module_close(process_ent->handle, module_handle, module_ent->vaddr_range); - out_evt->kind = CTRL_EventKind_EndModule; + out_evt->kind = D_EventKind_EndModule; out_evt->msg_id = msg->msg_id; out_evt->entity = module_handle; out_evt->string = module_path; @@ -4488,59 +4488,59 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg, U64 num_strings = (event->string.size + d_ctrl_state->c2u_ring_max_string_size-1) / d_ctrl_state->c2u_ring_max_string_size; for(U64 string_idx = 0; string_idx < num_strings; string_idx += 1) { - CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); - out_evt->kind = CTRL_EventKind_DebugString; + D_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); + out_evt->kind = D_EventKind_DebugString; out_evt->msg_id = msg->msg_id; - out_evt->entity = ctrl_handle_make(CTRL_MachineID_Local, event->thread); - out_evt->parent = ctrl_handle_make(CTRL_MachineID_Local, event->process); + out_evt->entity = ctrl_handle_make(D_MachineID_Local, event->thread); + out_evt->parent = ctrl_handle_make(D_MachineID_Local, event->process); out_evt->string = str8_substr(event->string, r1u64(string_idx*d_ctrl_state->c2u_ring_max_string_size, (string_idx+1)*d_ctrl_state->c2u_ring_max_string_size)); } }break; case DMN_EventKind_SetThreadName: { - CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); - out_evt->kind = CTRL_EventKind_ThreadName; + D_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); + out_evt->kind = D_EventKind_ThreadName; out_evt->msg_id = msg->msg_id; - out_evt->entity = ctrl_handle_make(CTRL_MachineID_Local, event->thread); - out_evt->parent = ctrl_handle_make(CTRL_MachineID_Local, event->process); + out_evt->entity = ctrl_handle_make(D_MachineID_Local, event->thread); + out_evt->parent = ctrl_handle_make(D_MachineID_Local, event->process); out_evt->string = event->string; out_evt->entity_id = event->code; }break; case DMN_EventKind_SetThreadColor: { - CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); - out_evt->kind = CTRL_EventKind_ThreadColor; + D_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); + out_evt->kind = D_EventKind_ThreadColor; out_evt->msg_id = msg->msg_id; - out_evt->entity = ctrl_handle_make(CTRL_MachineID_Local, event->thread); - out_evt->parent = ctrl_handle_make(CTRL_MachineID_Local, event->process); + out_evt->entity = ctrl_handle_make(D_MachineID_Local, event->thread); + out_evt->parent = ctrl_handle_make(D_MachineID_Local, event->process); out_evt->entity_id = event->code; out_evt->rgba = event->user_data; }break; case DMN_EventKind_SetVAddrRangeNote: { - CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); - out_evt->kind = CTRL_EventKind_SetVAddrRangeNote; - out_evt->parent = ctrl_handle_make(CTRL_MachineID_Local, event->process); + D_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); + out_evt->kind = D_EventKind_SetVAddrRangeNote; + out_evt->parent = ctrl_handle_make(D_MachineID_Local, event->process); out_evt->msg_id = msg->msg_id; out_evt->vaddr_rng = r1u64(event->address, event->address + event->size); out_evt->string = event->string; }break; case DMN_EventKind_SetBreakpoint: { - CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); - out_evt->kind = CTRL_EventKind_SetBreakpoint; - out_evt->entity = ctrl_handle_make(CTRL_MachineID_Local, event->thread); - out_evt->parent = ctrl_handle_make(CTRL_MachineID_Local, event->process); + D_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); + out_evt->kind = D_EventKind_SetBreakpoint; + out_evt->entity = ctrl_handle_make(D_MachineID_Local, event->thread); + out_evt->parent = ctrl_handle_make(D_MachineID_Local, event->process); out_evt->vaddr_rng = r1u64(event->address, event->address+event->size); out_evt->bp_flags = ctrl_user_breakpoint_flags_from_dmn_trap_flags(event->flags); }break; case DMN_EventKind_UnsetBreakpoint: { // TODO(rjf): this needs to be reflected in the resolved trap list too!!!!!!!! - CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); - out_evt->kind = CTRL_EventKind_UnsetBreakpoint; - out_evt->entity = ctrl_handle_make(CTRL_MachineID_Local, event->thread); - out_evt->parent = ctrl_handle_make(CTRL_MachineID_Local, event->process); + D_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts); + out_evt->kind = D_EventKind_UnsetBreakpoint; + out_evt->entity = ctrl_handle_make(D_MachineID_Local, event->thread); + out_evt->parent = ctrl_handle_make(D_MachineID_Local, event->process); out_evt->vaddr_rng = r1u64(event->address, event->address+event->size); out_evt->bp_flags = ctrl_user_breakpoint_flags_from_dmn_trap_flags(event->flags); }break; @@ -4552,7 +4552,7 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg, if(d_ctrl_state->process_counter == 1 && event->kind == DMN_EventKind_CreateProcess) { arena_clear(d_ctrl_state->dbg_dir_arena); - d_ctrl_state->dbg_dir_root = push_array(d_ctrl_state->dbg_dir_arena, CTRL_DbgDirNode, 1); + d_ctrl_state->dbg_dir_root = push_array(d_ctrl_state->dbg_dir_arena, D_DbgDirNode, 1); } //- rjf: out of queued up demon events -> clear event arena @@ -4576,7 +4576,7 @@ ctrl_eval_space_gen(E_Space space) switch(space.kind) { default:{}break; - case CTRL_EvalSpaceKind_Entity: + case D_EvalSpaceKind_Entity: { result = ctrl_mem_gen(); }break; @@ -4593,21 +4593,21 @@ ctrl_eval_space_read(E_Space space, void *out, Rng1U64 range) default:{}break; //- rjf: intra-entity reads (process memory or thread registers) - case CTRL_EvalSpaceKind_Entity: + case D_EvalSpaceKind_Entity: { - CTRL_Entity *entity = (CTRL_Entity *)space.u64_0; + D_Entity *entity = (D_Entity *)space.u64_0; switch(entity->kind) { default:{}break; - case CTRL_EntityKind_Process: + case D_EntityKind_Process: { U64 read_size = dmn_process_read(entity->handle.dmn_handle, range, out); result = (read_size == dim_1u64(range)); }break; - case CTRL_EntityKind_Thread: + case D_EntityKind_Thread: { Temp scratch = scratch_begin(0, 0); - CTRL_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; + D_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; U64 regs_size = regs_block_size_from_arch(entity->arch); void *regs = ctrl_reg_block_from_thread(scratch.arena, entity_ctx, entity->handle); Rng1U64 legal_range = r1u64(0, regs_size); @@ -4625,12 +4625,12 @@ ctrl_eval_space_read(E_Space space, void *out, Rng1U64 range) //- rjf: control thread eval scopes -internal CTRL_EvalScope * -ctrl_thread__eval_scope_begin(Arena *arena, CTRL_UserBreakpointList *user_bps, CTRL_Entity *thread) +internal D_EvalScope * +ctrl_thread__eval_scope_begin(Arena *arena, CTRL_UserBreakpointList *user_bps, D_Entity *thread) { ProfBeginFunction(); - CTRL_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; - CTRL_EvalScope *scope = push_array(arena, CTRL_EvalScope, 1); + D_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; + D_EvalScope *scope = push_array(arena, D_EvalScope, 1); scope->access = access_open(); ////////////////////////////// @@ -4638,39 +4638,39 @@ ctrl_thread__eval_scope_begin(Arena *arena, CTRL_UserBreakpointList *user_bps, C // Arch arch = thread->arch; U64 thread_rip_vaddr = dmn_rip_from_thread(thread->handle.dmn_handle); - CTRL_Entity *process = ctrl_process_from_entity(thread); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, thread_rip_vaddr); + D_Entity *process = ctrl_process_from_entity(thread); + D_Entity *module = ctrl_module_from_process_vaddr(process, thread_rip_vaddr); U64 thread_rip_voff = ctrl_voff_from_vaddr(module, thread_rip_vaddr); ////////////////////////////// //- rjf: gather evaluation debug infos & modules // - U64 eval_modules_count = Max(1, entity_ctx->entity_kind_counts[CTRL_EntityKind_Module]); + 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 = &eval_modules[0]; eval_modules_primary->vaddr_range = r1u64(0, max_U64); - U64 eval_dbg_infos_count = Max(1, entity_ctx->entity_kind_counts[CTRL_EntityKind_Module]); + 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 = &eval_dbg_infos[0]; MemoryCopyStruct(eval_dbg_infos_primary, &e_dbg_info_nil); { U64 eval_module_idx = 0; U64 eval_dbg_info_idx = 0; - for(CTRL_Entity *machine = entity_ctx->root->first; - machine != &ctrl_entity_nil; + for(D_Entity *machine = entity_ctx->root->first; + machine != &d_entity_nil; machine = machine->next) { - if(machine->kind != CTRL_EntityKind_Machine) { continue; } - for(CTRL_Entity *process = machine->first; - process != &ctrl_entity_nil; + if(machine->kind != D_EntityKind_Machine) { continue; } + for(D_Entity *process = machine->first; + process != &d_entity_nil; process = process->next) { - if(process->kind != CTRL_EntityKind_Process) { continue; } - for(CTRL_Entity *mod = process->first; - mod != &ctrl_entity_nil; + if(process->kind != D_EntityKind_Process) { continue; } + for(D_Entity *mod = process->first; + mod != &d_entity_nil; mod = mod->next) { - if(mod->kind != CTRL_EntityKind_Module) { continue; } + if(mod->kind != D_EntityKind_Module) { continue; } DI_Key dbgi_key = ctrl_dbgi_key_from_module(mod); //- rjf: try to obtain this module's RDI @@ -4690,9 +4690,9 @@ ctrl_thread__eval_scope_begin(Arena *arena, CTRL_UserBreakpointList *user_bps, C // rjf: find cached result U64 hash = ctrl_hash_from_handle(mod->handle); U64 slot_idx = hash%d_ctrl_state->module_req_cache_slots_count; - CTRL_ModuleReqCacheNode *slot = d_ctrl_state->module_req_cache_slots[slot_idx]; - CTRL_ModuleReqCacheNode *node = 0; - for(CTRL_ModuleReqCacheNode *n = slot; n != 0; n = n->next) + D_ModuleReqCacheNode *slot = d_ctrl_state->module_req_cache_slots[slot_idx]; + D_ModuleReqCacheNode *node = 0; + for(D_ModuleReqCacheNode *n = slot; n != 0; n = n->next) { if(ctrl_handle_match(n->module, mod->handle)) { @@ -4710,7 +4710,7 @@ ctrl_thread__eval_scope_begin(Arena *arena, CTRL_UserBreakpointList *user_bps, C // rjf: not cached -> compute & store else ProfScope("cache miss") { - CTRL_Entity *debug_info_path = ctrl_entity_child_from_kind(mod, CTRL_EntityKind_DebugInfoPath); + D_Entity *debug_info_path = ctrl_entity_child_from_kind(mod, D_EntityKind_DebugInfoPath); OS_Handle file = os_file_open(OS_AccessFlag_Read|OS_AccessFlag_ShareRead, debug_info_path->string); ProfScope("determine if %.*s is necessary", str8_varg(debug_info_path->string)) { @@ -4751,7 +4751,7 @@ ctrl_thread__eval_scope_begin(Arena *arena, CTRL_UserBreakpointList *user_bps, C } } os_file_close(file); - node = push_array(d_ctrl_state->ctrl_thread_msg_process_arena, CTRL_ModuleReqCacheNode, 1); + node = push_array(d_ctrl_state->ctrl_thread_msg_process_arena, D_ModuleReqCacheNode, 1); node->next = slot; d_ctrl_state->module_req_cache_slots[slot_idx] = node; node->module = mod->handle; @@ -4778,7 +4778,7 @@ ctrl_thread__eval_scope_begin(Arena *arena, CTRL_UserBreakpointList *user_bps, C eval_modules[eval_module_idx].arch = arch; eval_modules[eval_module_idx].dbg_info_num= (U32)eval_dbg_info_idx; eval_modules[eval_module_idx].vaddr_range = mod->vaddr_range; - eval_modules[eval_module_idx].space = e_space_make(CTRL_EvalSpaceKind_Entity); + eval_modules[eval_module_idx].space = e_space_make(D_EvalSpaceKind_Entity); eval_modules[eval_module_idx].space.u64_0 = (U64)process; if(mod == module) { @@ -4805,9 +4805,9 @@ ctrl_thread__eval_scope_begin(Arena *arena, CTRL_UserBreakpointList *user_bps, C ctx->thread_ip_vaddr = thread_rip_vaddr; ctx->thread_ip_voff = thread_rip_voff; ctx->thread_arch = thread->arch; - ctx->thread_reg_space = e_space_make(CTRL_EvalSpaceKind_Entity); + ctx->thread_reg_space = e_space_make(D_EvalSpaceKind_Entity); ctx->thread_reg_space.u64_0 = (U64)thread; - ctx->thread_process_space = e_space_make(CTRL_EvalSpaceKind_Entity); + ctx->thread_process_space = e_space_make(D_EvalSpaceKind_Entity); ctx->thread_process_space.u64_0 = (U64)process; //- rjf: fill debug infos @@ -4849,7 +4849,7 @@ ctrl_thread__eval_scope_begin(Arena *arena, CTRL_UserBreakpointList *user_bps, C E_InterpretCtx *ctx = &scope->interpret_ctx; ctx->primary_space = eval_modules_primary->space; ctx->reg_arch = eval_modules_primary->arch; - ctx->reg_space = e_space_make(CTRL_EvalSpaceKind_Entity); + ctx->reg_space = e_space_make(D_EvalSpaceKind_Entity); ctx->reg_space.u64_0 = (U64)thread; ctx->module_base = push_array(arena, U64, 1); ctx->module_base[0]= module->vaddr_range.min; @@ -4866,7 +4866,7 @@ ctrl_thread__eval_scope_begin(Arena *arena, CTRL_UserBreakpointList *user_bps, C } internal void -ctrl_thread__eval_scope_end(CTRL_EvalScope *scope) +ctrl_thread__eval_scope_end(D_EvalScope *scope) { access_close(scope->access); } @@ -4881,9 +4881,9 @@ ctrl_thread__end_and_flush_log(void) os_append_data_to_file_path(d_ctrl_state->ctrl_thread_log_path, log.strings[LogMsgKind_Info]); if(log.strings[LogMsgKind_UserError].size != 0) { - CTRL_EventList evts = {0}; - CTRL_Event *evt = ctrl_event_list_push(scratch.arena, &evts); - evt->kind = CTRL_EventKind_Error; + D_EventList evts = {0}; + D_Event *evt = ctrl_event_list_push(scratch.arena, &evts); + evt->kind = D_EventKind_Error; evt->string = log.strings[LogMsgKind_UserError]; ctrl_c2u_push_events(&evts); } @@ -4893,7 +4893,7 @@ ctrl_thread__end_and_flush_log(void) //- rjf: msg kind implementations internal void -ctrl_thread__launch(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) +ctrl_thread__launch(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg) { Temp scratch = scratch_begin(0, 0); @@ -4943,13 +4943,13 @@ ctrl_thread__launch(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) os_file_close(stdin_handle); //- rjf: record (id -> entry points), so that we know custom entry points for this PID - CTRL_EntityCtxRWStore *entity_ctx_rw_store = d_ctrl_state->ctrl_thread_entity_store; + D_EntityCtxRWStore *entity_ctx_rw_store = d_ctrl_state->ctrl_thread_entity_store; MutexScopeW(d_ctrl_state->ctrl_thread_entity_ctx_rw_mutex) { for(String8Node *n = msg->entry_points.first; n != 0; n = n->next) { String8 string = n->string; - CTRL_Entity *entry = ctrl_entity_alloc(entity_ctx_rw_store, entity_ctx_rw_store->ctx.root, CTRL_EntityKind_EntryPoint, Arch_Null, ctrl_handle_zero(), (U64)id); + D_Entity *entry = ctrl_entity_alloc(entity_ctx_rw_store, entity_ctx_rw_store->ctx.root, D_EntityKind_EntryPoint, Arch_Null, ctrl_handle_zero(), (U64)id); ctrl_entity_equip_string(entity_ctx_rw_store, entry, string); } } @@ -4958,7 +4958,7 @@ ctrl_thread__launch(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) } internal void -ctrl_thread__attach(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) +ctrl_thread__attach(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); @@ -4998,10 +4998,10 @@ ctrl_thread__attach(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) //- rjf: record stop { - CTRL_EventList evts = {0}; - CTRL_Event *event = ctrl_event_list_push(scratch.arena, &evts); - event->kind = CTRL_EventKind_Stopped; - event->cause = CTRL_EventCause_Finished; + D_EventList evts = {0}; + D_Event *event = ctrl_event_list_push(scratch.arena, &evts); + event->kind = D_EventKind_Stopped; + event->cause = D_EventCause_Finished; event->msg_id = msg->msg_id; event->entity_id = !!attach_successful * msg->entity_id; ctrl_c2u_push_events(&evts); @@ -5012,7 +5012,7 @@ ctrl_thread__attach(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) } internal void -ctrl_thread__kill(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) +ctrl_thread__kill(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); @@ -5023,7 +5023,7 @@ ctrl_thread__kill(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) B32 kill_worked = dmn_ctrl_kill(ctrl_ctx, process, exit_code); //- rjf: wait for process to be dead - CTRL_EventCause cause = CTRL_EventCause_Finished; + D_EventCause cause = D_EventCause_Finished; if(kill_worked) { DMN_RunCtrls run_ctrls = {0}; @@ -5042,17 +5042,17 @@ ctrl_thread__kill(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) { done = 1; }break; - case DMN_EventKind_Error:{done = 1; cause = CTRL_EventCause_Error;}break; - case DMN_EventKind_Halt: {done = 1; cause = CTRL_EventCause_InterruptedByHalt;}break; + case DMN_EventKind_Error:{done = 1; cause = D_EventCause_Error;}break; + case DMN_EventKind_Halt: {done = 1; cause = D_EventCause_InterruptedByHalt;}break; } } } //- rjf: record stop { - CTRL_EventList evts = {0}; - CTRL_Event *event = ctrl_event_list_push(scratch.arena, &evts); - event->kind = CTRL_EventKind_Stopped; + D_EventList evts = {0}; + D_Event *event = ctrl_event_list_push(scratch.arena, &evts); + event->kind = D_EventKind_Stopped; event->cause = cause; event->msg_id = msg->msg_id; if(kill_worked) @@ -5067,34 +5067,34 @@ ctrl_thread__kill(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) } internal void -ctrl_thread__kill_all(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) +ctrl_thread__kill_all(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); U32 exit_code = msg->exit_code; - CTRL_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; + D_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; //- rjf: gather all currently existing processes - CTRL_EntityArray initial_processes = ctrl_entity_array_from_kind(entity_ctx, CTRL_EntityKind_Process); + D_EntityArray initial_processes = ctrl_entity_array_from_kind(entity_ctx, D_EntityKind_Process); typedef struct Task Task; struct Task { Task *next; Task *prev; - CTRL_Entity *process; + D_Entity *process; }; Task *first_task = 0; Task *last_task = 0; for EachIndex(idx, initial_processes.count) { - CTRL_Entity *entity = initial_processes.v[idx]; + D_Entity *entity = initial_processes.v[idx]; Task *t = push_array(scratch.arena, Task, 1); t->process = entity; DLLPushBack(first_task, last_task, t); } //- rjf: kill processes as needed, wait for all processes to be dead - CTRL_EventCause cause = CTRL_EventCause_Finished; + D_EventCause cause = D_EventCause_Finished; if(first_task != 0) { DMN_RunCtrls run_ctrls = {0}; @@ -5120,17 +5120,17 @@ ctrl_thread__kill_all(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) default:{}break; case DMN_EventKind_CreateProcess: { - CTRL_Entity *new_process = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(CTRL_MachineID_Local, event->process)); + D_Entity *new_process = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(D_MachineID_Local, event->process)); Task *t = push_array(scratch.arena, Task, 1); t->process = new_process; DLLPushBack(first_task, last_task, t); }break; - case DMN_EventKind_Error:{done = 1; cause = CTRL_EventCause_Error;}break; - case DMN_EventKind_Halt: {done = 1; cause = CTRL_EventCause_InterruptedByHalt;}break; + case DMN_EventKind_Error:{done = 1; cause = D_EventCause_Error;}break; + case DMN_EventKind_Halt: {done = 1; cause = D_EventCause_InterruptedByHalt;}break; } // rjf: end if all processes are gone - CTRL_EntityArray processes = ctrl_entity_array_from_kind(entity_ctx, CTRL_EntityKind_Process); + D_EntityArray processes = ctrl_entity_array_from_kind(entity_ctx, D_EntityKind_Process); if(processes.count == 0) { done = 1; @@ -5140,9 +5140,9 @@ ctrl_thread__kill_all(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) //- rjf: record stop { - CTRL_EventList evts = {0}; - CTRL_Event *event = ctrl_event_list_push(scratch.arena, &evts); - event->kind = CTRL_EventKind_Stopped; + D_EventList evts = {0}; + D_Event *event = ctrl_event_list_push(scratch.arena, &evts); + event->kind = D_EventKind_Stopped; event->cause = cause; event->msg_id = msg->msg_id; ctrl_c2u_push_events(&evts); @@ -5153,7 +5153,7 @@ ctrl_thread__kill_all(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) } internal void -ctrl_thread__detach(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) +ctrl_thread__detach(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); @@ -5186,10 +5186,10 @@ ctrl_thread__detach(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) //- rjf: record stop { - CTRL_EventList evts = {0}; - CTRL_Event *event = ctrl_event_list_push(scratch.arena, &evts); - event->kind = CTRL_EventKind_Stopped; - event->cause = CTRL_EventCause_Finished; + D_EventList evts = {0}; + D_Event *event = ctrl_event_list_push(scratch.arena, &evts); + event->kind = D_EventKind_Stopped; + event->cause = D_EventCause_Finished; event->msg_id = msg->msg_id; if(detach_worked) { @@ -5203,16 +5203,16 @@ ctrl_thread__detach(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) } internal void -ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) +ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); DMN_Event *stop_event = 0; - CTRL_EventCause stop_cause = CTRL_EventCause_Null; - CTRL_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; - CTRL_Handle target_thread = msg->entity; - CTRL_Handle target_process = msg->parent; - CTRL_Entity *target_process_entity = ctrl_entity_from_handle(entity_ctx, target_process); + D_EventCause stop_cause = D_EventCause_Null; + D_EntityCtx *entity_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; + D_Handle target_thread = msg->entity; + D_Handle target_process = msg->parent; + D_Entity *target_process_entity = ctrl_entity_from_handle(entity_ctx, target_process); U64 spoof_ip_vaddr = 911; log_infof("ctrl_thread__run:\n{\n"); @@ -5221,28 +5221,28 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) // DMN_TrapChunkList user_traps = {0}; { - CTRL_Entity *thread = ctrl_entity_from_handle(entity_ctx, target_thread); - CTRL_EvalScope *eval_scope = ctrl_thread__eval_scope_begin(scratch.arena, &msg->user_bps, thread); - for(CTRL_Entity *machine = entity_ctx->root->first; - machine != &ctrl_entity_nil; + D_Entity *thread = ctrl_entity_from_handle(entity_ctx, target_thread); + D_EvalScope *eval_scope = ctrl_thread__eval_scope_begin(scratch.arena, &msg->user_bps, thread); + for(D_Entity *machine = entity_ctx->root->first; + machine != &d_entity_nil; machine = machine->next) { - if(machine->kind != CTRL_EntityKind_Machine) { continue; } - for(CTRL_Entity *process = machine->first; process != &ctrl_entity_nil; process = process->next) + if(machine->kind != D_EntityKind_Machine) { continue; } + for(D_Entity *process = machine->first; process != &d_entity_nil; process = process->next) { - if(process->kind != CTRL_EntityKind_Process) { continue; } + if(process->kind != D_EntityKind_Process) { continue; } // rjf: resolve module-dependent user bps - for(CTRL_Entity *module = process->first; module != &ctrl_entity_nil; module = module->next) + for(D_Entity *module = process->first; module != &d_entity_nil; module = module->next) { - if(module->kind != CTRL_EntityKind_Module) { continue; } + if(module->kind != D_EntityKind_Module) { continue; } ctrl_thread__append_resolved_module_user_bp_traps(scratch.arena, eval_scope, process->handle, module->handle, &msg->user_bps, &user_traps); } // rjf: push process-declared breakpoins - for(CTRL_Entity *bp = process->first; bp != &ctrl_entity_nil; bp = bp->next) + for(D_Entity *bp = process->first; bp != &d_entity_nil; bp = bp->next) { - if(bp->kind != CTRL_EntityKind_Breakpoint) { continue; } + if(bp->kind != D_EntityKind_Breakpoint) { continue; } ctrl_thread__append_program_defined_bp_traps(scratch.arena, bp, &user_traps); } @@ -5280,17 +5280,17 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) { // rjf: gather stuck threads DMN_HandleList stuck_threads = {0}; - for(CTRL_Entity *machine = entity_ctx->root->first; - machine != &ctrl_entity_nil; + for(D_Entity *machine = entity_ctx->root->first; + machine != &d_entity_nil; machine = machine->next) { - if(machine->kind != CTRL_EntityKind_Machine) { continue; } - for(CTRL_Entity *process = machine->first; process != &ctrl_entity_nil; process = process->next) + if(machine->kind != D_EntityKind_Machine) { continue; } + for(D_Entity *process = machine->first; process != &d_entity_nil; process = process->next) { - if(process->kind != CTRL_EntityKind_Process) { continue; } - for(CTRL_Entity *thread = process->first; thread != &ctrl_entity_nil; thread = thread->next) + if(process->kind != D_EntityKind_Process) { continue; } + for(D_Entity *thread = process->first; thread != &d_entity_nil; thread = thread->next) { - if(thread->kind != CTRL_EntityKind_Thread) { continue; } + if(thread->kind != D_EntityKind_Thread) { continue; } U64 rip = dmn_rip_from_thread(thread->handle.dmn_handle); // rjf: determine if thread is frozen @@ -5311,7 +5311,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) } B32 is_on_net_trap = 0; - for(CTRL_TrapNode *n = msg->traps.first; n != 0; n = n->next) + for(D_TrapNode *n = msg->traps.first; n != 0; n = n->next) { if(n->v.vaddr == rip) { @@ -5361,13 +5361,13 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) case DMN_EventKind_ExitThread: if(dmn_handle_match(event->thread, thread)) { - stop_cause = CTRL_EventCause_Error; + stop_cause = D_EventCause_Error; goto stop; }break; - case DMN_EventKind_Error: stop_cause = CTRL_EventCause_Error; goto stop; - case DMN_EventKind_Exception: stop_cause = CTRL_EventCause_InterruptedByException; goto stop; - case DMN_EventKind_Trap: stop_cause = CTRL_EventCause_InterruptedByTrap; goto stop; - case DMN_EventKind_Halt: stop_cause = CTRL_EventCause_InterruptedByHalt; goto stop; + case DMN_EventKind_Error: stop_cause = D_EventCause_Error; goto stop; + case DMN_EventKind_Exception: stop_cause = D_EventCause_InterruptedByException; goto stop; + case DMN_EventKind_Trap: stop_cause = D_EventCause_InterruptedByTrap; goto stop; + case DMN_EventKind_Halt: stop_cause = D_EventCause_InterruptedByHalt; goto stop; stop:; { stop_event = event; @@ -5385,16 +5385,16 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) ////////////////////////////// //- rjf: gather frozen threads // - CTRL_EntityList frozen_threads = {0}; - for(CTRL_Entity *machine = entity_ctx->root->first; - machine != &ctrl_entity_nil; + D_EntityList frozen_threads = {0}; + for(D_Entity *machine = entity_ctx->root->first; + machine != &d_entity_nil; machine = machine->next) { - if(machine->kind != CTRL_EntityKind_Machine) { continue; } - for(CTRL_Entity *process = machine->first; process != &ctrl_entity_nil; process = process->next) + if(machine->kind != D_EntityKind_Machine) { continue; } + for(D_Entity *process = machine->first; process != &d_entity_nil; process = process->next) { - if(process->kind != CTRL_EntityKind_Process) { continue; } - for(CTRL_Entity *thread = process->first; thread != &ctrl_entity_nil; thread = thread->next) + if(process->kind != D_EntityKind_Process) { continue; } + for(D_Entity *thread = process->first; thread != &d_entity_nil; thread = thread->next) { if(thread->is_frozen) { @@ -5408,7 +5408,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) //- rjf: resolve trap net // DMN_TrapChunkList trap_net_traps = {0}; - for(CTRL_TrapNode *node = msg->traps.first; + for(D_TrapNode *node = msg->traps.first; node != 0; node = node->next) { @@ -5430,9 +5430,9 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) // if(stop_event == 0) { - CTRL_EventList evts = {0}; - CTRL_Event *event = ctrl_event_list_push(scratch.arena, &evts); - event->kind = CTRL_EventKind_Started; + D_EventList evts = {0}; + D_Event *event = ctrl_event_list_push(scratch.arena, &evts); + event->kind = D_EventKind_Started; ctrl_c2u_push_events(&evts); } @@ -5442,7 +5442,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) if(stop_event == 0) { B32 spoof_mode = 0; - CTRL_Spoof spoof = {0}; + D_Spoof spoof = {0}; DMN_TrapChunkList entry_traps = {0}; for(U64 run_loop_idx = 0;; run_loop_idx += 1) { @@ -5458,7 +5458,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) ////////////////////////// //- rjf: choose spoof // - CTRL_Spoof *run_spoof = 0; + D_Spoof *run_spoof = 0; if(spoof_mode) { run_spoof = &spoof; @@ -5478,7 +5478,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) run_ctrls.run_entities_are_unfrozen = 0; { U64 idx = 0; - for(CTRL_EntityNode *n = frozen_threads.first; n != 0; n = n->next) + for(D_EntityNode *n = frozen_threads.first; n != 0; n = n->next) { run_ctrls.run_entities[idx] = n->v->handle.dmn_handle; idx += 1; @@ -5498,7 +5498,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) // B32 launch_done_first_module = 0; B32 hard_stop = 0; - CTRL_EventCause hard_stop_cause = ctrl_event_cause_from_dmn_event_kind(event->kind); + D_EventCause hard_stop_cause = ctrl_event_cause_from_dmn_event_kind(event->kind); B32 use_stepping_logic = 0; switch(event->kind) { @@ -5519,10 +5519,10 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) }break; case DMN_EventKind_CreateProcess: { - CTRL_EvalScope *eval_scope = ctrl_thread__eval_scope_begin(scratch.arena, &msg->user_bps, &ctrl_entity_nil); + D_EvalScope *eval_scope = ctrl_thread__eval_scope_begin(scratch.arena, &msg->user_bps, &d_entity_nil); { DMN_TrapChunkList new_traps = {0}; - ctrl_thread__append_resolved_process_user_bp_traps(scratch.arena, eval_scope, ctrl_handle_make(CTRL_MachineID_Local, event->process), &msg->user_bps, &new_traps); + ctrl_thread__append_resolved_process_user_bp_traps(scratch.arena, eval_scope, ctrl_handle_make(D_MachineID_Local, event->process), &msg->user_bps, &new_traps); log_infof("step_rule: create_process -> resolve traps\n"); log_infof("new_traps:\n{\n"); for(DMN_TrapChunkNode *n = new_traps.first; n != 0; n = n->next) @@ -5541,11 +5541,11 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) }break; case DMN_EventKind_LoadModule: { - CTRL_Entity *thread = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(CTRL_MachineID_Local, event->thread)); - CTRL_EvalScope *eval_scope = ctrl_thread__eval_scope_begin(scratch.arena, &msg->user_bps, thread); + D_Entity *thread = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(D_MachineID_Local, event->thread)); + D_EvalScope *eval_scope = ctrl_thread__eval_scope_begin(scratch.arena, &msg->user_bps, thread); { DMN_TrapChunkList new_traps = {0}; - ctrl_thread__append_resolved_module_user_bp_traps(scratch.arena, eval_scope, ctrl_handle_make(CTRL_MachineID_Local, event->process), ctrl_handle_make(CTRL_MachineID_Local, event->module), &msg->user_bps, &new_traps); + ctrl_thread__append_resolved_module_user_bp_traps(scratch.arena, eval_scope, ctrl_handle_make(D_MachineID_Local, event->process), ctrl_handle_make(D_MachineID_Local, event->module), &msg->user_bps, &new_traps); log_infof("step_rule: load_module -> resolve traps\n"); log_infof("new_traps:\n{\n"); for(DMN_TrapChunkNode *n = new_traps.first; n != 0; n = n->next) @@ -5564,12 +5564,12 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) }break; case DMN_EventKind_SetBreakpoint: { - CTRL_Entity *bp = &ctrl_entity_nil; + D_Entity *bp = &d_entity_nil; { - CTRL_Entity *process = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(CTRL_MachineID_Local, event->process)); - for(CTRL_Entity *child = process->first; child != &ctrl_entity_nil; child = child->next) + D_Entity *process = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(D_MachineID_Local, event->process)); + for(D_Entity *child = process->first; child != &d_entity_nil; child = child->next) { - if(child->kind == CTRL_EntityKind_Breakpoint && + if(child->kind == D_EntityKind_Breakpoint && child->vaddr_range.min == event->address && child->vaddr_range.max == event->address + event->size && child->bp_flags == ctrl_user_breakpoint_flags_from_dmn_trap_flags(event->flags)) @@ -5579,7 +5579,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) } } } - if(bp != &ctrl_entity_nil) + if(bp != &d_entity_nil) { DMN_TrapChunkList new_traps = {0}; ctrl_thread__append_program_defined_bp_traps(scratch.arena, bp, &new_traps); @@ -5592,14 +5592,14 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) ////////////////////////// //- rjf: on launches, detect entry points, place traps // - if(msg->run_flags & CTRL_RunFlag_StopOnEntryPoint && !launch_done_first_module && event->kind == DMN_EventKind_HandshakeComplete) + if(msg->run_flags & D_RunFlag_StopOnEntryPoint && !launch_done_first_module && event->kind == DMN_EventKind_HandshakeComplete) { launch_done_first_module = 1; Access *access = access_open(); //- rjf: unpack process/module info - CTRL_Entity *process = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(CTRL_MachineID_Local, event->process)); - CTRL_Entity *module = ctrl_entity_child_from_kind(process, CTRL_EntityKind_Module); + D_Entity *process = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(D_MachineID_Local, event->process)); + D_Entity *module = ctrl_entity_child_from_kind(process, D_EntityKind_Module); U64 module_base_vaddr = module->vaddr_range.min; DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); RDI_Parsed *rdi = di_rdi_from_key(access, dbgi_key, 1, max_U64); @@ -5673,7 +5673,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) //- rjf: add traps for PID-correllated entry points if(!entries_found) { - for(CTRL_Entity *e = entity_ctx->root->first; e != &ctrl_entity_nil; e = e->next) + for(D_Entity *e = entity_ctx->root->first; e != &d_entity_nil; e = e->next) { if(e->id == process->id) { @@ -5821,11 +5821,11 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) ////////////////////////// //- rjf: unpack info about thread attached to event // - CTRL_Entity *thread = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(CTRL_MachineID_Local, event->thread)); - CTRL_Entity *process = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(CTRL_MachineID_Local, event->process)); + D_Entity *thread = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(D_MachineID_Local, event->thread)); + D_Entity *process = ctrl_entity_from_handle(entity_ctx, ctrl_handle_make(D_MachineID_Local, event->process)); Arch arch = thread->arch; U64 thread_rip_vaddr = dmn_rip_from_thread(event->thread); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, thread_rip_vaddr); + D_Entity *module = ctrl_module_from_process_vaddr(process, thread_rip_vaddr); ////////////////////////// //- rjf: extract module-dependent info @@ -5877,7 +5877,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) B32 hit_user_bp = 0; B32 hit_trap_net_bp = 0; B32 hit_conditional_bp_but_filtered = 0; - CTRL_TrapFlags hit_trap_flags = 0; + D_TrapFlags hit_trap_flags = 0; if(!hard_stop && use_stepping_logic && event->kind == DMN_EventKind_Breakpoint) ProfScope("for breakpoint events, gather bp info") { @@ -5936,7 +5936,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) // rjf: evaluate hit stop conditions if(conditions.node_count != 0) ProfScope("evaluate hit stop conditions") { - CTRL_EvalScope *eval_scope = ctrl_thread__eval_scope_begin(temp.arena, &msg->user_bps, thread); + D_EvalScope *eval_scope = ctrl_thread__eval_scope_begin(temp.arena, &msg->user_bps, thread); for(String8Node *condition_n = conditions.first; condition_n != 0; condition_n = condition_n->next) { // rjf: evaluate @@ -5969,7 +5969,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) { if(!hit_user_bp && dmn_handle_match(event->process, target_process.dmn_handle)) { - for(CTRL_TrapNode *node = msg->traps.first; + for(D_TrapNode *node = msg->traps.first; node != 0; node = node->next) { @@ -5989,7 +5989,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) //- rjf: hit conditional user bp but filtered -> single step B32 cond_bp_single_step_stop = 0; - CTRL_EventCause cond_bp_single_step_stop_cause = CTRL_EventCause_Null; + D_EventCause cond_bp_single_step_stop_cause = D_EventCause_Null; if(hit_conditional_bp_but_filtered) LogInfoNamedBlockF("conditional_bp_hit_single_step") { DMN_Handle thread = event->thread; @@ -6031,7 +6031,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) //- rjf: hit entry points on *any thread* cause a stop, if this msg says as such B32 entry_stop = 0; - if(msg->run_flags & CTRL_RunFlag_StopOnEntryPoint && hit_entry) + if(msg->run_flags & D_RunFlag_StopOnEntryPoint && hit_entry) { entry_stop = 1; use_stepping_logic = 0; @@ -6076,10 +6076,10 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) //- rjf: trap net logic: single step after hit B32 single_step_stop = 0; - CTRL_EventCause single_step_stop_cause = CTRL_EventCause_Null; + D_EventCause single_step_stop_cause = D_EventCause_Null; if(!hard_stop && use_trap_net_logic) { - if(hit_trap_flags & CTRL_TrapFlag_SingleStepAfterHit) LogInfoNamedBlockF("trap_net__single_step_after_hit") + if(hit_trap_flags & D_TrapFlag_SingleStepAfterHit) LogInfoNamedBlockF("trap_net__single_step_after_hit") { U64 thread_pre_rip = dmn_rip_from_thread(target_thread.dmn_handle); U64 thread_post_rip = thread_pre_rip; @@ -6123,7 +6123,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) B32 begin_spoof_mode = 0; if(!hard_stop && use_trap_net_logic) { - if(hit_trap_flags & CTRL_TrapFlag_BeginSpoofMode) LogInfoNamedBlockF("trap_net__begin_spoof_mode") + if(hit_trap_flags & D_TrapFlag_BeginSpoofMode) LogInfoNamedBlockF("trap_net__begin_spoof_mode") { // rjf: setup spoof mode begin_spoof_mode = 1; @@ -6141,7 +6141,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) B32 save_stack_pointer = 0; if(!hard_stop && use_trap_net_logic) { - if(hit_trap_flags & CTRL_TrapFlag_SaveStackPointer) + if(hit_trap_flags & D_TrapFlag_SaveStackPointer) { if(stack_pointer_matches) LogInfoNamedBlockF("trap_net__save_sp") { @@ -6156,9 +6156,9 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) B32 trap_net_stop = 0; if(!hard_stop && use_trap_net_logic) { - if(hit_trap_flags & CTRL_TrapFlag_EndStepping) LogInfoNamedBlockF("trap_net__end_step") + if(hit_trap_flags & D_TrapFlag_EndStepping) LogInfoNamedBlockF("trap_net__end_step") { - if((hit_trap_flags & CTRL_TrapFlag_IgnoreStackPointerCheck) || + if((hit_trap_flags & D_TrapFlag_IgnoreStackPointerCheck) || stack_pointer_matches) { trap_net_stop = 1; @@ -6174,7 +6174,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) //- rjf: handle step past trap net B32 step_past_trap_net_stop = 0; - CTRL_EventCause step_past_trap_net_stop_cause = CTRL_EventCause_Null; + D_EventCause step_past_trap_net_stop_cause = D_EventCause_Null; if(step_past_trap_net) LogInfoNamedBlockF("trap_net__single_step_past_trap_net") { DMN_Handle thread = event->thread; @@ -6214,7 +6214,7 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) } //- rjf: loop exit condition - CTRL_EventCause stage_stop_cause = CTRL_EventCause_Null; + D_EventCause stage_stop_cause = D_EventCause_Null; if(hard_stop) { stage_stop_cause = hard_stop_cause; @@ -6233,22 +6233,22 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) } else if(exception_stop) { - stage_stop_cause = CTRL_EventCause_InterruptedByException; + stage_stop_cause = D_EventCause_InterruptedByException; } else if(user_bp_stop) { - stage_stop_cause = CTRL_EventCause_UserBreakpoint; + stage_stop_cause = D_EventCause_UserBreakpoint; } else if(entry_stop) { - stage_stop_cause = CTRL_EventCause_EntryPoint; + stage_stop_cause = D_EventCause_EntryPoint; } else if(trap_net_stop) { - stage_stop_cause = CTRL_EventCause_Finished; + stage_stop_cause = D_EventCause_Finished; } log_infof("stop_cause: %i\n", stage_stop_cause); - if(stage_stop_cause != CTRL_EventCause_Null) + if(stage_stop_cause != D_EventCause_Null) { stop_event = event; stop_cause = stage_stop_cause; @@ -6262,17 +6262,17 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) // if(stop_event != 0) { - CTRL_EventList evts = {0}; - CTRL_Event *event = ctrl_event_list_push(scratch.arena, &evts); - event->kind = CTRL_EventKind_Stopped; + D_EventList evts = {0}; + D_Event *event = ctrl_event_list_push(scratch.arena, &evts); + event->kind = D_EventKind_Stopped; event->cause = stop_cause; - event->entity = ctrl_handle_make(CTRL_MachineID_Local, stop_event->thread); - event->parent = ctrl_handle_make(CTRL_MachineID_Local, stop_event->process); + event->entity = ctrl_handle_make(D_MachineID_Local, stop_event->thread); + event->parent = ctrl_handle_make(D_MachineID_Local, stop_event->process); event->exception_code = stop_event->code; event->exception_kind = ctrl_exception_kind_from_dmn(stop_event->exception_kind); event->vaddr_rng = r1u64(stop_event->address, stop_event->address); event->rip_vaddr = stop_event->instruction_pointer; - if(stop_cause == CTRL_EventCause_UserBreakpoint && stop_event->user_data != 0) + if(stop_cause == D_EventCause_UserBreakpoint && stop_event->user_data != 0) { if(!(stop_event->user_data & bit64)) { @@ -6289,16 +6289,16 @@ ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) } internal void -ctrl_thread__single_step(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) +ctrl_thread__single_step(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg) { ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); //- rjf: record start { - CTRL_EventList evts = {0}; - CTRL_Event *event = ctrl_event_list_push(scratch.arena, &evts); - event->kind = CTRL_EventKind_Started; + D_EventList evts = {0}; + D_Event *event = ctrl_event_list_push(scratch.arena, &evts); + event->kind = D_EventKind_Started; ctrl_c2u_push_events(&evts); } @@ -6306,7 +6306,7 @@ ctrl_thread__single_step(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) DMN_Handle thread = msg->entity.dmn_handle; B32 thread_is_valid = !dmn_handle_match(thread, dmn_handle_zero()); DMN_Event *stop_event = 0; - CTRL_EventCause stop_cause = CTRL_EventCause_Null; + D_EventCause stop_cause = D_EventCause_Null; if(thread_is_valid) { U64 thread_pre_rip = dmn_rip_from_thread(thread); @@ -6326,12 +6326,12 @@ ctrl_thread__single_step(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) switch(event->kind) { default:{}break; - case DMN_EventKind_Error: {stop_cause = CTRL_EventCause_Error;}goto end_single_step; - case DMN_EventKind_Exception: {stop_cause = CTRL_EventCause_InterruptedByException;}goto end_single_step; - case DMN_EventKind_Halt: {stop_cause = CTRL_EventCause_InterruptedByHalt;}goto end_single_step; - case DMN_EventKind_Trap: {stop_cause = CTRL_EventCause_InterruptedByTrap;}goto end_single_step; - case DMN_EventKind_Breakpoint: {stop_cause = CTRL_EventCause_UserBreakpoint;}goto end_single_step; - case DMN_EventKind_SingleStep: {stop_cause = CTRL_EventCause_Finished;}goto end_single_step; + case DMN_EventKind_Error: {stop_cause = D_EventCause_Error;}goto end_single_step; + case DMN_EventKind_Exception: {stop_cause = D_EventCause_InterruptedByException;}goto end_single_step; + case DMN_EventKind_Halt: {stop_cause = D_EventCause_InterruptedByHalt;}goto end_single_step; + case DMN_EventKind_Trap: {stop_cause = D_EventCause_InterruptedByTrap;}goto end_single_step; + case DMN_EventKind_Breakpoint: {stop_cause = D_EventCause_UserBreakpoint;}goto end_single_step; + case DMN_EventKind_SingleStep: {stop_cause = D_EventCause_Finished;}goto end_single_step; end_single_step: { stop_event = event; @@ -6343,14 +6343,14 @@ ctrl_thread__single_step(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) //- rjf: record stop { - CTRL_EventList evts = {0}; - CTRL_Event *event = ctrl_event_list_push(scratch.arena, &evts); - event->kind = CTRL_EventKind_Stopped; + D_EventList evts = {0}; + D_Event *event = ctrl_event_list_push(scratch.arena, &evts); + event->kind = D_EventKind_Stopped; event->cause = stop_cause; if(stop_event != 0) { - event->entity = ctrl_handle_make(CTRL_MachineID_Local, stop_event->thread); - event->parent = ctrl_handle_make(CTRL_MachineID_Local, stop_event->process); + event->entity = ctrl_handle_make(D_MachineID_Local, stop_event->thread); + event->parent = ctrl_handle_make(D_MachineID_Local, stop_event->process); event->exception_code = stop_event->code; event->exception_kind = ctrl_exception_kind_from_dmn(stop_event->exception_kind); event->vaddr_rng = r1u64(stop_event->address, stop_event->address); @@ -6372,7 +6372,7 @@ ctrl_memory_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 AC_Artifact artifact = {0}; { //- rjf: unpack key - CTRL_Handle process = {0}; + D_Handle process = {0}; Rng1U64 vaddr_range = {0}; B32 zero_terminated = 0; { @@ -6528,13 +6528,13 @@ ctrl_memory_artifact_destroy(AC_Artifact artifact) } internal C_Key -ctrl_key_from_process_vaddr_range(CTRL_Handle process, Rng1U64 vaddr_range, B32 zero_terminated, B32 wait_for_fresh, U64 endt_us, B32 *out_is_stale) +ctrl_key_from_process_vaddr_range(D_Handle process, Rng1U64 vaddr_range, B32 zero_terminated, B32 wait_for_fresh, U64 endt_us, B32 *out_is_stale) { ProfBeginFunction(); #pragma pack(push, 1) struct { - CTRL_Handle process; + D_Handle process; Rng1U64 vaddr_range; B32 zero_terminated; } key_data = {process, vaddr_range, zero_terminated}; @@ -6556,11 +6556,11 @@ ctrl_key_from_process_vaddr_range(CTRL_Handle process, Rng1U64 vaddr_range, B32 //- rjf: process memory reading helpers -internal CTRL_ProcessMemorySlice -ctrl_process_memory_slice_from_vaddr_range(Arena *arena, CTRL_Handle process, Rng1U64 range, B32 wait_for_fresh, U64 endt_us) +internal D_ProcessMemorySlice +ctrl_process_memory_slice_from_vaddr_range(Arena *arena, D_Handle process, Rng1U64 range, B32 wait_for_fresh, U64 endt_us) { ProfBeginFunction(); - CTRL_ProcessMemorySlice result = {0}; + D_ProcessMemorySlice result = {0}; if(range.max > range.min && dim_1u64(range) <= MB(256) && range.min <= 0x000FFFFFFFFFFFFFull && @@ -6700,11 +6700,11 @@ ctrl_process_memory_slice_from_vaddr_range(Arena *arena, CTRL_Handle process, Rn } internal B32 -ctrl_process_memory_read(CTRL_Handle process, Rng1U64 range, B32 *is_stale_out, void *out, U64 endt_us) +ctrl_process_memory_read(D_Handle process, Rng1U64 range, B32 *is_stale_out, void *out, U64 endt_us) { Temp scratch = scratch_begin(0, 0); U64 needed_size = dim_1u64(range); - CTRL_ProcessMemorySlice slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process, range, 0, endt_us); + D_ProcessMemorySlice slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process, range, 0, endt_us); B32 good = (slice.data.size >= needed_size && !slice.any_byte_bad); if(good) { @@ -6721,7 +6721,7 @@ ctrl_process_memory_read(CTRL_Handle process, Rng1U64 range, B32 *is_stale_out, //- rjf: process memory writing internal B32 -ctrl_process_write(CTRL_Handle process, Rng1U64 range, void *src) +ctrl_process_write(D_Handle process, Rng1U64 range, void *src) { ProfBeginFunction(); B32 result = dmn_process_write(process.dmn_handle, range, src); @@ -6743,7 +6743,7 @@ ctrl_process_write(CTRL_Handle process, Rng1U64 range, void *src) for EachInRange(page_idx, page_range) { Temp scratch = scratch_begin(0, 0); - CTRL_ProcessMemorySlice slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process, r1u64(page_idx*page_size, (page_idx+1)*page_size), 1, endt_us); + D_ProcessMemorySlice slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process, r1u64(page_idx*page_size, (page_idx+1)*page_size), 1, endt_us); scratch_end(scratch); if(!slice.stale || os_now_microseconds() >= endt_us) { @@ -6767,41 +6767,41 @@ ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, Temp scratch = scratch_begin(0, 0); //- rjf: unpack key - CTRL_Handle thread_handle = {0}; + D_Handle thread_handle = {0}; str8_deserial_read_struct(key, 0, &thread_handle); //- rjf: produce mini entity context for just this call stack build - CTRL_EntityCtx *entity_ctx = push_array(scratch.arena, CTRL_EntityCtx, 1); + D_EntityCtx *entity_ctx = push_array(scratch.arena, D_EntityCtx, 1); MutexScopeR(d_ctrl_state->ctrl_thread_entity_ctx_rw_mutex) { - CTRL_EntityCtx *src_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; - CTRL_EntityCtx *dst_ctx = entity_ctx; + D_EntityCtx *src_ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; + D_EntityCtx *dst_ctx = entity_ctx; { - dst_ctx->root = &ctrl_entity_nil; + dst_ctx->root = &d_entity_nil; dst_ctx->hash_slots_count = 1024; - dst_ctx->hash_slots = push_array(scratch.arena, CTRL_EntityHashSlot, dst_ctx->hash_slots_count); + dst_ctx->hash_slots = push_array(scratch.arena, D_EntityHashSlot, dst_ctx->hash_slots_count); MemoryCopyArray(dst_ctx->entity_kind_counts, src_ctx->entity_kind_counts); MemoryCopyArray(dst_ctx->entity_kind_alloc_gens, src_ctx->entity_kind_alloc_gens); } - CTRL_Entity *src_thread = ctrl_entity_from_handle(src_ctx, thread_handle); - CTRL_Entity *src_process = ctrl_process_from_entity(src_thread); + D_Entity *src_thread = ctrl_entity_from_handle(src_ctx, thread_handle); + D_Entity *src_process = ctrl_process_from_entity(src_thread); { - CTRL_EntityRec rec = {0}; - CTRL_Entity *dst_parent = &ctrl_entity_nil; - for(CTRL_Entity *src_e = src_process; src_e != &ctrl_entity_nil; src_e = rec.next) + D_EntityRec rec = {0}; + D_Entity *dst_parent = &d_entity_nil; + for(D_Entity *src_e = src_process; src_e != &d_entity_nil; src_e = rec.next) { rec = ctrl_entity_rec_depth_first_pre(src_e, src_process); // rjf: determine if we need this entity - B32 need_this_entity = (ctrl_handle_match(thread_handle, src_e->handle) || src_e->kind == CTRL_EntityKind_Module || src_e->kind == CTRL_EntityKind_Process || src_e->kind == CTRL_EntityKind_DebugInfoPath); + B32 need_this_entity = (ctrl_handle_match(thread_handle, src_e->handle) || src_e->kind == D_EntityKind_Module || src_e->kind == D_EntityKind_Process || src_e->kind == D_EntityKind_DebugInfoPath); // rjf: copy this entity - CTRL_Entity *dst_e = &ctrl_entity_nil; + D_Entity *dst_e = &d_entity_nil; if(need_this_entity) { - dst_e = push_array(scratch.arena, CTRL_Entity, 1); + dst_e = push_array(scratch.arena, D_Entity, 1); { - dst_e->first = dst_e->last = dst_e->next = dst_e->prev = &ctrl_entity_nil; + dst_e->first = dst_e->last = dst_e->next = dst_e->prev = &d_entity_nil; dst_e->parent = dst_parent; dst_e->kind = src_e->kind; dst_e->arch = src_e->arch; @@ -6820,24 +6820,24 @@ ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, dst_e->target_os = src_e->target_os; dst_e->tls_model = src_e->tls_model; } - if(dst_parent == &ctrl_entity_nil) + if(dst_parent == &d_entity_nil) { dst_ctx->root = dst_e; } else { - DLLPushBack_NPZ(&ctrl_entity_nil, dst_parent->first, dst_parent->last, dst_e, next, prev); + DLLPushBack_NPZ(&d_entity_nil, dst_parent->first, dst_parent->last, dst_e, next, prev); } } // rjf: insert into hash map - if(dst_e != &ctrl_entity_nil) + if(dst_e != &d_entity_nil) { U64 hash = ctrl_hash_from_handle(dst_e->handle); U64 slot_idx = hash%dst_ctx->hash_slots_count; - CTRL_EntityHashSlot *slot = &dst_ctx->hash_slots[slot_idx]; - CTRL_EntityHashNode *node = 0; - for(CTRL_EntityHashNode *n = slot->first; n != 0; n = n->next) + D_EntityHashSlot *slot = &dst_ctx->hash_slots[slot_idx]; + D_EntityHashNode *node = 0; + for(D_EntityHashNode *n = slot->first; n != 0; n = n->next) { if(ctrl_handle_match(n->entity->handle, dst_e->handle)) { @@ -6847,7 +6847,7 @@ ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, } if(node == 0) { - node = push_array(scratch.arena, CTRL_EntityHashNode, 1); + node = push_array(scratch.arena, D_EntityHashNode, 1); MemoryZeroStruct(node); DLLPushBack(slot->first, slot->last, node); node->entity = dst_e; @@ -6868,32 +6868,32 @@ ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, } //- rjf: compute call stack - CTRL_Entity *thread = ctrl_entity_from_handle(entity_ctx, thread_handle); + D_Entity *thread = ctrl_entity_from_handle(entity_ctx, thread_handle); B32 good = 1; B32 retry = 0; Arena *arena = 0; - CTRL_CallStack *call_stack = 0; - if(thread != &ctrl_entity_nil) + D_CallStack *call_stack = 0; + if(thread != &d_entity_nil) { good = 0; arena = arena_alloc(); - call_stack = push_array(arena, CTRL_CallStack, 1); - CTRL_Entity *process = ctrl_process_from_entity(thread); + call_stack = push_array(arena, D_CallStack, 1); + D_Entity *process = ctrl_process_from_entity(thread); U64 pre_reg_gen = 0; U64 post_reg_gen = 0; U64 pre_mem_gen = 0; U64 post_mem_gen = 0; - CTRL_Unwind unwind = {0}; + D_Unwind unwind = {0}; { pre_reg_gen = ctrl_reg_gen(); pre_mem_gen = ctrl_mem_gen(); unwind = ctrl_unwind_from_thread(arena, entity_ctx, thread_handle, os_now_microseconds()+5000); - if(!(unwind.flags & CTRL_UnwindFlag_Stale)) + if(!(unwind.flags & D_UnwindFlag_Stale)) { good = 1; call_stack[0] = ctrl_call_stack_from_unwind(arena, process, &unwind); } - if(unwind.flags & CTRL_UnwindFlag_Stale) + if(unwind.flags & D_UnwindFlag_Stale) { retry = 1; } @@ -6942,10 +6942,10 @@ ctrl_call_stack_artifact_destroy(AC_Artifact artifact) } } -internal CTRL_CallStack -ctrl_call_stack_from_thread(Access *access, CTRL_Handle thread_handle, B32 high_priority, U64 endt_us) +internal D_CallStack +ctrl_call_stack_from_thread(Access *access, D_Handle thread_handle, B32 high_priority, U64 endt_us) { - CTRL_CallStack result = {0}; + D_CallStack result = {0}; { AC_Artifact artifact = ac_artifact_from_key(access, str8_struct(&thread_handle), ctrl_call_stack_artifact_create, ctrl_call_stack_artifact_destroy, endt_us, .gen = ctrl_mem_gen() + ctrl_reg_gen(), @@ -6953,7 +6953,7 @@ ctrl_call_stack_from_thread(Access *access, CTRL_Handle thread_handle, B32 high_ .flags = high_priority ? AC_Flag_HighPriority : 0); if(artifact.u64[1] != 0) { - MemoryCopyStruct(&result, (CTRL_CallStack *)artifact.u64[1]); + MemoryCopyStruct(&result, (D_CallStack *)artifact.u64[1]); } } return result; @@ -6970,16 +6970,16 @@ ctrl_call_stack_tree_artifact_create(String8 key, B32 *cancel_signal, B32 *retry //- rjf: gather list of all thread handles U64 threads_count = 0; - CTRL_Handle *threads = 0; - CTRL_Handle *threads_processes = 0; + D_Handle *threads = 0; + D_Handle *threads_processes = 0; Arch *threads_arches = 0; MutexScopeR(d_ctrl_state->ctrl_thread_entity_ctx_rw_mutex) { - CTRL_EntityCtx *ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; - CTRL_EntityArray thread_entities = ctrl_entity_array_from_kind(ctx, CTRL_EntityKind_Thread); + D_EntityCtx *ctx = &d_ctrl_state->ctrl_thread_entity_store->ctx; + D_EntityArray thread_entities = ctrl_entity_array_from_kind(ctx, D_EntityKind_Thread); threads_count = thread_entities.count; - threads = push_array(scratch.arena, CTRL_Handle, threads_count); - threads_processes = push_array(scratch.arena, CTRL_Handle, threads_count); + threads = push_array(scratch.arena, D_Handle, threads_count); + threads_processes = push_array(scratch.arena, D_Handle, threads_count); threads_arches = push_array(scratch.arena, Arch, threads_count); for EachIndex(idx, threads_count) { @@ -6993,7 +6993,7 @@ ctrl_call_stack_tree_artifact_create(String8 key, B32 *cancel_signal, B32 *retry B32 stale = 0; U64 pre_mem_gen = ctrl_mem_gen(); U64 pre_reg_gen = ctrl_reg_gen(); - CTRL_CallStack *call_stacks = push_array(scratch.arena, CTRL_CallStack, threads_count); + D_CallStack *call_stacks = push_array(scratch.arena, D_CallStack, threads_count); { for EachIndex(idx, threads_count) { @@ -7011,31 +7011,31 @@ ctrl_call_stack_tree_artifact_create(String8 key, B32 *cancel_signal, B32 *retry //- rjf: build call stack tree Arena *arena = 0; - CTRL_CallStackTree *tree = 0; + D_CallStackTree *tree = 0; if(!stale) { U64 id_gen = 0; arena = arena_alloc(); - tree = push_array(arena, CTRL_CallStackTree, 1); - tree->root = push_array(arena, CTRL_CallStackTreeNode, 1); - MemoryCopyStruct(tree->root, &ctrl_call_stack_tree_node_nil); + tree = push_array(arena, D_CallStackTree, 1); + tree->root = push_array(arena, D_CallStackTreeNode, 1); + MemoryCopyStruct(tree->root, &d_call_stack_tree_node_nil); tree->root->id = id_gen; tree->slots_count = Max(1, threads_count); - tree->slots = push_array(arena, CTRL_CallStackTreeNode *, tree->slots_count); + tree->slots = push_array(arena, D_CallStackTreeNode *, tree->slots_count); id_gen += 1; for EachIndex(thread_idx, threads_count) { - CTRL_Handle thread = threads[thread_idx]; - CTRL_Handle process = threads_processes[thread_idx]; + D_Handle thread = threads[thread_idx]; + D_Handle process = threads_processes[thread_idx]; Arch arch = threads_arches[thread_idx]; - CTRL_CallStack call_stack = call_stacks[thread_idx]; - CTRL_CallStackTreeNode *thread_node = tree->root; + D_CallStack call_stack = call_stacks[thread_idx]; + D_CallStackTreeNode *thread_node = tree->root; for EachIndex(frame_idx, call_stack.frames_count) { U64 vaddr = regs_rip_from_arch_block(arch, call_stack.frames[frame_idx].regs); U64 depth = call_stack.frames[frame_idx].inline_depth; - CTRL_CallStackTreeNode *next_node = &ctrl_call_stack_tree_node_nil; - for(CTRL_CallStackTreeNode *child = thread_node->first; child != &ctrl_call_stack_tree_node_nil; child = child->next) + D_CallStackTreeNode *next_node = &d_call_stack_tree_node_nil; + for(D_CallStackTreeNode *child = thread_node->first; child != &d_call_stack_tree_node_nil; child = child->next) { if(ctrl_handle_match(child->process, process) && child->vaddr == vaddr && child->depth == depth) { @@ -7043,21 +7043,21 @@ ctrl_call_stack_tree_artifact_create(String8 key, B32 *cancel_signal, B32 *retry break; } } - if(next_node == &ctrl_call_stack_tree_node_nil) + if(next_node == &d_call_stack_tree_node_nil) { - next_node = push_array(arena, CTRL_CallStackTreeNode, 1); - MemoryCopyStruct(next_node, &ctrl_call_stack_tree_node_nil); + next_node = push_array(arena, D_CallStackTreeNode, 1); + MemoryCopyStruct(next_node, &d_call_stack_tree_node_nil); next_node->id = id_gen; SLLStackPush_N(tree->slots[next_node->id%tree->slots_count], next_node, hash_next); id_gen += 1; - SLLQueuePush_NZ(&ctrl_call_stack_tree_node_nil, thread_node->first, thread_node->last, next_node, next); + SLLQueuePush_NZ(&d_call_stack_tree_node_nil, thread_node->first, thread_node->last, next_node, next); next_node->parent = thread_node; thread_node->child_count += 1; } thread_node = next_node; } ctrl_handle_list_push(arena, &thread_node->threads, &thread); - for(CTRL_CallStackTreeNode *n = thread_node; n != &ctrl_call_stack_tree_node_nil; n = n->parent) + for(D_CallStackTreeNode *n = thread_node; n != &d_call_stack_tree_node_nil; n = n->parent) { n->all_descendant_threads_count += 1; } @@ -7092,15 +7092,15 @@ ctrl_call_stack_tree_artifact_destroy(AC_Artifact artifact) } } -internal CTRL_CallStackTree +internal D_CallStackTree ctrl_call_stack_tree(Access *access, U64 endt_us) { - CTRL_CallStackTree result = {&ctrl_call_stack_tree_node_nil}; + D_CallStackTree result = {&d_call_stack_tree_node_nil}; { AC_Artifact artifact = ac_artifact_from_key(access, str8_zero(), ctrl_call_stack_tree_artifact_create, ctrl_call_stack_tree_artifact_destroy, endt_us); if(artifact.u64[1] != 0) { - MemoryCopyStruct(&result, (CTRL_CallStackTree *)artifact.u64[1]); + MemoryCopyStruct(&result, (D_CallStackTree *)artifact.u64[1]); } } return result; diff --git a/src/dbg_engine/dbg_engine_ctrl.h b/src/dbg_engine/dbg_engine_ctrl.h index 64a6651e..c076526a 100644 --- a/src/dbg_engine/dbg_engine_ctrl.h +++ b/src/dbg_engine/dbg_engine_ctrl.h @@ -1,56 +1,56 @@ // Copyright (c) Epic Games Tools // Licensed under the MIT license (https://opensource.org/license/mit/) -#ifndef CTRL_CORE_H -#define CTRL_CORE_H +#ifndef DBG_ENGINE_CTRL_H +#define DBG_ENGINE_CTRL_H //////////////////////////////// //~ rjf: Unwind Types -typedef U32 CTRL_UnwindFlags; +typedef U32 D_UnwindFlags; enum { - CTRL_UnwindFlag_Error = (1<<0), - CTRL_UnwindFlag_Stale = (1<<1), + D_UnwindFlag_Error = (1<<0), + D_UnwindFlag_Stale = (1<<1), }; -typedef struct CTRL_UnwindStepResult CTRL_UnwindStepResult; -struct CTRL_UnwindStepResult +typedef struct D_UnwindStepResult D_UnwindStepResult; +struct D_UnwindStepResult { - CTRL_UnwindFlags flags; + D_UnwindFlags flags; }; -typedef struct CTRL_UnwindFrame CTRL_UnwindFrame; -struct CTRL_UnwindFrame +typedef struct D_UnwindFrame D_UnwindFrame; +struct D_UnwindFrame { void *regs; U64 cfa; }; -typedef struct CTRL_UnwindFrameNode CTRL_UnwindFrameNode; -struct CTRL_UnwindFrameNode +typedef struct D_UnwindFrameNode D_UnwindFrameNode; +struct D_UnwindFrameNode { - CTRL_UnwindFrameNode *next; - CTRL_UnwindFrameNode *prev; - CTRL_UnwindFrame v; + D_UnwindFrameNode *next; + D_UnwindFrameNode *prev; + D_UnwindFrame v; }; -typedef struct CTRL_UnwindFrameArray CTRL_UnwindFrameArray; -struct CTRL_UnwindFrameArray +typedef struct D_UnwindFrameArray D_UnwindFrameArray; +struct D_UnwindFrameArray { - CTRL_UnwindFrame *v; + D_UnwindFrame *v; U64 count; }; -typedef struct CTRL_Unwind CTRL_Unwind; -struct CTRL_Unwind +typedef struct D_Unwind D_Unwind; +struct D_Unwind { - CTRL_UnwindFrameArray frames; - CTRL_UnwindFlags flags; + D_UnwindFrameArray frames; + D_UnwindFlags flags; }; -typedef struct CTRL_FrameUnwindContext CTRL_FrameUnwindContext; -struct CTRL_FrameUnwindContext +typedef struct D_FrameUnwindContext D_FrameUnwindContext; +struct D_FrameUnwindContext { // DWARF U64 cfa; @@ -61,8 +61,8 @@ struct CTRL_FrameUnwindContext //////////////////////////////// //~ rjf: Call Stack Types -typedef struct CTRL_CallStackFrame CTRL_CallStackFrame; -struct CTRL_CallStackFrame +typedef struct D_CallStackFrame D_CallStackFrame; +struct D_CallStackFrame { U64 unwind_count; U64 inline_depth; @@ -70,58 +70,58 @@ struct CTRL_CallStackFrame U64 cfa; }; -typedef struct CTRL_CallStack CTRL_CallStack; -struct CTRL_CallStack +typedef struct D_CallStack D_CallStack; +struct D_CallStack { - CTRL_CallStackFrame *frames; + D_CallStackFrame *frames; U64 frames_count; - CTRL_CallStackFrame **concrete_frames; + D_CallStackFrame **concrete_frames; U64 concrete_frames_count; }; //////////////////////////////// //~ rjf: Call Stack Tree Types -typedef struct CTRL_CallStackTreeNode CTRL_CallStackTreeNode; -struct CTRL_CallStackTreeNode +typedef struct D_CallStackTreeNode D_CallStackTreeNode; +struct D_CallStackTreeNode { - CTRL_CallStackTreeNode *hash_next; - CTRL_CallStackTreeNode *first; - CTRL_CallStackTreeNode *last; - CTRL_CallStackTreeNode *next; - CTRL_CallStackTreeNode *parent; + D_CallStackTreeNode *hash_next; + D_CallStackTreeNode *first; + D_CallStackTreeNode *last; + D_CallStackTreeNode *next; + D_CallStackTreeNode *parent; U64 child_count; U64 id; - CTRL_Handle process; + D_Handle process; U64 vaddr; U64 depth; - CTRL_HandleList threads; + D_HandleList threads; U64 all_descendant_threads_count; }; -typedef struct CTRL_CallStackTree CTRL_CallStackTree; -struct CTRL_CallStackTree +typedef struct D_CallStackTree D_CallStackTree; +struct D_CallStackTree { - CTRL_CallStackTreeNode *root; + D_CallStackTreeNode *root; U64 slots_count; - CTRL_CallStackTreeNode **slots; + D_CallStackTreeNode **slots; }; //////////////////////////////// //~ rjf: Evaluation Spaces -typedef U64 CTRL_EvalSpaceKind; +typedef U64 D_EvalSpaceKind; enum { - CTRL_EvalSpaceKind_Entity = E_SpaceKind_FirstUserDefined, - CTRL_EvalSpaceKind_FirstUserDefined, + D_EvalSpaceKind_Entity = E_SpaceKind_FirstUserDefined, + D_EvalSpaceKind_FirstUserDefined, }; //////////////////////////////// //~ rjf: Process Memory Types -typedef struct CTRL_ProcessMemorySlice CTRL_ProcessMemorySlice; -struct CTRL_ProcessMemorySlice +typedef struct D_ProcessMemorySlice D_ProcessMemorySlice; +struct D_ProcessMemorySlice { String8 data; U64 *byte_bad_flags; @@ -134,49 +134,49 @@ struct CTRL_ProcessMemorySlice //////////////////////////////// //~ rjf: Thread Register Cache Types -typedef struct CTRL_ThreadRegCacheNode CTRL_ThreadRegCacheNode; -struct CTRL_ThreadRegCacheNode +typedef struct D_ThreadRegCacheNode D_ThreadRegCacheNode; +struct D_ThreadRegCacheNode { - CTRL_ThreadRegCacheNode *next; - CTRL_ThreadRegCacheNode *prev; - CTRL_Handle handle; + D_ThreadRegCacheNode *next; + D_ThreadRegCacheNode *prev; + D_Handle handle; U64 block_size; void *block; U64 reg_gen; }; -typedef struct CTRL_ThreadRegCacheSlot CTRL_ThreadRegCacheSlot; -struct CTRL_ThreadRegCacheSlot +typedef struct D_ThreadRegCacheSlot D_ThreadRegCacheSlot; +struct D_ThreadRegCacheSlot { - CTRL_ThreadRegCacheNode *first; - CTRL_ThreadRegCacheNode *last; + D_ThreadRegCacheNode *first; + D_ThreadRegCacheNode *last; }; -typedef struct CTRL_ThreadRegCacheStripe CTRL_ThreadRegCacheStripe; -struct CTRL_ThreadRegCacheStripe +typedef struct D_ThreadRegCacheStripe D_ThreadRegCacheStripe; +struct D_ThreadRegCacheStripe { Arena *arena; RWMutex rw_mutex; }; -typedef struct CTRL_ThreadRegCache CTRL_ThreadRegCache; -struct CTRL_ThreadRegCache +typedef struct D_ThreadRegCache D_ThreadRegCache; +struct D_ThreadRegCache { U64 slots_count; - CTRL_ThreadRegCacheSlot *slots; + D_ThreadRegCacheSlot *slots; U64 stripes_count; - CTRL_ThreadRegCacheStripe *stripes; + D_ThreadRegCacheStripe *stripes; }; //////////////////////////////// //~ rjf: Module Image Info Cache Types -typedef struct CTRL_ModuleImageInfoCacheNode CTRL_ModuleImageInfoCacheNode; -struct CTRL_ModuleImageInfoCacheNode +typedef struct D_ModuleImageInfoCacheNode D_ModuleImageInfoCacheNode; +struct D_ModuleImageInfoCacheNode { - CTRL_ModuleImageInfoCacheNode *next; - CTRL_ModuleImageInfoCacheNode *prev; - CTRL_Handle module; + D_ModuleImageInfoCacheNode *next; + D_ModuleImageInfoCacheNode *prev; + D_Handle module; Arena *arena; PE_IntelPdata *pdatas; U64 pdatas_count; @@ -191,40 +191,40 @@ struct CTRL_ModuleImageInfoCacheNode String8 raddbg_data; }; -typedef struct CTRL_ModuleImageInfoCacheSlot CTRL_ModuleImageInfoCacheSlot; -struct CTRL_ModuleImageInfoCacheSlot +typedef struct D_ModuleImageInfoCacheSlot D_ModuleImageInfoCacheSlot; +struct D_ModuleImageInfoCacheSlot { - CTRL_ModuleImageInfoCacheNode *first; - CTRL_ModuleImageInfoCacheNode *last; + D_ModuleImageInfoCacheNode *first; + D_ModuleImageInfoCacheNode *last; }; -typedef struct CTRL_ModuleImageInfoCacheStripe CTRL_ModuleImageInfoCacheStripe; -struct CTRL_ModuleImageInfoCacheStripe +typedef struct D_ModuleImageInfoCacheStripe D_ModuleImageInfoCacheStripe; +struct D_ModuleImageInfoCacheStripe { Arena *arena; RWMutex rw_mutex; }; -typedef struct CTRL_ModuleImageInfoCache CTRL_ModuleImageInfoCache; -struct CTRL_ModuleImageInfoCache +typedef struct D_ModuleImageInfoCache D_ModuleImageInfoCache; +struct D_ModuleImageInfoCache { U64 slots_count; - CTRL_ModuleImageInfoCacheSlot *slots; + D_ModuleImageInfoCacheSlot *slots; U64 stripes_count; - CTRL_ModuleImageInfoCacheStripe *stripes; + D_ModuleImageInfoCacheStripe *stripes; }; //////////////////////////////// //~ rjf: Touched Debug Info Directory Cache -typedef struct CTRL_DbgDirNode CTRL_DbgDirNode; -struct CTRL_DbgDirNode +typedef struct D_DbgDirNode D_DbgDirNode; +struct D_DbgDirNode { - CTRL_DbgDirNode *first; - CTRL_DbgDirNode *last; - CTRL_DbgDirNode *next; - CTRL_DbgDirNode *prev; - CTRL_DbgDirNode *parent; + D_DbgDirNode *first; + D_DbgDirNode *last; + D_DbgDirNode *next; + D_DbgDirNode *prev; + D_DbgDirNode *parent; String8 name; U64 search_count; U64 child_count; @@ -234,8 +234,8 @@ struct CTRL_DbgDirNode //////////////////////////////// //~ rjf: Control Thread Evaluation Scopes -typedef struct CTRL_EvalScope CTRL_EvalScope; -struct CTRL_EvalScope +typedef struct D_EvalScope D_EvalScope; +struct D_EvalScope { Access *access; E_BaseCtx base_ctx; @@ -246,19 +246,19 @@ struct CTRL_EvalScope //////////////////////////////// //~ rjf: Module Requirement Cache Types -typedef struct CTRL_ModuleReqCacheNode CTRL_ModuleReqCacheNode; -struct CTRL_ModuleReqCacheNode +typedef struct D_ModuleReqCacheNode D_ModuleReqCacheNode; +struct D_ModuleReqCacheNode { - CTRL_ModuleReqCacheNode *next; - CTRL_Handle module; + D_ModuleReqCacheNode *next; + D_Handle module; B32 required; }; //////////////////////////////// //~ rjf: Wakeup Hook Function Types -#define CTRL_WAKEUP_FUNCTION_DEF(name) void name(void) -typedef CTRL_WAKEUP_FUNCTION_DEF(CTRL_WakeupFunctionType); +#define D_WAKEUP_FUNCTION_DEF(name) void name(void) +typedef D_WAKEUP_FUNCTION_DEF(D_WakeupFunctionType); //////////////////////////////// //~ rjf: Main State Types @@ -267,15 +267,15 @@ typedef struct D_CtrlState D_CtrlState; struct D_CtrlState { Arena *arena; - CTRL_WakeupFunctionType *wakeup_hook; + D_WakeupFunctionType *wakeup_hook; // rjf: name -> register/alias hash tables for eval E_String2NumMap arch_string2reg_tables[Arch_COUNT]; E_String2NumMap arch_string2alias_tables[Arch_COUNT]; // rjf: caches - CTRL_ThreadRegCache thread_reg_cache; - CTRL_ModuleImageInfoCache module_image_info_cache; + D_ThreadRegCache thread_reg_cache; + D_ModuleImageInfoCache module_image_info_cache; // rjf: generations U64 run_gen; @@ -305,7 +305,7 @@ struct D_CtrlState Thread ctrl_thread; Log *ctrl_thread_log; RWMutex ctrl_thread_entity_ctx_rw_mutex; - CTRL_EntityCtxRWStore *ctrl_thread_entity_store; + D_EntityCtxRWStore *ctrl_thread_entity_store; E_Cache *ctrl_thread_eval_cache; Arena *ctrl_thread_msg_process_arena; Arena *dmn_event_arena; @@ -314,12 +314,12 @@ struct D_CtrlState DMN_EventNode *free_dmn_event_node; Arena *user_entry_point_arena; String8List user_entry_points; - U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64]; + U64 exception_code_filters[(D_ExceptionCodeKind_COUNT+63)/64]; U64 process_counter; Arena *dbg_dir_arena; - CTRL_DbgDirNode *dbg_dir_root; + D_DbgDirNode *dbg_dir_root; U64 module_req_cache_slots_count; - CTRL_ModuleReqCacheNode **module_req_cache_slots; + D_ModuleReqCacheNode **module_req_cache_slots; String8List msg_user_bp_touched_files; String8List msg_user_bp_touched_symbols; }; @@ -328,60 +328,55 @@ struct D_CtrlState //~ rjf: Globals global D_CtrlState *d_ctrl_state = 0; -read_only global CTRL_Entity ctrl_entity_nil = +read_only global D_Entity d_entity_nil = { - &ctrl_entity_nil, - &ctrl_entity_nil, - &ctrl_entity_nil, - &ctrl_entity_nil, - &ctrl_entity_nil, + &d_entity_nil, + &d_entity_nil, + &d_entity_nil, + &d_entity_nil, + &d_entity_nil, }; -read_only global CTRL_CallStackTreeNode ctrl_call_stack_tree_node_nil = +read_only global D_CallStackTreeNode d_call_stack_tree_node_nil = { 0, - &ctrl_call_stack_tree_node_nil, - &ctrl_call_stack_tree_node_nil, - &ctrl_call_stack_tree_node_nil, - &ctrl_call_stack_tree_node_nil, + &d_call_stack_tree_node_nil, + &d_call_stack_tree_node_nil, + &d_call_stack_tree_node_nil, + &d_call_stack_tree_node_nil, }; -thread_static CTRL_EntityCtxLookupAccel *ctrl_entity_ctx_lookup_accel = 0; - -//////////////////////////////// -//~ rjf: Logging Markup - -#define CTRL_CtrlThreadLogScope DeferLoop(log_scope_begin(), ctrl_thread__end_and_flush_log()) +thread_static D_EntityCtxLookupAccel *d_entity_ctx_lookup_accel = 0; //////////////////////////////// //~ rjf: Basic Type Functions internal U64 ctrl_hash_from_string(String8 string); -internal U64 ctrl_hash_from_handle(CTRL_Handle handle); -internal CTRL_EventCause ctrl_event_cause_from_dmn_event_kind(DMN_EventKind event_kind); -internal CTRL_ExceptionKind ctrl_exception_kind_from_dmn(DMN_ExceptionKind kind); -internal CTRL_TlsModel ctrl_dynamic_linker_type_from_dmn(DMN_TlsModel type); -internal String8 ctrl_string_from_event_kind(CTRL_EventKind kind); -internal String8 ctrl_string_from_msg_kind(CTRL_MsgKind kind); -internal CTRL_EntityKind ctrl_entity_kind_from_string(String8 string); -internal DMN_TrapFlags ctrl_dmn_trap_flags_from_user_breakpoint_flags(CTRL_UserBreakpointFlags flags); -internal CTRL_UserBreakpointFlags ctrl_user_breakpoint_flags_from_dmn_trap_flags(DMN_TrapFlags flags); +internal U64 ctrl_hash_from_handle(D_Handle handle); +internal D_EventCause ctrl_event_cause_from_dmn_event_kind(DMN_EventKind event_kind); +internal D_ExceptionKind ctrl_exception_kind_from_dmn(DMN_ExceptionKind kind); +internal D_TlsModel ctrl_dynamic_linker_type_from_dmn(DMN_TlsModel type); +internal String8 ctrl_string_from_event_kind(D_EventKind kind); +internal String8 ctrl_string_from_msg_kind(D_MsgKind kind); +internal D_EntityKind ctrl_entity_kind_from_string(String8 string); +internal DMN_TrapFlags ctrl_dmn_trap_flags_from_user_breakpoint_flags(D_BreakpointFlags flags); +internal D_BreakpointFlags ctrl_user_breakpoint_flags_from_dmn_trap_flags(DMN_TrapFlags flags); //////////////////////////////// //~ rjf: Handle Type Functions -internal CTRL_Handle ctrl_handle_zero(void); -internal CTRL_Handle ctrl_handle_make(CTRL_MachineID machine_id, DMN_Handle dmn_handle); -internal B32 ctrl_handle_match(CTRL_Handle a, CTRL_Handle b); -internal void ctrl_handle_list_push(Arena *arena, CTRL_HandleList *list, CTRL_Handle *pair); -internal CTRL_HandleList ctrl_handle_list_copy(Arena *arena, CTRL_HandleList *src); -internal CTRL_HandleArray ctrl_handle_array_from_list(Arena *arena, CTRL_HandleList *src); -internal String8 ctrl_string_from_handle(Arena *arena, CTRL_Handle handle); -internal CTRL_Handle ctrl_handle_from_string(String8 string); +internal D_Handle ctrl_handle_zero(void); +internal D_Handle ctrl_handle_make(D_MachineID machine_id, DMN_Handle dmn_handle); +internal B32 ctrl_handle_match(D_Handle a, D_Handle b); +internal void ctrl_handle_list_push(Arena *arena, D_HandleList *list, D_Handle *pair); +internal D_HandleList ctrl_handle_list_copy(Arena *arena, D_HandleList *src); +internal D_HandleArray ctrl_handle_array_from_list(Arena *arena, D_HandleList *src); +internal String8 ctrl_string_from_handle(Arena *arena, D_Handle handle); +internal D_Handle ctrl_handle_from_string(String8 string); //////////////////////////////// //~ rjf: Trap Type Functions -internal void ctrl_trap_list_push(Arena *arena, CTRL_TrapList *list, CTRL_Trap *trap); -internal CTRL_TrapList ctrl_trap_list_copy(Arena *arena, CTRL_TrapList *src); +internal void ctrl_trap_list_push(Arena *arena, D_TrapList *list, D_Trap *trap); +internal D_TrapList ctrl_trap_list_copy(Arena *arena, D_TrapList *src); //////////////////////////////// //~ rjf: User Breakpoint Type Functions @@ -393,137 +388,137 @@ internal CTRL_UserBreakpointList ctrl_user_breakpoint_list_copy(Arena *arena, CT //~ rjf: Message Type Functions //- rjf: deep copying -internal void ctrl_msg_deep_copy(Arena *arena, CTRL_Msg *dst, CTRL_Msg *src); +internal void ctrl_msg_deep_copy(Arena *arena, D_Msg *dst, D_Msg *src); //- rjf: list building -internal CTRL_Msg *ctrl_msg_list_push(Arena *arena, CTRL_MsgList *list); -internal CTRL_MsgList ctrl_msg_list_deep_copy(Arena *arena, CTRL_MsgList *src); -internal void ctrl_msg_list_concat_in_place(CTRL_MsgList *dst, CTRL_MsgList *src); +internal D_Msg *ctrl_msg_list_push(Arena *arena, D_MsgList *list); +internal D_MsgList ctrl_msg_list_deep_copy(Arena *arena, D_MsgList *src); +internal void ctrl_msg_list_concat_in_place(D_MsgList *dst, D_MsgList *src); //- rjf: serialization -internal String8 ctrl_serialized_string_from_msg_list(Arena *arena, CTRL_MsgList *msgs); -internal CTRL_MsgList ctrl_msg_list_from_serialized_string(Arena *arena, String8 string); +internal String8 ctrl_serialized_string_from_msg_list(Arena *arena, D_MsgList *msgs); +internal D_MsgList ctrl_msg_list_from_serialized_string(Arena *arena, String8 string); //////////////////////////////// //~ rjf: Event Type Functions //- rjf: list building -internal CTRL_Event *ctrl_event_list_push(Arena *arena, CTRL_EventList *list); -internal void ctrl_event_list_concat_in_place(CTRL_EventList *dst, CTRL_EventList *to_push); +internal D_Event *ctrl_event_list_push(Arena *arena, D_EventList *list); +internal void ctrl_event_list_concat_in_place(D_EventList *dst, D_EventList *to_push); //- rjf: serialization -internal String8 ctrl_serialized_string_from_event(Arena *arena, CTRL_Event *event, U64 max); -internal CTRL_Event ctrl_event_from_serialized_string(Arena *arena, String8 string); +internal String8 ctrl_serialized_string_from_event(Arena *arena, D_Event *event, U64 max); +internal D_Event ctrl_event_from_serialized_string(Arena *arena, String8 string); //////////////////////////////// //~ rjf: Entity Type Functions //- rjf: entity list data structures -internal void ctrl_entity_list_push(Arena *arena, CTRL_EntityList *list, CTRL_Entity *entity); -internal CTRL_EntityList ctrl_entity_list_from_handle_list(Arena *arena, CTRL_EntityCtx *ctx, CTRL_HandleList *list); -#define ctrl_entity_list_first(list) ((list)->first ? (list)->first->v : &ctrl_entity_nil) +internal void ctrl_entity_list_push(Arena *arena, D_EntityList *list, D_Entity *entity); +internal D_EntityList ctrl_entity_list_from_handle_list(Arena *arena, D_EntityCtx *ctx, D_HandleList *list); +#define ctrl_entity_list_first(list) ((list)->first ? (list)->first->v : &d_entity_nil) //- rjf: entity array data structure -internal CTRL_EntityArray ctrl_entity_array_from_list(Arena *arena, CTRL_EntityList *list); -#define ctrl_entity_array_first(array) ((array)->count != 0 ? (array)->v[0] : &ctrl_entity_nil) +internal D_EntityArray ctrl_entity_array_from_list(Arena *arena, D_EntityList *list); +#define ctrl_entity_array_first(array) ((array)->count != 0 ? (array)->v[0] : &d_entity_nil) //- rjf: entity context (entity group read-only) functions -internal CTRL_Entity *ctrl_entity_from_handle(CTRL_EntityCtx *ctx, CTRL_Handle handle); -internal CTRL_Entity *ctrl_entity_child_from_kind(CTRL_Entity *parent, CTRL_EntityKind kind); -internal CTRL_Entity *ctrl_entity_ancestor_from_kind(CTRL_Entity *entity, CTRL_EntityKind kind); -internal CTRL_Entity *ctrl_process_from_entity(CTRL_Entity *entity); -internal CTRL_Entity *ctrl_module_from_process_vaddr(CTRL_Entity *process, U64 vaddr); -internal DI_Key ctrl_dbgi_key_from_module(CTRL_Entity *module); -internal CTRL_Entity *ctrl_module_from_thread_candidates(CTRL_EntityCtx *ctx, CTRL_Entity *thread, CTRL_EntityList *candidates); -internal U64 ctrl_vaddr_from_voff(CTRL_Entity *module, U64 voff); -internal U64 ctrl_voff_from_vaddr(CTRL_Entity *module, U64 vaddr); -internal Rng1U64 ctrl_vaddr_range_from_voff_range(CTRL_Entity *module, Rng1U64 voff_range); -internal Rng1U64 ctrl_voff_range_from_vaddr_range(CTRL_Entity *module, Rng1U64 vaddr_range); -internal B32 ctrl_entity_tree_is_frozen(CTRL_Entity *root); +internal D_Entity *ctrl_entity_from_handle(D_EntityCtx *ctx, D_Handle handle); +internal D_Entity *ctrl_entity_child_from_kind(D_Entity *parent, D_EntityKind kind); +internal D_Entity *ctrl_entity_ancestor_from_kind(D_Entity *entity, D_EntityKind kind); +internal D_Entity *ctrl_process_from_entity(D_Entity *entity); +internal D_Entity *ctrl_module_from_process_vaddr(D_Entity *process, U64 vaddr); +internal DI_Key ctrl_dbgi_key_from_module(D_Entity *module); +internal D_Entity *ctrl_module_from_thread_candidates(D_EntityCtx *ctx, D_Entity *thread, D_EntityList *candidates); +internal U64 ctrl_vaddr_from_voff(D_Entity *module, U64 voff); +internal U64 ctrl_voff_from_vaddr(D_Entity *module, U64 vaddr); +internal Rng1U64 ctrl_vaddr_range_from_voff_range(D_Entity *module, Rng1U64 voff_range); +internal Rng1U64 ctrl_voff_range_from_vaddr_range(D_Entity *module, Rng1U64 vaddr_range); +internal B32 ctrl_entity_tree_is_frozen(D_Entity *root); //- rjf: entity tree iteration -internal CTRL_EntityRec ctrl_entity_rec_depth_first(CTRL_Entity *entity, CTRL_Entity *subtree_root, U64 sib_off, U64 child_off); -#define ctrl_entity_rec_depth_first_pre(entity, subtree_root) ctrl_entity_rec_depth_first((entity), (subtree_root), OffsetOf(CTRL_Entity, next), OffsetOf(CTRL_Entity, first)) -#define ctrl_entity_rec_depth_first_post(entity, subtree_root) ctrl_entity_rec_depth_first((entity), (subtree_root), OffsetOf(CTRL_Entity, prev), OffsetOf(CTRL_Entity, last)) +internal D_EntityRec ctrl_entity_rec_depth_first(D_Entity *entity, D_Entity *subtree_root, U64 sib_off, U64 child_off); +#define ctrl_entity_rec_depth_first_pre(entity, subtree_root) ctrl_entity_rec_depth_first((entity), (subtree_root), OffsetOf(D_Entity, next), OffsetOf(D_Entity, first)) +#define ctrl_entity_rec_depth_first_post(entity, subtree_root) ctrl_entity_rec_depth_first((entity), (subtree_root), OffsetOf(D_Entity, prev), OffsetOf(D_Entity, last)) //- rjf: entity ctx r/w store state functions -internal CTRL_EntityCtxRWStore *ctrl_entity_ctx_rw_store_alloc(void); -internal void ctrl_entity_ctx_rw_store_release(CTRL_EntityCtxRWStore *store); +internal D_EntityCtxRWStore *ctrl_entity_ctx_rw_store_alloc(void); +internal void ctrl_entity_ctx_rw_store_release(D_EntityCtxRWStore *store); //- rjf: string allocation/deletion internal U64 ctrl_name_bucket_num_from_string_size(U64 size); -internal String8 ctrl_entity_string_alloc(CTRL_EntityCtxRWStore *store, String8 string); -internal void ctrl_entity_string_release(CTRL_EntityCtxRWStore *store, String8 string); +internal String8 ctrl_entity_string_alloc(D_EntityCtxRWStore *store, String8 string); +internal void ctrl_entity_string_release(D_EntityCtxRWStore *store, String8 string); //- rjf: entity construction/deletion -internal CTRL_Entity *ctrl_entity_alloc(CTRL_EntityCtxRWStore *store, CTRL_Entity *parent, CTRL_EntityKind kind, Arch arch, CTRL_Handle handle, U64 id); -internal void ctrl_entity_release(CTRL_EntityCtxRWStore *store, CTRL_Entity *entity); +internal D_Entity *ctrl_entity_alloc(D_EntityCtxRWStore *store, D_Entity *parent, D_EntityKind kind, Arch arch, D_Handle handle, U64 id); +internal void ctrl_entity_release(D_EntityCtxRWStore *store, D_Entity *entity); //- rjf: entity equipment -internal void ctrl_entity_equip_string(CTRL_EntityCtxRWStore *store, CTRL_Entity *entity, String8 string); +internal void ctrl_entity_equip_string(D_EntityCtxRWStore *store, D_Entity *entity, String8 string); //- rjf: accelerated entity context lookups -internal CTRL_EntityCtxLookupAccel *ctrl_thread_entity_ctx_lookup_accel(void); -internal CTRL_EntityArray ctrl_entity_array_from_kind(CTRL_EntityCtx *ctx, CTRL_EntityKind kind); -internal CTRL_EntityList ctrl_modules_from_dbgi_key(Arena *arena, CTRL_EntityCtx *ctx, DI_Key dbgi_key); -internal CTRL_Entity *ctrl_thread_from_id(CTRL_EntityCtx *ctx, U64 id); +internal D_EntityCtxLookupAccel *ctrl_thread_entity_ctx_lookup_accel(void); +internal D_EntityArray ctrl_entity_array_from_kind(D_EntityCtx *ctx, D_EntityKind kind); +internal D_EntityList ctrl_modules_from_dbgi_key(Arena *arena, D_EntityCtx *ctx, DI_Key dbgi_key); +internal D_Entity *ctrl_thread_from_id(D_EntityCtx *ctx, U64 id); //- rjf: applying events to entity caches -internal void ctrl_entity_store_apply_events(CTRL_EntityCtxRWStore *store, CTRL_EventList *list); +internal void ctrl_entity_store_apply_events(D_EntityCtxRWStore *store, D_EventList *list); //////////////////////////////// //~ rjf: Wakeup Callback Registration -internal void ctrl_set_wakeup_hook(CTRL_WakeupFunctionType *wakeup_hook); +internal void ctrl_set_wakeup_hook(D_WakeupFunctionType *wakeup_hook); //////////////////////////////// //~ rjf: Thread Register Functions //- rjf: thread register cache reading -internal void *ctrl_reg_block_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle handle); -internal U64 ctrl_tls_root_vaddr_from_thread(CTRL_EntityCtx *ctx, CTRL_Handle handle); -internal U64 ctrl_rip_from_thread(CTRL_EntityCtx *ctx, CTRL_Handle handle); -internal U64 ctrl_rsp_from_thread(CTRL_EntityCtx *ctx, CTRL_Handle handle); +internal void *ctrl_reg_block_from_thread(Arena *arena, D_EntityCtx *ctx, D_Handle handle); +internal U64 ctrl_tls_root_vaddr_from_thread(D_EntityCtx *ctx, D_Handle handle); +internal U64 ctrl_rip_from_thread(D_EntityCtx *ctx, D_Handle handle); +internal U64 ctrl_rsp_from_thread(D_EntityCtx *ctx, D_Handle handle); //- rjf: thread register writing -internal B32 ctrl_thread_write_reg_block(CTRL_Handle thread, void *block); +internal B32 ctrl_thread_write_reg_block(D_Handle thread, void *block); //////////////////////////////// //~ rjf: Module Image Info Functions //- rjf: cache lookups -internal PE_IntelPdata *ctrl_intel_pdata_from_module_voff(Arena *arena, CTRL_Handle module_handle, U64 voff); -internal U64 ctrl_entry_point_voff_from_module(CTRL_Handle module_handle); -internal String8 ctrl_initial_debug_info_path_from_module(Arena *arena, CTRL_Handle module_handle); -internal String8 ctrl_raddbg_data_from_module(Arena *arena, CTRL_Handle module_handle); +internal PE_IntelPdata *ctrl_intel_pdata_from_module_voff(Arena *arena, D_Handle module_handle, U64 voff); +internal U64 ctrl_entry_point_voff_from_module(D_Handle module_handle); +internal String8 ctrl_initial_debug_info_path_from_module(Arena *arena, D_Handle module_handle); +internal String8 ctrl_raddbg_data_from_module(Arena *arena, D_Handle module_handle); //////////////////////////////// //~ Process Info Functions -internal Arch ctrl_arch_from_process_handle(CTRL_Handle process_handle); +internal Arch ctrl_arch_from_process_handle(D_Handle process_handle); //////////////////////////////// //~ rjf: Unwinding Functions //- rjf: unwind deep copier -internal CTRL_Unwind ctrl_unwind_deep_copy(Arena *arena, Arch arch, CTRL_Unwind *src); +internal D_Unwind ctrl_unwind_deep_copy(Arena *arena, Arch arch, D_Unwind *src); //- DWARF -internal CTRL_UnwindStepResult ctrl_establish_frame_unwind_context__dwarf(Arena *arena, CTRL_Handle process_handle, CTRL_Handle module_handle, Arch arch, void *regs, U64 endt_us, CTRL_FrameUnwindContext *ctx_out); -internal CTRL_UnwindStepResult ctrl_unwind_step__dwarf(CTRL_Handle process_handle, Arch arch, void *regs, CTRL_FrameUnwindContext *frame_ctx, U64 endt_us); +internal D_UnwindStepResult ctrl_establish_frame_unwind_context__dwarf(Arena *arena, D_Handle process_handle, D_Handle module_handle, Arch arch, void *regs, U64 endt_us, D_FrameUnwindContext *ctx_out); +internal D_UnwindStepResult ctrl_unwind_step__dwarf(D_Handle process_handle, Arch arch, void *regs, D_FrameUnwindContext *frame_ctx, U64 endt_us); //- rjf: [x64] internal REGS_Reg64 *ctrl_unwind_reg_from_pe_gpr_reg__pe_x64(REGS_RegBlockX64 *regs, PE_UnwindGprRegX64 gpr_reg); -internal CTRL_UnwindStepResult ctrl_unwind_step__pe_x64(CTRL_Handle process_handle, CTRL_Handle module_handle, U64 module_base_vaddr, REGS_RegBlockX64 *regs, U64 endt_us); +internal D_UnwindStepResult ctrl_unwind_step__pe_x64(D_Handle process_handle, D_Handle module_handle, U64 module_base_vaddr, REGS_RegBlockX64 *regs, U64 endt_us); //- rjf: abstracted full unwind -internal CTRL_Unwind ctrl_unwind_from_thread(Arena *arena, CTRL_EntityCtx *ctx, CTRL_Handle thread, U64 endt_us); +internal D_Unwind ctrl_unwind_from_thread(Arena *arena, D_EntityCtx *ctx, D_Handle thread, U64 endt_us); //////////////////////////////// //~ rjf: Call Stack Building Functions -internal CTRL_CallStack ctrl_call_stack_from_unwind(Arena *arena, CTRL_Entity *process, CTRL_Unwind *base_unwind); -internal CTRL_CallStackFrame *ctrl_call_stack_frame_from_unwind_and_inline_depth(CTRL_CallStack *call_stack, U64 unwind_count, U64 inline_depth); +internal D_CallStack ctrl_call_stack_from_unwind(Arena *arena, D_Entity *process, D_Unwind *base_unwind); +internal D_CallStackFrame *ctrl_call_stack_frame_from_unwind_and_inline_depth(D_CallStack *call_stack, U64 unwind_count, U64 inline_depth); //////////////////////////////// //~ rjf: Halting All Attached Processes @@ -546,75 +541,75 @@ internal E_String2NumMap *ctrl_string2alias_from_arch(Arch arch); //~ rjf: Control-Thread Functions //- rjf: user -> control thread communication -internal B32 ctrl_u2c_push_msgs(CTRL_MsgList *msgs, U64 endt_us); -internal CTRL_MsgList ctrl_u2c_pop_msgs(Arena *arena); +internal B32 ctrl_u2c_push_msgs(D_MsgList *msgs, U64 endt_us); +internal D_MsgList ctrl_u2c_pop_msgs(Arena *arena); //- rjf: control -> user thread communication -internal void ctrl_c2u_push_events(CTRL_EventList *events); -internal CTRL_EventList ctrl_c2u_pop_events(Arena *arena); +internal void ctrl_c2u_push_events(D_EventList *events); +internal D_EventList ctrl_c2u_pop_events(Arena *arena); //- rjf: entry point internal void ctrl_thread__entry_point(void *p); //- rjf: breakpoint resolution -internal void ctrl_thread__append_resolved_module_user_bp_traps(Arena *arena, CTRL_EvalScope *eval_scope, CTRL_Handle process, CTRL_Handle module, CTRL_UserBreakpointList *user_bps, DMN_TrapChunkList *traps_out); -internal void ctrl_thread__append_resolved_process_user_bp_traps(Arena *arena, CTRL_EvalScope *eval_scope, CTRL_Handle process, CTRL_UserBreakpointList *user_bps, DMN_TrapChunkList *traps_out); -internal void ctrl_thread__append_program_defined_bp_traps(Arena *arena, CTRL_Entity *bp, DMN_TrapChunkList *traps_out); +internal void ctrl_thread__append_resolved_module_user_bp_traps(Arena *arena, D_EvalScope *eval_scope, D_Handle process, D_Handle module, CTRL_UserBreakpointList *user_bps, DMN_TrapChunkList *traps_out); +internal void ctrl_thread__append_resolved_process_user_bp_traps(Arena *arena, D_EvalScope *eval_scope, D_Handle process, CTRL_UserBreakpointList *user_bps, DMN_TrapChunkList *traps_out); +internal void ctrl_thread__append_program_defined_bp_traps(Arena *arena, D_Entity *bp, DMN_TrapChunkList *traps_out); //- rjf: module lifetime open/close work -internal void ctrl_thread__module_open(CTRL_Handle process, CTRL_Handle module, Rng1U64 vaddr_range, String8 path, Rng1U64 elf_phdr_vrange, U64 elf_phdr_entsize); -internal void ctrl_thread__module_close(CTRL_Handle process, CTRL_Handle module, Rng1U64 vaddr_range); +internal void ctrl_thread__module_open(D_Handle process, D_Handle module, Rng1U64 vaddr_range, String8 path, Rng1U64 elf_phdr_vrange, U64 elf_phdr_entsize); +internal void ctrl_thread__module_close(D_Handle process, D_Handle module, Rng1U64 vaddr_range); //- rjf: attached process running/event gathering -internal DMN_Event *ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg, DMN_RunCtrls *run_ctrls, CTRL_Spoof *spoof); +internal DMN_Event *ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, D_Msg *msg, DMN_RunCtrls *run_ctrls, D_Spoof *spoof); //- rjf: eval helpers internal U64 ctrl_eval_space_gen(E_Space space); internal B32 ctrl_eval_space_read(E_Space space, void *out, Rng1U64 vaddr_range); //- rjf: control thread eval scopes -internal CTRL_EvalScope *ctrl_thread__eval_scope_begin(Arena *arena, CTRL_UserBreakpointList *user_bps, CTRL_Entity *thread); -internal void ctrl_thread__eval_scope_end(CTRL_EvalScope *scope); +internal D_EvalScope *ctrl_thread__eval_scope_begin(Arena *arena, CTRL_UserBreakpointList *user_bps, D_Entity *thread); +internal void ctrl_thread__eval_scope_end(D_EvalScope *scope); //- rjf: log flusher internal void ctrl_thread__end_and_flush_log(void); //- rjf: msg kind implementations -internal void ctrl_thread__launch(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg); -internal void ctrl_thread__attach(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg); -internal void ctrl_thread__kill(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg); -internal void ctrl_thread__kill_all(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg); -internal void ctrl_thread__detach(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg); -internal void ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg); -internal void ctrl_thread__single_step(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg); +internal void ctrl_thread__launch(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg); +internal void ctrl_thread__attach(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg); +internal void ctrl_thread__kill(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg); +internal void ctrl_thread__kill_all(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg); +internal void ctrl_thread__detach(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg); +internal void ctrl_thread__run(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg); +internal void ctrl_thread__single_step(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg); //////////////////////////////// //~ rjf: Process Memory Artifact Cache Hooks / Lookups internal AC_Artifact ctrl_memory_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_out); internal void ctrl_memory_artifact_destroy(AC_Artifact artifact); -internal C_Key ctrl_key_from_process_vaddr_range(CTRL_Handle process, Rng1U64 vaddr_range, B32 zero_terminated, B32 wait_for_fresh, U64 endt_us, B32 *out_is_stale); +internal C_Key ctrl_key_from_process_vaddr_range(D_Handle process, Rng1U64 vaddr_range, B32 zero_terminated, B32 wait_for_fresh, U64 endt_us, B32 *out_is_stale); //- rjf: process memory reading helpers -internal CTRL_ProcessMemorySlice ctrl_process_memory_slice_from_vaddr_range(Arena *arena, CTRL_Handle process, Rng1U64 range, B32 wait_for_fresh, U64 endt_us); -internal B32 ctrl_process_memory_read(CTRL_Handle process, Rng1U64 range, B32 *is_stale_out, void *out, U64 endt_us); +internal D_ProcessMemorySlice ctrl_process_memory_slice_from_vaddr_range(Arena *arena, D_Handle process, Rng1U64 range, B32 wait_for_fresh, U64 endt_us); +internal B32 ctrl_process_memory_read(D_Handle process, Rng1U64 range, B32 *is_stale_out, void *out, U64 endt_us); #define ctrl_process_memory_read_struct(process, vaddr, is_stale_out, ptr, endt_us) ctrl_process_memory_read((process), r1u64((vaddr), (vaddr)+(sizeof(*(ptr)))), (is_stale_out), (ptr), (endt_us)) //- rjf: process memory writing -internal B32 ctrl_process_write(CTRL_Handle process, Rng1U64 range, void *src); +internal B32 ctrl_process_write(D_Handle process, Rng1U64 range, void *src); //////////////////////////////// //~ rjf: Call Stack Artifact Cache Hooks / Lookups internal AC_Artifact ctrl_call_stack_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_out); internal void ctrl_call_stack_artifact_destroy(AC_Artifact artifact); -internal CTRL_CallStack ctrl_call_stack_from_thread(Access *access, CTRL_Handle thread_handle, B32 high_priority, U64 endt_us); +internal D_CallStack ctrl_call_stack_from_thread(Access *access, D_Handle thread_handle, B32 high_priority, U64 endt_us); //////////////////////////////// //~ rjf: Call Stack Tree Artifact Cache Hooks / Lookups internal AC_Artifact ctrl_call_stack_tree_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_out); internal void ctrl_call_stack_tree_artifact_destroy(AC_Artifact artifact); -internal CTRL_CallStackTree ctrl_call_stack_tree(Access *access, U64 endt_us); +internal D_CallStackTree ctrl_call_stack_tree(Access *access, U64 endt_us); -#endif // CTRL_CORE_H +#endif // DBG_ENGINE_CTRL_H diff --git a/src/dbg_engine/dbg_engine_user.c b/src/dbg_engine/dbg_engine_user.c index 1bd5cee9..9050cf3f 100644 --- a/src/dbg_engine/dbg_engine_user.c +++ b/src/dbg_engine/dbg_engine_user.c @@ -204,7 +204,7 @@ d_cmd_list_push_new(Arena *arena, D_CmdList *cmds, D_CmdKind kind, D_CmdParams * // of debug events which it is passed from the OS. // // These are "high-level traps" because they can have specific behavioral info -// attached to them. These are encoded via the `CTRL_TrapFlags` type, which +// attached to them. These are encoded via the `D_TrapFlags` type, which // allow expression of the following behaviors: // // - end-stepping: when this trap is hit, it will end the stepping operation, @@ -286,13 +286,13 @@ d_cmd_list_push_new(Arena *arena, D_CmdList *cmds, D_CmdKind kind, D_CmdParams * // at them with the "save-stack-pointer | single-step-after" behaviors. internal D_TrapNet -d_trap_net_from_thread__step_over_inst(Arena *arena, CTRL_Entity *thread) +d_trap_net_from_thread__step_over_inst(Arena *arena, D_Entity *thread) { Temp scratch = scratch_begin(&arena, 1); D_TrapNet result = {0}; // rjf: thread => unpacked info - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process); + D_Entity *process = ctrl_entity_ancestor_from_kind(thread, D_EntityKind_Process); Arch arch = thread->arch; U64 ip_vaddr = ctrl_rip_from_thread(&d_user_state->ctrl_entity_store->ctx, thread->handle); @@ -300,7 +300,7 @@ d_trap_net_from_thread__step_over_inst(Arena *arena, CTRL_Entity *thread) String8 machine_code = {0}; { Rng1U64 rng = r1u64(ip_vaddr, ip_vaddr+max_instruction_size_from_arch(arch)); - CTRL_ProcessMemorySlice machine_code_slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process->handle, rng, 0, os_now_microseconds()+5000); + D_ProcessMemorySlice machine_code_slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process->handle, rng, 0, os_now_microseconds()+5000); machine_code = machine_code_slice.data; } @@ -315,7 +315,7 @@ d_trap_net_from_thread__step_over_inst(Arena *arena, CTRL_Entity *thread) // rjf: call => run until call returns if(inst.flags & DASM_InstFlag_Call || inst.flags & DASM_InstFlag_Repeats) { - CTRL_Trap trap = {CTRL_TrapFlag_EndStepping, ip_vaddr+inst.size}; + D_Trap trap = {D_TrapFlag_EndStepping, ip_vaddr+inst.size}; ctrl_trap_list_push(arena, &result.traps, &trap); } } @@ -325,7 +325,7 @@ d_trap_net_from_thread__step_over_inst(Arena *arena, CTRL_Entity *thread) } internal D_TrapNet -d_trap_net_from_thread__step_over_line(Arena *arena, CTRL_Entity *thread) +d_trap_net_from_thread__step_over_line(Arena *arena, D_Entity *thread) { Temp scratch = scratch_begin(&arena, 1); log_infof("step_over_line:\n{\n"); @@ -334,8 +334,8 @@ d_trap_net_from_thread__step_over_line(Arena *arena, CTRL_Entity *thread) // rjf: thread => info Arch arch = thread->arch; U64 ip_vaddr = ctrl_rip_from_thread(&d_user_state->ctrl_entity_store->ctx, thread->handle); - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, ip_vaddr); + D_Entity *process = ctrl_entity_ancestor_from_kind(thread, D_EntityKind_Process); + D_Entity *module = ctrl_module_from_process_vaddr(process, ip_vaddr); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); log_infof("ip_vaddr: 0x%I64x\n", ip_vaddr); log_infof("dbgi_key: {0x%I64x, 0x%I64x}\n", dbgi_key.u64[0], dbgi_key.u64[1]); @@ -393,7 +393,7 @@ d_trap_net_from_thread__step_over_line(Arena *arena, CTRL_Entity *thread) B32 good_machine_code = 0; if(good_line_info) { - CTRL_ProcessMemorySlice machine_code_slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process->handle, line_vaddr_rng, 0, os_now_microseconds()+50000); + D_ProcessMemorySlice machine_code_slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process->handle, line_vaddr_rng, 0, os_now_microseconds()+50000); machine_code = machine_code_slice.data; good_machine_code = (machine_code.size >= dim_1u64(line_vaddr_rng) && !machine_code_slice.any_byte_bad); LogInfoNamedBlockF("machine_code_slice") @@ -440,7 +440,7 @@ d_trap_net_from_thread__step_over_line(Arena *arena, CTRL_Entity *thread) if(good_machine_code) for(DASM_CtrlFlowPointNode *n = ctrl_flow_info.exit_points.first; n != 0; n = n->next) { DASM_CtrlFlowPoint *point = &n->v; - CTRL_TrapFlags flags = 0; + D_TrapFlags flags = 0; B32 add = 1; U64 trap_addr = point->vaddr; @@ -449,7 +449,7 @@ d_trap_net_from_thread__step_over_line(Arena *arena, CTRL_Entity *thread) DASM_InstFlag_UnconditionalJump| DASM_InstFlag_Return)) { - flags |= (CTRL_TrapFlag_SingleStepAfterHit|CTRL_TrapFlag_EndStepping); + flags |= (D_TrapFlag_SingleStepAfterHit|D_TrapFlag_EndStepping); // rjf: omit if this jump stays inside of this line if(contains_1u64(line_vaddr_rng, point->jump_dest_vaddr)) @@ -471,7 +471,7 @@ d_trap_net_from_thread__step_over_line(Arena *arena, CTRL_Entity *thread) if(point->jump_dest_vaddr != 0) { trap_addr = point->jump_dest_vaddr; - flags &= ~CTRL_TrapFlag_SingleStepAfterHit; + flags &= ~D_TrapFlag_SingleStepAfterHit; } } @@ -479,19 +479,19 @@ d_trap_net_from_thread__step_over_line(Arena *arena, CTRL_Entity *thread) // rjf: call => place spoof at return spot in stack, single-step after hitting else if(point->inst_flags & DASM_InstFlag_Call) { - flags |= (CTRL_TrapFlag_BeginSpoofMode|CTRL_TrapFlag_SingleStepAfterHit); + flags |= (D_TrapFlag_BeginSpoofMode|D_TrapFlag_SingleStepAfterHit); } // rjf: instruction changes stack pointer => save off the stack pointer, single-step over, keep stepping else if(point->inst_flags & DASM_InstFlag_ChangesStackPointer) { - flags |= (CTRL_TrapFlag_SingleStepAfterHit|CTRL_TrapFlag_SaveStackPointer); + flags |= (D_TrapFlag_SingleStepAfterHit|D_TrapFlag_SaveStackPointer); } // rjf: add if appropriate if(add) { - CTRL_Trap trap = {flags, trap_addr}; + D_Trap trap = {flags, trap_addr}; ctrl_trap_list_push(arena, &result.traps, &trap); } } @@ -514,7 +514,7 @@ d_trap_net_from_thread__step_over_line(Arena *arena, CTRL_Entity *thread) } if(!opl_in_line) { - CTRL_Trap trap = {CTRL_TrapFlag_EndStepping, opl}; + D_Trap trap = {D_TrapFlag_EndStepping, opl}; ctrl_trap_list_push(arena, &result.traps, &trap); } } @@ -528,7 +528,7 @@ d_trap_net_from_thread__step_over_line(Arena *arena, CTRL_Entity *thread) } // rjf: log - LogInfoNamedBlockF("traps") for(CTRL_TrapNode *n = result.traps.first; n != 0; n = n->next) + LogInfoNamedBlockF("traps") for(D_TrapNode *n = result.traps.first; n != 0; n = n->next) { log_infof("{flags:0x%x, vaddr:0x%I64x}\n", n->v.flags, n->v.vaddr); } @@ -539,7 +539,7 @@ d_trap_net_from_thread__step_over_line(Arena *arena, CTRL_Entity *thread) } internal D_TrapNet -d_trap_net_from_thread__step_into_line(Arena *arena, CTRL_Entity *thread) +d_trap_net_from_thread__step_into_line(Arena *arena, D_Entity *thread) { Temp scratch = scratch_begin(&arena, 1); D_TrapNet result = {0}; @@ -547,8 +547,8 @@ d_trap_net_from_thread__step_into_line(Arena *arena, CTRL_Entity *thread) // rjf: thread => info Arch arch = thread->arch; U64 ip_vaddr = ctrl_rip_from_thread(&d_user_state->ctrl_entity_store->ctx, thread->handle); - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, ip_vaddr); + D_Entity *process = ctrl_entity_ancestor_from_kind(thread, D_EntityKind_Process); + D_Entity *module = ctrl_module_from_process_vaddr(process, ip_vaddr); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); // rjf: ip => line info @@ -604,7 +604,7 @@ d_trap_net_from_thread__step_into_line(Arena *arena, CTRL_Entity *thread) B32 good_machine_code = 0; if(good_line_info) { - CTRL_ProcessMemorySlice machine_code_slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process->handle, line_vaddr_rng, 0, os_now_microseconds()+5000); + D_ProcessMemorySlice machine_code_slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process->handle, line_vaddr_rng, 0, os_now_microseconds()+5000); machine_code = machine_code_slice.data; good_machine_code = (machine_code.size >= dim_1u64(line_vaddr_rng) && !machine_code_slice.any_byte_bad); } @@ -638,7 +638,7 @@ d_trap_net_from_thread__step_into_line(Arena *arena, CTRL_Entity *thread) if(good_machine_code) for(DASM_CtrlFlowPointNode *n = ctrl_flow_info.exit_points.first; n != 0; n = n->next) { DASM_CtrlFlowPoint *point = &n->v; - CTRL_TrapFlags flags = 0; + D_TrapFlags flags = 0; B32 add = 1; U64 trap_addr = point->vaddr; @@ -649,7 +649,7 @@ d_trap_net_from_thread__step_into_line(Arena *arena, CTRL_Entity *thread) point->jump_dest_vaddr != 0) { U64 jump_dest_vaddr = point->jump_dest_vaddr; - CTRL_Entity *jump_dest_module = ctrl_module_from_process_vaddr(process, jump_dest_vaddr); + D_Entity *jump_dest_module = ctrl_module_from_process_vaddr(process, jump_dest_vaddr); U64 jump_dest_voff = ctrl_voff_from_vaddr(jump_dest_module, jump_dest_vaddr); DI_Key jump_dest_dbgi_key = ctrl_dbgi_key_from_module(jump_dest_module); D_LineList lines = d_lines_from_dbgi_key_voff(scratch.arena, jump_dest_dbgi_key, jump_dest_voff); @@ -665,7 +665,7 @@ d_trap_net_from_thread__step_into_line(Arena *arena, CTRL_Entity *thread) DASM_InstFlag_UnconditionalJump| DASM_InstFlag_Return)) { - flags |= (CTRL_TrapFlag_SingleStepAfterHit|CTRL_TrapFlag_EndStepping|CTRL_TrapFlag_IgnoreStackPointerCheck); + flags |= (D_TrapFlag_SingleStepAfterHit|D_TrapFlag_EndStepping|D_TrapFlag_IgnoreStackPointerCheck); // rjf: omit if this jump stays inside of this line if(contains_1u64(line_vaddr_rng, point->jump_dest_vaddr)) @@ -687,20 +687,20 @@ d_trap_net_from_thread__step_into_line(Arena *arena, CTRL_Entity *thread) if(point->jump_dest_vaddr != 0) { trap_addr = point->jump_dest_vaddr; - flags &= ~CTRL_TrapFlag_SingleStepAfterHit; + flags &= ~D_TrapFlag_SingleStepAfterHit; } } // rjf: instruction changes stack pointer => save off the stack pointer, single-step over, keep stepping else if(point->inst_flags & DASM_InstFlag_ChangesStackPointer) { - flags |= (CTRL_TrapFlag_SingleStepAfterHit|CTRL_TrapFlag_SaveStackPointer); + flags |= (D_TrapFlag_SingleStepAfterHit|D_TrapFlag_SaveStackPointer); } // rjf: add if appropriate if(add) { - CTRL_Trap trap = {flags, trap_addr}; + D_Trap trap = {flags, trap_addr}; ctrl_trap_list_push(arena, &result.traps, &trap); } } @@ -723,7 +723,7 @@ d_trap_net_from_thread__step_into_line(Arena *arena, CTRL_Entity *thread) } if(!opl_in_line) { - CTRL_Trap trap = {CTRL_TrapFlag_EndStepping, opl}; + D_Trap trap = {D_TrapFlag_EndStepping, opl}; ctrl_trap_list_push(arena, &result.traps, &trap); } } @@ -1064,7 +1064,7 @@ d_lines_from_file_path_line_num(Arena *arena, String8 file_path, S64 line_num) //~ rjf: Process/Thread/Module Info Lookups internal U64 -d_tls_base_vaddr_from_process_root_rip(CTRL_Entity *process, U64 root_vaddr, U64 rip_vaddr) +d_tls_base_vaddr_from_process_root_rip(D_Entity *process, U64 root_vaddr, U64 rip_vaddr) { ProfBeginFunction(); U64 base_vaddr = 0; @@ -1073,18 +1073,18 @@ d_tls_base_vaddr_from_process_root_rip(CTRL_Entity *process, U64 root_vaddr, U64 Temp scratch = scratch_begin(0, 0); //- rjf: unpack module info - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, rip_vaddr); + D_Entity *module = ctrl_module_from_process_vaddr(process, rip_vaddr); U64 addr_size = byte_size_from_arch(process->arch); switch(process->tls_model) { - case CTRL_TlsModel_Null: {}break; - case CTRL_TlsModel_WinodwsNt: + case D_TlsModel_Null: {}break; + case D_TlsModel_WinodwsNt: { // read thread local base pointer out of TEB U64 thread_local_base = root_vaddr; U64 tls_addr_array = 0; - CTRL_ProcessMemorySlice tls_addr_array_slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process->handle, r1u64(thread_local_base, thread_local_base + addr_size), 0, 0); + D_ProcessMemorySlice tls_addr_array_slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process->handle, r1u64(thread_local_base, thread_local_base + addr_size), 0, 0); String8 tls_array_vaddr_data = tls_addr_array_slice.data; if(tls_array_vaddr_data.size == addr_size) { @@ -1093,7 +1093,7 @@ d_tls_base_vaddr_from_process_root_rip(CTRL_Entity *process, U64 root_vaddr, U64 // read thread local storage pointer (array of TLS pointers, one per module) U64 tls_ptr_vaddr = tls_array_vaddr + module->tls_index * addr_size; - CTRL_ProcessMemorySlice result_slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process->handle, r1u64(tls_ptr_vaddr, tls_ptr_vaddr + addr_size), 0, 0); + D_ProcessMemorySlice result_slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process->handle, r1u64(tls_ptr_vaddr, tls_ptr_vaddr + addr_size), 0, 0); String8 result_data = result_slice.data; if(result_data.size == addr_size) { @@ -1101,7 +1101,7 @@ d_tls_base_vaddr_from_process_root_rip(CTRL_Entity *process, U64 root_vaddr, U64 } } }break; - case CTRL_TlsModel_Gnu: + case D_TlsModel_Gnu: { if(module->tls_index > 0) // zero is reserved for the generation counter { @@ -1109,7 +1109,7 @@ d_tls_base_vaddr_from_process_root_rip(CTRL_Entity *process, U64 root_vaddr, U64 U64 dtv_base = root_vaddr; U64 dtv_size = addr_size * 2; // union dtv { size_t counter; struct dtv_pointer { void *val, *to_free; }; }; U64 dtv_pointer_vaddr = dtv_base + module->tls_index * dtv_size; - CTRL_ProcessMemorySlice dtv_pointer_slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process->handle, r1u64(dtv_pointer_vaddr, dtv_pointer_vaddr + dtv_size), 0, 0); + D_ProcessMemorySlice dtv_pointer_slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, process->handle, r1u64(dtv_pointer_vaddr, dtv_pointer_vaddr + dtv_size), 0, 0); String8 dtv_pointer_data = dtv_pointer_slice.data; if(dtv_pointer_data.size == dtv_size) { @@ -1139,7 +1139,7 @@ d_tls_base_vaddr_from_process_root_rip(CTRL_Entity *process, U64 root_vaddr, U64 //- rjf: stopped info from the control thread -internal CTRL_Event +internal D_Event d_ctrl_last_stop_event(void) { return d_user_state->ctrl_last_stop_event; @@ -1182,10 +1182,10 @@ internal DI_KeyList d_push_active_dbgi_key_list(Arena *arena) { DI_KeyList dbgis = {0}; - CTRL_EntityArray modules = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Module); + D_EntityArray modules = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Module); for EachIndex(idx, modules.count) { - CTRL_Entity *module = modules.v[idx]; + D_Entity *module = modules.v[idx]; DI_Key key = ctrl_dbgi_key_from_module(module); di_key_list_push(arena, &dbgis, key); } @@ -1195,14 +1195,14 @@ d_push_active_dbgi_key_list(Arena *arena) //- rjf: per-run caches internal U64 -d_query_cached_rip_from_thread(CTRL_Entity *thread) +d_query_cached_rip_from_thread(D_Entity *thread) { U64 result = d_query_cached_rip_from_thread_unwind(thread, 0); return result; } internal U64 -d_query_cached_rip_from_thread_unwind(CTRL_Entity *thread, U64 unwind_count) +d_query_cached_rip_from_thread_unwind(D_Entity *thread, U64 unwind_count) { U64 result = 0; if(unwind_count == 0) @@ -1212,7 +1212,7 @@ d_query_cached_rip_from_thread_unwind(CTRL_Entity *thread, U64 unwind_count) else { Access *access = access_open(); - CTRL_CallStack callstack = ctrl_call_stack_from_thread(access, thread->handle, 1, 0); + D_CallStack callstack = ctrl_call_stack_from_thread(access, thread->handle, 1, 0); if(callstack.concrete_frames_count != 0) { result = regs_rip_from_arch_block(thread->arch, callstack.concrete_frames[unwind_count%callstack.concrete_frames_count]->regs); @@ -1223,11 +1223,11 @@ d_query_cached_rip_from_thread_unwind(CTRL_Entity *thread, U64 unwind_count) } internal U64 -d_query_cached_cfa_from_thread_unwind(CTRL_Entity *thread, U64 unwind_count) +d_query_cached_cfa_from_thread_unwind(D_Entity *thread, U64 unwind_count) { U64 cfa = 0; Access *access = access_open(); - CTRL_CallStack callstack = ctrl_call_stack_from_thread(access, thread->handle, 1, 0); + D_CallStack callstack = ctrl_call_stack_from_thread(access, thread->handle, 1, 0); if(callstack.concrete_frames_count != 0) { cfa = callstack.concrete_frames[unwind_count%callstack.concrete_frames_count]->cfa; @@ -1237,7 +1237,7 @@ d_query_cached_cfa_from_thread_unwind(CTRL_Entity *thread, U64 unwind_count) } internal U64 -d_query_cached_tls_base_vaddr_from_process_root_rip(CTRL_Entity *process, U64 root_vaddr, U64 rip_vaddr) +d_query_cached_tls_base_vaddr_from_process_root_rip(D_Entity *process, U64 root_vaddr, U64 rip_vaddr) { U64 result = 0; for(U64 cache_idx = 0; cache_idx < ArrayCount(d_user_state->tls_base_caches); cache_idx += 1) @@ -1252,7 +1252,7 @@ d_query_cached_tls_base_vaddr_from_process_root_rip(CTRL_Entity *process, U64 ro { break; } - CTRL_Handle handle = process->handle; + D_Handle handle = process->handle; U64 hash = d_hash_from_seed_string(d_hash_from_string(str8_struct(&handle)), str8_struct(&rip_vaddr)); U64 slot_idx = hash%cache->slots_count; D_RunTLSBaseCacheSlot *slot = &cache->slots[slot_idx]; @@ -1426,16 +1426,16 @@ d_next_cmd(D_Cmd **cmd) //~ rjf: Main Layer Top-Level Calls internal D_EventList -d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_PathMapArray *path_maps, U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64]) +d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_PathMapArray *path_maps, U64 exception_code_filters[(D_ExceptionCodeKind_COUNT+63)/64]) { ProfBeginFunction(); Temp scratch = scratch_begin(&arena, 1); - D_EventList result = {0}; d_user_state->frame_index += 1; ////////////////////////////// //- rjf: sync with ctrl thread // + D_EventList events = {0}; ProfScope("sync with ctrl thread") { //- rjf: grab next reggen/memgen @@ -1443,13 +1443,13 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P U64 new_reg_gen = ctrl_reg_gen(); //- rjf: consume & process events - CTRL_EventList events = ctrl_c2u_pop_events(scratch.arena); + events = ctrl_c2u_pop_events(arena); ctrl_entity_store_apply_events(d_user_state->ctrl_entity_store, &events); - for(CTRL_EventNode *event_n = events.first; + for(D_EventNode *event_n = events.first; event_n != 0; event_n = event_n->next) { - CTRL_Event *event = &event_n->v; + D_Event *event = &event_n->v; log_infof("ctrl_event:\n{\n"); log_infof("kind: \"%S\"\n", ctrl_string_from_event_kind(event->kind)); log_infof("entity_id: %u\n", event->entity_id); @@ -1457,31 +1457,26 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P { default:{}break; - //- rjf: errors - - case CTRL_EventKind_Error: + case D_EventKind_Error: { log_user_error(event->string); }break; - //- rjf: starts/stops - - case CTRL_EventKind_Started: + case D_EventKind_Started: { d_user_state->ctrl_is_running = 1; d_user_state->ctrl_thread_run_state = 1; }break; - case CTRL_EventKind_Stopped: + case D_EventKind_Stopped: { - B32 should_snap = !(d_user_state->ctrl_soft_halt_issued); d_user_state->ctrl_is_running = 0; d_user_state->ctrl_thread_run_state = 0; d_user_state->ctrl_soft_halt_issued = 0; // rjf: exception or unexpected trap -> push error - if(event->cause == CTRL_EventCause_InterruptedByException || - event->cause == CTRL_EventCause_InterruptedByTrap) + if(event->cause == D_EventCause_InterruptedByException || + event->cause == D_EventCause_InterruptedByTrap) { log_user_error(str8_zero()); } @@ -1492,46 +1487,12 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P MemoryCopyStruct(&d_user_state->ctrl_last_stop_event, event); d_user_state->ctrl_last_stop_event.string = push_str8_copy(d_user_state->ctrl_stop_arena, d_user_state->ctrl_last_stop_event.string); } - - // rjf: push stop event to caller, if this is not a soft-halt - if(should_snap) - { - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, event->entity); - D_EventCause cause = D_EventCause_Null; - switch(event->cause) - { - default:{}break; - case CTRL_EventCause_InterruptedByHalt: - { - if(should_snap) - { - cause = D_EventCause_Halt; - } - else - { - cause = D_EventCause_SoftHalt; - } - }break; - case CTRL_EventCause_UserBreakpoint: {cause = D_EventCause_UserBreakpoint;}break; - } - D_EventNode *n = push_array(arena, D_EventNode, 1); - SLLQueuePush(result.first, result.last, n); - result.count += 1; - D_Event *evt = &n->v; - evt->kind = D_EventKind_Stop; - evt->cause = cause; - evt->thread = thread->kind == CTRL_EntityKind_Thread ? thread->handle : ctrl_handle_zero(); - evt->vaddr = event->rip_vaddr; - evt->id = event->u64_code; - } }break; - //- rjf: entity creation/deletion - - case CTRL_EventKind_NewProc: + case D_EventKind_NewProc: { // rjf: the first process? -> clear session output - CTRL_EntityArray existing_processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Process); + D_EntityArray existing_processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Process); if(existing_processes.count == 1) { MTX_Op op = {r1u64(0, 0xffffffffffffffffull), str8_lit("[new session]\n")}; @@ -1539,40 +1500,11 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P } }break; - case CTRL_EventKind_EndProc: - { - D_EventNode *n = push_array(arena, D_EventNode, 1); - SLLQueuePush(result.first, result.last, n); - result.count += 1; - D_Event *evt = &n->v; - evt->kind = D_EventKind_ProcessEnd; - evt->code = event->u64_code; - }break; - - case CTRL_EventKind_NewModule: - { - D_EventNode *n = push_array(arena, D_EventNode, 1); - SLLQueuePush(result.first, result.last, n); - result.count += 1; - D_Event *evt = &n->v; - evt->kind = D_EventKind_ModuleLoad; - evt->module = event->entity; - }break; - - //- rjf: debug strings - - case CTRL_EventKind_DebugString: + case D_EventKind_DebugString: { MTX_Op op = {r1u64(max_U64, max_U64), event->string}; mtx_push_op(d_user_state->output_log_key, op); }break; - - //- rjf: memory - - case CTRL_EventKind_MemReserve:{}break; - case CTRL_EventKind_MemCommit:{}break; - case CTRL_EventKind_MemDecommit:{}break; - case CTRL_EventKind_MemRelease:{}break; } log_infof("}\n\n"); } @@ -1624,10 +1556,10 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P // rjf: build data strings of all param data String8List strings = {0}; { - CTRL_EntityArray threads = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Thread); + D_EntityArray threads = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Thread); for EachIndex(idx, threads.count) { - CTRL_Entity *thread = threads.v[idx]; + D_Entity *thread = threads.v[idx]; if(thread->is_frozen) { str8_list_push(scratch.arena, &strings, str8_struct(&thread->id)); @@ -1665,7 +1597,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P //- rjf: process top-level commands // D_CmdList deferred_cmds = {0}; - CTRL_MsgList ctrl_msgs = {0}; + D_MsgList ctrl_msgs = {0}; ProfScope("process top-level commands") { D_BreakpointArray run_extra_bps = {0}; @@ -1677,9 +1609,9 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P // rjf: prep ctrl running arguments B32 need_run = 0; D_RunKind run_kind = D_RunKind_Run; - CTRL_Entity *run_thread = &ctrl_entity_nil; - CTRL_RunFlags run_flags = 0; - CTRL_TrapList run_traps = {0}; + D_Entity *run_thread = &d_entity_nil; + D_RunFlags run_flags = 0; + D_TrapList run_traps = {0}; // rjf: process command switch(cmd->kind) @@ -1749,8 +1681,8 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P // rjf: push message to launch { - CTRL_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs); - msg->kind = CTRL_MsgKind_Launch; + D_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs); + msg->kind = D_MsgKind_Launch; msg->path = working_directory; msg->cmd_line_string_list = cmdln_strings; msg->stdout_path = stdout_path; @@ -1767,8 +1699,8 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P // rjf: run need_run = 1; run_kind = D_RunKind_Run; - run_thread = &ctrl_entity_nil; - run_flags = (cmd->kind == D_CmdKind_LaunchAndStepInto) ? CTRL_RunFlag_StopOnEntryPoint : 0; + run_thread = &d_entity_nil; + run_flags = (cmd->kind == D_CmdKind_LaunchAndStepInto) ? D_RunFlag_StopOnEntryPoint : 0; } // rjf: no targets -> error @@ -1779,15 +1711,15 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P }break; case D_CmdKind_Kill: { - CTRL_Entity *process = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, params->process); - if(process == &ctrl_entity_nil) + D_Entity *process = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, params->process); + if(process == &d_entity_nil) { log_user_error(str8_lit("Cannot kill; no process was specified.")); } else { - CTRL_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs); - msg->kind = CTRL_MsgKind_Kill; + D_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs); + msg->kind = D_MsgKind_Kill; msg->exit_code = 1; msg->entity = process->handle; MemoryCopyArray(msg->exception_code_filters, exception_code_filters); @@ -1795,22 +1727,22 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P }break; case D_CmdKind_KillAll: { - CTRL_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs); - msg->kind = CTRL_MsgKind_KillAll; + D_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs); + msg->kind = D_MsgKind_KillAll; msg->exit_code = 1; MemoryCopyArray(msg->exception_code_filters, exception_code_filters); }break; case D_CmdKind_Detach: { - CTRL_Entity *process = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, params->process); - if(process == &ctrl_entity_nil) + D_Entity *process = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, params->process); + if(process == &d_entity_nil) { log_user_error(str8_lit("Cannot detach; no process specified.")); } else { - CTRL_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs); - msg->kind = CTRL_MsgKind_Detach; + D_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs); + msg->kind = D_MsgKind_Detach; msg->entity = process->handle; MemoryCopyArray(msg->exception_code_filters, exception_code_filters); } @@ -1818,12 +1750,12 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P case D_CmdKind_Continue: { B32 good_to_run = 0; - CTRL_EntityArray threads = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Thread); + D_EntityArray threads = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Thread); if(threads.count > 0) { for EachIndex(idx, threads.count) { - CTRL_Entity *thread = threads.v[idx]; + D_Entity *thread = threads.v[idx]; if(!thread->is_frozen) { good_to_run = 1; @@ -1848,8 +1780,8 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P case D_CmdKind_StepOverLine: case D_CmdKind_StepOut: { - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, params->thread); - if(thread == &ctrl_entity_nil) + D_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, params->thread); + if(thread == &d_entity_nil) { log_user_error(str8_lit("Must have a selected thread to step.")); } @@ -1879,13 +1811,13 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P Access *access = access_open(); // rjf: thread => call stack - CTRL_CallStack callstack = ctrl_call_stack_from_thread(access, thread->handle, 1, os_now_microseconds()+10000); + D_CallStack callstack = ctrl_call_stack_from_thread(access, thread->handle, 1, os_now_microseconds()+10000); // rjf: use first unwind frame to generate trap if(callstack.concrete_frames_count > 1) { U64 vaddr = regs_rip_from_arch_block(thread->arch, callstack.concrete_frames[1]->regs); - CTRL_Trap trap = {CTRL_TrapFlag_EndStepping|CTRL_TrapFlag_IgnoreStackPointerCheck, vaddr}; + D_Trap trap = {D_TrapFlag_EndStepping|D_TrapFlag_IgnoreStackPointerCheck, vaddr}; ctrl_trap_list_push(scratch.arena, &trap_net.traps, &trap); trap_net.good_read = 1; } @@ -1942,7 +1874,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P }break; case D_CmdKind_SetThreadIP: { - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, params->thread); + D_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, params->thread); U64 vaddr = params->vaddr; void *block = ctrl_reg_block_from_thread(scratch.arena, &d_user_state->ctrl_entity_store->ctx, thread->handle); regs_arch_block_write_rip(thread->arch, block, vaddr); @@ -1968,7 +1900,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P }break; case D_CmdKind_Run: { - CTRL_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Process); + D_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Process); if(processes.count != 0) { d_cmd(D_CmdKind_Continue, .machine = params->machine, .process = params->process, .thread = params->thread); @@ -1980,7 +1912,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P }break; case D_CmdKind_Restart: { - CTRL_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Process); + D_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Process); if(processes.count != 0) { d_cmd(D_CmdKind_KillAll); @@ -1990,7 +1922,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P case D_CmdKind_StepInto: case D_CmdKind_StepOver: { - CTRL_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Process); + D_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Process); if(processes.count != 0) { D_CmdKind step_cmd_kind = (cmd->kind == D_CmdKind_StepInto @@ -2028,26 +1960,26 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P }break; case D_CmdKind_FreezeLocalMachine: { - CTRL_MachineID machine_id = CTRL_MachineID_Local; + D_MachineID machine_id = D_MachineID_Local; d_cmd(D_CmdKind_FreezeMachine, .entity = ctrl_handle_make(machine_id, dmn_handle_zero())); }break; case D_CmdKind_ThawLocalMachine: { - CTRL_MachineID machine_id = CTRL_MachineID_Local; + D_MachineID machine_id = D_MachineID_Local; d_cmd(D_CmdKind_ThawMachine, .entity = ctrl_handle_make(machine_id, dmn_handle_zero())); }break; case D_CmdKind_FreezeEntity: case D_CmdKind_ThawEntity: { B32 should_freeze = (cmd->kind == D_CmdKind_FreezeEntity); - CTRL_Entity *root = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, params->entity); - for(CTRL_Entity *e = root; e != &ctrl_entity_nil; e = ctrl_entity_rec_depth_first_pre(e, root).next) + D_Entity *root = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, params->entity); + for(D_Entity *e = root; e != &d_entity_nil; e = ctrl_entity_rec_depth_first_pre(e, root).next) { - if(e->kind == CTRL_EntityKind_Thread) + if(e->kind == D_EntityKind_Thread) { e->is_frozen = should_freeze; - CTRL_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs); - msg->kind = (should_freeze ? CTRL_MsgKind_FreezeThread : CTRL_MsgKind_ThawThread); + D_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs); + msg->kind = (should_freeze ? D_MsgKind_FreezeThread : D_MsgKind_ThawThread); msg->entity = e->handle; } } @@ -2064,12 +1996,12 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P //- rjf: entity decoration case D_CmdKind_SetEntityColor: { - CTRL_Entity *entity = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, params->entity); + D_Entity *entity = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, params->entity); entity->rgba = params->rgba; }break; case D_CmdKind_SetEntityName: { - CTRL_Entity *entity = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, params->entity); + D_Entity *entity = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, params->entity); ctrl_entity_equip_string(d_user_state->ctrl_entity_store, entity, params->string); }break; @@ -2079,8 +2011,8 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P U32 pid = params->pid; if(pid != 0) { - CTRL_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs); - msg->kind = CTRL_MsgKind_Attach; + D_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs); + msg->kind = D_MsgKind_Attach; msg->entity_id = pid; MemoryCopyArray(msg->exception_code_filters, exception_code_filters); } @@ -2096,10 +2028,10 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P } // rjf: push & fill run message - CTRL_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs); + D_Msg *msg = ctrl_msg_list_push(scratch.arena, &ctrl_msgs); { - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(run_thread, CTRL_EntityKind_Process); - msg->kind = (run_kind == D_RunKind_Run || run_kind == D_RunKind_Step) ? CTRL_MsgKind_Run : CTRL_MsgKind_SingleStep; + D_Entity *process = ctrl_entity_ancestor_from_kind(run_thread, D_EntityKind_Process); + msg->kind = (run_kind == D_RunKind_Run || run_kind == D_RunKind_Step) ? D_MsgKind_Run : D_MsgKind_SingleStep; msg->run_flags = run_flags; msg->entity = run_thread->handle; msg->parent = process->handle; @@ -2118,12 +2050,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P // rjf: unpack user breakpoint entity D_Breakpoint *bp = &batch_breakpoints->v[idx]; - // rjf: d -> ctrl flags - CTRL_UserBreakpointFlags ctrl_bp_flags = 0; - if(bp->flags & D_BreakpointFlag_BreakOnWrite) { ctrl_bp_flags |= CTRL_UserBreakpointFlag_BreakOnWrite; } - if(bp->flags & D_BreakpointFlag_BreakOnRead) { ctrl_bp_flags |= CTRL_UserBreakpointFlag_BreakOnRead; } - if(bp->flags & D_BreakpointFlag_BreakOnExecute) { ctrl_bp_flags |= CTRL_UserBreakpointFlag_BreakOnExecute; } - // rjf: textual location -> add breakpoints for all possible override locations if(bp->file_path.size != 0 && bp->pt.line != 0) { @@ -2131,7 +2057,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P for(String8Node *n = overrides.first; n != 0; n = n->next) { CTRL_UserBreakpoint ctrl_user_bp = {CTRL_UserBreakpointKind_FileNameAndLineColNumber}; - ctrl_user_bp.flags = ctrl_bp_flags; + ctrl_user_bp.flags = bp->flags; ctrl_user_bp.id = bp->id; ctrl_user_bp.string = n->string; ctrl_user_bp.pt = bp->pt; @@ -2145,7 +2071,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P else if(bp->vaddr_expr.size != 0) { CTRL_UserBreakpoint ctrl_user_bp = {CTRL_UserBreakpointKind_Expression}; - ctrl_user_bp.flags = ctrl_bp_flags; + ctrl_user_bp.flags = bp->flags; ctrl_user_bp.id = bp->id; ctrl_user_bp.string = bp->vaddr_expr; ctrl_user_bp.condition = bp->condition; @@ -2157,7 +2083,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P } // rjf: copy run traps to scratch (needed, if run_traps can be `d_user_state->ctrl_last_run_traps`) - CTRL_TrapList run_traps_copy = ctrl_trap_list_copy(scratch.arena, &run_traps); + D_TrapList run_traps_copy = ctrl_trap_list_copy(scratch.arena, &run_traps); D_BreakpointArray run_extra_bps_copy = d_breakpoint_array_copy(scratch.arena, &run_extra_bps); // rjf: store last run info @@ -2195,7 +2121,7 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P // the next tick) // { - CTRL_MsgList msgs_copy = ctrl_msg_list_deep_copy(d_user_state->ctrl_msg_arena, &ctrl_msgs); + D_MsgList msgs_copy = ctrl_msg_list_deep_copy(d_user_state->ctrl_msg_arena, &ctrl_msgs); ctrl_msg_list_concat_in_place(&d_user_state->ctrl_msgs, &msgs_copy); if(d_user_state->ctrl_msgs.count != 0) { @@ -2214,5 +2140,5 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P ProfEnd(); scratch_end(scratch); - return result; + return events; } diff --git a/src/dbg_engine/dbg_engine_user.h b/src/dbg_engine/dbg_engine_user.h index ba48f5ad..309f00b5 100644 --- a/src/dbg_engine/dbg_engine_user.h +++ b/src/dbg_engine/dbg_engine_user.h @@ -57,10 +57,10 @@ D_RunKind; typedef struct D_CmdParams D_CmdParams; struct D_CmdParams { - CTRL_Handle machine; - CTRL_Handle process; - CTRL_Handle thread; - CTRL_Handle entity; + D_Handle machine; + D_Handle process; + D_Handle thread; + D_Handle entity; String8 string; String8 file_path; TxtPt cursor; @@ -104,7 +104,7 @@ typedef struct D_RunTLSBaseCacheNode D_RunTLSBaseCacheNode; struct D_RunTLSBaseCacheNode { D_RunTLSBaseCacheNode *hash_next; - CTRL_Handle process; + D_Handle process; U64 root_vaddr; U64 rip_vaddr; U64 tls_base_vaddr; @@ -154,43 +154,43 @@ struct D_RunLocalsCache //////////////////////////////// //~ rjf: User -> Ctrl Message Types -typedef enum CTRL_MsgKind +typedef enum D_MsgKind { - CTRL_MsgKind_Null, - CTRL_MsgKind_Launch, - CTRL_MsgKind_Attach, - CTRL_MsgKind_Kill, - CTRL_MsgKind_KillAll, - CTRL_MsgKind_Detach, - CTRL_MsgKind_Run, - CTRL_MsgKind_SingleStep, - CTRL_MsgKind_SetUserEntryPoints, - CTRL_MsgKind_SetModuleDebugInfoPath, - CTRL_MsgKind_FreezeThread, - CTRL_MsgKind_ThawThread, - CTRL_MsgKind_COUNT, + D_MsgKind_Null, + D_MsgKind_Launch, + D_MsgKind_Attach, + D_MsgKind_Kill, + D_MsgKind_KillAll, + D_MsgKind_Detach, + D_MsgKind_Run, + D_MsgKind_SingleStep, + D_MsgKind_SetUserEntryPoints, + D_MsgKind_SetModuleDebugInfoPath, + D_MsgKind_FreezeThread, + D_MsgKind_ThawThread, + D_MsgKind_COUNT, } -CTRL_MsgKind; +D_MsgKind; -typedef U32 CTRL_RunFlags; +typedef U32 D_RunFlags; enum { - CTRL_RunFlag_StopOnEntryPoint = (1<<0), + D_RunFlag_StopOnEntryPoint = (1<<0), }; -typedef struct CTRL_Msg CTRL_Msg; -struct CTRL_Msg +typedef struct D_Msg D_Msg; +struct D_Msg { - CTRL_MsgKind kind; - CTRL_RunFlags run_flags; - CTRL_MsgID msg_id; - CTRL_Handle entity; - CTRL_Handle parent; + D_MsgKind kind; + D_RunFlags run_flags; + D_MsgID msg_id; + D_Handle entity; + D_Handle parent; U32 entity_id; U32 exit_code; B32 env_inherit; B32 debug_subprocesses; - U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64]; + U64 exception_code_filters[(D_ExceptionCodeKind_COUNT+63)/64]; String8 path; String8List entry_points; String8List cmd_line_string_list; @@ -198,104 +198,104 @@ struct CTRL_Msg String8 stdout_path; String8 stderr_path; String8 stdin_path; - CTRL_TrapList traps; + D_TrapList traps; CTRL_UserBreakpointList user_bps; }; -typedef struct CTRL_MsgNode CTRL_MsgNode; -struct CTRL_MsgNode +typedef struct D_MsgNode D_MsgNode; +struct D_MsgNode { - CTRL_MsgNode *next; - CTRL_Msg v; + D_MsgNode *next; + D_Msg v; }; -typedef struct CTRL_MsgList CTRL_MsgList; -struct CTRL_MsgList +typedef struct D_MsgList D_MsgList; +struct D_MsgList { - CTRL_MsgNode *first; - CTRL_MsgNode *last; + D_MsgNode *first; + D_MsgNode *last; U64 count; }; //////////////////////////////// //~ rjf: Ctrl -> User Event Types -typedef enum CTRL_EventKind +typedef enum D_EventKind { - CTRL_EventKind_Null, - CTRL_EventKind_Error, + D_EventKind_Null, + D_EventKind_Error, //- rjf: starts/stops - CTRL_EventKind_Started, - CTRL_EventKind_Stopped, + D_EventKind_Started, + D_EventKind_Stopped, //- rjf: entity creation/deletion - CTRL_EventKind_NewProc, - CTRL_EventKind_NewThread, - CTRL_EventKind_NewModule, - CTRL_EventKind_EndProc, - CTRL_EventKind_EndThread, - CTRL_EventKind_EndModule, + D_EventKind_NewProc, + D_EventKind_NewThread, + D_EventKind_NewModule, + D_EventKind_EndProc, + D_EventKind_EndThread, + D_EventKind_EndModule, //- rjf: thread freeze state changes - CTRL_EventKind_ThreadFrozen, - CTRL_EventKind_ThreadThawed, + D_EventKind_ThreadFrozen, + D_EventKind_ThreadThawed, //- rjf: debug info changes - CTRL_EventKind_ModuleDebugInfoPathChange, + D_EventKind_ModuleDebugInfoPathChange, //- rjf: debug strings / decorations / markup - CTRL_EventKind_DebugString, - CTRL_EventKind_ThreadName, - CTRL_EventKind_ThreadColor, - CTRL_EventKind_SetBreakpoint, - CTRL_EventKind_UnsetBreakpoint, - CTRL_EventKind_SetVAddrRangeNote, + D_EventKind_DebugString, + D_EventKind_ThreadName, + D_EventKind_ThreadColor, + D_EventKind_SetBreakpoint, + D_EventKind_UnsetBreakpoint, + D_EventKind_SetVAddrRangeNote, //- rjf: memory - CTRL_EventKind_MemReserve, - CTRL_EventKind_MemCommit, - CTRL_EventKind_MemDecommit, - CTRL_EventKind_MemRelease, + D_EventKind_MemReserve, + D_EventKind_MemCommit, + D_EventKind_MemDecommit, + D_EventKind_MemRelease, - CTRL_EventKind_COUNT + D_EventKind_COUNT } -CTRL_EventKind; +D_EventKind; -typedef enum CTRL_EventCause +typedef enum D_EventCause { - CTRL_EventCause_Null, - CTRL_EventCause_Error, - CTRL_EventCause_Finished, - CTRL_EventCause_EntryPoint, - CTRL_EventCause_UserBreakpoint, - CTRL_EventCause_InterruptedByTrap, - CTRL_EventCause_InterruptedByException, - CTRL_EventCause_InterruptedByHalt, - CTRL_EventCause_COUNT + D_EventCause_Null, + D_EventCause_Error, + D_EventCause_Finished, + D_EventCause_EntryPoint, + D_EventCause_UserBreakpoint, + D_EventCause_InterruptedByTrap, + D_EventCause_InterruptedByException, + D_EventCause_InterruptedByHalt, + D_EventCause_COUNT } -CTRL_EventCause; +D_EventCause; -typedef enum CTRL_ExceptionKind +typedef enum D_ExceptionKind { - CTRL_ExceptionKind_Null, - CTRL_ExceptionKind_MemoryRead, - CTRL_ExceptionKind_MemoryWrite, - CTRL_ExceptionKind_MemoryExecute, - CTRL_ExceptionKind_CppThrow, - CTRL_ExceptionKind_COUNT + D_ExceptionKind_Null, + D_ExceptionKind_MemoryRead, + D_ExceptionKind_MemoryWrite, + D_ExceptionKind_MemoryExecute, + D_ExceptionKind_CppThrow, + D_ExceptionKind_COUNT } -CTRL_ExceptionKind; +D_ExceptionKind; -typedef struct CTRL_Event CTRL_Event; -struct CTRL_Event +typedef struct D_Event D_Event; +struct D_Event { - CTRL_EventKind kind; - CTRL_EventCause cause; - CTRL_ExceptionKind exception_kind; - CTRL_MsgID msg_id; - CTRL_Handle entity; - CTRL_Handle parent; + D_EventKind kind; + D_EventCause cause; + D_ExceptionKind exception_kind; + D_MsgID msg_id; + D_Handle entity; + D_Handle parent; Arch arch; U64 u64_code; U32 entity_id; @@ -308,24 +308,24 @@ struct CTRL_Event U64 timestamp; U32 exception_code; U32 rgba; - CTRL_UserBreakpointFlags bp_flags; + D_BreakpointFlags bp_flags; String8 string; OperatingSystem target_os; - CTRL_TlsModel tls_model; + D_TlsModel tls_model; }; -typedef struct CTRL_EventNode CTRL_EventNode; -struct CTRL_EventNode +typedef struct D_EventNode D_EventNode; +struct D_EventNode { - CTRL_EventNode *next; - CTRL_Event v; + D_EventNode *next; + D_Event v; }; -typedef struct CTRL_EventList CTRL_EventList; -struct CTRL_EventList +typedef struct D_EventList D_EventList; +struct D_EventList { - CTRL_EventNode *first; - CTRL_EventNode *last; + D_EventNode *first; + D_EventNode *last; U64 count; }; @@ -362,21 +362,21 @@ struct D_UserState Arena *ctrl_last_run_arena; D_RunKind ctrl_last_run_kind; U64 ctrl_last_run_frame_idx; - CTRL_Handle ctrl_last_run_thread_handle; - CTRL_RunFlags ctrl_last_run_flags; - CTRL_TrapList ctrl_last_run_traps; + D_Handle ctrl_last_run_thread_handle; + D_RunFlags ctrl_last_run_flags; + D_TrapList ctrl_last_run_traps; D_BreakpointArray ctrl_last_run_extra_bps; U128 ctrl_last_run_param_state_hash; B32 ctrl_is_running; B32 ctrl_thread_run_state; B32 ctrl_soft_halt_issued; Arena *ctrl_msg_arena; - CTRL_MsgList ctrl_msgs; + D_MsgList ctrl_msgs; // rjf: ctrl -> user reading state - CTRL_EntityCtxRWStore *ctrl_entity_store; + D_EntityCtxRWStore *ctrl_entity_store; Arena *ctrl_stop_arena; - CTRL_Event ctrl_last_stop_event; + D_Event ctrl_last_stop_event; }; //////////////////////////////// @@ -419,9 +419,9 @@ internal void d_cmd_list_push_new(Arena *arena, D_CmdList *cmds, D_CmdKind kind, //////////////////////////////// //~ rjf: Stepping "Trap Net" Builders -internal D_TrapNet d_trap_net_from_thread__step_over_inst(Arena *arena, CTRL_Entity *thread); -internal D_TrapNet d_trap_net_from_thread__step_over_line(Arena *arena, CTRL_Entity *thread); -internal D_TrapNet d_trap_net_from_thread__step_into_line(Arena *arena, CTRL_Entity *thread); +internal D_TrapNet d_trap_net_from_thread__step_over_inst(Arena *arena, D_Entity *thread); +internal D_TrapNet d_trap_net_from_thread__step_over_line(Arena *arena, D_Entity *thread); +internal D_TrapNet d_trap_net_from_thread__step_into_line(Arena *arena, D_Entity *thread); //////////////////////////////// //~ rjf: Debug Info Lookups @@ -440,13 +440,13 @@ internal D_LineList d_lines_from_file_path_line_num(Arena *arena, String8 file_p //////////////////////////////// //~ rjf: Process/Thread/Module Info Lookups -internal U64 d_tls_base_vaddr_from_process_root_rip(CTRL_Entity *process, U64 root_vaddr, U64 rip_vaddr); +internal U64 d_tls_base_vaddr_from_process_root_rip(D_Entity *process, U64 root_vaddr, U64 rip_vaddr); //////////////////////////////// //~ rjf: Target Controls //- rjf: stopped info from the control thread -internal CTRL_Event d_ctrl_last_stop_event(void); +internal D_Event d_ctrl_last_stop_event(void); //////////////////////////////// //~ rjf: Main State Accessors/Mutators @@ -463,10 +463,10 @@ internal B32 d_ctrl_targets_running(void); internal DI_KeyList d_push_active_dbgi_key_list(Arena *arena); //- rjf: per-run caches -internal U64 d_query_cached_rip_from_thread(CTRL_Entity *thread); -internal U64 d_query_cached_rip_from_thread_unwind(CTRL_Entity *thread, U64 unwind_count); -internal U64 d_query_cached_cfa_from_thread_unwind(CTRL_Entity *thread, U64 unwind_count); -internal U64 d_query_cached_tls_base_vaddr_from_process_root_rip(CTRL_Entity *process, U64 root_vaddr, U64 rip_vaddr); +internal U64 d_query_cached_rip_from_thread(D_Entity *thread); +internal U64 d_query_cached_rip_from_thread_unwind(D_Entity *thread, U64 unwind_count); +internal U64 d_query_cached_cfa_from_thread_unwind(D_Entity *thread, U64 unwind_count); +internal U64 d_query_cached_tls_base_vaddr_from_process_root_rip(D_Entity *process, U64 root_vaddr, U64 rip_vaddr); internal E_String2NumMap *d_query_cached_locals_map_from_dbgi_key_voff(DI_Key dbgi_key, U64 voff); internal E_String2NumMap *d_query_cached_member_map_from_dbgi_key_voff(DI_Key dbgi_key, U64 voff); @@ -480,6 +480,6 @@ internal B32 d_next_cmd(D_Cmd **cmd); //////////////////////////////// //~ rjf: Main Layer Top-Level Calls -internal D_EventList d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_PathMapArray *path_maps, U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64]); +internal D_EventList d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_PathMapArray *path_maps, U64 exception_code_filters[(D_ExceptionCodeKind_COUNT+63)/64]); #endif // DBG_ENGINE_USER_H diff --git a/src/dbg_engine/generated/dbg_engine.meta.h b/src/dbg_engine/generated/dbg_engine.meta.h index f7397b0e..5635d3e9 100644 --- a/src/dbg_engine/generated/dbg_engine.meta.h +++ b/src/dbg_engine/generated/dbg_engine.meta.h @@ -44,65 +44,65 @@ D_CmdKind_Attach, D_CmdKind_COUNT, } D_CmdKind; -typedef enum CTRL_EntityKind +typedef enum D_EntityKind { -CTRL_EntityKind_Null, -CTRL_EntityKind_Root, -CTRL_EntityKind_Machine, -CTRL_EntityKind_Process, -CTRL_EntityKind_Thread, -CTRL_EntityKind_Module, -CTRL_EntityKind_EntryPoint, -CTRL_EntityKind_DebugInfoPath, -CTRL_EntityKind_PendingThreadName, -CTRL_EntityKind_PendingThreadColor, -CTRL_EntityKind_Breakpoint, -CTRL_EntityKind_AddressRangeAnnotation, -CTRL_EntityKind_COUNT, -} CTRL_EntityKind; +D_EntityKind_Null, +D_EntityKind_Root, +D_EntityKind_Machine, +D_EntityKind_Process, +D_EntityKind_Thread, +D_EntityKind_Module, +D_EntityKind_EntryPoint, +D_EntityKind_DebugInfoPath, +D_EntityKind_PendingThreadName, +D_EntityKind_PendingThreadColor, +D_EntityKind_Breakpoint, +D_EntityKind_AddressRangeAnnotation, +D_EntityKind_COUNT, +} D_EntityKind; -typedef enum CTRL_ExceptionCodeKind +typedef enum D_ExceptionCodeKind { -CTRL_ExceptionCodeKind_Null, -CTRL_ExceptionCodeKind_Win32CtrlC, -CTRL_ExceptionCodeKind_Win32CtrlBreak, -CTRL_ExceptionCodeKind_Win32WinRTOriginateError, -CTRL_ExceptionCodeKind_Win32WinRTTransformError, -CTRL_ExceptionCodeKind_Win32RPCCallCancelled, -CTRL_ExceptionCodeKind_Win32DatatypeMisalignment, -CTRL_ExceptionCodeKind_Win32AccessViolation, -CTRL_ExceptionCodeKind_Win32InPageError, -CTRL_ExceptionCodeKind_Win32InvalidHandle, -CTRL_ExceptionCodeKind_Win32NotEnoughQuota, -CTRL_ExceptionCodeKind_Win32IllegalInstruction, -CTRL_ExceptionCodeKind_Win32CannotContinueException, -CTRL_ExceptionCodeKind_Win32InvalidExceptionDisposition, -CTRL_ExceptionCodeKind_Win32ArrayBoundsExceeded, -CTRL_ExceptionCodeKind_Win32FloatingPointDenormalOperand, -CTRL_ExceptionCodeKind_Win32FloatingPointDivisionByZero, -CTRL_ExceptionCodeKind_Win32FloatingPointInexactResult, -CTRL_ExceptionCodeKind_Win32FloatingPointInvalidOperation, -CTRL_ExceptionCodeKind_Win32FloatingPointOverflow, -CTRL_ExceptionCodeKind_Win32FloatingPointStackCheck, -CTRL_ExceptionCodeKind_Win32FloatingPointUnderflow, -CTRL_ExceptionCodeKind_Win32IntegerDivisionByZero, -CTRL_ExceptionCodeKind_Win32IntegerOverflow, -CTRL_ExceptionCodeKind_Win32PrivilegedInstruction, -CTRL_ExceptionCodeKind_Win32StackOverflow, -CTRL_ExceptionCodeKind_Win32UnableToLocateDLL, -CTRL_ExceptionCodeKind_Win32OrdinalNotFound, -CTRL_ExceptionCodeKind_Win32EntryPointNotFound, -CTRL_ExceptionCodeKind_Win32DLLInitializationFailed, -CTRL_ExceptionCodeKind_Win32FloatingPointSSEMultipleFaults, -CTRL_ExceptionCodeKind_Win32FloatingPointSSEMultipleTraps, -CTRL_ExceptionCodeKind_Win32AssertionFailed, -CTRL_ExceptionCodeKind_Win32ModuleNotFound, -CTRL_ExceptionCodeKind_Win32ProcedureNotFound, -CTRL_ExceptionCodeKind_Win32SanitizerErrorDetected, -CTRL_ExceptionCodeKind_Win32SanitizerRawAccessViolation, -CTRL_ExceptionCodeKind_Win32DirectXDebugLayer, -CTRL_ExceptionCodeKind_COUNT, -} CTRL_ExceptionCodeKind; +D_ExceptionCodeKind_Null, +D_ExceptionCodeKind_Win32CtrlC, +D_ExceptionCodeKind_Win32CtrlBreak, +D_ExceptionCodeKind_Win32WinRTOriginateError, +D_ExceptionCodeKind_Win32WinRTTransformError, +D_ExceptionCodeKind_Win32RPCCallCancelled, +D_ExceptionCodeKind_Win32DatatypeMisalignment, +D_ExceptionCodeKind_Win32AccessViolation, +D_ExceptionCodeKind_Win32InPageError, +D_ExceptionCodeKind_Win32InvalidHandle, +D_ExceptionCodeKind_Win32NotEnoughQuota, +D_ExceptionCodeKind_Win32IllegalInstruction, +D_ExceptionCodeKind_Win32CannotContinueException, +D_ExceptionCodeKind_Win32InvalidExceptionDisposition, +D_ExceptionCodeKind_Win32ArrayBoundsExceeded, +D_ExceptionCodeKind_Win32FloatingPointDenormalOperand, +D_ExceptionCodeKind_Win32FloatingPointDivisionByZero, +D_ExceptionCodeKind_Win32FloatingPointInexactResult, +D_ExceptionCodeKind_Win32FloatingPointInvalidOperation, +D_ExceptionCodeKind_Win32FloatingPointOverflow, +D_ExceptionCodeKind_Win32FloatingPointStackCheck, +D_ExceptionCodeKind_Win32FloatingPointUnderflow, +D_ExceptionCodeKind_Win32IntegerDivisionByZero, +D_ExceptionCodeKind_Win32IntegerOverflow, +D_ExceptionCodeKind_Win32PrivilegedInstruction, +D_ExceptionCodeKind_Win32StackOverflow, +D_ExceptionCodeKind_Win32UnableToLocateDLL, +D_ExceptionCodeKind_Win32OrdinalNotFound, +D_ExceptionCodeKind_Win32EntryPointNotFound, +D_ExceptionCodeKind_Win32DLLInitializationFailed, +D_ExceptionCodeKind_Win32FloatingPointSSEMultipleFaults, +D_ExceptionCodeKind_Win32FloatingPointSSEMultipleTraps, +D_ExceptionCodeKind_Win32AssertionFailed, +D_ExceptionCodeKind_Win32ModuleNotFound, +D_ExceptionCodeKind_Win32ProcedureNotFound, +D_ExceptionCodeKind_Win32SanitizerErrorDetected, +D_ExceptionCodeKind_Win32SanitizerRawAccessViolation, +D_ExceptionCodeKind_Win32DirectXDebugLayer, +D_ExceptionCodeKind_COUNT, +} D_ExceptionCodeKind; global B32 DEV_always_refresh = 0; global B32 DEV_simulate_lag = 0; diff --git a/src/eval/eval_types.c b/src/eval/eval_types.c index ad6a1935..246fe050 100644 --- a/src/eval/eval_types.c +++ b/src/eval/eval_types.c @@ -2599,7 +2599,7 @@ e_list_gather_artifact_create(String8 key, B32 *cancel_signal, B32 *retry_out, U //- rjf: unpack key // TODO(rjf): this needs to take any `E_Space`, once eval has been upgraded. - CTRL_Handle process = {0}; + D_Handle process = {0}; U64 base_off = 0; U64 member_element_off = 0; U64 member_size = 0; @@ -2824,7 +2824,7 @@ E_TYPE_IREXT_FUNCTION_DEF(list) #pragma pack(push, 1) struct { - CTRL_Handle process; + D_Handle process; U64 base_off; U64 member_element_off; U64 member_size; diff --git a/src/raddbg/generated/raddbg.meta.c b/src/raddbg/generated/raddbg.meta.c index 72f090c4..17b779ec 100644 --- a/src/raddbg/generated/raddbg.meta.c +++ b/src/raddbg/generated/raddbg.meta.c @@ -512,11 +512,11 @@ str8_lit_comp("os_event"), Rng1U64 rd_reg_slot_range_table[49] = { {0}, -{OffsetOf(RD_Regs, machine), OffsetOf(RD_Regs, machine) + sizeof(CTRL_Handle)}, -{OffsetOf(RD_Regs, module), OffsetOf(RD_Regs, module) + sizeof(CTRL_Handle)}, -{OffsetOf(RD_Regs, process), OffsetOf(RD_Regs, process) + sizeof(CTRL_Handle)}, -{OffsetOf(RD_Regs, thread), OffsetOf(RD_Regs, thread) + sizeof(CTRL_Handle)}, -{OffsetOf(RD_Regs, ctrl_entity), OffsetOf(RD_Regs, ctrl_entity) + sizeof(CTRL_Handle)}, +{OffsetOf(RD_Regs, machine), OffsetOf(RD_Regs, machine) + sizeof(D_Handle)}, +{OffsetOf(RD_Regs, module), OffsetOf(RD_Regs, module) + sizeof(D_Handle)}, +{OffsetOf(RD_Regs, process), OffsetOf(RD_Regs, process) + sizeof(D_Handle)}, +{OffsetOf(RD_Regs, thread), OffsetOf(RD_Regs, thread) + sizeof(D_Handle)}, +{OffsetOf(RD_Regs, ctrl_entity), OffsetOf(RD_Regs, ctrl_entity) + sizeof(D_Handle)}, {OffsetOf(RD_Regs, window), OffsetOf(RD_Regs, window) + sizeof(CFG_ID)}, {OffsetOf(RD_Regs, panel), OffsetOf(RD_Regs, panel) + sizeof(CFG_ID)}, {OffsetOf(RD_Regs, tab), OffsetOf(RD_Regs, tab) + sizeof(CFG_ID)}, @@ -565,229 +565,229 @@ Rng1U64 rd_reg_slot_range_table[49] = RD_CmdKindInfo rd_cmd_kind_info_table[249] = { {0}, -{ str8_lit_comp("launch_and_run"), str8_lit_comp("Starts debugging a new instance of a target, then runs."), str8_lit_comp("launch,start,run,target"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:targets"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("launch_and_step_into"), str8_lit_comp("Starts debugging a new instance of a target, then stops at the program's entry point."), str8_lit_comp("launch,start,entry,point"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:targets"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("kill"), str8_lit_comp("Kills the specified existing attached process(es)."), str8_lit_comp("stop,kill"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Process, str8_lit_comp("query:processes"), str8_lit_comp(""), CTRL_EntityKind_Process}}, -{ str8_lit_comp("kill_all"), str8_lit_comp("Kills all attached processes."), str8_lit_comp("stop,kill,all"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("detach"), str8_lit_comp("Detaches the specified attached process(es)."), str8_lit_comp("detach"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Process, str8_lit_comp("query:processes"), str8_lit_comp(""), CTRL_EntityKind_Process}}, -{ str8_lit_comp("continue"), str8_lit_comp("Continues executing all attached processes."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("step_into_inst"), str8_lit_comp("Performs a step that goes into calls, at the instruction level."), str8_lit_comp("single,step,thread"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("step_over_inst"), str8_lit_comp("Performs a step that skips calls, at the instruction level."), str8_lit_comp("single,step,thread"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("step_into_line"), str8_lit_comp("Performs a step that goes into calls, at the source code line level."), str8_lit_comp("step,thread"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("step_over_line"), str8_lit_comp("Performs a step that skips calls, at the source code line level."), str8_lit_comp("step,thread"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("step_out"), str8_lit_comp("Runs to the end of the current function and exits it."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("halt"), str8_lit_comp("Halts all attached processes."), str8_lit_comp("pause"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("soft_halt_refresh"), str8_lit_comp("Interrupts all attached processes to collect data, and then resumes them."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("set_thread_ip"), str8_lit_comp("Sets the specified thread's instruction pointer at the specified address."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Vaddr, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("run_to_line"), str8_lit_comp("Runs until a particular source line is hit."), str8_lit_comp(""), str8_lit_comp("$text_pt,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*1)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("run"), str8_lit_comp("Runs all targets after starting them if they have not been started yet."), str8_lit_comp("play"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("restart"), str8_lit_comp("Kills all attached processes, then launches all active targets."), str8_lit_comp("restart,retry"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("step_into"), str8_lit_comp("Steps once, possibly into function calls, for either source lines or instructions (whichever is selected)."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("step_over"), str8_lit_comp("Steps once, always over function calls, for either source lines or instructions."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("freeze_thread"), str8_lit_comp("Freezes the passed thread."), str8_lit_comp("callstack,unwind"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Thread, str8_lit_comp("query:threads"), str8_lit_comp(""), CTRL_EntityKind_Thread}}, -{ str8_lit_comp("thaw_thread"), str8_lit_comp("Thaws the passed thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Thread, str8_lit_comp("query:threads"), str8_lit_comp(""), CTRL_EntityKind_Thread}}, -{ str8_lit_comp("freeze_process"), str8_lit_comp("Freezes the passed process."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Process, str8_lit_comp("query:processes"), str8_lit_comp(""), CTRL_EntityKind_Process}}, -{ str8_lit_comp("thaw_process"), str8_lit_comp("Thaws the passed process."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Process, str8_lit_comp("query:processes"), str8_lit_comp(""), CTRL_EntityKind_Process}}, -{ str8_lit_comp("freeze_machine"), str8_lit_comp("Freezes the passed machine."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Machine, str8_lit_comp("query:machines"), str8_lit_comp(""), CTRL_EntityKind_Machine}}, -{ str8_lit_comp("thaw_machine"), str8_lit_comp("Thaws the passed machine."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Machine, str8_lit_comp("query:machines"), str8_lit_comp(""), CTRL_EntityKind_Machine}}, -{ str8_lit_comp("freeze_local_machine"), str8_lit_comp("Freezes the local machine."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("thaw_local_machine"), str8_lit_comp("Thaws the local machine."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("freeze_entity"), str8_lit_comp("Freezes an entity."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("thaw_entity"), str8_lit_comp("Thaws an entity."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("set_entity_color"), str8_lit_comp("Sets the passed entity's color."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("set_entity_name"), str8_lit_comp("Sets the passed entity's name."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("attach"), str8_lit_comp("Attaches to a process that is already running on the local machine."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_PID, str8_lit_comp("query:unattached_processes"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("exit"), str8_lit_comp("Exits the debugger."), str8_lit_comp("quit,close,abort"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("open_palette"), str8_lit_comp("Opens the palette."), str8_lit_comp("help,cmd,lister"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("run_command"), str8_lit_comp("Runs a command from the command palette."), str8_lit_comp("help,cmd"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_CmdName, str8_lit_comp("query:commands"), str8_lit_comp("commands"), CTRL_EntityKind_Null}}, -{ str8_lit_comp("run_ext_driver_text_command"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("os_event"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("select_thread"), str8_lit_comp("Selects a thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Thread, str8_lit_comp("query:threads"), str8_lit_comp(""), CTRL_EntityKind_Thread}}, -{ str8_lit_comp("select_unwind"), str8_lit_comp("Selects an unwind frame number for the selected thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("query:call_stack"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("up_one_frame"), str8_lit_comp("Selects the call stack frame above the currently selected."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("down_one_frame"), str8_lit_comp("Selects the call stack frame below the currently selected."), str8_lit_comp("callstack,unwind"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("select_entity"), str8_lit_comp("Selects a control entity."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("deselect_entity"), str8_lit_comp("Deselects a control entity."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("inc_window_font_size"), str8_lit_comp("Increases the window's font size by one point."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("dec_window_font_size"), str8_lit_comp("Decreases the window's font size by one point."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("inc_view_font_size"), str8_lit_comp("Increases the view's font size by one point."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("dec_view_font_size"), str8_lit_comp("Decreases the view's font size by one point."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("open_window"), str8_lit_comp("Opens a new window."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("window_settings"), str8_lit_comp("Opens settings for a window."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("close_window"), str8_lit_comp("Closes an opened window."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("toggle_fullscreen"), str8_lit_comp("Toggles fullscreen view on the active window."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("bring_to_front"), str8_lit_comp("Brings all windows to the front, and focuses the most recently focused window."), str8_lit_comp("top"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("popup_accept"), str8_lit_comp("Accepts the active popup prompt."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("popup_cancel"), str8_lit_comp("Cancels the active popup prompt."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("reset_to_default_bindings"), str8_lit_comp("Resets all keybindings to their defaults."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("reset_to_default_panels"), str8_lit_comp("Resets the window to the default panel layout."), str8_lit_comp("panel"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("reset_to_compact_panels"), str8_lit_comp("Resets the window to the compact panel layout."), str8_lit_comp("panel"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("reset_to_simple_panels"), str8_lit_comp("Resets the window to the simple panel layout."), str8_lit_comp("panel"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("new_panel_left"), str8_lit_comp("Creates a new panel to the left of the active panel."), str8_lit_comp("panel"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("new_panel_up"), str8_lit_comp("Creates a new panel at the top of the active panel."), str8_lit_comp("panel"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("new_panel_right"), str8_lit_comp("Creates a new panel to the right of the active panel."), str8_lit_comp("panel"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("new_panel_down"), str8_lit_comp("Creates a new panel at the bottom of the active panel."), str8_lit_comp("panel"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("split_panel"), str8_lit_comp("Creates a new panel in a given direction, and moves a tab to it, if specified."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("rotate_panel_columns"), str8_lit_comp("Rotates all panels at the closest column level of the panel hierarchy."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("next_panel"), str8_lit_comp("Cycles the active panel forward."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("prev_panel"), str8_lit_comp("Cycles the active panel backwards."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("focus_panel"), str8_lit_comp("Focuses a new panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("focus_panel_right"), str8_lit_comp("Focuses a panel rightward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("focus_panel_left"), str8_lit_comp("Focuses a panel leftward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("focus_panel_up"), str8_lit_comp("Focuses a panel upward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("focus_panel_down"), str8_lit_comp("Focuses a panel downward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("undo"), str8_lit_comp("Undoes the previous action."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("redo"), str8_lit_comp("Redoes the first previously undone action."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("go_back"), str8_lit_comp("Returns to the previously selected panel and tab in recorded history."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("go_forward"), str8_lit_comp("Returns to the next selected panel and tab in recorded history."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("close_panel"), str8_lit_comp("Closes the currently active panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("focus_tab"), str8_lit_comp("Focuses the passed tab within its containing panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("next_tab"), str8_lit_comp("Focuses the next tab on the active panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("prev_tab"), str8_lit_comp("Focuses the previous tab on the active panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_tab_right"), str8_lit_comp("Moves the selected tab right one slot."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_tab_left"), str8_lit_comp("Moves the selected tab left one slot."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("open_tab"), str8_lit_comp("Opens a new tab."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_CmdName, str8_lit_comp("query:tab_commands"), str8_lit_comp("commands"), CTRL_EntityKind_Null}}, -{ str8_lit_comp("build_tab"), str8_lit_comp("Opens a new tab with the parameterized view specification."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("duplicate_tab"), str8_lit_comp("Duplicates a tab."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Tab, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("copy_tab_full_path"), str8_lit_comp("Copies the full path of the file being viewed by this tab."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Tab, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("close_tab"), str8_lit_comp("Closes the currently opened tab."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Tab, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_view"), str8_lit_comp("Moves a view to a new panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("tab_bar_top"), str8_lit_comp("Anchors a panel's tab bar to the top of the panel."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("tab_bar_bottom"), str8_lit_comp("Anchors a panel's tab bar to the bottom of the panel."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("tab_settings"), str8_lit_comp("Opens settings for a tab."), str8_lit_comp("view,options"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("set_current_path"), str8_lit_comp("Sets the debugger's current path, which is used as a starting point when browsing for files."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("open"), str8_lit_comp("Opens a file."), str8_lit_comp("code,source,file"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("switch"), str8_lit_comp("Switches to a recent file."), str8_lit_comp("code,source,file"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:recent_files, query:source_files"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("switch_to_partner_file"), str8_lit_comp("Switches to the focused file's partner; or from header to implementation or vice versa."), str8_lit_comp("code,source,file"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("record_file_in_project"), str8_lit_comp("Records the passed file path as a recent file in the currently loaded project."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("show_file_in_explorer"), str8_lit_comp("Opens the operating system's file explorer and shows the selected file."), str8_lit_comp(""), str8_lit_comp("$file,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("go_to_disassembly"), str8_lit_comp("Goes to the disassembly, if any, for a given source code line."), str8_lit_comp("code,source,disassembly,disasm"), str8_lit_comp("$text_pt,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*1)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("go_to_source"), str8_lit_comp("Goes to the source code, if any, for a given disassembly line."), str8_lit_comp("code,source,disassembly,disasm"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("set_file_replacement_path"), str8_lit_comp("Sets the path which should be used as the replacement for the passed file."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("new_user"), str8_lit_comp("Creates a new user file, and sets the current user path as that file's path."), str8_lit_comp("new,user,project,layout"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("new_project"), str8_lit_comp("Creates a new project file, and sets the current project path as that file's path."), str8_lit_comp("new,user,project,layout"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("open_user"), str8_lit_comp("Opens a user file path, immediately loading it, and begins autosaving to it."), str8_lit_comp("load,user,project,layout"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("open_project"), str8_lit_comp("Opens a project file path, immediately loading it, and begins autosaving to it."), str8_lit_comp("project,project,session"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("open_recent_project"), str8_lit_comp("Opens a recently used project file."), str8_lit_comp("project,project,session"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:recent_projects"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("save_user"), str8_lit_comp("Saves user data to a file, and sets the current user path as that path."), str8_lit_comp("load,user,project,layout"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("save_project"), str8_lit_comp("Saves project data to a file, and sets the current project path as that path."), str8_lit_comp("project,project,session"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("record_user_as_last_opened"), str8_lit_comp("Records a file path as the last opened user."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("record_project_in_user"), str8_lit_comp("Records a file path as a recent project in user data."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("write_user_data"), str8_lit_comp("Writes user data to the active user file."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("write_project_data"), str8_lit_comp("Writes project data to the active project file."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("user_settings"), str8_lit_comp("Opens user settings."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("project_settings"), str8_lit_comp("Opens project settings."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("edit"), str8_lit_comp("Edits the current selection."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("accept"), str8_lit_comp("Accepts current changes, or answers prompts in the affirmative."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("cancel"), str8_lit_comp("Rejects current changes, exits temporary menus, or answers prompts in the negative."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("focus_menu"), str8_lit_comp("Focuses the menu for the selected interface, if there is one."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_left"), str8_lit_comp("Moves the cursor or selection left."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_right"), str8_lit_comp("Moves the cursor or selection right."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_up"), str8_lit_comp("Moves the cursor or selection up."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_down"), str8_lit_comp("Moves the cursor or selection down."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_left_select"), str8_lit_comp("Moves the cursor or selection left, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_right_select"), str8_lit_comp("Moves the cursor or selection right, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_up_select"), str8_lit_comp("Moves the cursor or selection up, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_down_select"), str8_lit_comp("Moves the cursor or selection down, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_left_chunk"), str8_lit_comp("Moves the cursor or selection left one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_right_chunk"), str8_lit_comp("Moves the cursor or selection right one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_up_chunk"), str8_lit_comp("Moves the cursor or selection up one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_down_chunk"), str8_lit_comp("Moves the cursor or selection down one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_up_page"), str8_lit_comp("Moves the cursor or selection up one page."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_down_page"), str8_lit_comp("Moves the cursor or selection down one page."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_up_whole"), str8_lit_comp("Moves the cursor or selection to the beginning of the relevant content."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_down_whole"), str8_lit_comp("Moves the cursor or selection to the end of the relevant content."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_left_chunk_select"), str8_lit_comp("Moves the cursor or selection left one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_right_chunk_select"), str8_lit_comp("Moves the cursor or selection right one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_up_chunk_select"), str8_lit_comp("Moves the cursor or selection up one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_down_chunk_select"), str8_lit_comp("Moves the cursor or selection down one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_up_page_select"), str8_lit_comp("Moves the cursor or selection up one page, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_down_page_select"), str8_lit_comp("Moves the cursor or selection down one page, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_up_whole_select"), str8_lit_comp("Moves the cursor or selection to the beginning of the relevant content, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_down_whole_select"), str8_lit_comp("Moves the cursor or selection to the end of the relevant content, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_up_reorder"), str8_lit_comp("Moves the cursor or selection up, while swapping the currently selected element with that upward."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_down_reorder"), str8_lit_comp("Moves the cursor or selection down, while swapping the currently selected element with that downward."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_home"), str8_lit_comp("Moves the cursor to the beginning of the line."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_end"), str8_lit_comp("Moves the cursor to the end of the line."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_home_select"), str8_lit_comp("Moves the cursor to the beginning of the line, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_end_select"), str8_lit_comp("Moves the cursor to the end of the line, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("select_all"), str8_lit_comp("Selects everything possible."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("delete_single"), str8_lit_comp("Deletes a single element to the right of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("delete_chunk"), str8_lit_comp("Deletes a chunk to the right of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("backspace_single"), str8_lit_comp("Deletes a single element to the left of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("backspace_chunk"), str8_lit_comp("Deletes a chunk to the left of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("copy"), str8_lit_comp("Copies the active selection to the clipboard."), str8_lit_comp(""), str8_lit_comp("$text_rng,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("cut"), str8_lit_comp("Copies the active selection to the clipboard, then deletes it."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("paste"), str8_lit_comp("Pastes the current contents of the clipboard."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("insert_text"), str8_lit_comp("Inserts the text that was used to cause this command."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_next"), str8_lit_comp("Moves the cursor or selection to the next element."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("move_prev"), str8_lit_comp("Moves the cursor or selection to the previous element."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("goto_line"), str8_lit_comp("Jumps to a line number in the current code file."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*1), RD_RegSlot_Cursor, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("goto_address"), str8_lit_comp("Jumps to an address in the current memory or disassembly view."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*1), RD_RegSlot_Vaddr, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("center_cursor"), str8_lit_comp("Snaps the current code view to center the cursor."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("contain_cursor"), str8_lit_comp("Snaps the current code view to contain the cursor."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("find_next"), str8_lit_comp("Searches the current code file forward (from the cursor) for the last searched string."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*1)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("find_prev"), str8_lit_comp("Searches the current code file backwards (from the cursor) for the last searched string."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*1)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("find_thread"), str8_lit_comp("Jumps to the passed thread in either source code, disassembly, or both if they're already open."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Thread, str8_lit_comp("query:threads"), str8_lit_comp(""), CTRL_EntityKind_Thread}}, -{ str8_lit_comp("find_selected_thread"), str8_lit_comp("Jumps to the selected thread in either source code, disassembly, or both if they're already open."), str8_lit_comp("current,instruction"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*1)|(RD_CmdKindFlag_ListInTextRng*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("goto_name"), str8_lit_comp("Searches for the passed string as a file, a symbol in debug info, and more, then jumps to it if possible."), str8_lit_comp(""), str8_lit_comp("$text_pt,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_String, str8_lit_comp("query:procedures"), str8_lit_comp("symbol_lister"), CTRL_EntityKind_Null}}, -{ str8_lit_comp("goto_name_at_cursor"), str8_lit_comp("Searches for the text at the cursor as a file, a symbol in debug info, and more, then jumps to it if possible."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*1)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("toggle_watch_expr"), str8_lit_comp("Adds or removes an expression to an opened watch view."), str8_lit_comp(""), str8_lit_comp("$text_pt,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("toggle_watch_expr_at_cursor"), str8_lit_comp("Adds or removes the expression that the cursor or selection is currently over to an opened watch view."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*1)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("toggle_watch_expr_at_mouse"), str8_lit_comp("Adds or removes the expression that the mouse is currently over to an opened watch view."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("enable_cfg"), str8_lit_comp("Enables a config tree."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("disable_cfg"), str8_lit_comp("Disables a config tree."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("select_cfg"), str8_lit_comp("Selects a config tree, disabling all others of the same kind."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("deselect_cfg"), str8_lit_comp("Deselects a config tree."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("remove_cfg"), str8_lit_comp("Removes a config tree."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("name_cfg"), str8_lit_comp("Equips a config tree with a label."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("condition_cfg"), str8_lit_comp("Equips a config tree with a condition string."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("duplicate_cfg"), str8_lit_comp("Duplicates a config tree."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("relocate_cfg"), str8_lit_comp("Relocates a config tree."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("save_cfg_to_project"), str8_lit_comp("Saves the config tree to the project."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("add_breakpoint"), str8_lit_comp("Places a breakpoint at a given location (file path and line number, address, or symbol name)."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("add_address_breakpoint"), str8_lit_comp("Places a breakpoint on the specified address."), str8_lit_comp(""), str8_lit_comp("$breakpoints,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Expr, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("add_function_breakpoint"), str8_lit_comp("Places a breakpoint on the first address of the specified function."), str8_lit_comp(""), str8_lit_comp("$breakpoints,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_String, str8_lit_comp("query:procedures"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("toggle_breakpoint"), str8_lit_comp("Places or removes a breakpoint at a given location (file path and line number, address, or symbol name)."), str8_lit_comp(""), str8_lit_comp("$text_pt,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*1)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("remove_breakpoint"), str8_lit_comp("Removes an existing breakpoint."), str8_lit_comp("delete"), str8_lit_comp("$breakpoints,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:breakpoints"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("enable_breakpoint"), str8_lit_comp("Enables a breakpoint."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:breakpoints"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("disable_breakpoint"), str8_lit_comp("Disables a breakpoint."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:breakpoints"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("clear_breakpoints"), str8_lit_comp("Removes all breakpoints."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("list_breakpoints"), str8_lit_comp("Lists all breakpoints."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("clear_output"), str8_lit_comp("Clears all output."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("add_watch_pin"), str8_lit_comp("Places a watch pin at a given location (file path and line number or address)."), str8_lit_comp(""), str8_lit_comp("$watch_pins,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Expr, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("toggle_watch_pin"), str8_lit_comp("Places or removes a watch pin at a given location (file path and line number or address)."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Expr, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("load_debug_info"), str8_lit_comp("Loads a debug info file."), str8_lit_comp(""), str8_lit_comp("$debug_infos,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("unload_debug_info"), str8_lit_comp("Unloads a debug info file."), str8_lit_comp(""), str8_lit_comp("$debug_infos,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:debug_infos"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("add_type_view"), str8_lit_comp("Adds a new type view."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_String, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("add_file_path_map"), str8_lit_comp("Adds a new file path map."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("edit_user_theme"), str8_lit_comp("Edits the current user's theme."), str8_lit_comp("color"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_String, str8_lit_comp("query:themes"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("edit_project_theme"), str8_lit_comp("Edits the current project's theme."), str8_lit_comp("color"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_String, str8_lit_comp("query:themes"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("add_theme_color"), str8_lit_comp("Adds a new theme color."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("fork_theme"), str8_lit_comp("Imports all colors from the current theme so they can be individually edited."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("save_theme"), str8_lit_comp("Saves all theme colors to a new theme file."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_String, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("save_and_set_theme"), str8_lit_comp("Saves all theme colors to a new theme file, and then sets that theme as the selected theme."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_String, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("set_next_statement"), str8_lit_comp("Sets the selected thread's instruction pointer to the cursor's position."), str8_lit_comp(""), str8_lit_comp("$text_pt,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*1)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("add_target"), str8_lit_comp("Adds a new target."), str8_lit_comp("application,executable,debug"), str8_lit_comp("$targets,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("select_target"), str8_lit_comp("Selects a target."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:targets"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("enable_target"), str8_lit_comp("Enables a target, in addition to all targets currently enabled."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:targets"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("disable_target"), str8_lit_comp("Disables a target."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:targets"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("remove_target"), str8_lit_comp("Removes a target."), str8_lit_comp("delete"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:targets"), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("register_as_jit_debugger"), str8_lit_comp("Registers the RAD debugger as the just-in-time (JIT) debugger used by the operating system."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("find_code_location"), str8_lit_comp("Finds a specific source code location given file, line, and column coordinates. Opens the file if necessary."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("search"), str8_lit_comp("Begins searching within the active interface."), str8_lit_comp("sort,search,filter,find"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*1)|(RD_QueryFlag_SelectOldInput*1)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*1), RD_RegSlot_String, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("search_backwards"), str8_lit_comp("Begins searching backwards within the active interface."), str8_lit_comp("sort,search,filter,find"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*1)|(RD_QueryFlag_SelectOldInput*1)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*1), RD_RegSlot_String, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("pick_file"), str8_lit_comp("Opens the file browser to pick a file."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("pick_folder"), str8_lit_comp("Opens the file browser to pick a folder."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*1)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("pick_file_or_folder"), str8_lit_comp("Opens the file browser to pick a file or folder."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*1)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("push_query"), str8_lit_comp("Opens a new temporary query interface."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("complete_query"), str8_lit_comp("Completes and closes a query."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("cancel_query"), str8_lit_comp("Closes a query."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("update_query"), str8_lit_comp("Updates a query input."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("open_event_buffer"), str8_lit_comp("Opens a new event buffer, to which debugger events will be written, for external processing."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("close_event_buffer"), str8_lit_comp("Closes an existing event buffer."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Cfg, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("toggle_dev_menu"), str8_lit_comp("Opens and closes the developer menu."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, -{ str8_lit_comp("log_marker"), str8_lit_comp("Logs a marker in the application log, to denote specific points in time within the log."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), CTRL_EntityKind_Null}}, +{ str8_lit_comp("launch_and_run"), str8_lit_comp("Starts debugging a new instance of a target, then runs."), str8_lit_comp("launch,start,run,target"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:targets"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("launch_and_step_into"), str8_lit_comp("Starts debugging a new instance of a target, then stops at the program's entry point."), str8_lit_comp("launch,start,entry,point"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:targets"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("kill"), str8_lit_comp("Kills the specified existing attached process(es)."), str8_lit_comp("stop,kill"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Process, str8_lit_comp("query:processes"), str8_lit_comp(""), D_EntityKind_Process}}, +{ str8_lit_comp("kill_all"), str8_lit_comp("Kills all attached processes."), str8_lit_comp("stop,kill,all"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("detach"), str8_lit_comp("Detaches the specified attached process(es)."), str8_lit_comp("detach"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Process, str8_lit_comp("query:processes"), str8_lit_comp(""), D_EntityKind_Process}}, +{ str8_lit_comp("continue"), str8_lit_comp("Continues executing all attached processes."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("step_into_inst"), str8_lit_comp("Performs a step that goes into calls, at the instruction level."), str8_lit_comp("single,step,thread"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("step_over_inst"), str8_lit_comp("Performs a step that skips calls, at the instruction level."), str8_lit_comp("single,step,thread"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("step_into_line"), str8_lit_comp("Performs a step that goes into calls, at the source code line level."), str8_lit_comp("step,thread"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("step_over_line"), str8_lit_comp("Performs a step that skips calls, at the source code line level."), str8_lit_comp("step,thread"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("step_out"), str8_lit_comp("Runs to the end of the current function and exits it."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("halt"), str8_lit_comp("Halts all attached processes."), str8_lit_comp("pause"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("soft_halt_refresh"), str8_lit_comp("Interrupts all attached processes to collect data, and then resumes them."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("set_thread_ip"), str8_lit_comp("Sets the specified thread's instruction pointer at the specified address."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Vaddr, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("run_to_line"), str8_lit_comp("Runs until a particular source line is hit."), str8_lit_comp(""), str8_lit_comp("$text_pt,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*1)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("run"), str8_lit_comp("Runs all targets after starting them if they have not been started yet."), str8_lit_comp("play"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("restart"), str8_lit_comp("Kills all attached processes, then launches all active targets."), str8_lit_comp("restart,retry"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("step_into"), str8_lit_comp("Steps once, possibly into function calls, for either source lines or instructions (whichever is selected)."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("step_over"), str8_lit_comp("Steps once, always over function calls, for either source lines or instructions."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("freeze_thread"), str8_lit_comp("Freezes the passed thread."), str8_lit_comp("callstack,unwind"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Thread, str8_lit_comp("query:threads"), str8_lit_comp(""), D_EntityKind_Thread}}, +{ str8_lit_comp("thaw_thread"), str8_lit_comp("Thaws the passed thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Thread, str8_lit_comp("query:threads"), str8_lit_comp(""), D_EntityKind_Thread}}, +{ str8_lit_comp("freeze_process"), str8_lit_comp("Freezes the passed process."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Process, str8_lit_comp("query:processes"), str8_lit_comp(""), D_EntityKind_Process}}, +{ str8_lit_comp("thaw_process"), str8_lit_comp("Thaws the passed process."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Process, str8_lit_comp("query:processes"), str8_lit_comp(""), D_EntityKind_Process}}, +{ str8_lit_comp("freeze_machine"), str8_lit_comp("Freezes the passed machine."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Machine, str8_lit_comp("query:machines"), str8_lit_comp(""), D_EntityKind_Machine}}, +{ str8_lit_comp("thaw_machine"), str8_lit_comp("Thaws the passed machine."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Machine, str8_lit_comp("query:machines"), str8_lit_comp(""), D_EntityKind_Machine}}, +{ str8_lit_comp("freeze_local_machine"), str8_lit_comp("Freezes the local machine."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("thaw_local_machine"), str8_lit_comp("Thaws the local machine."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("freeze_entity"), str8_lit_comp("Freezes an entity."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("thaw_entity"), str8_lit_comp("Thaws an entity."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("set_entity_color"), str8_lit_comp("Sets the passed entity's color."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("set_entity_name"), str8_lit_comp("Sets the passed entity's name."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("attach"), str8_lit_comp("Attaches to a process that is already running on the local machine."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_PID, str8_lit_comp("query:unattached_processes"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("exit"), str8_lit_comp("Exits the debugger."), str8_lit_comp("quit,close,abort"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("open_palette"), str8_lit_comp("Opens the palette."), str8_lit_comp("help,cmd,lister"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("run_command"), str8_lit_comp("Runs a command from the command palette."), str8_lit_comp("help,cmd"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_CmdName, str8_lit_comp("query:commands"), str8_lit_comp("commands"), D_EntityKind_Null}}, +{ str8_lit_comp("run_ext_driver_text_command"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("os_event"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("select_thread"), str8_lit_comp("Selects a thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Thread, str8_lit_comp("query:threads"), str8_lit_comp(""), D_EntityKind_Thread}}, +{ str8_lit_comp("select_unwind"), str8_lit_comp("Selects an unwind frame number for the selected thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("query:call_stack"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("up_one_frame"), str8_lit_comp("Selects the call stack frame above the currently selected."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("down_one_frame"), str8_lit_comp("Selects the call stack frame below the currently selected."), str8_lit_comp("callstack,unwind"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("select_entity"), str8_lit_comp("Selects a control entity."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("deselect_entity"), str8_lit_comp("Deselects a control entity."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("inc_window_font_size"), str8_lit_comp("Increases the window's font size by one point."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("dec_window_font_size"), str8_lit_comp("Decreases the window's font size by one point."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("inc_view_font_size"), str8_lit_comp("Increases the view's font size by one point."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("dec_view_font_size"), str8_lit_comp("Decreases the view's font size by one point."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("open_window"), str8_lit_comp("Opens a new window."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("window_settings"), str8_lit_comp("Opens settings for a window."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("close_window"), str8_lit_comp("Closes an opened window."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("toggle_fullscreen"), str8_lit_comp("Toggles fullscreen view on the active window."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("bring_to_front"), str8_lit_comp("Brings all windows to the front, and focuses the most recently focused window."), str8_lit_comp("top"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("popup_accept"), str8_lit_comp("Accepts the active popup prompt."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("popup_cancel"), str8_lit_comp("Cancels the active popup prompt."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("reset_to_default_bindings"), str8_lit_comp("Resets all keybindings to their defaults."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("reset_to_default_panels"), str8_lit_comp("Resets the window to the default panel layout."), str8_lit_comp("panel"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("reset_to_compact_panels"), str8_lit_comp("Resets the window to the compact panel layout."), str8_lit_comp("panel"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("reset_to_simple_panels"), str8_lit_comp("Resets the window to the simple panel layout."), str8_lit_comp("panel"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("new_panel_left"), str8_lit_comp("Creates a new panel to the left of the active panel."), str8_lit_comp("panel"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("new_panel_up"), str8_lit_comp("Creates a new panel at the top of the active panel."), str8_lit_comp("panel"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("new_panel_right"), str8_lit_comp("Creates a new panel to the right of the active panel."), str8_lit_comp("panel"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("new_panel_down"), str8_lit_comp("Creates a new panel at the bottom of the active panel."), str8_lit_comp("panel"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("split_panel"), str8_lit_comp("Creates a new panel in a given direction, and moves a tab to it, if specified."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("rotate_panel_columns"), str8_lit_comp("Rotates all panels at the closest column level of the panel hierarchy."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("next_panel"), str8_lit_comp("Cycles the active panel forward."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("prev_panel"), str8_lit_comp("Cycles the active panel backwards."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("focus_panel"), str8_lit_comp("Focuses a new panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("focus_panel_right"), str8_lit_comp("Focuses a panel rightward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("focus_panel_left"), str8_lit_comp("Focuses a panel leftward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("focus_panel_up"), str8_lit_comp("Focuses a panel upward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("focus_panel_down"), str8_lit_comp("Focuses a panel downward of the currently focused panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("undo"), str8_lit_comp("Undoes the previous action."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("redo"), str8_lit_comp("Redoes the first previously undone action."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("go_back"), str8_lit_comp("Returns to the previously selected panel and tab in recorded history."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("go_forward"), str8_lit_comp("Returns to the next selected panel and tab in recorded history."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("close_panel"), str8_lit_comp("Closes the currently active panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("focus_tab"), str8_lit_comp("Focuses the passed tab within its containing panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("next_tab"), str8_lit_comp("Focuses the next tab on the active panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("prev_tab"), str8_lit_comp("Focuses the previous tab on the active panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_tab_right"), str8_lit_comp("Moves the selected tab right one slot."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_tab_left"), str8_lit_comp("Moves the selected tab left one slot."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("open_tab"), str8_lit_comp("Opens a new tab."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_CmdName, str8_lit_comp("query:tab_commands"), str8_lit_comp("commands"), D_EntityKind_Null}}, +{ str8_lit_comp("build_tab"), str8_lit_comp("Opens a new tab with the parameterized view specification."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("duplicate_tab"), str8_lit_comp("Duplicates a tab."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Tab, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("copy_tab_full_path"), str8_lit_comp("Copies the full path of the file being viewed by this tab."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Tab, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("close_tab"), str8_lit_comp("Closes the currently opened tab."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Tab, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_view"), str8_lit_comp("Moves a view to a new panel."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("tab_bar_top"), str8_lit_comp("Anchors a panel's tab bar to the top of the panel."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("tab_bar_bottom"), str8_lit_comp("Anchors a panel's tab bar to the bottom of the panel."), str8_lit_comp(""), str8_lit_comp("$tab,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("tab_settings"), str8_lit_comp("Opens settings for a tab."), str8_lit_comp("view,options"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("set_current_path"), str8_lit_comp("Sets the debugger's current path, which is used as a starting point when browsing for files."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("open"), str8_lit_comp("Opens a file."), str8_lit_comp("code,source,file"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("switch"), str8_lit_comp("Switches to a recent file."), str8_lit_comp("code,source,file"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:recent_files, query:source_files"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("switch_to_partner_file"), str8_lit_comp("Switches to the focused file's partner; or from header to implementation or vice versa."), str8_lit_comp("code,source,file"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("record_file_in_project"), str8_lit_comp("Records the passed file path as a recent file in the currently loaded project."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("show_file_in_explorer"), str8_lit_comp("Opens the operating system's file explorer and shows the selected file."), str8_lit_comp(""), str8_lit_comp("$file,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("go_to_disassembly"), str8_lit_comp("Goes to the disassembly, if any, for a given source code line."), str8_lit_comp("code,source,disassembly,disasm"), str8_lit_comp("$text_pt,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*1)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("go_to_source"), str8_lit_comp("Goes to the source code, if any, for a given disassembly line."), str8_lit_comp("code,source,disassembly,disasm"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("set_file_replacement_path"), str8_lit_comp("Sets the path which should be used as the replacement for the passed file."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("new_user"), str8_lit_comp("Creates a new user file, and sets the current user path as that file's path."), str8_lit_comp("new,user,project,layout"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("new_project"), str8_lit_comp("Creates a new project file, and sets the current project path as that file's path."), str8_lit_comp("new,user,project,layout"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("open_user"), str8_lit_comp("Opens a user file path, immediately loading it, and begins autosaving to it."), str8_lit_comp("load,user,project,layout"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("open_project"), str8_lit_comp("Opens a project file path, immediately loading it, and begins autosaving to it."), str8_lit_comp("project,project,session"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("open_recent_project"), str8_lit_comp("Opens a recently used project file."), str8_lit_comp("project,project,session"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:recent_projects"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("save_user"), str8_lit_comp("Saves user data to a file, and sets the current user path as that path."), str8_lit_comp("load,user,project,layout"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("save_project"), str8_lit_comp("Saves project data to a file, and sets the current project path as that path."), str8_lit_comp("project,project,session"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("record_user_as_last_opened"), str8_lit_comp("Records a file path as the last opened user."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("record_project_in_user"), str8_lit_comp("Records a file path as a recent project in user data."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("write_user_data"), str8_lit_comp("Writes user data to the active user file."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("write_project_data"), str8_lit_comp("Writes project data to the active project file."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("user_settings"), str8_lit_comp("Opens user settings."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("project_settings"), str8_lit_comp("Opens project settings."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("edit"), str8_lit_comp("Edits the current selection."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("accept"), str8_lit_comp("Accepts current changes, or answers prompts in the affirmative."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("cancel"), str8_lit_comp("Rejects current changes, exits temporary menus, or answers prompts in the negative."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("focus_menu"), str8_lit_comp("Focuses the menu for the selected interface, if there is one."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_left"), str8_lit_comp("Moves the cursor or selection left."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_right"), str8_lit_comp("Moves the cursor or selection right."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_up"), str8_lit_comp("Moves the cursor or selection up."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_down"), str8_lit_comp("Moves the cursor or selection down."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_left_select"), str8_lit_comp("Moves the cursor or selection left, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_right_select"), str8_lit_comp("Moves the cursor or selection right, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_up_select"), str8_lit_comp("Moves the cursor or selection up, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_down_select"), str8_lit_comp("Moves the cursor or selection down, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_left_chunk"), str8_lit_comp("Moves the cursor or selection left one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_right_chunk"), str8_lit_comp("Moves the cursor or selection right one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_up_chunk"), str8_lit_comp("Moves the cursor or selection up one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_down_chunk"), str8_lit_comp("Moves the cursor or selection down one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_up_page"), str8_lit_comp("Moves the cursor or selection up one page."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_down_page"), str8_lit_comp("Moves the cursor or selection down one page."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_up_whole"), str8_lit_comp("Moves the cursor or selection to the beginning of the relevant content."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_down_whole"), str8_lit_comp("Moves the cursor or selection to the end of the relevant content."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_left_chunk_select"), str8_lit_comp("Moves the cursor or selection left one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_right_chunk_select"), str8_lit_comp("Moves the cursor or selection right one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_up_chunk_select"), str8_lit_comp("Moves the cursor or selection up one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_down_chunk_select"), str8_lit_comp("Moves the cursor or selection down one chunk."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_up_page_select"), str8_lit_comp("Moves the cursor or selection up one page, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_down_page_select"), str8_lit_comp("Moves the cursor or selection down one page, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_up_whole_select"), str8_lit_comp("Moves the cursor or selection to the beginning of the relevant content, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_down_whole_select"), str8_lit_comp("Moves the cursor or selection to the end of the relevant content, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_up_reorder"), str8_lit_comp("Moves the cursor or selection up, while swapping the currently selected element with that upward."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_down_reorder"), str8_lit_comp("Moves the cursor or selection down, while swapping the currently selected element with that downward."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_home"), str8_lit_comp("Moves the cursor to the beginning of the line."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_end"), str8_lit_comp("Moves the cursor to the end of the line."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_home_select"), str8_lit_comp("Moves the cursor to the beginning of the line, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_end_select"), str8_lit_comp("Moves the cursor to the end of the line, while selecting."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("select_all"), str8_lit_comp("Selects everything possible."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("delete_single"), str8_lit_comp("Deletes a single element to the right of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("delete_chunk"), str8_lit_comp("Deletes a chunk to the right of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("backspace_single"), str8_lit_comp("Deletes a single element to the left of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("backspace_chunk"), str8_lit_comp("Deletes a chunk to the left of the cursor, or the active selection."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("copy"), str8_lit_comp("Copies the active selection to the clipboard."), str8_lit_comp(""), str8_lit_comp("$text_rng,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("cut"), str8_lit_comp("Copies the active selection to the clipboard, then deletes it."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("paste"), str8_lit_comp("Pastes the current contents of the clipboard."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("insert_text"), str8_lit_comp("Inserts the text that was used to cause this command."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_next"), str8_lit_comp("Moves the cursor or selection to the next element."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("move_prev"), str8_lit_comp("Moves the cursor or selection to the previous element."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("goto_line"), str8_lit_comp("Jumps to a line number in the current code file."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*1), RD_RegSlot_Cursor, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("goto_address"), str8_lit_comp("Jumps to an address in the current memory or disassembly view."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*1), RD_RegSlot_Vaddr, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("center_cursor"), str8_lit_comp("Snaps the current code view to center the cursor."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("contain_cursor"), str8_lit_comp("Snaps the current code view to contain the cursor."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("find_next"), str8_lit_comp("Searches the current code file forward (from the cursor) for the last searched string."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*1)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("find_prev"), str8_lit_comp("Searches the current code file backwards (from the cursor) for the last searched string."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*1)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("find_thread"), str8_lit_comp("Jumps to the passed thread in either source code, disassembly, or both if they're already open."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Thread, str8_lit_comp("query:threads"), str8_lit_comp(""), D_EntityKind_Thread}}, +{ str8_lit_comp("find_selected_thread"), str8_lit_comp("Jumps to the selected thread in either source code, disassembly, or both if they're already open."), str8_lit_comp("current,instruction"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*1)|(RD_CmdKindFlag_ListInTextRng*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("goto_name"), str8_lit_comp("Searches for the passed string as a file, a symbol in debug info, and more, then jumps to it if possible."), str8_lit_comp(""), str8_lit_comp("$text_pt,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_String, str8_lit_comp("query:procedures"), str8_lit_comp("symbol_lister"), D_EntityKind_Null}}, +{ str8_lit_comp("goto_name_at_cursor"), str8_lit_comp("Searches for the text at the cursor as a file, a symbol in debug info, and more, then jumps to it if possible."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*1)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("toggle_watch_expr"), str8_lit_comp("Adds or removes an expression to an opened watch view."), str8_lit_comp(""), str8_lit_comp("$text_pt,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("toggle_watch_expr_at_cursor"), str8_lit_comp("Adds or removes the expression that the cursor or selection is currently over to an opened watch view."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*1)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("toggle_watch_expr_at_mouse"), str8_lit_comp("Adds or removes the expression that the mouse is currently over to an opened watch view."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("enable_cfg"), str8_lit_comp("Enables a config tree."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("disable_cfg"), str8_lit_comp("Disables a config tree."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("select_cfg"), str8_lit_comp("Selects a config tree, disabling all others of the same kind."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("deselect_cfg"), str8_lit_comp("Deselects a config tree."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("remove_cfg"), str8_lit_comp("Removes a config tree."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("name_cfg"), str8_lit_comp("Equips a config tree with a label."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("condition_cfg"), str8_lit_comp("Equips a config tree with a condition string."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("duplicate_cfg"), str8_lit_comp("Duplicates a config tree."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("relocate_cfg"), str8_lit_comp("Relocates a config tree."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("save_cfg_to_project"), str8_lit_comp("Saves the config tree to the project."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("add_breakpoint"), str8_lit_comp("Places a breakpoint at a given location (file path and line number, address, or symbol name)."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("add_address_breakpoint"), str8_lit_comp("Places a breakpoint on the specified address."), str8_lit_comp(""), str8_lit_comp("$breakpoints,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Expr, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("add_function_breakpoint"), str8_lit_comp("Places a breakpoint on the first address of the specified function."), str8_lit_comp(""), str8_lit_comp("$breakpoints,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_String, str8_lit_comp("query:procedures"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("toggle_breakpoint"), str8_lit_comp("Places or removes a breakpoint at a given location (file path and line number, address, or symbol name)."), str8_lit_comp(""), str8_lit_comp("$text_pt,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*1)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("remove_breakpoint"), str8_lit_comp("Removes an existing breakpoint."), str8_lit_comp("delete"), str8_lit_comp("$breakpoints,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:breakpoints"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("enable_breakpoint"), str8_lit_comp("Enables a breakpoint."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:breakpoints"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("disable_breakpoint"), str8_lit_comp("Disables a breakpoint."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:breakpoints"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("clear_breakpoints"), str8_lit_comp("Removes all breakpoints."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("list_breakpoints"), str8_lit_comp("Lists all breakpoints."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("clear_output"), str8_lit_comp("Clears all output."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("add_watch_pin"), str8_lit_comp("Places a watch pin at a given location (file path and line number or address)."), str8_lit_comp(""), str8_lit_comp("$watch_pins,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Expr, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("toggle_watch_pin"), str8_lit_comp("Places or removes a watch pin at a given location (file path and line number or address)."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Expr, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("load_debug_info"), str8_lit_comp("Loads a debug info file."), str8_lit_comp(""), str8_lit_comp("$debug_infos,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("unload_debug_info"), str8_lit_comp("Unloads a debug info file."), str8_lit_comp(""), str8_lit_comp("$debug_infos,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:debug_infos"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("add_type_view"), str8_lit_comp("Adds a new type view."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_String, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("add_file_path_map"), str8_lit_comp("Adds a new file path map."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("edit_user_theme"), str8_lit_comp("Edits the current user's theme."), str8_lit_comp("color"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_String, str8_lit_comp("query:themes"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("edit_project_theme"), str8_lit_comp("Edits the current project's theme."), str8_lit_comp("color"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_String, str8_lit_comp("query:themes"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("add_theme_color"), str8_lit_comp("Adds a new theme color."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("fork_theme"), str8_lit_comp("Imports all colors from the current theme so they can be individually edited."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("save_theme"), str8_lit_comp("Saves all theme colors to a new theme file."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_String, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("save_and_set_theme"), str8_lit_comp("Saves all theme colors to a new theme file, and then sets that theme as the selected theme."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_String, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("set_next_statement"), str8_lit_comp("Sets the selected thread's instruction pointer to the cursor's position."), str8_lit_comp(""), str8_lit_comp("$text_pt,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*1)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("add_target"), str8_lit_comp("Adds a new target."), str8_lit_comp("application,executable,debug"), str8_lit_comp("$targets,"), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("select_target"), str8_lit_comp("Selects a target."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:targets"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("enable_target"), str8_lit_comp("Enables a target, in addition to all targets currently enabled."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:targets"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("disable_target"), str8_lit_comp("Disables a target."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:targets"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("remove_target"), str8_lit_comp("Removes a target."), str8_lit_comp("delete"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Cfg, str8_lit_comp("query:targets"), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("register_as_jit_debugger"), str8_lit_comp("Registers the RAD debugger as the just-in-time (JIT) debugger used by the operating system."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("find_code_location"), str8_lit_comp("Finds a specific source code location given file, line, and column coordinates. Opens the file if necessary."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("search"), str8_lit_comp("Begins searching within the active interface."), str8_lit_comp("sort,search,filter,find"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*1)|(RD_QueryFlag_SelectOldInput*1)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*1), RD_RegSlot_String, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("search_backwards"), str8_lit_comp("Begins searching backwards within the active interface."), str8_lit_comp("sort,search,filter,find"), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*1)|(RD_QueryFlag_KeepOldInput*1)|(RD_QueryFlag_SelectOldInput*1)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*1), RD_RegSlot_String, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("pick_file"), str8_lit_comp("Opens the file browser to pick a file."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("pick_folder"), str8_lit_comp("Opens the file browser to pick a folder."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*1)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("pick_file_or_folder"), str8_lit_comp("Opens the file browser to pick a file or folder."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*1)|(RD_QueryFlag_AllowFolders*1)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_FilePath, str8_lit_comp("folder:\"$input\""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("push_query"), str8_lit_comp("Opens a new temporary query interface."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("complete_query"), str8_lit_comp("Completes and closes a query."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("cancel_query"), str8_lit_comp("Closes a query."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("update_query"), str8_lit_comp("Updates a query input."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("open_event_buffer"), str8_lit_comp("Opens a new event buffer, to which debugger events will be written, for external processing."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("close_event_buffer"), str8_lit_comp("Closes an existing event buffer."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Cfg, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("toggle_dev_menu"), str8_lit_comp("Opens and closes the developer menu."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, +{ str8_lit_comp("log_marker"), str8_lit_comp("Logs a marker in the application log, to denote specific points in time within the log."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1)|(RD_CmdKindFlag_ListInTextPt*0)|(RD_CmdKindFlag_ListInTextRng*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), str8_lit_comp(""), D_EntityKind_Null}}, { str8_lit_comp("watches"), str8_lit_comp("Opens a Watch tab."), {0}, {0}, RD_CmdKindFlag_ListInUI|RD_CmdKindFlag_ListInIPCDocs|RD_CmdKindFlag_ListInTab}, { str8_lit_comp("locals"), str8_lit_comp("Opens a Locals tab."), {0}, {0}, RD_CmdKindFlag_ListInUI|RD_CmdKindFlag_ListInIPCDocs|RD_CmdKindFlag_ListInTab}, { str8_lit_comp("registers"), str8_lit_comp("Opens a Registers tab."), {0}, {0}, RD_CmdKindFlag_ListInUI|RD_CmdKindFlag_ListInIPCDocs|RD_CmdKindFlag_ListInTab}, diff --git a/src/raddbg/generated/raddbg.meta.h b/src/raddbg/generated/raddbg.meta.h index 9f2cd81c..89b9e129 100644 --- a/src/raddbg/generated/raddbg.meta.h +++ b/src/raddbg/generated/raddbg.meta.h @@ -450,11 +450,11 @@ String8 schema; typedef struct RD_Regs RD_Regs; struct RD_Regs { -CTRL_Handle machine; -CTRL_Handle module; -CTRL_Handle process; -CTRL_Handle thread; -CTRL_Handle ctrl_entity; +D_Handle machine; +D_Handle module; +D_Handle process; +D_Handle thread; +D_Handle ctrl_entity; CFG_ID window; CFG_ID panel; CFG_ID tab; @@ -507,7 +507,7 @@ RD_QueryFlags flags; RD_RegSlot slot; String8 expr; String8 view_name; -CTRL_EntityKind ctrl_entity_kind; +D_EntityKind ctrl_entity_kind; }; typedef struct RD_CmdKindInfo RD_CmdKindInfo; diff --git a/src/raddbg/raddbg.mdesk b/src/raddbg/raddbg.mdesk index 0f83ea5d..7fa633c3 100644 --- a/src/raddbg/raddbg.mdesk +++ b/src/raddbg/raddbg.mdesk @@ -305,7 +305,7 @@ RD_VocabTable: ``` } - // TODO(rjf): the control codes could be fed from the CTRL_ExceptionCodeKindTable, but + // TODO(rjf): the control codes could be fed from the D_ExceptionCodeKindTable, but // we do not support that in this generator - we'd need a way to form a table-generated // string and put it into a table cell... { @@ -758,11 +758,11 @@ RD_VocabTable: RD_RegTable: { // rjf: ctrl entities - {CTRL_Handle machine Machine } - {CTRL_Handle module Module } - {CTRL_Handle process Process } - {CTRL_Handle thread Thread } - {CTRL_Handle ctrl_entity CtrlEntity } + {D_Handle machine Machine } + {D_Handle module Module } + {D_Handle process Process } + {D_Handle thread Thread } + {D_Handle ctrl_entity CtrlEntity } // rjf: cfgs {CFG_ID window Window } @@ -788,7 +788,7 @@ RD_RegTable: {C_Key text_key TextKey } {TXT_LangKind lang_kind LangKind } {D_LineList lines Lines } - {DI_Key dbgi_key DbgiKey } + {DI_Key dbgi_key DbgiKey } {U64 vaddr Vaddr } {U64 voff Voff } {Rng1U64 vaddr_range VaddrRange } @@ -1163,7 +1163,7 @@ RD_CmdTable: // | | | | `RD_RegSlot slot`; `String8 expr`; `String8 view_name`; - `CTRL_EntityKind ctrl_entity_kind`; + `D_EntityKind ctrl_entity_kind`; } @struct RD_CmdKindInfo: @@ -1180,9 +1180,9 @@ RD_CmdTable: // | | | | { `{0}`, @expand(D_CmdTable, a) - ```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.ctx_filter)"), (RD_CmdKindFlag_ListInUI*$(a.ui_vis))|(RD_CmdKindFlag_ListInIPCDocs*$(a.ipc_docs_vis))|(RD_CmdKindFlag_ListInTextPt*$(a.text_pt_vis))|(RD_CmdKindFlag_ListInTextRng*$(a.text_rng_vis)), {(RD_QueryFlag_AllowFiles*$(a.q_allow_files))|(RD_QueryFlag_AllowFolders*$(a.q_allow_folders))|(RD_QueryFlag_CodeInput*$(a.q_is_code))|(RD_QueryFlag_KeepOldInput*$(a.q_keep_oi))|(RD_QueryFlag_SelectOldInput*$(a.q_select_oi))|(RD_QueryFlag_Floating*$(a.q_floating))|(RD_QueryFlag_Required*$(a.q_required)), RD_RegSlot_$(a.q_slot), str8_lit_comp("$(a.q_expr)"), str8_lit_comp("$(a.q_view != 'null' -> a.q_view)"), CTRL_EntityKind_$(a.q_ctrl_ent_kind)}}```; + ```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.ctx_filter)"), (RD_CmdKindFlag_ListInUI*$(a.ui_vis))|(RD_CmdKindFlag_ListInIPCDocs*$(a.ipc_docs_vis))|(RD_CmdKindFlag_ListInTextPt*$(a.text_pt_vis))|(RD_CmdKindFlag_ListInTextRng*$(a.text_rng_vis)), {(RD_QueryFlag_AllowFiles*$(a.q_allow_files))|(RD_QueryFlag_AllowFolders*$(a.q_allow_folders))|(RD_QueryFlag_CodeInput*$(a.q_is_code))|(RD_QueryFlag_KeepOldInput*$(a.q_keep_oi))|(RD_QueryFlag_SelectOldInput*$(a.q_select_oi))|(RD_QueryFlag_Floating*$(a.q_floating))|(RD_QueryFlag_Required*$(a.q_required)), RD_RegSlot_$(a.q_slot), str8_lit_comp("$(a.q_expr)"), str8_lit_comp("$(a.q_view != 'null' -> a.q_view)"), D_EntityKind_$(a.q_ctrl_ent_kind)}}```; @expand(RD_CmdTable, a) - ```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.ctx_filter)"), (RD_CmdKindFlag_ListInUI*$(a.ui_vis))|(RD_CmdKindFlag_ListInIPCDocs*$(a.ipc_docs_vis))|(RD_CmdKindFlag_ListInTextPt*$(a.text_pt_vis))|(RD_CmdKindFlag_ListInTextRng*$(a.text_rng_vis)), {(RD_QueryFlag_AllowFiles*$(a.q_allow_files))|(RD_QueryFlag_AllowFolders*$(a.q_allow_folders))|(RD_QueryFlag_CodeInput*$(a.q_is_code))|(RD_QueryFlag_KeepOldInput*$(a.q_keep_oi))|(RD_QueryFlag_SelectOldInput*$(a.q_select_oi))|(RD_QueryFlag_Floating*$(a.q_floating))|(RD_QueryFlag_Required*$(a.q_required)), RD_RegSlot_$(a.q_slot), str8_lit_comp("$(a.q_expr)"), str8_lit_comp("$(a.q_view != 'null' -> a.q_view)"), CTRL_EntityKind_$(a.q_ctrl_ent_kind)}}```; + ```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.ctx_filter)"), (RD_CmdKindFlag_ListInUI*$(a.ui_vis))|(RD_CmdKindFlag_ListInIPCDocs*$(a.ipc_docs_vis))|(RD_CmdKindFlag_ListInTextPt*$(a.text_pt_vis))|(RD_CmdKindFlag_ListInTextRng*$(a.text_rng_vis)), {(RD_QueryFlag_AllowFiles*$(a.q_allow_files))|(RD_QueryFlag_AllowFolders*$(a.q_allow_folders))|(RD_QueryFlag_CodeInput*$(a.q_is_code))|(RD_QueryFlag_KeepOldInput*$(a.q_keep_oi))|(RD_QueryFlag_SelectOldInput*$(a.q_select_oi))|(RD_QueryFlag_Floating*$(a.q_floating))|(RD_QueryFlag_Required*$(a.q_required)), RD_RegSlot_$(a.q_slot), str8_lit_comp("$(a.q_expr)"), str8_lit_comp("$(a.q_view != 'null' -> a.q_view)"), D_EntityKind_$(a.q_ctrl_ent_kind)}}```; @expand(RD_WatchTabFastPathTable, a) ```{ str8_lit_comp("$(a.name_lower)"), str8_lit_comp("Opens a $(a.display_name) tab."), {0}, {0}, RD_CmdKindFlag_ListInUI|RD_CmdKindFlag_ListInIPCDocs|RD_CmdKindFlag_ListInTab}```; @expand(RD_ViewTabFastPathTable, a) diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index a2255f67..e0a46d04 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -609,7 +609,7 @@ rd_possible_overrides_from_file_path(Arena *arena, String8 file_path) //~ rjf: Control Entity Info Extraction internal Vec4F32 -rd_color_from_ctrl_entity(CTRL_Entity *entity) +rd_color_from_ctrl_entity(D_Entity *entity) { Vec4F32 result = {0}; if(entity->rgba != 0) @@ -619,10 +619,10 @@ rd_color_from_ctrl_entity(CTRL_Entity *entity) if(entity->rgba == 0) switch(entity->kind) { default:{}break; - case CTRL_EntityKind_Thread: + case D_EntityKind_Thread: { - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(entity, CTRL_EntityKind_Process); - CTRL_Entity *main_thread = ctrl_entity_child_from_kind(process, CTRL_EntityKind_Thread); + D_Entity *process = ctrl_entity_ancestor_from_kind(entity, D_EntityKind_Process); + D_Entity *main_thread = ctrl_entity_child_from_kind(process, D_EntityKind_Thread); if(main_thread != entity) { result = ui_color_from_name(str8_lit("thread_1")); @@ -637,14 +637,14 @@ rd_color_from_ctrl_entity(CTRL_Entity *entity) } internal String8 -rd_name_from_ctrl_entity(Arena *arena, CTRL_Entity *entity) +rd_name_from_ctrl_entity(Arena *arena, D_Entity *entity) { String8 string = entity->string; if(string.size == 0) { string = str8_lit("unnamed"); } - if(entity->kind == CTRL_EntityKind_Module) + if(entity->kind == D_EntityKind_Module) { string = str8_skip_last_slash(string); } @@ -678,15 +678,15 @@ rd_eval_space_from_cfg(CFG_Node *cfg) //- rjf: ctrl entity <-> eval space -internal CTRL_Entity * +internal D_Entity * rd_ctrl_entity_from_eval_space(E_Space space) { - CTRL_Entity *entity = &ctrl_entity_nil; - if(space.kind == CTRL_EvalSpaceKind_Entity || + D_Entity *entity = &d_entity_nil; + if(space.kind == D_EvalSpaceKind_Entity || space.kind == RD_EvalSpaceKind_MetaCtrlEntity || space.kind == RD_EvalSpaceKind_MetaUnattachedProcess) { - CTRL_Handle handle; + D_Handle handle; handle.machine_id = space.u64s[0]; handle.dmn_handle.u64[0] = space.u64s[1]; entity = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, handle); @@ -695,7 +695,7 @@ rd_ctrl_entity_from_eval_space(E_Space space) } internal E_Space -rd_eval_space_from_ctrl_entity(CTRL_Entity *entity, E_SpaceKind kind) +rd_eval_space_from_ctrl_entity(D_Entity *entity, E_SpaceKind kind) { E_Space space = e_space_make(kind); space.u64s[0] = entity->handle.machine_id; @@ -750,15 +750,15 @@ rd_eval_space_read(E_Space space, void *out, Rng1U64 range) }break; //- rjf: interior control entity reads (inside process address space or thread register block) - case CTRL_EvalSpaceKind_Entity: + case D_EvalSpaceKind_Entity: { - CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(space); + D_Entity *entity = rd_ctrl_entity_from_eval_space(space); switch(entity->kind) { default:{}break; - case CTRL_EntityKind_Process: + case D_EntityKind_Process: { - CTRL_ProcessMemorySlice slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, entity->handle, range, 0, rd_state->frame_eval_memread_endt_us); + D_ProcessMemorySlice slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, entity->handle, range, 0, rd_state->frame_eval_memread_endt_us); String8 data = slice.data; if(data.size == dim_1u64(range)) { @@ -766,14 +766,14 @@ rd_eval_space_read(E_Space space, void *out, Rng1U64 range) MemoryCopy(out, data.str, data.size); } }break; - case CTRL_EntityKind_Thread: + case D_EntityKind_Thread: { Access *access = access_open(); - CTRL_CallStack call_stack = ctrl_call_stack_from_thread(access, entity->handle, 1, rd_state->frame_eval_memread_endt_us); + D_CallStack call_stack = ctrl_call_stack_from_thread(access, entity->handle, 1, rd_state->frame_eval_memread_endt_us); U64 concrete_frame_idx = e_interpret_ctx->reg_unwind_count; if(concrete_frame_idx < call_stack.concrete_frames_count) { - CTRL_CallStackFrame *f = call_stack.concrete_frames[concrete_frame_idx]; + D_CallStackFrame *f = call_stack.concrete_frames[concrete_frame_idx]; U64 regs_size = regs_block_size_from_arch(e_interpret_ctx->reg_arch); Rng1U64 legal_range = r1u64(0, regs_size); Rng1U64 read_range = intersect_1u64(legal_range, range); @@ -928,7 +928,7 @@ rd_eval_space_read(E_Space space, void *out, Rng1U64 range) case RD_EvalSpaceKind_MetaCtrlEntity: { // rjf: unpack cfg - CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(space); + D_Entity *entity = rd_ctrl_entity_from_eval_space(space); String8 child_key = e_string_from_id(space.u64s[2]); // rjf: determine data to read from, depending on child name in schema @@ -948,7 +948,7 @@ rd_eval_space_read(E_Space space, void *out, Rng1U64 range) } else if(str8_match(child_schema->string, str8_lit("dbg"), 0)) { - read_data = ctrl_entity_child_from_kind(entity, CTRL_EntityKind_DebugInfoPath)->string; + read_data = ctrl_entity_child_from_kind(entity, D_EntityKind_DebugInfoPath)->string; } else if(str8_match(child_schema->string, str8_lit("vaddr_range"), 0)) { @@ -990,17 +990,17 @@ rd_eval_space_write(E_Space space, void *in, Rng1U64 range) //- rjf: interior control entity writes (inside process address space or // thread register block) - case CTRL_EvalSpaceKind_Entity: + case D_EvalSpaceKind_Entity: { - CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(space); + D_Entity *entity = rd_ctrl_entity_from_eval_space(space); switch(entity->kind) { default:{}break; - case CTRL_EntityKind_Process: + case D_EntityKind_Process: { result = ctrl_process_write(entity->handle, range, in); }break; - case CTRL_EntityKind_Thread: + case D_EntityKind_Thread: { Temp scratch = scratch_begin(0, 0); U64 regs_size = regs_block_size_from_arch(entity->arch); @@ -1075,7 +1075,7 @@ rd_eval_space_write(E_Space space, void *in, Rng1U64 range) String8 write_string = str8_cstring_capped(in, (U8 *)in + dim_1u64(range)); // rjf: unpack cfg - CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(space); + D_Entity *entity = rd_ctrl_entity_from_eval_space(space); String8 child_key = e_string_from_id(space.u64s[2]); // rjf: perform write, based on child name in schema @@ -1139,10 +1139,10 @@ rd_key_from_eval_space_range(E_Space space, Rng1U64 range, B32 zero_terminated) String8 file_path = e_string_from_id(file_path_string_id); result = fs_key_from_path_range(file_path, range, 0); }break; - case CTRL_EvalSpaceKind_Entity: + case D_EvalSpaceKind_Entity: { - CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(space); - if(entity->kind == CTRL_EntityKind_Process) + D_Entity *entity = rd_ctrl_entity_from_eval_space(space); + if(entity->kind == D_EntityKind_Process) { result = ctrl_key_from_process_vaddr_range(entity->handle, range, zero_terminated, 0, 0, 0); } @@ -1179,10 +1179,10 @@ rd_whole_range_from_eval_space(E_Space space) FileProperties props = os_properties_from_file_path(file_path); result = r1u64(0, props.size); }break; - case CTRL_EvalSpaceKind_Entity: + case D_EvalSpaceKind_Entity: { - CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(space); - if(entity->kind == CTRL_EntityKind_Process) + D_Entity *entity = rd_ctrl_entity_from_eval_space(space); + if(entity->kind == D_EntityKind_Process) { result = r1u64(0, 0x7FFFFFFFFFFFull); } @@ -1703,7 +1703,7 @@ rd_view_ui(Rng2F32 rect) UI_Padding(ui_pct(1, 0)) UI_Focus(UI_FocusKind_Null) { CFG_NodePtrList targets = cfg_node_top_level_list_from_string(scratch.arena, str8_lit("target")); - CTRL_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Process); + D_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Process); //- rjf: icon & info UI_Padding(ui_em(2.f, 1.f)) UI_TagF("weak") @@ -2264,11 +2264,11 @@ rd_view_ui(Rng2F32 rect) { U64 voff = 0; DI_Key dbgi_key = {0}; - if(eval.space.kind == CTRL_EvalSpaceKind_Entity) + if(eval.space.kind == D_EvalSpaceKind_Entity) { U64 vaddr = eval.value.u64; - CTRL_Entity *process = rd_ctrl_entity_from_eval_space(eval.space); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, vaddr); + D_Entity *process = rd_ctrl_entity_from_eval_space(eval.space); + D_Entity *module = ctrl_module_from_process_vaddr(process, vaddr); dbgi_key = ctrl_dbgi_key_from_module(module); voff = ctrl_voff_from_vaddr(module, vaddr); } @@ -2321,14 +2321,14 @@ rd_view_ui(Rng2F32 rect) }break; case RD_EvalSpaceKind_MetaCtrlEntity: { - CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(eval.space); + D_Entity *entity = rd_ctrl_entity_from_eval_space(eval.space); RD_RegsScope(.ctrl_entity = entity->handle) { if(0){} - else if(entity->kind == CTRL_EntityKind_Thread) { rd_regs()->thread = entity->handle; } - else if(entity->kind == CTRL_EntityKind_Module) { rd_regs()->module = entity->handle; } - else if(entity->kind == CTRL_EntityKind_Process) { rd_regs()->process = entity->handle; } - else if(entity->kind == CTRL_EntityKind_Machine) { rd_regs()->machine = entity->handle; } + else if(entity->kind == D_EntityKind_Thread) { rd_regs()->thread = entity->handle; } + else if(entity->kind == D_EntityKind_Module) { rd_regs()->module = entity->handle; } + else if(entity->kind == D_EntityKind_Process) { rd_regs()->process = entity->handle; } + else if(entity->kind == D_EntityKind_Machine) { rd_regs()->machine = entity->handle; } rd_cmd(RD_CmdKind_CompleteQuery); } }break; @@ -2361,8 +2361,8 @@ rd_view_ui(Rng2F32 rect) String8 name = {0}; { U64 vaddr = eval.value.u64; - CTRL_Entity *process = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->process); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, vaddr); + D_Entity *process = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->process); + D_Entity *module = ctrl_module_from_process_vaddr(process, vaddr); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); U64 voff = ctrl_voff_from_vaddr(module, vaddr); { @@ -2431,7 +2431,7 @@ rd_view_ui(Rng2F32 rect) }break; case RD_EvalSpaceKind_MetaCtrlEntity: { - CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(eval.space); + D_Entity *entity = rd_ctrl_entity_from_eval_space(eval.space); rd_cmd(RD_CmdKind_PushQuery, .expr = push_str8f(scratch.arena, "query:control.%S", ctrl_string_from_handle(scratch.arena, entity->handle))); }break; } @@ -2553,7 +2553,7 @@ rd_view_ui(Rng2F32 rect) } }break; case RD_WatchViewRowKind_PrettyEntityControls: - if((!rd_entity_is_nil(row_info.collection_entity) || row_info.collection_ctrl_entity != &ctrl_entity_nil) && selection_tbl.min.x == 1 && selection_tbl.max.x == 1) + if((!rd_entity_is_nil(row_info.collection_entity) || row_info.collection_ctrl_entity != &d_entity_nil) && selection_tbl.min.x == 1 && selection_tbl.max.x == 1) { kind = OpKind_DoExpand; }break; @@ -3539,10 +3539,10 @@ rd_view_ui(Rng2F32 rect) //////////////////// //- rjf: draw start of cache lines in expansions // - if(row->eval.space.kind == CTRL_EvalSpaceKind_Entity && row_info->view_ui_rule == &rd_nil_view_ui_rule) + if(row->eval.space.kind == D_EvalSpaceKind_Entity && row_info->view_ui_rule == &rd_nil_view_ui_rule) { - CTRL_Entity *space_entity = rd_ctrl_entity_from_eval_space(row->eval.space); - if(space_entity->kind == CTRL_EntityKind_Process) + D_Entity *space_entity = rd_ctrl_entity_from_eval_space(row->eval.space); + if(space_entity->kind == D_EntityKind_Process) { U64 row_offset = row->eval.value.u64; if((row->eval.irtree.mode == E_Mode_Offset || row->eval.irtree.mode == E_Mode_Null) && @@ -3560,10 +3560,10 @@ rd_view_ui(Rng2F32 rect) ////////////// //- rjf: draw mid-row cache line boundaries in expansions // - if(row->eval.space.kind == CTRL_EvalSpaceKind_Entity && row_info->view_ui_rule == &rd_nil_view_ui_rule) + if(row->eval.space.kind == D_EvalSpaceKind_Entity && row_info->view_ui_rule == &rd_nil_view_ui_rule) { - CTRL_Entity *space_entity = rd_ctrl_entity_from_eval_space(row->eval.space); - if(space_entity->kind == CTRL_EntityKind_Process && + D_Entity *space_entity = rd_ctrl_entity_from_eval_space(row->eval.space); + if(space_entity->kind == D_EntityKind_Process && (row->eval.irtree.mode == E_Mode_Offset || row->eval.irtree.mode == E_Mode_Null) && row->eval.value.u64%64 != 0 && row_depth > 0 && @@ -3641,10 +3641,10 @@ rd_view_ui(Rng2F32 rect) Rng1U64 intersection = intersect_1u64(cell_vaddr_rng, rd_get_hover_regs()->vaddr_range); cell_is_rich_hovered = (intersection.max > intersection.min); } - CTRL_Entity *space_entity = rd_ctrl_entity_from_eval_space(cell->eval.space); - if(cell->eval.space.kind == CTRL_EvalSpaceKind_Entity && space_entity->kind == CTRL_EntityKind_Process) + D_Entity *space_entity = rd_ctrl_entity_from_eval_space(cell->eval.space); + if(cell->eval.space.kind == D_EvalSpaceKind_Entity && space_entity->kind == D_EntityKind_Process) { - CTRL_ProcessMemorySlice slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, space_entity->handle, cell_vaddr_rng, 0, rd_state->frame_eval_memread_endt_us); + D_ProcessMemorySlice slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, space_entity->handle, cell_vaddr_rng, 0, rd_state->frame_eval_memread_endt_us); for(U64 idx = 0; idx < (slice.data.size+63)/64; idx += 1) { if(slice.byte_changed_flags[idx] != 0) @@ -3722,7 +3722,7 @@ rd_view_ui(Rng2F32 rect) else if(ctrl_handle_match(cell_info.entity->handle, rd_get_hover_regs()->ctrl_entity) && rd_state->hover_regs_slot == RD_RegSlot_CtrlEntity) { - CTRL_Entity *entity = cell_info.entity; + D_Entity *entity = cell_info.entity; Vec4F32 rgba = rd_color_from_ctrl_entity(entity); rgba.w *= 0.05f; if(rgba.w == 0) @@ -4049,8 +4049,8 @@ rd_view_ui(Rng2F32 rect) if(!(cell_info.flags & RD_WatchCellFlag_NoEval) && e_type_kind_from_key(cell->eval.irtree.type_key) != E_TypeKind_Null && (cell->eval.space.kind == E_SpaceKind_Null || - cell->eval.space.kind == CTRL_EvalSpaceKind_Entity) && - row_info->callstack_thread == &ctrl_entity_nil && + cell->eval.space.kind == D_EvalSpaceKind_Entity) && + row_info->callstack_thread == &d_entity_nil && e_type_kind_from_key(cell->eval.irtree.type_key) != E_TypeKind_Function) UI_FontSize(ui_top_font_size()*0.9f) { @@ -4133,7 +4133,7 @@ rd_view_ui(Rng2F32 rect) } // rjf: hover -> rich hover entities - else if(ui_hovering(sig) && cell_info.entity != &ctrl_entity_nil) + else if(ui_hovering(sig) && cell_info.entity != &d_entity_nil) { RD_RegsScope(.ctrl_entity = cell_info.entity->handle, .no_rich_tooltip = 1) rd_set_hover_regs(RD_RegSlot_CtrlEntity); } @@ -4163,18 +4163,18 @@ rd_view_ui(Rng2F32 rect) { RD_RegsScope(.cfg = cell_info.cfg->id) rd_drag_begin(RD_RegSlot_Cfg); } - else if(cell_info.entity != &ctrl_entity_nil) + else if(cell_info.entity != &d_entity_nil) { RD_RegsScope(.ctrl_entity = cell_info.entity->handle) switch(cell_info.entity->kind) { default:{rd_drag_begin(RD_RegSlot_CtrlEntity);}break; - case CTRL_EntityKind_Machine:{RD_RegsScope(.machine = cell_info.entity->handle) rd_drag_begin(RD_RegSlot_Machine);}break; - case CTRL_EntityKind_Process:{RD_RegsScope(.process = cell_info.entity->handle) rd_drag_begin(RD_RegSlot_Process);}break; - case CTRL_EntityKind_Module:{RD_RegsScope(.module = cell_info.entity->handle) rd_drag_begin(RD_RegSlot_Module);}break; - case CTRL_EntityKind_Thread:{RD_RegsScope(.thread = cell_info.entity->handle) rd_drag_begin(RD_RegSlot_Thread);}break; + case D_EntityKind_Machine:{RD_RegsScope(.machine = cell_info.entity->handle) rd_drag_begin(RD_RegSlot_Machine);}break; + case D_EntityKind_Process:{RD_RegsScope(.process = cell_info.entity->handle) rd_drag_begin(RD_RegSlot_Process);}break; + case D_EntityKind_Module:{RD_RegsScope(.module = cell_info.entity->handle) rd_drag_begin(RD_RegSlot_Module);}break; + case D_EntityKind_Thread:{RD_RegsScope(.thread = cell_info.entity->handle) rd_drag_begin(RD_RegSlot_Thread);}break; } } - else if(cell->eval.space.kind == CTRL_EvalSpaceKind_Entity || + else if(cell->eval.space.kind == D_EvalSpaceKind_Entity || cell->eval.space.kind == E_SpaceKind_FileSystem || cell->eval.space.kind == E_SpaceKind_File || cell->eval.space.kind == E_SpaceKind_Null) @@ -4267,13 +4267,13 @@ rd_view_ui(Rng2F32 rect) { String8 cmd_name = cell_info.cmd_name; RD_CmdKindInfo *cmd_kind_info = rd_cmd_kind_info_from_string(cmd_name); - CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(row->eval.space); + D_Entity *entity = rd_ctrl_entity_from_eval_space(row->eval.space); CFG_Node *cfg = rd_cfg_from_eval_space(row->eval.space); if(cfg == &cfg_nil_node) { cfg = rd_cfg_from_eval_space(row->block->eval.space); } - if(entity == &ctrl_entity_nil) + if(entity == &d_entity_nil) { entity = rd_ctrl_entity_from_eval_space(row->eval.space); } @@ -4290,7 +4290,7 @@ rd_view_ui(Rng2F32 rect) } if(!(cmd_kind_info->query.flags & RD_QueryFlag_Required) || (cmd_kind_info->query.slot == RD_RegSlot_Cfg && cfg != &cfg_nil_node) || - (cmd_kind_info->query.slot == RD_RegSlot_CtrlEntity && entity != &ctrl_entity_nil)) + (cmd_kind_info->query.slot == RD_RegSlot_CtrlEntity && entity != &d_entity_nil)) { rd_push_cmd(cell_info.cmd_name, rd_regs()); } @@ -4302,7 +4302,7 @@ rd_view_ui(Rng2F32 rect) } // rjf: row has callstack info? -> select unwind - else if(row_info->callstack_thread != &ctrl_entity_nil) + else if(row_info->callstack_thread != &d_entity_nil) { rd_cmd(RD_CmdKind_SelectThread, .thread = row_info->callstack_thread->handle); rd_cmd(RD_CmdKind_SelectUnwind, @@ -4329,14 +4329,14 @@ rd_view_ui(Rng2F32 rect) } // rjf: can't edit, but has address info? -> go to address - else if(cell->eval.space.kind == CTRL_EvalSpaceKind_Entity) + else if(cell->eval.space.kind == D_EvalSpaceKind_Entity) { - CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(cell->eval.space); - CTRL_Entity *process = ctrl_process_from_entity(entity); - if(process != &ctrl_entity_nil) + D_Entity *entity = rd_ctrl_entity_from_eval_space(cell->eval.space); + D_Entity *process = ctrl_process_from_entity(entity); + if(process != &d_entity_nil) { U64 vaddr = cell->eval.value.u64; - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, vaddr); + D_Entity *module = ctrl_module_from_process_vaddr(process, vaddr); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); U64 voff = ctrl_voff_from_vaddr(module, vaddr); D_LineList lines = d_lines_from_dbgi_key_voff(scratch.arena, dbgi_key, voff); @@ -4380,13 +4380,13 @@ rd_view_ui(Rng2F32 rect) } // rjf: can't edit, but has thread? -> select - else if(cell_info.entity->kind == CTRL_EntityKind_Thread) + else if(cell_info.entity->kind == D_EntityKind_Thread) { rd_cmd(RD_CmdKind_SelectThread, .thread = cell_info.entity->handle); } // rjf: other cases, but this watch window is floating, and this has a cfg/entity? -> push query - else if(view_is_floating && (cell_info.entity != &ctrl_entity_nil || cell_info.cfg != &cfg_nil_node)) + else if(view_is_floating && (cell_info.entity != &d_entity_nil || cell_info.cfg != &cfg_nil_node)) { rd_cmd(RD_CmdKind_PushQuery, .expr = e_full_expr_string_from_key(scratch.arena, cell->eval.key)); } @@ -4736,9 +4736,9 @@ internal Arch rd_arch_from_eval(E_Eval eval) { // rjf: try implicitly from either `eval` itself, or from context - CTRL_Entity *ctrl_entity = rd_ctrl_entity_from_eval_space(eval.space); - CTRL_Entity *process = ctrl_process_from_entity(ctrl_entity); - if(process == &ctrl_entity_nil) + D_Entity *ctrl_entity = rd_ctrl_entity_from_eval_space(eval.space); + D_Entity *process = ctrl_process_from_entity(ctrl_entity); + if(process == &d_entity_nil) { process = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->process); } @@ -5439,7 +5439,7 @@ rd_window_frame(void) Temp scratch = scratch_begin(0, 0); RD_RegSlot slot = ((rd_state->drag_drop_regs_slot != RD_RegSlot_Null && rd_drag_is_active()) ? rd_state->drag_drop_regs_slot : rd_state->hover_regs_slot); RD_Regs *regs = (((rd_state->drag_drop_regs_slot != RD_RegSlot_Null && rd_drag_is_active()) ? rd_state->drag_drop_regs : rd_state->hover_regs)); - CTRL_Entity *ctrl_entity = &ctrl_entity_nil; + D_Entity *ctrl_entity = &d_entity_nil; ui_state->tooltip_anchor_key = regs->ui_key; ui_state->tooltip_can_overflow_window = rd_drag_is_active(); switch(slot) @@ -5522,8 +5522,8 @@ rd_window_frame(void) { UI_TagF("weak") UI_FlagsAdd(UI_BoxFlag_DrawBorder) ui_label(arch_str); ui_spacer(ui_em(0.5f, 1.f)); - if(ctrl_entity->kind == CTRL_EntityKind_Thread || - ctrl_entity->kind == CTRL_EntityKind_Process) + if(ctrl_entity->kind == D_EntityKind_Thread || + ctrl_entity->kind == D_EntityKind_Process) { UI_TagF("weak") UI_FlagsAdd(UI_BoxFlag_DrawBorder) ui_labelf("ID: %i", (U32)ctrl_entity->id); } @@ -5531,10 +5531,10 @@ rd_window_frame(void) } // rjf: debug info status - if(ctrl_entity->kind == CTRL_EntityKind_Module) UI_TagF("weak") + if(ctrl_entity->kind == D_EntityKind_Module) UI_TagF("weak") { Access *access = access_open(); - CTRL_Entity *dbg_info_entity = ctrl_entity_child_from_kind(ctrl_entity, CTRL_EntityKind_DebugInfoPath); + D_Entity *dbg_info_entity = ctrl_entity_child_from_kind(ctrl_entity, D_EntityKind_DebugInfoPath); DI_Key dbgi_key = ctrl_dbgi_key_from_module(ctrl_entity); RDI_Parsed *rdi = di_rdi_from_key(access, dbgi_key, 0, 0); if(rdi->raw_data_size != 0) @@ -5553,14 +5553,14 @@ rd_window_frame(void) } // rjf: unwind - if(ctrl_entity->kind == CTRL_EntityKind_Thread) RD_Font(RD_FontSlot_Code) + if(ctrl_entity->kind == D_EntityKind_Thread) RD_Font(RD_FontSlot_Code) { Access *access = access_open(); Vec4F32 code_color = ui_color_from_name(str8_lit("code_default")); Vec4F32 symbol_color = ui_color_from_name(str8_lit("code_symbol")); - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(ctrl_entity, CTRL_EntityKind_Process); + D_Entity *process = ctrl_entity_ancestor_from_kind(ctrl_entity, D_EntityKind_Process); B32 call_stack_high_priority = ctrl_handle_match(ctrl_entity->handle, rd_base_regs()->thread); - CTRL_CallStack call_stack = ctrl_call_stack_from_thread(access, ctrl_entity->handle, call_stack_high_priority, call_stack_high_priority ? rd_state->frame_eval_memread_endt_us : 0); + D_CallStack call_stack = ctrl_call_stack_from_thread(access, ctrl_entity->handle, call_stack_high_priority, call_stack_high_priority ? rd_state->frame_eval_memread_endt_us : 0); if(call_stack.frames_count != 0) { ui_spacer(ui_em(1.5f, 1.f)); @@ -6154,8 +6154,8 @@ rd_window_frame(void) build_hover_eval = 0; } else if((hover_eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity || - hover_eval.space.kind == CTRL_EvalSpaceKind_Entity) && - rd_ctrl_entity_from_eval_space(hover_eval.space) == &ctrl_entity_nil) + hover_eval.space.kind == D_EvalSpaceKind_Entity) && + rd_ctrl_entity_from_eval_space(hover_eval.space) == &d_entity_nil) { build_hover_eval = 0; } @@ -6255,8 +6255,8 @@ rd_window_frame(void) rd_cmd(RD_CmdKind_CancelQuery); } else if((eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity || - eval.space.kind == CTRL_EvalSpaceKind_Entity) && - rd_ctrl_entity_from_eval_space(eval.space) == &ctrl_entity_nil) + eval.space.kind == D_EvalSpaceKind_Entity) && + rd_ctrl_entity_from_eval_space(eval.space) == &d_entity_nil) { query_is_open = 0; rd_cmd(RD_CmdKind_CancelQuery); @@ -7037,7 +7037,7 @@ rd_window_frame(void) { Temp scratch = scratch_begin(0, 0); CFG_NodePtrList targets = cfg_node_top_level_list_from_string(scratch.arena, str8_lit("target")); - CTRL_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Process); + D_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Process); B32 can_send_signal = !d_ctrl_targets_running(); typedef struct CenterButtonTask CenterButtonTask; struct CenterButtonTask @@ -7226,7 +7226,7 @@ rd_window_frame(void) { //- rjf: unpack status info B32 is_running = d_ctrl_targets_running() && d_ctrl_last_run_frame_idx() < d_frame_index(); - CTRL_Event stop_event = d_ctrl_last_stop_event(); + D_Event stop_event = d_ctrl_last_stop_event(); String8 tag = str8_lit("pop"); CFG_NodePtrList tasks = cfg_node_top_level_list_from_string(scratch.arena, str8_lit("conversion_task")); CFG_NodePtrList long_running_tasks = {0}; @@ -7253,14 +7253,14 @@ rd_window_frame(void) switch(stop_event.cause) { default: - case CTRL_EventCause_Finished: + case D_EventCause_Finished: { tag = str8_lit("good_pop"); }break; - case CTRL_EventCause_UserBreakpoint: - case CTRL_EventCause_InterruptedByException: - case CTRL_EventCause_InterruptedByTrap: - case CTRL_EventCause_InterruptedByHalt: + case D_EventCause_UserBreakpoint: + case D_EventCause_InterruptedByException: + case D_EventCause_InterruptedByTrap: + case D_EventCause_InterruptedByHalt: { tag = str8_lit("bad_pop"); }break; @@ -9563,7 +9563,7 @@ internal String8 rd_string_from_exception_code(U32 code) { String8 string = {0}; - for EachNonZeroEnumVal(CTRL_ExceptionCodeKind, k) + for EachNonZeroEnumVal(D_ExceptionCodeKind, k) { if(code == ctrl_exception_code_kind_code_table[k]) { @@ -9575,9 +9575,9 @@ rd_string_from_exception_code(U32 code) } internal DR_FStrList -rd_stop_explanation_fstrs_from_ctrl_event(Arena *arena, CTRL_Event *event) +rd_stop_explanation_fstrs_from_ctrl_event(Arena *arena, D_Event *event) { - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, event->entity); + D_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, event->entity); DR_FStrList thread_fstrs = rd_title_fstrs_from_ctrl_entity(arena, thread, 0); DR_FStrList fstrs = {0}; DR_FStrParams params = {ui_top_font(), ui_top_text_raster_flags(), ui_color_from_name(str8_lit("text")), ui_top_font_size()}; @@ -9589,9 +9589,9 @@ rd_stop_explanation_fstrs_from_ctrl_event(Arena *arena, CTRL_Event *event) }break; //- rjf: finished operation; if active thread, completed thread, otherwise we're just stopped - case CTRL_EventCause_Finished: + case D_EventCause_Finished: { - if(thread != &ctrl_entity_nil) + if(thread != &d_entity_nil) { dr_fstrs_concat_in_place(&fstrs, &thread_fstrs); dr_fstrs_push_new(arena, &fstrs, ¶ms, str8_lit(" completed step")); @@ -9603,9 +9603,9 @@ rd_stop_explanation_fstrs_from_ctrl_event(Arena *arena, CTRL_Event *event) }break; //- rjf: stopped at entry point - case CTRL_EventCause_EntryPoint: + case D_EventCause_EntryPoint: { - if(thread != &ctrl_entity_nil) + if(thread != &d_entity_nil) { dr_fstrs_concat_in_place(&fstrs, &thread_fstrs); dr_fstrs_push_new(arena, &fstrs, ¶ms, str8_lit(" stopped at entry point")); @@ -9617,9 +9617,9 @@ rd_stop_explanation_fstrs_from_ctrl_event(Arena *arena, CTRL_Event *event) }break; //- rjf: user breakpoint - case CTRL_EventCause_UserBreakpoint: + case D_EventCause_UserBreakpoint: { - if(thread != &ctrl_entity_nil) + if(thread != &d_entity_nil) { dr_fstrs_push_new(arena, &fstrs, ¶ms, rd_icon_kind_text_table[RD_IconKind_CircleFilled], .font = rd_font_from_slot(RD_FontSlot_Icons), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Icons)); dr_fstrs_push_new(arena, &fstrs, ¶ms, str8_lit(" ")); @@ -9637,9 +9637,9 @@ rd_stop_explanation_fstrs_from_ctrl_event(Arena *arena, CTRL_Event *event) }break; //- rjf: exception - case CTRL_EventCause_InterruptedByException: + case D_EventCause_InterruptedByException: { - if(thread != &ctrl_entity_nil) + if(thread != &d_entity_nil) { dr_fstrs_push_new(arena, &fstrs, ¶ms, rd_icon_kind_text_table[RD_IconKind_WarningBig], .font = rd_font_from_slot(RD_FontSlot_Icons), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Icons)); dr_fstrs_push_new(arena, &fstrs, ¶ms, str8_lit(" ")); @@ -9659,7 +9659,7 @@ rd_stop_explanation_fstrs_from_ctrl_event(Arena *arena, CTRL_Event *event) exception_explanation_string.size != 0 ? ")" : ""); dr_fstrs_push_new(arena, &fstrs, ¶ms, exception_info_string); }break; - case CTRL_ExceptionKind_CppThrow: + case D_ExceptionKind_CppThrow: { dr_fstrs_concat_in_place(&fstrs, &thread_fstrs); dr_fstrs_push_new(arena, &fstrs, ¶ms, str8_lit(" ")); @@ -9667,7 +9667,7 @@ rd_stop_explanation_fstrs_from_ctrl_event(Arena *arena, CTRL_Event *event) String8 exception_code_string = str8_from_u64(arena, event->exception_code, 16, 0, 0); dr_fstrs_push_new(arena, &fstrs, ¶ms, exception_code_string); }break; - case CTRL_ExceptionKind_MemoryRead: + case D_ExceptionKind_MemoryRead: { dr_fstrs_concat_in_place(&fstrs, &thread_fstrs); dr_fstrs_push_new(arena, &fstrs, ¶ms, str8_lit(" ")); @@ -9675,7 +9675,7 @@ rd_stop_explanation_fstrs_from_ctrl_event(Arena *arena, CTRL_Event *event) String8 exception_info_string = push_str8f(arena, "Access violation reading from address 0x%I64x", event->vaddr_rng.min); dr_fstrs_push_new(arena, &fstrs, ¶ms, exception_info_string); }break; - case CTRL_ExceptionKind_MemoryWrite: + case D_ExceptionKind_MemoryWrite: { dr_fstrs_concat_in_place(&fstrs, &thread_fstrs); dr_fstrs_push_new(arena, &fstrs, ¶ms, str8_lit(" ")); @@ -9683,7 +9683,7 @@ rd_stop_explanation_fstrs_from_ctrl_event(Arena *arena, CTRL_Event *event) String8 exception_info_string = push_str8f(arena, "Access violation writing to address 0x%I64x", event->vaddr_rng.min); dr_fstrs_push_new(arena, &fstrs, ¶ms, exception_info_string); }break; - case CTRL_ExceptionKind_MemoryExecute: + case D_ExceptionKind_MemoryExecute: { dr_fstrs_concat_in_place(&fstrs, &thread_fstrs); dr_fstrs_push_new(arena, &fstrs, ¶ms, str8_lit(" ")); @@ -9710,7 +9710,7 @@ rd_stop_explanation_fstrs_from_ctrl_event(Arena *arena, CTRL_Event *event) }break; //- rjf: trap - case CTRL_EventCause_InterruptedByTrap: + case D_EventCause_InterruptedByTrap: { dr_fstrs_push_new(arena, &fstrs, ¶ms, rd_icon_kind_text_table[RD_IconKind_WarningBig], .font = rd_font_from_slot(RD_FontSlot_Icons), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Icons)); dr_fstrs_push_new(arena, &fstrs, ¶ms, str8_lit(" ")); @@ -9719,7 +9719,7 @@ rd_stop_explanation_fstrs_from_ctrl_event(Arena *arena, CTRL_Event *event) }break; //- rjf: halt - case CTRL_EventCause_InterruptedByHalt: + case D_EventCause_InterruptedByHalt: { dr_fstrs_push_new(arena, &fstrs, ¶ms, rd_icon_kind_text_table[RD_IconKind_Pause], .font = rd_font_from_slot(RD_FontSlot_Icons), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Icons)); dr_fstrs_push_new(arena, &fstrs, ¶ms, str8_lit(" Halted")); @@ -11045,7 +11045,7 @@ rd_frame(void) ////////////////////////////// //- rjf: loop - consume events in core, tick engine, and repeat // - CTRL_Handle find_thread_retry = {0}; + D_Handle find_thread_retry = {0}; RD_Cmd *cmd = 0; ProfScope("loop - consume events in core, tick engine, and repeat") for(U64 cmd_process_loop_idx = 0; cmd_process_loop_idx < 3; cmd_process_loop_idx += 1) { @@ -11102,12 +11102,12 @@ rd_frame(void) //- rjf: unpack basic evaluation context // ProfBegin("unpack eval-dependent info"); - CTRL_Entity *process = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->process); - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); + D_Entity *process = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->process); + D_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); Arch arch = thread->arch; U64 unwind_count = rd_regs()->unwind_count; U64 rip_vaddr = d_query_cached_rip_from_thread_unwind(thread, unwind_count); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, rip_vaddr); + D_Entity *module = ctrl_module_from_process_vaddr(process, rip_vaddr); U64 rip_voff = ctrl_voff_from_vaddr(module, rip_vaddr); U64 tls_root_vaddr = ctrl_tls_root_vaddr_from_thread(&d_user_state->ctrl_entity_store->ctx, thread->handle); ProfEnd(); @@ -11132,7 +11132,7 @@ rd_frame(void) //////////////////////////// //- rjf: produce all eval modules // - CTRL_EntityArray all_modules = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Module); + D_EntityArray all_modules = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Module); U64 eval_modules_count = Max(1, all_modules.count); E_Module *eval_modules = push_array(scratch.arena, E_Module, eval_modules_count); E_Module *eval_modules_primary = &eval_modules[0]; @@ -11141,7 +11141,7 @@ rd_frame(void) { for EachIndex(eval_module_idx, all_modules.count) { - CTRL_Entity *m = all_modules.v[eval_module_idx]; + D_Entity *m = all_modules.v[eval_module_idx]; DI_Key dbgi_key = ctrl_dbgi_key_from_module(m); // rjf: dbgi key -> eval dbg info num @@ -11163,7 +11163,7 @@ rd_frame(void) eval_modules[eval_module_idx].vaddr_range = m->vaddr_range; eval_modules[eval_module_idx].arch = m->arch; eval_modules[eval_module_idx].dbg_info_num = dbg_info_num; - eval_modules[eval_module_idx].space = rd_eval_space_from_ctrl_entity(ctrl_entity_ancestor_from_kind(m, CTRL_EntityKind_Process), CTRL_EvalSpaceKind_Entity); + eval_modules[eval_module_idx].space = rd_eval_space_from_ctrl_entity(ctrl_entity_ancestor_from_kind(m, D_EntityKind_Process), D_EvalSpaceKind_Entity); if(module == m) { eval_modules_primary = &eval_modules[eval_module_idx]; @@ -11187,8 +11187,8 @@ rd_frame(void) //- rjf: fill instruction pointer info ctx->thread_ip_vaddr = rip_vaddr; ctx->thread_ip_voff = rip_voff; - ctx->thread_reg_space = rd_eval_space_from_ctrl_entity(thread, CTRL_EvalSpaceKind_Entity); - ctx->thread_process_space= rd_eval_space_from_ctrl_entity(process, CTRL_EvalSpaceKind_Entity); + ctx->thread_reg_space = rd_eval_space_from_ctrl_entity(thread, D_EvalSpaceKind_Entity); + ctx->thread_process_space= rd_eval_space_from_ctrl_entity(process, D_EvalSpaceKind_Entity); ctx->thread_arch = thread->arch; ctx->thread_unwind_count = unwind_count; @@ -11513,12 +11513,12 @@ rd_frame(void) for EachElement(idx, evallable_ctrl_names) { String8 name = evallable_ctrl_names[idx]; - CTRL_EntityKind kind = ctrl_entity_kind_from_string(name); - CTRL_EntityArray array = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, kind); + D_EntityKind kind = ctrl_entity_kind_from_string(name); + D_EntityArray array = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, kind); E_TypeKey type_key = e_string2typekey_map_lookup(rd_state->meta_name2type_map, name); for EachIndex(idx, array.count) { - CTRL_Entity *entity = array.v[idx]; + D_Entity *entity = array.v[idx]; E_Space space = rd_eval_space_from_ctrl_entity(entity, RD_EvalSpaceKind_MetaCtrlEntity); E_Expr *expr = e_push_expr(scratch.arena, E_ExprKind_LeafOffset, r1u64(0, 0)); expr->space = space; @@ -11528,19 +11528,19 @@ rd_frame(void) { e_string2expr_map_insert(scratch.arena, macro_map, entity->string, expr); } - if(kind == CTRL_EntityKind_Machine && entity->handle.machine_id == CTRL_MachineID_Local) + if(kind == D_EntityKind_Machine && entity->handle.machine_id == D_MachineID_Local) { e_string2expr_map_insert(scratch.arena, macro_map, str8_lit("local_machine"), expr); } - if(kind == CTRL_EntityKind_Thread && ctrl_handle_match(rd_base_regs()->thread, entity->handle)) + if(kind == D_EntityKind_Thread && ctrl_handle_match(rd_base_regs()->thread, entity->handle)) { e_string2expr_map_insert(scratch.arena, macro_map, str8_lit("current_thread"), expr); } - if(kind == CTRL_EntityKind_Process && ctrl_handle_match(rd_base_regs()->process, entity->handle)) + if(kind == D_EntityKind_Process && ctrl_handle_match(rd_base_regs()->process, entity->handle)) { e_string2expr_map_insert(scratch.arena, macro_map, str8_lit("current_process"), expr); } - if(kind == CTRL_EntityKind_Module && ctrl_handle_match(rd_base_regs()->module, entity->handle)) + if(kind == D_EntityKind_Module && ctrl_handle_match(rd_base_regs()->module, entity->handle)) { e_string2expr_map_insert(scratch.arena, macro_map, str8_lit("current_module"), expr); } @@ -11880,12 +11880,12 @@ rd_frame(void) //- rjf: gather config from loaded modules // CFG_NodePtrList immediate_type_views = {0}; - CTRL_EntityArray modules = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Module); + D_EntityArray modules = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Module); ProfScope("gather config from loaded modules") { for EachIndex(idx, modules.count) { - CTRL_Entity *module = modules.v[idx]; + D_Entity *module = modules.v[idx]; String8 raddbg_data = ctrl_raddbg_data_from_module(scratch.arena, module->handle); U8 split_char = 0; String8List raddbg_data_text_parts = str8_split(scratch.arena, raddbg_data, &split_char, 1, 0); @@ -12001,7 +12001,7 @@ rd_frame(void) E_InterpretCtx *ctx = interpret_ctx; ctx->primary_space = eval_modules_primary->space; ctx->reg_arch = eval_modules_primary->arch; - ctx->reg_space = rd_eval_space_from_ctrl_entity(thread, CTRL_EvalSpaceKind_Entity); + ctx->reg_space = rd_eval_space_from_ctrl_entity(thread, D_EvalSpaceKind_Entity); ctx->reg_unwind_count = unwind_count; ctx->module_base = push_array(scratch.arena, U64, 1); ctx->module_base[0] = module->vaddr_range.min; @@ -12072,7 +12072,7 @@ rd_frame(void) case RD_CmdKind_Restart: { // rjf: reset hit counts - CTRL_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Process); + D_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Process); if(processes.count == 0 || kind == RD_CmdKind_Restart) { CFG_NodePtrList bps = cfg_node_top_level_list_from_string(scratch.arena, str8_lit("breakpoint")); @@ -12292,7 +12292,7 @@ rd_frame(void) { // rjf: if control processes are live, but this is not force-confirmed, then // get confirmation from user - CTRL_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Process); + D_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Process); UI_Key key = ui_key_from_string(ui_key_zero(), str8_lit("lossy_exit_confirmation")); if(processes.count != 0 && !rd_regs()->force_confirm && !ui_key_match(rd_state->popup_key, key)) { @@ -13679,19 +13679,19 @@ rd_frame(void) //- rjf: source <-> disasm case RD_CmdKind_GoToDisassembly: { - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); + D_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); U64 vaddr = 0; for(D_LineNode *n = rd_regs()->lines.first; n != 0; n = n->next) { - CTRL_EntityList modules = ctrl_modules_from_dbgi_key(scratch.arena, &d_user_state->ctrl_entity_store->ctx, n->v.dbgi_key); - CTRL_Entity *module = ctrl_module_from_thread_candidates(&d_user_state->ctrl_entity_store->ctx, thread, &modules); - if(module != &ctrl_entity_nil) + D_EntityList modules = ctrl_modules_from_dbgi_key(scratch.arena, &d_user_state->ctrl_entity_store->ctx, n->v.dbgi_key); + D_Entity *module = ctrl_module_from_thread_candidates(&d_user_state->ctrl_entity_store->ctx, thread, &modules); + if(module != &d_entity_nil) { vaddr = ctrl_vaddr_from_voff(module, n->v.voff_range.min); break; } } - rd_cmd(RD_CmdKind_FindCodeLocation, .process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process)->handle, .vaddr = vaddr, .prefer_disasm = 1); + rd_cmd(RD_CmdKind_FindCodeLocation, .process = ctrl_entity_ancestor_from_kind(thread, D_EntityKind_Process)->handle, .vaddr = vaddr, .prefer_disasm = 1); }break; case RD_CmdKind_GoToSource: { @@ -13967,12 +13967,12 @@ rd_frame(void) Access *access = access_open(); //- rjf: unpack thread info - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); + D_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); U64 unwind_index = rd_regs()->unwind_count; U64 inline_depth = rd_regs()->inline_depth; U64 rip_vaddr = d_query_cached_rip_from_thread_unwind(thread, unwind_index); - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, rip_vaddr); + D_Entity *process = ctrl_entity_ancestor_from_kind(thread, D_EntityKind_Process); + D_Entity *module = ctrl_module_from_process_vaddr(process, rip_vaddr); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); RDI_Parsed *rdi = di_rdi_from_key(access, dbgi_key, 0, 0); U64 rip_voff = ctrl_voff_from_vaddr(module, rip_vaddr); @@ -13993,7 +13993,7 @@ rd_frame(void) B32 dbgi_missing = (di_key_match(di_key_zero(), dbgi_key)); B32 dbgi_pending = !dbgi_missing && rdi == &rdi_parsed_nil; B32 has_line_info = (line.voff_range.max != 0); - B32 has_module = (module != &ctrl_entity_nil); + B32 has_module = (module != &d_entity_nil); B32 has_dbg_info = has_module && !dbgi_missing; //- rjf: find-code-location on each affected window @@ -14031,7 +14031,7 @@ rd_frame(void) }break; case RD_CmdKind_FindSelectedThread: { - CTRL_Entity *selected_thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_base_regs()->thread); + D_Entity *selected_thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_base_regs()->thread); rd_cmd(RD_CmdKind_FindThread, .thread = selected_thread->handle, .unwind_count = rd_base_regs()->unwind_count, @@ -14138,12 +14138,12 @@ rd_frame(void) D_LineList lines = d_lines_from_dbgi_key_voff(scratch.arena, voff_dbgi_key, voff); if(lines.first != 0) { - CTRL_Entity *process = &ctrl_entity_nil; + D_Entity *process = &d_entity_nil; U64 vaddr = 0; - CTRL_EntityList modules = ctrl_modules_from_dbgi_key(scratch.arena, &d_user_state->ctrl_entity_store->ctx, voff_dbgi_key); - CTRL_Entity *module = ctrl_entity_list_first(&modules); - process = ctrl_entity_ancestor_from_kind(module, CTRL_EntityKind_Process); - if(process != &ctrl_entity_nil) + D_EntityList modules = ctrl_modules_from_dbgi_key(scratch.arena, &d_user_state->ctrl_entity_store->ctx, voff_dbgi_key); + D_Entity *module = ctrl_entity_list_first(&modules); + process = ctrl_entity_ancestor_from_kind(module, D_EntityKind_Process); + if(process != &d_entity_nil) { vaddr = module->vaddr_range.min + lines.first->v.voff_range.min; } @@ -14212,8 +14212,8 @@ rd_frame(void) //- rjf: grab things to find. path * point, process * address, etc. String8 file_path = {0}; TxtPt point = {0}; - CTRL_Entity *thread = &ctrl_entity_nil; - CTRL_Entity *process = &ctrl_entity_nil; + D_Entity *thread = &d_entity_nil; + D_Entity *process = &d_entity_nil; U64 vaddr = 0; B32 require_disasm_snap = 0; B32 prefer_new_tab = 0; @@ -14237,8 +14237,8 @@ rd_frame(void) D_LineList lines = d_lines_from_file_path_line_num(scratch.arena, file_path, point.line); for(D_LineNode *n = lines.first; n != 0; n = n->next) { - CTRL_EntityList modules = ctrl_modules_from_dbgi_key(scratch.arena, &d_user_state->ctrl_entity_store->ctx, n->v.dbgi_key); - CTRL_Entity *module = ctrl_module_from_thread_candidates(&d_user_state->ctrl_entity_store->ctx, thread, &modules); + D_EntityList modules = ctrl_modules_from_dbgi_key(scratch.arena, &d_user_state->ctrl_entity_store->ctx, n->v.dbgi_key); + D_Entity *module = ctrl_module_from_thread_candidates(&d_user_state->ctrl_entity_store->ctx, thread, &modules); vaddr = ctrl_vaddr_from_voff(module, n->v.voff_range.min); break; } @@ -14750,7 +14750,7 @@ rd_frame(void) } // rjf: snap to disasm - if(process != &ctrl_entity_nil && vaddr != 0 && disasm_dst_panel != &cfg_nil_panel_node) + if(process != &d_entity_nil && vaddr != 0 && disasm_dst_panel != &cfg_nil_panel_node) { CFG_PanelNode *dst_panel = disasm_dst_panel; @@ -15441,7 +15441,7 @@ rd_frame(void) }break; case RD_CmdKind_SetNextStatement: { - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); + D_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); String8 file_path = rd_regs()->file_path; U64 new_rip_vaddr = rd_regs()->vaddr_range.min; if(file_path.size != 0) @@ -15449,9 +15449,9 @@ rd_frame(void) D_LineList *lines = &rd_regs()->lines; for(D_LineNode *n = lines->first; n != 0; n = n->next) { - CTRL_EntityList modules = ctrl_modules_from_dbgi_key(scratch.arena, &d_user_state->ctrl_entity_store->ctx, n->v.dbgi_key); - CTRL_Entity *module = ctrl_module_from_thread_candidates(&d_user_state->ctrl_entity_store->ctx, thread, &modules); - if(module != &ctrl_entity_nil) + D_EntityList modules = ctrl_modules_from_dbgi_key(scratch.arena, &d_user_state->ctrl_entity_store->ctx, n->v.dbgi_key); + D_Entity *module = ctrl_module_from_thread_candidates(&d_user_state->ctrl_entity_store->ctx, thread, &modules); + if(module != &d_entity_nil) { new_rip_vaddr = ctrl_vaddr_from_voff(module, n->v.voff_range.min); break; @@ -15566,10 +15566,10 @@ rd_frame(void) }break; case RD_CmdKind_SelectThread: { - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, ctrl_rip_from_thread(&d_user_state->ctrl_entity_store->ctx, thread->handle)); - CTRL_Entity *machine = ctrl_entity_ancestor_from_kind(process, CTRL_EntityKind_Machine); + D_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); + D_Entity *process = ctrl_entity_ancestor_from_kind(thread, D_EntityKind_Process); + D_Entity *module = ctrl_module_from_process_vaddr(process, ctrl_rip_from_thread(&d_user_state->ctrl_entity_store->ctx, thread->handle)); + D_Entity *machine = ctrl_entity_ancestor_from_kind(process, D_EntityKind_Machine); rd_state->base_regs.v.unwind_count = 0; rd_state->base_regs.v.inline_depth = 0; rd_state->base_regs.v.thread = thread->handle; @@ -15581,9 +15581,9 @@ rd_frame(void) case RD_CmdKind_SelectUnwind: { Access *access = access_open(); - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_base_regs()->thread); - CTRL_CallStack call_stack = ctrl_call_stack_from_thread(access, thread->handle, 1, os_now_microseconds()+10000); - CTRL_CallStackFrame *frame = ctrl_call_stack_frame_from_unwind_and_inline_depth(&call_stack, rd_regs()->unwind_count, rd_regs()->inline_depth); + D_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_base_regs()->thread); + D_CallStack call_stack = ctrl_call_stack_from_thread(access, thread->handle, 1, os_now_microseconds()+10000); + D_CallStackFrame *frame = ctrl_call_stack_frame_from_unwind_and_inline_depth(&call_stack, rd_regs()->unwind_count, rd_regs()->inline_depth); if(frame == 0) { frame = ctrl_call_stack_frame_from_unwind_and_inline_depth(&call_stack, rd_regs()->unwind_count, 0); @@ -15600,10 +15600,10 @@ rd_frame(void) case RD_CmdKind_DownOneFrame: { Access *access = access_open(); - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_base_regs()->thread); - CTRL_CallStack call_stack = ctrl_call_stack_from_thread(access, thread->handle, 1, os_now_microseconds()+10000); - CTRL_CallStackFrame *current_frame = ctrl_call_stack_frame_from_unwind_and_inline_depth(&call_stack, rd_regs()->unwind_count, rd_regs()->inline_depth); - CTRL_CallStackFrame *next_frame = current_frame; + D_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_base_regs()->thread); + D_CallStack call_stack = ctrl_call_stack_from_thread(access, thread->handle, 1, os_now_microseconds()+10000); + D_CallStackFrame *current_frame = ctrl_call_stack_frame_from_unwind_and_inline_depth(&call_stack, rd_regs()->unwind_count, rd_regs()->inline_depth); + D_CallStackFrame *next_frame = current_frame; if(current_frame != 0) switch(kind) { default:{}break; @@ -15620,7 +15620,7 @@ rd_frame(void) } if(next_frame != 0) { - CTRL_CallStackFrame *next_base_frame = next_frame + next_frame->inline_depth; + D_CallStackFrame *next_base_frame = next_frame + next_frame->inline_depth; rd_cmd(RD_CmdKind_SelectUnwind, .unwind_count = next_frame->unwind_count, .inline_depth = next_frame->inline_depth); @@ -16300,9 +16300,9 @@ rd_frame(void) //////////////////////////// //- rjf: gather exception code filters // - U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64] = {0}; + U64 exception_code_filters[(D_ExceptionCodeKind_COUNT+63)/64] = {0}; { - for EachNonZeroEnumVal(CTRL_ExceptionCodeKind, k) + for EachNonZeroEnumVal(D_ExceptionCodeKind, k) { String8 name = ctrl_exception_code_kind_lowercase_code_string_table[k]; B32 setting = rd_setting_b32_from_name(name); @@ -16317,6 +16317,7 @@ rd_frame(void) //- rjf: tick debug engine // U64 cmd_count_pre_tick = rd_state->cmds[0].count; + B32 soft_halt_issued = d_user_state->ctrl_soft_halt_issued; D_EventList engine_events = d_tick(scratch.arena, &targets, &breakpoints, &path_maps, exception_code_filters); //////////////////////////// @@ -16328,10 +16329,10 @@ rd_frame(void) switch(evt->kind) { default:{}break; - case D_EventKind_ModuleLoad: + case D_EventKind_NewModule: { - CTRL_Entity *module = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, evt->module); - CTRL_Entity *debug_info_path = ctrl_entity_child_from_kind(module, CTRL_EntityKind_DebugInfoPath); + D_Entity *module = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, evt->entity); + D_Entity *debug_info_path = ctrl_entity_child_from_kind(module, D_EntityKind_DebugInfoPath); String8 new_path = debug_info_path->string; if(new_path.size != 0 && os_file_path_exists(new_path)) { @@ -16365,54 +16366,54 @@ rd_frame(void) } } }break; - case D_EventKind_ProcessEnd: + case D_EventKind_EndProc: if(rd_state->quit_after_success) { - CTRL_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Process); - if(evt->code == 0 && processes.count == 0) + D_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Process); + if(evt->u64_code == 0 && processes.count == 0) { rd_cmd(RD_CmdKind_Exit); } - else if(evt->code != 0) + else if(evt->u64_code != 0) { rd_state->quit_after_success = 0; } }break; - case D_EventKind_Stop: + case D_EventKind_Stopped: { - B32 need_refocus = (evt->cause != D_EventCause_SoftHalt); - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, evt->thread); - U64 vaddr = evt->vaddr; - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, vaddr); + B32 need_refocus = (evt->cause != D_EventCause_InterruptedByHalt || !soft_halt_issued); + D_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, evt->entity); + U64 vaddr = evt->rip_vaddr; + D_Entity *process = ctrl_entity_ancestor_from_kind(thread, D_EntityKind_Process); + D_Entity *module = ctrl_module_from_process_vaddr(process, vaddr); U64 voff = ctrl_voff_from_vaddr(module, vaddr); U64 test_cached_vaddr = ctrl_rip_from_thread(&d_user_state->ctrl_entity_store->ctx, thread->handle); // rjf: valid stop thread? -> select & snap - if(need_refocus && thread != &ctrl_entity_nil && evt->cause != D_EventCause_Halt) + if(need_refocus && thread != &d_entity_nil && evt->cause != D_EventCause_InterruptedByHalt) { rd_cmd(RD_CmdKind_SelectThread, .thread = thread->handle); } // rjf: no stop-causing thread, but have selected thread? -> snap to selected - CTRL_Entity *selected_thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_base_regs()->thread); - if(need_refocus && (evt->cause == D_EventCause_Halt || thread == &ctrl_entity_nil) && selected_thread != &ctrl_entity_nil) + D_Entity *selected_thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_base_regs()->thread); + if(need_refocus && (evt->cause == D_EventCause_InterruptedByHalt || thread == &d_entity_nil) && selected_thread != &d_entity_nil) { rd_cmd(RD_CmdKind_SelectThread, .thread = selected_thread->handle); } // rjf: no stop-causing thread, but don't have selected thread? -> snap to first available thread - if(need_refocus && thread == &ctrl_entity_nil && selected_thread == &ctrl_entity_nil) + if(need_refocus && thread == &d_entity_nil && selected_thread == &d_entity_nil) { - CTRL_EntityArray threads = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Thread); - CTRL_Entity *first_available_thread = ctrl_entity_array_first(&threads); + D_EntityArray threads = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Thread); + D_Entity *first_available_thread = ctrl_entity_array_first(&threads); rd_cmd(RD_CmdKind_SelectThread, .thread = first_available_thread->handle); } // rjf: increment breakpoint hit counts if(evt->cause == D_EventCause_UserBreakpoint) { - CFG_Node *bp = cfg_node_from_id(evt->id); + CFG_Node *bp = cfg_node_from_id(evt->u64_code); if(bp != &cfg_nil_node) { CFG_Node *hit_count_root = cfg_node_child_from_string_or_alloc(rd_state->cfg, bp, str8_lit("hit_count")); @@ -16424,7 +16425,7 @@ rd_frame(void) } // rjf: focus window if none focused, and if we have a thread to snap to - if(need_refocus && (selected_thread != &ctrl_entity_nil || thread != &ctrl_entity_nil)) + if(need_refocus && (selected_thread != &d_entity_nil || thread != &d_entity_nil)) { B32 any_window_is_focused = 0; for(RD_WindowState *ws = rd_state->first_window_state; ws != &rd_nil_window_state; ws = ws->order_next) diff --git a/src/raddbg/raddbg_core.h b/src/raddbg/raddbg_core.h index 03a579fa..5a458139 100644 --- a/src/raddbg/raddbg_core.h +++ b/src/raddbg/raddbg_core.h @@ -10,7 +10,7 @@ typedef U64 RD_EvalSpaceKind; enum { - RD_EvalSpaceKind_MetaQuery = CTRL_EvalSpaceKind_FirstUserDefined, + RD_EvalSpaceKind_MetaQuery = D_EvalSpaceKind_FirstUserDefined, RD_EvalSpaceKind_MetaCfg, RD_EvalSpaceKind_MetaCmd, RD_EvalSpaceKind_MetaTheme, @@ -638,8 +638,8 @@ internal String8List rd_possible_overrides_from_file_path(Arena *arena, String8 //////////////////////////////// //~ rjf: Control Entity Info Extraction -internal Vec4F32 rd_color_from_ctrl_entity(CTRL_Entity *entity); -internal String8 rd_name_from_ctrl_entity(Arena *arena, CTRL_Entity *entity); +internal Vec4F32 rd_color_from_ctrl_entity(D_Entity *entity); +internal String8 rd_name_from_ctrl_entity(Arena *arena, D_Entity *entity); //////////////////////////////// //~ rjf: Evaluation Spaces @@ -649,8 +649,8 @@ internal CFG_Node *rd_cfg_from_eval_space(E_Space space); internal E_Space rd_eval_space_from_cfg(CFG_Node *cfg); //- rjf: ctrl entity <-> eval space -internal CTRL_Entity *rd_ctrl_entity_from_eval_space(E_Space space); -internal E_Space rd_eval_space_from_ctrl_entity(CTRL_Entity *entity, E_SpaceKind kind); +internal D_Entity *rd_ctrl_entity_from_eval_space(E_Space space); +internal E_Space rd_eval_space_from_ctrl_entity(D_Entity *entity, E_SpaceKind kind); //- rjf: command name <-> eval space internal String8 rd_cmd_name_from_eval(E_Eval eval); @@ -766,7 +766,7 @@ internal FNT_RasterFlags rd_raster_flags_from_slot(RD_FontSlot slot); //~ rjf: Process Control Info Stringification internal String8 rd_string_from_exception_code(U32 code); -internal DR_FStrList rd_stop_explanation_fstrs_from_ctrl_event(Arena *arena, CTRL_Event *event); +internal DR_FStrList rd_stop_explanation_fstrs_from_ctrl_event(Arena *arena, D_Event *event); //////////////////////////////// //~ rjf: Vocab Info Lookups diff --git a/src/raddbg/raddbg_eval.c b/src/raddbg/raddbg_eval.c index 0f03eeff..91c4fe58 100644 --- a/src/raddbg/raddbg_eval.c +++ b/src/raddbg/raddbg_eval.c @@ -205,7 +205,7 @@ E_TYPE_EXPAND_RANGE_FUNCTION_DEF(locals) E_TYPE_EXPAND_INFO_FUNCTION_DEF(registers) { Temp scratch = scratch_begin(&arena, 1); - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); + D_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); Arch arch = thread->arch; U64 reg_count = regs_reg_code_count_from_arch(arch); String8 *reg_strings = regs_reg_code_string_table_from_arch(arch); @@ -246,7 +246,7 @@ typedef struct RD_SchemaIRExt RD_SchemaIRExt; struct RD_SchemaIRExt { CFG_Node *cfg; - CTRL_Entity *entity; + D_Entity *entity; MD_NodePtrList schemas; }; @@ -290,7 +290,7 @@ E_TYPE_ACCESS_FUNCTION_DEF(schema) if(child_schema != &md_nil_node) { CFG_Node *cfg = ext->cfg; - CTRL_Entity *entity = ext->entity; + D_Entity *entity = ext->entity; CFG_Node *child = cfg_node_child_from_string(cfg, child_schema->string); E_TypeKey child_type_key = zero_struct; B32 wrap_child_w_meta_expr = 0; @@ -299,17 +299,17 @@ E_TYPE_ACCESS_FUNCTION_DEF(schema) if(0){} //- rjf: ctrl entity members - else if(entity != &ctrl_entity_nil && str8_match(child_schema->string, str8_lit("label"), 0)) + else if(entity != &d_entity_nil && str8_match(child_schema->string, str8_lit("label"), 0)) { child_type_key = e_type_key_cons_array(e_type_key_basic(E_TypeKind_U8), entity->string.size, type_flags|E_TypeFlag_IsCodeText); } - else if(entity != &ctrl_entity_nil && str8_match(child_schema->string, str8_lit("exe"), 0)) + else if(entity != &d_entity_nil && str8_match(child_schema->string, str8_lit("exe"), 0)) { child_type_key = e_type_key_cons_array(e_type_key_basic(E_TypeKind_U8), entity->string.size, type_flags|E_TypeFlag_IsPathText); } - else if(entity != &ctrl_entity_nil && str8_match(child_schema->string, str8_lit("dbg"), 0)) + else if(entity != &d_entity_nil && str8_match(child_schema->string, str8_lit("dbg"), 0)) { - CTRL_Entity *dbg = ctrl_entity_child_from_kind(entity, CTRL_EntityKind_DebugInfoPath); + D_Entity *dbg = ctrl_entity_child_from_kind(entity, D_EntityKind_DebugInfoPath); child_type_key = e_type_key_cons_array(e_type_key_basic(E_TypeKind_U8), dbg->string.size, type_flags|E_TypeFlag_IsPathText); } @@ -658,8 +658,8 @@ E_TYPE_ACCESS_FUNCTION_DEF(control) if(rhs->kind == E_ExprKind_LeafIdentifier && str8_match(str8_prefix(rhs->string, 1), str8_lit("$"), 0)) { - CTRL_Handle handle = ctrl_handle_from_string(rhs->string); - CTRL_Entity *entity = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, handle); + D_Handle handle = ctrl_handle_from_string(rhs->string); + D_Entity *entity = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, handle); E_Space space = rd_eval_space_from_ctrl_entity(entity, RD_EvalSpaceKind_MetaCtrlEntity); result.root = e_irtree_set_space(arena, space, e_irtree_const_u(arena, 0)); result.type_key = e_string2typekey_map_lookup(rd_state->meta_name2type_map, ctrl_entity_kind_code_name_table[entity->kind]); @@ -942,8 +942,8 @@ typedef struct RD_CallStackAccel RD_CallStackAccel; struct RD_CallStackAccel { Arch arch; - CTRL_Handle process; - CTRL_CallStack call_stack; + D_Handle process; + D_CallStack call_stack; }; E_TYPE_IREXT_FUNCTION_DEF(call_stack) @@ -954,8 +954,8 @@ E_TYPE_IREXT_FUNCTION_DEF(call_stack) E_OpList oplist = e_oplist_from_irtree(scratch.arena, irtree->root); String8 bytecode = e_bytecode_from_oplist(scratch.arena, &oplist); E_Interpretation interp = e_interpret(bytecode); - CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(interp.space); - if(entity->kind == CTRL_EntityKind_Thread) + D_Entity *entity = rd_ctrl_entity_from_eval_space(interp.space); + if(entity->kind == D_EntityKind_Thread) { B32 call_stack_high_priority = ctrl_handle_match(entity->handle, rd_base_regs()->thread); accel->arch = entity->arch; @@ -975,12 +975,12 @@ E_TYPE_ACCESS_FUNCTION_DEF(call_stack) { RD_CallStackAccel *accel = (RD_CallStackAccel *)lhs_irtree->user_data; E_Value rhs_value = e_value_from_expr(expr->first->next); - CTRL_CallStack *call_stack = &accel->call_stack; + D_CallStack *call_stack = &accel->call_stack; if(0 <= rhs_value.u64 && rhs_value.u64 < call_stack->frames_count) { - CTRL_Entity *process = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, accel->process); - CTRL_CallStackFrame *f = &call_stack->frames[rhs_value.u64]; - result.root = e_irtree_set_space(arena, rd_eval_space_from_ctrl_entity(process, CTRL_EvalSpaceKind_Entity), e_irtree_const_u(arena, regs_rip_from_arch_block(accel->arch, f->regs))); + D_Entity *process = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, accel->process); + D_CallStackFrame *f = &call_stack->frames[rhs_value.u64]; + result.root = e_irtree_set_space(arena, rd_eval_space_from_ctrl_entity(process, D_EvalSpaceKind_Entity), e_irtree_const_u(arena, regs_rip_from_arch_block(accel->arch, f->regs))); result.type_key = e_type_key_cons(.arch = process->arch, .kind = E_TypeKind_Ptr, .direct_key = e_type_key_basic(E_TypeKind_Function), .count = 1, .depth = f->inline_depth); result.mode = E_Mode_Value; } @@ -1369,7 +1369,7 @@ typedef struct RD_UnattachedProcessesAccel RD_UnattachedProcessesAccel; struct RD_UnattachedProcessesAccel { DMN_ProcessInfo *infos; - CTRL_Entity **machines; + D_Entity **machines; U64 infos_count; }; @@ -1401,10 +1401,10 @@ E_TYPE_ACCESS_FUNCTION_DEF(unattached_processes) E_OpList oplist = e_oplist_from_irtree(scratch.arena, lhs_irtree->root); String8 bytecode = e_bytecode_from_oplist(scratch.arena, &oplist); E_Interpretation interpret = e_interpret(bytecode); - CTRL_Entity *machine = rd_ctrl_entity_from_eval_space(interpret.space); + D_Entity *machine = rd_ctrl_entity_from_eval_space(interpret.space); // rjf: build evaluation for this unattached process - if(machine != &ctrl_entity_nil) + if(machine != &d_entity_nil) { E_IRNode *value_irnode = e_push_irnode(arena, RDI_EvalOp_ConstU128); value_irnode->value.u128.u64[0] = pid; @@ -1427,18 +1427,18 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(unattached_processes) Temp scratch = scratch_begin(&arena, 1); //- rjf: evaluate lhs machine, if we have one - CTRL_Entity *lhs_entity = rd_ctrl_entity_from_eval_space(eval.space); + D_Entity *lhs_entity = rd_ctrl_entity_from_eval_space(eval.space); //- rjf: gather all machines we're searching through - CTRL_EntityArray machines = {0}; - if(lhs_entity->kind == CTRL_EntityKind_Machine) + D_EntityArray machines = {0}; + if(lhs_entity->kind == D_EntityKind_Machine) { machines.v = &lhs_entity; machines.count = 1; } else { - machines = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Machine); + machines = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Machine); } //- rjf: gather system processes from this machine @@ -1446,7 +1446,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(unattached_processes) struct Node { Node *next; - CTRL_Entity *machine; + D_Entity *machine; DMN_ProcessInfo info; }; Node *first = 0; @@ -1454,7 +1454,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(unattached_processes) U64 count = 0; for EachIndex(idx, machines.count) { - CTRL_Entity *machine = machines.v[idx]; + D_Entity *machine = machines.v[idx]; DMN_ProcessIter iter = {0}; dmn_process_iter_begin(&iter); for(DMN_ProcessInfo info = {0}; dmn_process_iter_next(scratch.arena, &iter, &info);) @@ -1485,7 +1485,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(unattached_processes) //- rjf: list -> array U64 infos_count = count; DMN_ProcessInfo *infos = push_array(arena, DMN_ProcessInfo, infos_count); - CTRL_Entity **infos_machines = push_array(arena, CTRL_Entity *, infos_count); + D_Entity **infos_machines = push_array(arena, D_Entity *, infos_count); { U64 idx = 0; for(Node *n = first; n != 0; n = n->next, idx += 1) @@ -1515,7 +1515,7 @@ E_TYPE_EXPAND_RANGE_FUNCTION_DEF(unattached_processes) E_TypeKey unattached_process_type = e_type_key_cons(.kind = E_TypeKind_U128, .name = str8_lit("unattached_process")); for(U64 idx = idx_range.min; idx < idx_range.max; idx += 1, out_idx += 1) { - CTRL_Entity *machine = accel->machines[idx]; + D_Entity *machine = accel->machines[idx]; String8 string = ctrl_string_from_handle(arena, machine->handle); evals_out[out_idx] = e_eval_wrapf(eval, "query:control.%S.unattached_processes.$%I64x$%I64x", string, accel->infos[idx].pid, e_id_from_string(accel->infos[idx].name)); } @@ -1528,29 +1528,29 @@ E_TYPE_ACCESS_FUNCTION_DEF(ctrl_entities) { E_IRTreeAndType result = {&e_irnode_nil}; { - CTRL_Entity *entity = &ctrl_entity_nil; + D_Entity *entity = &d_entity_nil; switch(expr->kind) { case E_ExprKind_MemberAccess: { String8 rhs_name = expr->first->next->string; - CTRL_Handle handle = ctrl_handle_from_string(rhs_name); + D_Handle handle = ctrl_handle_from_string(rhs_name); entity = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, handle); }break; case E_ExprKind_ArrayIndex: { E_Type *type = e_type_from_key(lhs_irtree->type_key); - CTRL_EntityKind kind = ctrl_entity_kind_from_string(rd_singular_from_code_name_plural(type->name)); + D_EntityKind kind = ctrl_entity_kind_from_string(rd_singular_from_code_name_plural(type->name)); E_Value rhs_value = e_value_from_expr(expr->first->next); U64 rhs_idx = rhs_value.u64; - CTRL_EntityArray entities = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, kind); + D_EntityArray entities = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, kind); if(0 <= rhs_idx && rhs_idx < entities.count) { entity = entities.v[rhs_idx]; } }break; } - if(entity != &ctrl_entity_nil) + if(entity != &d_entity_nil) { E_Space space = rd_eval_space_from_ctrl_entity(entity, RD_EvalSpaceKind_MetaCtrlEntity); String8 name = ctrl_entity_kind_code_name_table[entity->kind]; @@ -1569,7 +1569,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(ctrl_entities) Temp scratch = scratch_begin(&arena, 1); { //- rjf: determine which entity we're looking under - CTRL_Entity *scoping_entity = &ctrl_entity_nil; + D_Entity *scoping_entity = &d_entity_nil; if(eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity) { scoping_entity = rd_ctrl_entity_from_eval_space(eval.space); @@ -1579,18 +1579,18 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(ctrl_entities) E_TypeKey lhs_type_key = eval.irtree.type_key; E_Type *lhs_type = e_type_from_key(lhs_type_key); String8 name = rd_singular_from_code_name_plural(lhs_type->name); - CTRL_EntityKind entity_kind = ctrl_entity_kind_from_string(name); + D_EntityKind entity_kind = ctrl_entity_kind_from_string(name); //- rjf: gather array of all entities which fit the bill - CTRL_EntityArray array = {0}; - if(scoping_entity == &ctrl_entity_nil) + D_EntityArray array = {0}; + if(scoping_entity == &d_entity_nil) { array = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, entity_kind); } else { - CTRL_EntityList list = {0}; - for(CTRL_Entity *child = scoping_entity->first; child != &ctrl_entity_nil; child = child->next) + D_EntityList list = {0}; + for(D_Entity *child = scoping_entity->first; child != &d_entity_nil; child = child->next) { if(child->kind == entity_kind) { @@ -1601,13 +1601,13 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(ctrl_entities) } //- rjf: filter the array - CTRL_EntityArray array__filtered = array; + D_EntityArray array__filtered = array; if(filter.size != 0) { - CTRL_EntityList list__filtered = {0}; + D_EntityList list__filtered = {0}; for EachIndex(idx, array.count) { - CTRL_Entity *entity = array.v[idx]; + D_Entity *entity = array.v[idx]; DR_FStrList fstrs = rd_title_fstrs_from_ctrl_entity(scratch.arena, entity, 1); String8 title_string = dr_string_from_fstrs(scratch.arena, &fstrs); FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, title_string); @@ -1620,7 +1620,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(ctrl_entities) } //- rjf: list -> array & fill - CTRL_EntityArray *accel = push_array(arena, CTRL_EntityArray, 1); + D_EntityArray *accel = push_array(arena, D_EntityArray, 1); *accel = array__filtered; result.user_data = accel; result.expr_count = accel->count; @@ -1631,14 +1631,14 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(ctrl_entities) E_TYPE_EXPAND_RANGE_FUNCTION_DEF(ctrl_entities) { - CTRL_EntityArray *entities = (CTRL_EntityArray *)user_data; + D_EntityArray *entities = (D_EntityArray *)user_data; Rng1U64 legal_range = r1u64(0, entities->count); Rng1U64 read_range = intersect_1u64(legal_range, idx_range); U64 read_count = dim_1u64(read_range); for(U64 out_idx = 0; out_idx < read_count; out_idx += 1) { Temp scratch = scratch_begin(&arena, 1); - CTRL_Entity *entity = entities->v[out_idx + read_range.min]; + D_Entity *entity = entities->v[out_idx + read_range.min]; evals_out[out_idx] = e_eval_from_stringf("query:control.%S", ctrl_string_from_handle(scratch.arena, entity->handle)); scratch_end(scratch); } @@ -1667,22 +1667,22 @@ E_TYPE_ACCESS_FUNCTION_DEF(call_stack_tree) typedef struct RD_CallStackTreeExpandAccel RD_CallStackTreeExpandAccel; struct RD_CallStackTreeExpandAccel { - CTRL_CallStackTreeNode *node; - CTRL_CallStackTreeNode **children; - CTRL_HandleArray threads; + D_CallStackTreeNode *node; + D_CallStackTreeNode **children; + D_HandleArray threads; }; E_TYPE_EXPAND_INFO_FUNCTION_DEF(call_stack_tree) { Access *access = access_open(); - CTRL_CallStackTree call_stack_tree = ctrl_call_stack_tree(access, 0); + D_CallStackTree call_stack_tree = ctrl_call_stack_tree(access, 0); access_close(access); RD_CallStackTreeExpandAccel *accel = push_array(arena, RD_CallStackTreeExpandAccel, 1); - accel->node = &ctrl_call_stack_tree_node_nil; + accel->node = &d_call_stack_tree_node_nil; U64 id = e_value_eval_from_eval(eval).value.u64; if(call_stack_tree.slots_count != 0) { - for(CTRL_CallStackTreeNode *n = call_stack_tree.slots[id%call_stack_tree.slots_count]; + for(D_CallStackTreeNode *n = call_stack_tree.slots[id%call_stack_tree.slots_count]; n != 0; n = n->hash_next) { @@ -1693,11 +1693,11 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(call_stack_tree) } } } - accel->children = push_array(arena, CTRL_CallStackTreeNode *, accel->node->child_count); + accel->children = push_array(arena, D_CallStackTreeNode *, accel->node->child_count); { U64 idx = 0; - for(CTRL_CallStackTreeNode *n = accel->node->first; - n != &ctrl_call_stack_tree_node_nil; + for(D_CallStackTreeNode *n = accel->node->first; + n != &d_call_stack_tree_node_nil; n = n->next, idx += 1) { accel->children[idx] = n; @@ -1713,7 +1713,7 @@ E_TYPE_EXPAND_RANGE_FUNCTION_DEF(call_stack_tree) { Temp scratch = scratch_begin(&arena, 1); RD_CallStackTreeExpandAccel *accel = (RD_CallStackTreeExpandAccel *)user_data; - CTRL_CallStackTreeNode *node = accel->node; + D_CallStackTreeNode *node = accel->node; U64 needed_row_count = dim_1u64(idx_range); for EachIndex(idx, needed_row_count) { diff --git a/src/raddbg/raddbg_main.c b/src/raddbg/raddbg_main.c index a5be5e98..7c3aa432 100644 --- a/src/raddbg/raddbg_main.c +++ b/src/raddbg/raddbg_main.c @@ -437,7 +437,7 @@ ipc_signaler_thread__entry_point(void *p) //////////////////////////////// //~ rjf: Ctrl -> Main Thread Wakeup Hook -internal CTRL_WAKEUP_FUNCTION_DEF(wakeup_hook_ctrl) +internal D_WAKEUP_FUNCTION_DEF(wakeup_hook_ctrl) { os_send_wakeup_event(); } diff --git a/src/raddbg/raddbg_views.c b/src/raddbg/raddbg_views.c index b2774480..aaa7d91f 100644 --- a/src/raddbg/raddbg_views.c +++ b/src/raddbg/raddbg_views.c @@ -44,8 +44,8 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla F32 scroll_bar_dim = floor_f32(main_font_size*1.5f); Vec2F32 code_area_dim = v2f32(panel_box_dim.x - scroll_bar_dim, panel_box_dim.y - scroll_bar_dim); S64 num_possible_visible_lines = (S64)(code_area_dim.y/code_line_height)+1; - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process); + D_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); + D_Entity *process = ctrl_entity_ancestor_from_kind(thread, D_EntityKind_Process); B32 do_line_numbers = rd_setting_b32_from_name(str8_lit("show_line_numbers")); ////////////////////////////// @@ -218,7 +218,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla code_slice_params.line_ranges = push_array(scratch.arena, Rng1U64, visible_line_count); code_slice_params.line_tokens = push_array(scratch.arena, TXT_TokenArray, visible_line_count); code_slice_params.line_bps = push_array(scratch.arena, CFG_NodePtrList, visible_line_count); - code_slice_params.line_ips = push_array(scratch.arena, CTRL_EntityList, visible_line_count); + code_slice_params.line_ips = push_array(scratch.arena, D_EntityList, visible_line_count); code_slice_params.line_pins = push_array(scratch.arena, CFG_NodePtrList, visible_line_count); code_slice_params.line_vaddrs = push_array(scratch.arena, U64, visible_line_count); code_slice_params.line_infos = push_array(scratch.arena, D_LineList, visible_line_count); @@ -277,17 +277,17 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla // rjf: find live threads mapping to source code if(!dasm_lines) ProfScope("find live threads mapping to this file") { - CTRL_Entity *selected_thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); - CTRL_EntityArray threads = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Thread); + D_Entity *selected_thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); + D_EntityArray threads = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Thread); for EachIndex(idx, threads.count) { - CTRL_Entity *thread = threads.v[idx]; - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process); + D_Entity *thread = threads.v[idx]; + D_Entity *process = ctrl_entity_ancestor_from_kind(thread, D_EntityKind_Process); U64 unwind_count = (thread == selected_thread) ? rd_regs()->unwind_count : 0; U64 inline_depth = (thread == selected_thread) ? rd_regs()->inline_depth : 0; U64 rip_vaddr = d_query_cached_rip_from_thread_unwind(thread, unwind_count); U64 last_inst_on_unwound_rip_vaddr = rip_vaddr - !!unwind_count; - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, last_inst_on_unwound_rip_vaddr); + D_Entity *module = ctrl_module_from_process_vaddr(process, last_inst_on_unwound_rip_vaddr); U64 rip_voff = ctrl_voff_from_vaddr(module, last_inst_on_unwound_rip_vaddr); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); D_LineList lines = d_lines_from_dbgi_key_voff(scratch.arena, dbgi_key, rip_voff); @@ -340,7 +340,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla if(!dasm_lines) ProfScope("find all src -> dasm info for source code") { String8 file_path = rd_regs()->file_path; - CTRL_Entity *module = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->module); + D_Entity *module = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->module); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); D_LineListArray lines_array = d_lines_array_from_dbgi_key_file_path_line_range(scratch.arena, dbgi_key, file_path, visible_line_num_range); if(lines_array.count != 0) @@ -353,14 +353,14 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla // rjf: find live threads mapping to disasm if(dasm_lines) ProfScope("find live threads mapping to this disassembly") { - CTRL_Entity *selected_thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); - CTRL_EntityArray threads = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Thread); + D_Entity *selected_thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); + D_EntityArray threads = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Thread); for EachIndex(idx, threads.count) { - CTRL_Entity *thread = threads.v[idx]; + D_Entity *thread = threads.v[idx]; U64 unwind_count = (thread == selected_thread) ? rd_regs()->unwind_count : 0; U64 rip_vaddr = d_query_cached_rip_from_thread_unwind(thread, unwind_count); - if(ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process) == process && contains_1u64(dasm_vaddr_range, rip_vaddr)) + if(ctrl_entity_ancestor_from_kind(thread, D_EntityKind_Process) == process && contains_1u64(dasm_vaddr_range, rip_vaddr)) { U64 rip_off = rip_vaddr - dasm_vaddr_range.min; S64 line_num = dasm_line_array_idx_from_code_off__linear_scan(dasm_lines, rip_off)+1; @@ -422,7 +422,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla // rjf: fill dasm -> src info if(dasm_lines) { - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, dasm_vaddr_range.min); + D_Entity *module = ctrl_module_from_process_vaddr(process, dasm_vaddr_range.min); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); for(S64 line_num = visible_line_num_range.min; line_num < visible_line_num_range.max; line_num += 1) { @@ -940,12 +940,12 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row) { RD_WatchRowInfo info = { - .module = &ctrl_entity_nil, + .module = &d_entity_nil, .can_expand = ev_row_is_expandable(row), .group_cfg_parent = &cfg_nil_node, .group_cfg_child = &cfg_nil_node, - .group_entity = &ctrl_entity_nil, - .callstack_thread = &ctrl_entity_nil, + .group_entity = &d_entity_nil, + .callstack_thread = &d_entity_nil, .view_ui_rule = &rd_nil_view_ui_rule, }; { @@ -963,7 +963,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row) E_TypeKind block_type_kind = e_type_kind_from_key(block_type_key); E_Type *block_type = e_type_from_key(block_type_key); CFG_Node *evalled_cfg = rd_cfg_from_eval_space(row->eval.space); - CTRL_Entity *evalled_entity = (row->eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity ? rd_ctrl_entity_from_eval_space(row->eval.space) : &ctrl_entity_nil); + D_Entity *evalled_entity = (row->eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity ? rd_ctrl_entity_from_eval_space(row->eval.space) : &d_entity_nil); //////////////////////////// //- rjf: determine if this cfg/entity evaluation is top-level - e.g. if we @@ -975,7 +975,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row) E_TypeKey top_level_type_key = e_string2typekey_map_lookup(rd_state->meta_name2type_map, evalled_cfg->string); is_top_level = (row->eval.value.u64 == 0 && e_type_key_match(top_level_type_key, row->eval.irtree.type_key)); } - if(evalled_entity != &ctrl_entity_nil) + if(evalled_entity != &d_entity_nil) { String8 top_level_name = ctrl_entity_kind_code_name_table[evalled_entity->kind]; E_TypeKey top_level_type_key = e_string2typekey_map_lookup(rd_state->meta_name2type_map, top_level_name); @@ -993,21 +993,21 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row) //////////////////////////// //- rjf: fill row's module // - if(row->eval.space.kind == CTRL_EvalSpaceKind_Entity) + if(row->eval.space.kind == D_EvalSpaceKind_Entity) { - CTRL_Entity *row_ctrl_entity = rd_ctrl_entity_from_eval_space(row->eval.space); + D_Entity *row_ctrl_entity = rd_ctrl_entity_from_eval_space(row->eval.space); switch(row_ctrl_entity->kind) { default: - case CTRL_EntityKind_Process: + case D_EntityKind_Process: if(row->eval.irtree.mode == E_Mode_Offset) { info.module = ctrl_module_from_process_vaddr(row_ctrl_entity, row->eval.value.u64); }break; - case CTRL_EntityKind_Thread: + case D_EntityKind_Thread: if(row->eval.irtree.mode == E_Mode_Value) { - CTRL_Entity *process = ctrl_process_from_entity(row_ctrl_entity); + D_Entity *process = ctrl_process_from_entity(row_ctrl_entity); info.module = ctrl_module_from_process_vaddr(process, d_query_cached_rip_from_thread(row_ctrl_entity)); }break; } @@ -1018,17 +1018,17 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row) // if(block_eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity && str8_match(str8_lit("call_stack"), block_type->name, 0)) { - CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(block_eval.space); - if(entity->kind == CTRL_EntityKind_Thread) + D_Entity *entity = rd_ctrl_entity_from_eval_space(block_eval.space); + if(entity->kind == D_EntityKind_Thread) { Access *access = access_open(); info.callstack_thread = entity; U64 frame_num = ev_block_num_from_id(block, key.child_id); B32 call_stack_high_priority = ctrl_handle_match(entity->handle, rd_base_regs()->thread); - CTRL_CallStack call_stack = ctrl_call_stack_from_thread(access, entity->handle, call_stack_high_priority, call_stack_high_priority ? rd_state->frame_eval_memread_endt_us : 0); + D_CallStack call_stack = ctrl_call_stack_from_thread(access, entity->handle, call_stack_high_priority, call_stack_high_priority ? rd_state->frame_eval_memread_endt_us : 0); if(1 <= frame_num && frame_num <= call_stack.frames_count) { - CTRL_CallStackFrame *f = &call_stack.frames[frame_num-1]; + D_CallStackFrame *f = &call_stack.frames[frame_num-1]; info.callstack_unwind_index = f->unwind_count; info.callstack_inline_depth = f->inline_depth; info.callstack_vaddr = regs_rip_from_arch_block(entity->arch, f->regs); @@ -1297,20 +1297,20 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row) //////////////////////////// //- rjf: @watch_row_build_cells ctrl entity evaluations // - else if(is_top_level && evalled_entity != &ctrl_entity_nil) + else if(is_top_level && evalled_entity != &d_entity_nil) { - CTRL_Entity *entity = evalled_entity; + D_Entity *entity = evalled_entity; rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented|RD_WatchCellFlag_Button, .pct = 1.f); - if(entity->kind == CTRL_EntityKind_Machine || - entity->kind == CTRL_EntityKind_Process || - entity->kind == CTRL_EntityKind_Thread) + if(entity->kind == D_EntityKind_Machine || + entity->kind == D_EntityKind_Process || + entity->kind == D_EntityKind_Thread) { rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, e_eval_wrapf(row->eval, "active"), .px = floor_f32(ui_top_font_size()*5.5f)); } - if(entity->kind == CTRL_EntityKind_Thread) + if(entity->kind == D_EntityKind_Thread) { RD_CmdKind cmd_kind = RD_CmdKind_SelectEntity; if(ctrl_handle_match(entity->handle, rd_base_regs()->thread)) @@ -1405,11 +1405,11 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row) //////////////////////////// //- rjf: @watch_row_build_cells call stack frames // - else if(info.callstack_thread != &ctrl_entity_nil) + else if(info.callstack_thread != &d_entity_nil) { info.cell_style_key = str8_lit("call_stack_frame"); - CTRL_Entity *process = ctrl_process_from_entity(info.callstack_thread); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, info.callstack_vaddr); + D_Entity *process = ctrl_process_from_entity(info.callstack_thread); + D_Entity *module = ctrl_module_from_process_vaddr(process, info.callstack_vaddr); E_Eval module_eval = e_eval_from_stringf("query:control.%S", ctrl_string_from_handle(scratch.arena, module->handle)); CFG_Node *view = cfg_node_from_id(rd_regs()->view); CFG_Node *style = cfg_node_child_from_string(view, info.cell_style_key); @@ -1418,7 +1418,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row) #define take_pct() (next_pct = (F32)f64_from_str8(w_cfg->string), w_cfg = w_cfg->next, next_pct) rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_CallStackFrame, row->eval, .default_pct = 0.05f, .pct = take_pct()); rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .default_pct = 0.75f, .pct = take_pct()); - rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, (module == &ctrl_entity_nil ? (E_Eval)zero_struct : module_eval), + rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, (module == &d_entity_nil ? (E_Eval)zero_struct : module_eval), .default_pct = 0.20f, .pct = take_pct()); #undef take_pct } @@ -1487,7 +1487,7 @@ rd_info_from_watch_row_cell(Arena *arena, EV_Row *row, EV_StringFlags string_fla .flags = cell->flags, .view_ui_rule = &rd_nil_view_ui_rule, .cfg = &cfg_nil_node, - .entity = &ctrl_entity_nil, + .entity = &d_entity_nil, }; ////////////////////////////// @@ -1600,7 +1600,7 @@ rd_info_from_watch_row_cell(Arena *arena, EV_Row *row, EV_StringFlags string_fla } //- rjf: entity evaluation -> button for entity - else if(result.entity != &ctrl_entity_nil) + else if(result.entity != &d_entity_nil) { result.expr_fstrs = rd_title_fstrs_from_ctrl_entity(arena, result.entity, 1); result.flags |= RD_WatchCellFlag_Button; @@ -1780,12 +1780,12 @@ rd_info_from_watch_row_cell(Arena *arena, EV_Row *row, EV_StringFlags string_fla string_params.flags |= EV_StringFlag_DisableStringQuotes|EV_StringFlag_DisableAddresses; } if(cell->eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity && - rd_ctrl_entity_from_eval_space(cell->eval.space)->kind == CTRL_EntityKind_Module) + rd_ctrl_entity_from_eval_space(cell->eval.space)->kind == D_EntityKind_Module) { string_params.radix = 16; } - if(cell->eval.space.kind == CTRL_EvalSpaceKind_Entity && - rd_ctrl_entity_from_eval_space(cell->eval.space)->kind == CTRL_EntityKind_Thread) + if(cell->eval.space.kind == D_EvalSpaceKind_Entity && + rd_ctrl_entity_from_eval_space(cell->eval.space)->kind == D_EntityKind_Thread) { string_params.radix = 16; } @@ -2099,7 +2099,7 @@ RD_VIEW_UI_FUNCTION_DEF(text) if(rd_regs()->lang_kind == TXT_LangKind_Null) { Access *access = access_open(); - CTRL_Entity *module = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->module); + D_Entity *module = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->module); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); RDI_Parsed *rdi = di_rdi_from_key(access, dbgi_key, 0, 0); if(rdi != &rdi_parsed_nil) @@ -2223,7 +2223,7 @@ RD_VIEW_UI_FUNCTION_DEF(text) // if(rd_regs()->file_path.size != 0) { - CTRL_Entity *module = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->module); + D_Entity *module = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->module); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); rd_regs()->lines = d_lines_from_dbgi_key_file_path_line_num(rd_frame_arena(), dbgi_key, rd_regs()->file_path, rd_regs()->cursor.line); } @@ -2381,7 +2381,7 @@ struct RD_DisasmViewState B32 initialized; TxtPt cursor; TxtPt mark; - CTRL_Handle temp_look_process; + D_Handle temp_look_process; U64 temp_look_vaddr; U64 temp_look_run_gen; U64 goto_vaddr; @@ -2433,13 +2433,13 @@ RD_VIEW_UI_FUNCTION_DEF(disasm) if(dv->temp_look_vaddr != 0 && dv->temp_look_run_gen == ctrl_run_gen()) { auto_selected = 1; - auto_space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, dv->temp_look_process), CTRL_EvalSpaceKind_Entity); + auto_space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, dv->temp_look_process), D_EvalSpaceKind_Entity); eval = e_eval_from_stringf("(0x%I64x & (~(0x4000 - 1)))", dv->temp_look_vaddr); } else { auto_selected = 1; - auto_space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->process), CTRL_EvalSpaceKind_Entity); + auto_space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->process), D_EvalSpaceKind_Entity); eval = e_eval_from_stringf("(reg:rip & (~(0x4000 - 1)))"); } } @@ -2484,14 +2484,14 @@ RD_VIEW_UI_FUNCTION_DEF(disasm) } Rng1U64 range = rd_space_range_from_eval(eval); Arch arch = rd_arch_from_eval(eval); - CTRL_Entity *space_entity = rd_ctrl_entity_from_eval_space(space); - CTRL_Entity *dasm_module = &ctrl_entity_nil; + D_Entity *space_entity = rd_ctrl_entity_from_eval_space(space); + D_Entity *dasm_module = &d_entity_nil; DI_Key dbgi_key = {0}; U64 base_vaddr = 0; switch(space_entity->kind) { default:{}break; - case CTRL_EntityKind_Process: + case D_EntityKind_Process: { if(arch == Arch_Null) { arch = space_entity->arch; } dasm_module = ctrl_module_from_process_vaddr(space_entity, range.min); @@ -2541,7 +2541,7 @@ RD_VIEW_UI_FUNCTION_DEF(disasm) U128 dasm_text_hash = {0}; TXT_TextInfo dasm_text_info = txt_text_info_from_key_lang(access, rd_regs()->text_key, rd_regs()->lang_kind, &dasm_text_hash); String8 dasm_text_data = c_data_from_hash(access, dasm_text_hash); - B32 is_loading = (dasm_text_info.lines_count == 0 && dim_1u64(range) != 0 && eval.msgs.max_kind == E_MsgKind_Null && (space.kind != CTRL_EvalSpaceKind_Entity || space_entity != &ctrl_entity_nil)); + B32 is_loading = (dasm_text_info.lines_count == 0 && dim_1u64(range) != 0 && eval.msgs.max_kind == E_MsgKind_Null && (space.kind != D_EvalSpaceKind_Entity || space_entity != &d_entity_nil)); B32 has_disasm = (dasm_text_info.lines_count != 0 && dasm_info.lines.count != 0); ////////////////////////////// @@ -2602,7 +2602,7 @@ RD_VIEW_UI_FUNCTION_DEF(disasm) RD_Font(RD_FontSlot_Code) { U64 cursor_vaddr = (1 <= rd_regs()->cursor.line && rd_regs()->cursor.line <= dasm_info.lines.count) ? (range.min+dasm_info.lines.v[rd_regs()->cursor.line-1].code_off) : 0; - if(dasm_module != &ctrl_entity_nil) + if(dasm_module != &d_entity_nil) { ui_labelf("%S", dasm_module->string); ui_spacer(ui_em(1.5f, 1)); @@ -2680,7 +2680,7 @@ RD_VIEW_UI_FUNCTION_DEF(memory) Rng1U64 view_range = rd_space_range_from_eval(eval); if(eval.space.kind == 0) { - eval.space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->process), CTRL_EvalSpaceKind_Entity); + eval.space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->process), D_EvalSpaceKind_Entity); view_range = rd_whole_range_from_eval_space(eval.space); } @@ -3218,12 +3218,12 @@ RD_VIEW_UI_FUNCTION_DEF(memory) { e_space_read(eval.space, visible_memory, viz_range_bytes); } - if(eval.space.kind == CTRL_EvalSpaceKind_Entity) + if(eval.space.kind == D_EvalSpaceKind_Entity) { - CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(eval.space); - if(entity->kind == CTRL_EntityKind_Process) + D_Entity *entity = rd_ctrl_entity_from_eval_space(eval.space); + if(entity->kind == D_EntityKind_Process) { - CTRL_ProcessMemorySlice slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, entity->handle, viz_range_bytes, 0, 0); + D_ProcessMemorySlice slice = ctrl_process_memory_slice_from_vaddr_range(scratch.arena, entity->handle, viz_range_bytes, 0, 0); visible_memory_change_flags = slice.byte_changed_flags; visible_memory_bad_flags = slice.byte_bad_flags; } @@ -3258,11 +3258,11 @@ RD_VIEW_UI_FUNCTION_DEF(memory) AnnotationList *visible_memory_annotations = push_array(scratch.arena, AnnotationList, visible_memory_size); { Access *access = access_open(); - CTRL_Entity *selected_thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); - CTRL_Entity *selected_process = ctrl_entity_ancestor_from_kind(selected_thread, CTRL_EntityKind_Process); - CTRL_CallStack selected_call_stack = ctrl_call_stack_from_thread(access, selected_thread->handle, 1, 0); - CTRL_Entity *eval_process = &ctrl_entity_nil; - if(eval.space.kind == CTRL_EvalSpaceKind_Entity) + D_Entity *selected_thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); + D_Entity *selected_process = ctrl_entity_ancestor_from_kind(selected_thread, D_EntityKind_Process); + D_CallStack selected_call_stack = ctrl_call_stack_from_thread(access, selected_thread->handle, 1, 0); + D_Entity *eval_process = &d_entity_nil; + if(eval.space.kind == D_EvalSpaceKind_Entity) { eval_process = rd_ctrl_entity_from_eval_space(eval.space); } @@ -3299,7 +3299,7 @@ RD_VIEW_UI_FUNCTION_DEF(memory) U64 last_stack_top = regs_rsp_from_arch_block(selected_thread->arch, selected_call_stack.concrete_frames[0]->regs); for(U64 idx = 1; idx < selected_call_stack.concrete_frames_count; idx += 1) { - CTRL_CallStackFrame *f = selected_call_stack.concrete_frames[idx]; + D_CallStackFrame *f = selected_call_stack.concrete_frames[idx]; U64 f_stack_top = regs_rsp_from_arch_block(selected_thread->arch, f->regs); Rng1U64 frame_vaddr_range = r1u64(last_stack_top, f_stack_top); Rng1U64 frame_vaddr_range_in_viz = intersect_1u64(frame_vaddr_range, viz_range_bytes); @@ -3309,7 +3309,7 @@ RD_VIEW_UI_FUNCTION_DEF(memory) Access *access = access_open(); U64 f_rip_vaddr = last_rip; last_rip = regs_rip_from_arch_block(selected_thread->arch, f->regs); - CTRL_Entity *module = ctrl_module_from_process_vaddr(selected_process, f_rip_vaddr); + D_Entity *module = ctrl_module_from_process_vaddr(selected_process, f_rip_vaddr); U64 f_rip_voff = ctrl_voff_from_vaddr(module, f_rip_vaddr); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); RDI_Parsed *rdi = di_rdi_from_key(access, dbgi_key, 0, 0); @@ -3336,7 +3336,7 @@ RD_VIEW_UI_FUNCTION_DEF(memory) } //- rjf: fill procedures annotations - if(eval_process != &ctrl_entity_nil) + if(eval_process != &d_entity_nil) { Vec4F32 symbol_color = ui_color_from_name(str8_lit("code_symbol")); Vec4F32 color_gen_table[] = @@ -3352,8 +3352,8 @@ RD_VIEW_UI_FUNCTION_DEF(memory) { next_vaddr = vaddr+1; Access *access = access_open(); - CTRL_Entity *module = ctrl_module_from_process_vaddr(eval_process, vaddr); - if(module != &ctrl_entity_nil) + D_Entity *module = ctrl_module_from_process_vaddr(eval_process, vaddr); + if(module != &d_entity_nil) { U64 voff = ctrl_voff_from_vaddr(module, vaddr); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); @@ -3393,7 +3393,7 @@ RD_VIEW_UI_FUNCTION_DEF(memory) } //- rjf: fill globals annotations - if(eval_process != &ctrl_entity_nil) + if(eval_process != &d_entity_nil) { Vec4F32 symbol_color = ui_color_from_name(str8_lit("code_symbol")); Vec4F32 color_gen_table[] = @@ -3457,7 +3457,7 @@ RD_VIEW_UI_FUNCTION_DEF(memory) } //- rjf: fill local variable annotations - if(e_space_match(rd_eval_space_from_ctrl_entity(selected_process, CTRL_EvalSpaceKind_Entity), eval.space)) + if(e_space_match(rd_eval_space_from_ctrl_entity(selected_process, D_EvalSpaceKind_Entity), eval.space)) { Vec4F32 local_color = ui_color_from_name(str8_lit("code_local")); Vec4F32 color_gen_table[] = @@ -3505,7 +3505,7 @@ RD_VIEW_UI_FUNCTION_DEF(memory) } //- rjf: fill debuggee-specified annotations - if(eval_process != &ctrl_entity_nil) UI_TagF(".") UI_TagF("pop") + if(eval_process != &d_entity_nil) UI_TagF(".") UI_TagF("pop") { Vec4F32 text_color = ui_color_from_name(str8_lit("text")); Vec4F32 symbol_color = ui_color_from_name(str8_lit("background")); @@ -3516,9 +3516,9 @@ RD_VIEW_UI_FUNCTION_DEF(memory) mix_4f32(symbol_color, v4f32(0, 0, 0, 1), 0.10f), mix_4f32(symbol_color, v4f32(0, 0, 0, 1), 0.15f), }; - for(CTRL_Entity *child = eval_process->first; child != &ctrl_entity_nil; child = child->next) + for(D_Entity *child = eval_process->first; child != &d_entity_nil; child = child->next) { - if(child->kind != CTRL_EntityKind_AddressRangeAnnotation) + if(child->kind != D_EntityKind_AddressRangeAnnotation) { continue; } diff --git a/src/raddbg/raddbg_views.h b/src/raddbg/raddbg_views.h index fd497d98..478bd154 100644 --- a/src/raddbg/raddbg_views.h +++ b/src/raddbg/raddbg_views.h @@ -120,14 +120,14 @@ struct RD_WatchCellList typedef struct RD_WatchRowInfo RD_WatchRowInfo; struct RD_WatchRowInfo { - CTRL_Entity *module; + D_Entity *module; B32 can_expand; B32 expr_is_editable; String8 group_cfg_name; CFG_Node *group_cfg_parent; CFG_Node *group_cfg_child; - CTRL_Entity *group_entity; - CTRL_Entity *callstack_thread; + D_Entity *group_entity; + D_Entity *callstack_thread; U64 callstack_unwind_index; U64 callstack_inline_depth; U64 callstack_vaddr; @@ -141,7 +141,7 @@ struct RD_WatchRowCellInfo { RD_WatchCellFlags flags; CFG_Node *cfg; - CTRL_Entity *entity; + D_Entity *entity; String8 cmd_name; String8 file_path; DR_FStrList expr_fstrs; diff --git a/src/raddbg/raddbg_widgets.c b/src/raddbg/raddbg_widgets.c index e5d09971..586d2964 100644 --- a/src/raddbg/raddbg_widgets.c +++ b/src/raddbg/raddbg_widgets.c @@ -102,13 +102,13 @@ rd_title_fstrs_from_cfg(Arena *arena, CFG_Node *cfg, B32 include_extras) //- rjf: [breakpoints] push hit marker if(str8_match(cfg->string, str8_lit("breakpoint"), 0)) { - CTRL_Event stop_event = d_ctrl_last_stop_event(); - if(stop_event.cause == CTRL_EventCause_UserBreakpoint) + D_Event stop_event = d_ctrl_last_stop_event(); + if(stop_event.cause == D_EventCause_UserBreakpoint) { CFG_Node *bp = cfg_node_from_id(stop_event.u64_code); if(bp == cfg) { - CTRL_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, stop_event.entity); + D_Entity *thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, stop_event.entity); Vec4F32 thread_color = rd_color_from_ctrl_entity(thread); if(thread_color.w == 0) { @@ -445,7 +445,7 @@ rd_title_fstrs_from_cfg(Arena *arena, CFG_Node *cfg, B32 include_extras) } internal DR_FStrList -rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, B32 include_extras) +rd_title_fstrs_from_ctrl_entity(Arena *arena, D_Entity *entity, B32 include_extras) { DR_FStrList result = {0}; @@ -467,10 +467,10 @@ rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, B32 include_e switch(entity->kind) { default:{}break; - case CTRL_EntityKind_Machine: {icon_kind = RD_IconKind_Machine;}break; - case CTRL_EntityKind_Process: {icon_kind = RD_IconKind_Threads;}break; - case CTRL_EntityKind_Thread: {icon_kind = RD_IconKind_Thread; name_is_code = 1;}break; - case CTRL_EntityKind_Module: {icon_kind = RD_IconKind_Module;}break; + case D_EntityKind_Machine: {icon_kind = RD_IconKind_Machine;}break; + case D_EntityKind_Process: {icon_kind = RD_IconKind_Threads;}break; + case D_EntityKind_Thread: {icon_kind = RD_IconKind_Thread; name_is_code = 1;}break; + case D_EntityKind_Module: {icon_kind = RD_IconKind_Module;}break; } //- rjf: set up drawing params @@ -484,9 +484,9 @@ rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, B32 include_e } //- rjf: push frozen icon, if frozen - if((entity->kind == CTRL_EntityKind_Machine || - entity->kind == CTRL_EntityKind_Process || - entity->kind == CTRL_EntityKind_Thread) && + if((entity->kind == D_EntityKind_Machine || + entity->kind == D_EntityKind_Process || + entity->kind == D_EntityKind_Thread) && ctrl_entity_tree_is_frozen(entity)) UI_TagF("bad") { @@ -495,7 +495,7 @@ rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, B32 include_e } //- rjf: push selected icon, if selected thread - if(entity->kind == CTRL_EntityKind_Thread) + if(entity->kind == D_EntityKind_Thread) { B32 is_selected = ctrl_handle_match(entity->handle, rd_base_regs()->thread); if(is_selected) @@ -506,13 +506,13 @@ rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, B32 include_e } //- rjf: push containing process prefix - if(entity->kind == CTRL_EntityKind_Thread || - entity->kind == CTRL_EntityKind_Module) + if(entity->kind == D_EntityKind_Thread || + entity->kind == D_EntityKind_Module) { - CTRL_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, CTRL_EntityKind_Process); + D_EntityArray processes = ctrl_entity_array_from_kind(&d_user_state->ctrl_entity_store->ctx, D_EntityKind_Process); if(processes.count > 1) { - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(entity, CTRL_EntityKind_Process); + D_Entity *process = ctrl_entity_ancestor_from_kind(entity, D_EntityKind_Process); String8 process_name = rd_name_from_ctrl_entity(arena, process); Vec4F32 process_color = rd_color_from_ctrl_entity(process); if(process_color.w == 0) @@ -536,30 +536,30 @@ rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, B32 include_e .color = color); //- rjf: push PID - if(entity->kind == CTRL_EntityKind_Process) + if(entity->kind == D_EntityKind_Process) { dr_fstrs_push_new(arena, &result, ¶ms, str8_lit(" ")); dr_fstrs_push_new(arena, &result, ¶ms, push_str8f(arena, " (PID: %I64u)", entity->id), .font = rd_font_from_slot(RD_FontSlot_Main), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Main), .color = secondary_color, .size = ui_top_font_size()*0.85f); } //- rjf: threads get callstack extras - if(entity->kind == CTRL_EntityKind_Thread && include_extras) + if(entity->kind == D_EntityKind_Thread && include_extras) { Vec4F32 symbol_color = ui_color_from_name(str8_lit("code_symbol")); dr_fstrs_push_new(arena, &result, ¶ms, str8_lit(" ")); Access *access = access_open(); - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(entity, CTRL_EntityKind_Process); + D_Entity *process = ctrl_entity_ancestor_from_kind(entity, D_EntityKind_Process); Arch arch = entity->arch; B32 call_stack_high_priority = ctrl_handle_match(entity->handle, rd_base_regs()->thread); - CTRL_CallStack call_stack = ctrl_call_stack_from_thread(access, entity->handle, call_stack_high_priority, call_stack_high_priority ? rd_state->frame_eval_memread_endt_us : 0); + D_CallStack call_stack = ctrl_call_stack_from_thread(access, entity->handle, call_stack_high_priority, call_stack_high_priority ? rd_state->frame_eval_memread_endt_us : 0); B32 did_first_known = 0; for(U64 idx = 0, limit = 10; idx < call_stack.frames_count && idx < limit; idx += 1) { - CTRL_CallStackFrame *f = &call_stack.frames[call_stack.frames_count - 1 - idx]; + D_CallStackFrame *f = &call_stack.frames[call_stack.frames_count - 1 - idx]; U64 rip_vaddr = regs_rip_from_arch_block(arch, f->regs); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, rip_vaddr); + D_Entity *module = ctrl_module_from_process_vaddr(process, rip_vaddr); U64 rip_voff = ctrl_voff_from_vaddr(module, rip_vaddr); String8 name = {0}; { @@ -594,7 +594,7 @@ rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, B32 include_e } //- rjf: modules get debug info status extras - if(entity->kind == CTRL_EntityKind_Module && include_extras) + if(entity->kind == D_EntityKind_Module && include_extras) { Access *access = access_open(); DI_Key dbgi_key = ctrl_dbgi_key_from_module(entity); @@ -1254,12 +1254,12 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe RD_CodeSliceSignal result = {0}; ProfBeginFunction(); Temp scratch = scratch_begin(0, 0); - CTRL_Entity *selected_thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); - CTRL_Entity *selected_thread_process = ctrl_entity_ancestor_from_kind(selected_thread, CTRL_EntityKind_Process); + D_Entity *selected_thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, rd_regs()->thread); + D_Entity *selected_thread_process = ctrl_entity_ancestor_from_kind(selected_thread, D_EntityKind_Process); U64 selected_thread_rip_unwind_vaddr = d_query_cached_rip_from_thread_unwind(selected_thread, rd_regs()->unwind_count); - CTRL_Entity *selected_thread_module = ctrl_module_from_process_vaddr(selected_thread_process, selected_thread_rip_unwind_vaddr); - CTRL_Event stop_event = d_ctrl_last_stop_event(); - CTRL_Entity *stopper_thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, stop_event.entity); + D_Entity *selected_thread_module = ctrl_module_from_process_vaddr(selected_thread_process, selected_thread_rip_unwind_vaddr); + D_Event stop_event = d_ctrl_last_stop_event(); + D_Entity *stopper_thread = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, stop_event.entity); B32 is_focused = ui_is_focus_active(); B32 ctrlified = (os_get_modifiers() & OS_Modifier_Ctrl); Vec4F32 code_line_bgs[] = @@ -1314,7 +1314,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe // B32 drop_can_hit_lines = 0; CFG_Node *drop_cfg = &cfg_nil_node; - CTRL_Entity *drop_thread = &ctrl_entity_nil; + D_Entity *drop_thread = &d_entity_nil; String8 drop_expr = {0}; Vec4F32 drop_color = pop_color; UI_Key drop_site_key = ui_key_from_stringf(top_container_box->key, "drop_site"); @@ -1368,10 +1368,10 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe line_num < params->line_num_range.max; line_num += 1, line_idx += 1) { - CTRL_EntityList threads = params->line_ips[line_idx]; - for(CTRL_EntityNode *n = threads.first; n != 0; n = n->next) + D_EntityList threads = params->line_ips[line_idx]; + for(D_EntityNode *n = threads.first; n != 0; n = n->next) { - if(n->v == stopper_thread && (stop_event.cause == CTRL_EventCause_InterruptedByTrap || stop_event.cause == CTRL_EventCause_InterruptedByException)) + if(n->v == stopper_thread && (stop_event.cause == D_EventCause_InterruptedByTrap || stop_event.cause == D_EventCause_InterruptedByException)) { line_bg_colors[line_idx] = ui_color_from_name(str8_lit("background")); } @@ -1404,24 +1404,24 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe line_num <= params->line_num_range.max; line_num += 1, line_idx += 1) { - CTRL_EntityList line_ips = params->line_ips[line_idx]; + D_EntityList line_ips = params->line_ips[line_idx]; ui_set_next_hover_cursor(OS_Cursor_HandPoint); UI_Box *line_margin_box = ui_build_box_from_stringf(UI_BoxFlag_Clickable*!!(params->flags & RD_CodeSliceFlag_Clickable)|UI_BoxFlag_DrawActiveEffects, "line_margin_%I64x", line_num); UI_Parent(line_margin_box) { //- rjf: build margin thread ip ui - for(CTRL_EntityNode *n = line_ips.first; n != 0; n = n->next) + for(D_EntityNode *n = line_ips.first; n != 0; n = n->next) { // rjf: unpack thread - CTRL_Entity *thread = n->v; + D_Entity *thread = n->v; if(thread != selected_thread) { continue; } U64 unwind_count = (thread == selected_thread) ? rd_regs()->unwind_count : 0; U64 thread_rip_vaddr = d_query_cached_rip_from_thread_unwind(thread, unwind_count); - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, thread_rip_vaddr); + D_Entity *process = ctrl_entity_ancestor_from_kind(thread, D_EntityKind_Process); + D_Entity *module = ctrl_module_from_process_vaddr(process, thread_rip_vaddr); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); U64 thread_rip_voff = ctrl_voff_from_vaddr(module, thread_rip_vaddr); @@ -1437,9 +1437,9 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe color = ui_color_from_name(str8_lit("thread_unwound")); } else if(thread == stopper_thread && - (stop_event.cause == CTRL_EventCause_InterruptedByHalt || - stop_event.cause == CTRL_EventCause_InterruptedByTrap || - stop_event.cause == CTRL_EventCause_InterruptedByException)) + (stop_event.cause == D_EventCause_InterruptedByHalt || + stop_event.cause == D_EventCause_InterruptedByTrap || + stop_event.cause == D_EventCause_InterruptedByException)) { color = ui_color_from_name(str8_lit("thread_error")); } @@ -1557,7 +1557,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe line_num <= params->line_num_range.max; line_num += 1, line_idx += 1) { - CTRL_EntityList line_ips = params->line_ips[line_idx]; + D_EntityList line_ips = params->line_ips[line_idx]; CFG_NodePtrList line_bps = params->line_bps[line_idx]; CFG_NodePtrList line_pins = params->line_pins[line_idx]; ui_set_next_hover_cursor(OS_Cursor_HandPoint); @@ -1566,18 +1566,18 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe UI_Parent(line_margin_box) { //- rjf: build margin thread ip ui - for(CTRL_EntityNode *n = line_ips.first; n != 0; n = n->next) + for(D_EntityNode *n = line_ips.first; n != 0; n = n->next) { // rjf: unpack thread - CTRL_Entity *thread = n->v; + D_Entity *thread = n->v; if(thread == selected_thread) { continue; } U64 unwind_count = (thread == selected_thread) ? rd_regs()->unwind_count : 0; U64 thread_rip_vaddr = d_query_cached_rip_from_thread_unwind(thread, unwind_count); - CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process); - CTRL_Entity *module = ctrl_module_from_process_vaddr(process, thread_rip_vaddr); + D_Entity *process = ctrl_entity_ancestor_from_kind(thread, D_EntityKind_Process); + D_Entity *module = ctrl_module_from_process_vaddr(process, thread_rip_vaddr); DI_Key dbgi_key = ctrl_dbgi_key_from_module(module); U64 thread_rip_voff = ctrl_voff_from_vaddr(module, thread_rip_vaddr); @@ -1593,9 +1593,9 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe color = ui_color_from_name(str8_lit("thread_unwound")); } else if(thread == stopper_thread && - (stop_event.cause == CTRL_EventCause_InterruptedByHalt || - stop_event.cause == CTRL_EventCause_InterruptedByTrap || - stop_event.cause == CTRL_EventCause_InterruptedByException)) + (stop_event.cause == D_EventCause_InterruptedByHalt || + stop_event.cause == D_EventCause_InterruptedByTrap || + stop_event.cause == D_EventCause_InterruptedByException)) { color = ui_color_from_name(str8_lit("thread_error")); } @@ -2260,21 +2260,21 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe .cursor = line_vaddr == 0 ? txt_pt(line_num, 1) : txt_pt(0, 0), .vaddr = line_vaddr); } - if(drop_thread != &ctrl_entity_nil) + if(drop_thread != &d_entity_nil) { S64 line_num = mouse_pt.line; U64 line_idx = line_num - params->line_num_range.min; U64 line_vaddr = params->line_vaddrs[line_idx]; - CTRL_Entity *thread = drop_thread; + D_Entity *thread = drop_thread; U64 new_rip_vaddr = line_vaddr; if(params->line_vaddrs[line_idx] == 0) { D_LineList *lines = ¶ms->line_infos[line_idx]; for(D_LineNode *n = lines->first; n != 0; n = n->next) { - CTRL_EntityList modules = ctrl_modules_from_dbgi_key(scratch.arena, &d_user_state->ctrl_entity_store->ctx, n->v.dbgi_key); - CTRL_Entity *module = ctrl_module_from_thread_candidates(&d_user_state->ctrl_entity_store->ctx, thread, &modules); - if(module != &ctrl_entity_nil) + D_EntityList modules = ctrl_modules_from_dbgi_key(scratch.arena, &d_user_state->ctrl_entity_store->ctx, n->v.dbgi_key); + D_Entity *module = ctrl_module_from_thread_candidates(&d_user_state->ctrl_entity_store->ctx, thread, &modules); + if(module != &d_entity_nil) { new_rip_vaddr = ctrl_vaddr_from_voff(module, n->v.voff_range.min); break; @@ -2486,13 +2486,13 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe line_num < params->line_num_range.max; line_num += 1, line_idx += 1) { - CTRL_EntityList threads = params->line_ips[line_idx]; - for(CTRL_EntityNode *n = threads.first; n != 0; n = n->next) + D_EntityList threads = params->line_ips[line_idx]; + for(D_EntityNode *n = threads.first; n != 0; n = n->next) { - CTRL_Entity *thread = n->v; + D_Entity *thread = n->v; if(thread == stopper_thread && - (stop_event.cause == CTRL_EventCause_InterruptedByException || - stop_event.cause == CTRL_EventCause_InterruptedByTrap)) + (stop_event.cause == D_EventCause_InterruptedByException || + stop_event.cause == D_EventCause_InterruptedByTrap)) { DR_FStrList explanation_fstrs = rd_stop_explanation_fstrs_from_ctrl_event(scratch.arena, &stop_event); UI_Parent(line_extras_boxes[line_idx]) UI_PrefWidth(ui_text_dim(10, 1)) UI_TextAlignment(UI_TextAlign_Center) UI_PrefHeight(ui_px(params->line_height_px, 1.f)) @@ -2575,7 +2575,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe { E_Eval eval = e_eval_from_string(mouse_expr); B32 eval_implicit_hover = (eval.irtree.mode != E_Mode_Null && - eval.space.kind == CTRL_EvalSpaceKind_Entity); + eval.space.kind == D_EvalSpaceKind_Entity); if(eval.msgs.max_kind == E_MsgKind_Null && (eval_implicit_hover || mouse_expr_is_explicit)) { U64 line_vaddr = 0; @@ -2659,7 +2659,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe Rng1U64 hover_voff_range = hover_regs->voff_range; if(hover_voff_range.min == 0 && hover_voff_range.max == 0) { - CTRL_Entity *module = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, hover_regs->module); + D_Entity *module = ctrl_entity_from_handle(&d_user_state->ctrl_entity_store->ctx, hover_regs->module); hover_voff_range = ctrl_voff_range_from_vaddr_range(module, hover_regs->vaddr_range); } ui_set_next_pref_height(ui_px(params->line_height_px*(dim_1s64(params->line_num_range)+1), 1.f)); diff --git a/src/raddbg/raddbg_widgets.h b/src/raddbg/raddbg_widgets.h index 66055279..70d4f127 100644 --- a/src/raddbg/raddbg_widgets.h +++ b/src/raddbg/raddbg_widgets.h @@ -102,7 +102,7 @@ struct RD_CodeSliceParams Rng1U64 *line_ranges; TXT_TokenArray *line_tokens; CFG_NodePtrList *line_bps; - CTRL_EntityList *line_ips; + D_EntityList *line_ips; CFG_NodePtrList *line_pins; U64 *line_vaddrs; D_LineList *line_infos; @@ -140,7 +140,7 @@ struct RD_CodeSliceSignal //~ rjf: UI Widgets: Fancy Title Strings internal DR_FStrList rd_title_fstrs_from_cfg(Arena *arena, CFG_Node *cfg, B32 include_extras); -internal DR_FStrList rd_title_fstrs_from_ctrl_entity(Arena *arena, CTRL_Entity *entity, B32 include_extras); +internal DR_FStrList rd_title_fstrs_from_ctrl_entity(Arena *arena, D_Entity *entity, B32 include_extras); internal DR_FStrList rd_title_fstrs_from_code_name(Arena *arena, String8 code_name); internal DR_FStrList rd_title_fstrs_from_file_path(Arena *arena, String8 file_path);